Skip to content

feat: Missing ERC1155 Integration and Token Management #142

@KevinMB0220

Description

@KevinMB0220

Issue: Missing ERC1155 Integration and Token Management

Description:

The game relies heavily on ERC1155 tokens for gear and items, but the integration is incomplete. The ERC1155 contract exists but lacks proper integration with the game systems, and many token management functions are missing or incomplete.

Problems Identified:

  1. Incomplete ERC1155 Integration: The game systems reference ERC1155 but don't properly integrate with it
  2. Missing Token Metadata: No proper token URI or metadata management
  3. Incomplete Minting Logic: While minting functions exist, they're not properly integrated with game logic
  4. Missing Batch Operations: No efficient batch minting/transferring for game items
  5. No Token Validation: Game systems don't properly validate token ownership

Code Issues Found:

// In PlayerActions - Line 743: Placeholder implementation
fn get_erc1155_address(self: @ContractState) -> ContractAddress {
    // In a real implementation, this would be stored in the contract state
    // For now, we return a placeholder address
    starknet::contract_address_const::<0x0>() // Returns zero address!
}

// In PlayerActions - Line 750: Empty implementation
fn get_game_object_ids(self: @ContractState) -> Array<u256> {
    // In a real implementation, this would return a list of all game object IDs
    // For now, we return an empty array
    array![] // Returns empty array!
}

// In PlayerActions - Line 757: Always returns false
fn is_object_registered(self: @ContractState, player_id: u256, object_id: u256) -> bool {
    // In a real implementation, this would check if the object is already registered
    // For now, we return false
    false // Always returns false!
}

Specific Problems:

  1. Broken Token Integration: Game can't properly interact with ERC1155 tokens
  2. No Token Validation: Players can't verify they own items
  3. Missing Token Metadata: Items have no proper descriptions or images
  4. Inefficient Operations: No batch operations for multiple items
  5. Broken Ownership Checks: Game can't verify item ownership properly

Impact:

  • High Priority: Core item ownership and transfer mechanics are broken
  • Players can't properly own or trade items
  • Game economy can't function without proper token integration
  • Poor user experience due to broken item management

Recommended Solutions:

  1. Implement Proper ERC1155 Integration:

    fn get_erc1155_address(self: @ContractState) -> ContractAddress {
        let world = self.world_default();
        let contract: Contract = world.read_model(COA_CONTRACTS);
        contract.erc1155 // Return actual ERC1155 contract address
    }
  2. Add Token Validation Functions:

    fn validate_token_ownership(self: @ContractState, player: ContractAddress, token_id: u256) -> bool {
        let erc1155_address = self.get_erc1155_address();
        let erc1155 = IERC1155Dispatcher { contract_address: erc1155_address };
        erc1155.balance_of(player, token_id) > 0
    }
  3. Implement Game Object Management:

    fn get_game_object_ids(self: @ContractState) -> Array<u256> {
        // Return actual list of game object IDs
        // This should be populated during game initialization
        array![
            // Weapon IDs
            0x1000000000000000000000000000000000000000000000000000000000000001,
            0x1000000000000000000000000000000000000000000000000000000000000002,
            // Armor IDs
            0x2000000000000000000000000000000000000000000000000000000000000001,
            // Vehicle IDs
            0x3000000000000000000000000000000000000000000000000000000000000001,
        ]
    }
  4. Add Batch Token Operations:

    fn batch_mint_gear(ref self: ContractState, to: ContractAddress, gear_ids: Array<u256>) {
        let erc1155_address = self.get_erc1155_address();
        let erc1155 = IERC1155MintableDispatcher { contract_address: erc1155_address };
        
        let amounts: Array<u256> = array![];
        let mut i = 0;
        while i < gear_ids.len() {
            amounts.append(1_u256);
            i += 1;
        };
        
        erc1155.batch_mint(to, gear_ids.span(), amounts.span(), array![].span());
    }
  5. Implement Token Metadata Management:

    fn get_token_metadata(self: @ContractState, token_id: u256) -> ByteArray {
        // Return proper token metadata based on gear type
        let gear_type = parse_id(token_id);
        match gear_type {
            GearType::Weapon => "https://api.game.com/metadata/weapon/".into(),
            GearType::Armor => "https://api.game.com/metadata/armor/".into(),
            _ => "https://api.game.com/metadata/default/".into(),
        }
    }

Files Affected:

  • src/erc1155/erc1155.cairo - ERC1155 contract implementation
  • src/systems/player.cairo - Player system token integration
  • src/systems/core.cairo - Core system token management
  • src/models/core.cairo - Core models with ERC1155 references

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions