πŸ“§Mapping of addresses

In this section you'll see how to create a proper Solidity mapping linking two addresses (EVM/Substrate).

Solidity Example

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract PlayerRegistry {
    // Mapping to store player information
    mapping(address => Player) public players;

    // Struct to store player data
    struct Player {
        address evmAddress;
        string substrateAddress;
    }

    // Modifier to ensure that a function is callable only by the player's EVM address
    modifier onlyEvmAddress() {
        require(msg.sender == players[msg.sender].evmAddress, "Not authorized");
        _;
    }

    // Function to register a player with EVM and Substrate addresses
    function registerPlayer(address _evmAddress, string memory _substrateAddress) public {
        players[msg.sender] = Player(_evmAddress, _substrateAddress);
    }

    // Example function that can only be called by the player's EVM address
    function doSomethingRestricted() public onlyEvmAddress {
        // Only the player's EVM address can call this function
        // Add your restricted logic here
    }

    // Function to get the Substrate address for a player
    function getSubstrateAddress() public view returns (string memory) {
        return players[msg.sender].substrateAddress;
    }
}
  1. PlayerRegistry Contract:

    • mapping(address => Player) public players: This mapping stores the player information, where the key is the Ethereum address, and the value is a Player struct containing the EVM address and Substrate address.

    • struct Player: This struct defines the structure of player data, including the EVM address and Substrate address.

  2. onlyEvmAddress Modifier:

    • modifier onlyEvmAddress(): This modifier ensures that the function can only be executed by the EVM address associated with the player making the request. It checks if the msg.sender (the caller of the function) matches the stored EVM address in the player's data.

  3. registerPlayer Function:

    • function registerPlayer(address _evmAddress, string memory _substrateAddress) public: This function allows a player to register by providing their EVM address and Substrate address.

  4. doSomethingRestricted Function:

    • function doSomethingRestricted() public onlyEvmAddress: This is an example function that uses the onlyEvmAddress modifier, ensuring that only the player's EVM address can call this function. You can add your restricted logic within this function.

  5. getSubstrateAddress Function:

    • function getSubstrateAddress() public view returns (string memory): This function allows anyone to retrieve the Substrate address associated with their Ethereum address.

This contract provides a basic structure for managing player information with restricted access to certain functions based on the player's EVM address.

Last updated