ETH Price: $3,615.84 (+6.33%)

Contract

0x1efcEe5cFD141a9fdfc5fC71488Db5dBa13cf150

Overview

ETH Balance

0 ETH

ETH Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Amount:Between 1-1M
Reset Filter

Transaction Hash
Method
Block
From
To

There are no matching entries

1 Internal Transaction found.

Latest 1 internal transaction

Parent Transaction Hash Block From To
3453724972025-06-09 0:47:52154 days ago1749430072  Contract Creation0 ETH

Cross-Chain Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
UniversalMappingProtocol

Compiler Version
v0.8.29+commit.ab55807c

Optimization Enabled:
Yes with 800 runs

Other Settings:
paris EvmVersion
// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.29;

/// @title Universal Mapping Protocol
/// @author GM, EB, MB
/// @notice Universal mapping of offchain origins to onchain addresses
contract UniversalMappingProtocol {
    /// @dev Seed for address mapping derivation
    string public constant SEED = "Immutable_Ratings_by_GM_EB_MB";

    /// @dev Internal mapping of address to origin
    mapping(address _address => string _origin) private _addressToOrigin;

    /// @dev Internal mapping of origin to address
    mapping(string _origin => address _address) private _originToAddress;

    /// @dev Internal mapping of address to creator
    mapping(address _address => address _creator) private _addressToCreator;

    // Events
    event OriginMapped(address indexed _address, string indexed _origin, address indexed _creator);

    // Errors
    error AlreadyMapped(string _origin);
    error EmptyOrigin();
    error AddressNotMapped(address _address);
    error OriginNotMapped(string _origin);
    error ZeroAddress();

    /// @notice Creates a new mapping entry for an origin to an address
    /// @dev If the origin is already mapped, it will revert
    /// @param origin The origin string
    /// @return _address The address of the mapping
    function createMapping(string calldata origin) external returns (address _address) {
        if (_originToAddress[origin] != address(0)) revert AlreadyMapped(origin);
        _address = _createMapping(origin, msg.sender);
    }

    /// @notice Creates a new mapping entry if one does not exist, else returns the existing address
    /// @param origin The origin string
    /// @return _address The address of the mapping
    function safeCreateMapping(string calldata origin) external returns (address _address) {
        _address = _originToAddress[origin];
        if (_address == address(0)) {
            _address = _createMapping(origin, msg.sender);
        }
    }

    /// @notice Creates a new mapping entry for an origin to an address if one does not exist
    /// @dev If the origin is already mapped, it will revert
    /// @dev Allows setting the creator address to one other than the caller
    /// @param origin The origin string
    /// @param creator The creator address
    /// @return _address The address of the mapping
    function createMappingFor(string calldata origin, address creator) external returns (address _address) {
        if (creator == address(0)) revert ZeroAddress();
        if (_originToAddress[origin] != address(0)) revert AlreadyMapped(origin);
        _address = _createMapping(origin, creator);
    }

    /// @notice Creates a new mapping entry for an origin to an address if one does not exist,
    /// else returns the existing address
    /// @dev Allows setting the creator address to one other than the caller
    /// @param origin The origin string
    /// @param creator The creator address
    /// @return _address The address of the mapping
    function safeCreateMappingFor(string calldata origin, address creator) external returns (address _address) {
        if (creator == address(0)) revert ZeroAddress();
        _address = _originToAddress[origin];
        if (_address == address(0)) {
            _address = _createMapping(origin, creator);
        }
    }

    /// @notice Creates a new mapping entry for an origin to an address
    /// @param origin The origin string
    function _createMapping(string calldata origin, address creator) internal returns (address _address) {
        _address = _createDeterministicAddress(origin);
        _addressToOrigin[_address] = origin;
        _originToAddress[origin] = _address;
        _addressToCreator[_address] = creator;

        emit OriginMapped(_address, origin, creator);
    }

    /// @notice Creates a deterministic address for an origin.
    /// @dev Requires the origin to be non-empty.
    /// @param origin The origin string
    /// @return address The deterministic address
    function _createDeterministicAddress(string calldata origin) internal pure returns (address) {
        if (bytes(origin).length == 0) revert EmptyOrigin();

        return address(uint160(uint256(keccak256(abi.encodePacked(SEED, origin)))));
    }

    /// @notice Returns the deterministic address for an origin.
    /// @dev Does not require the origin to be mapped.
    /// @param origin The origin string
    /// @return _address The deterministic address
    function previewAddress(string calldata origin) external pure returns (address _address) {
        _address = _createDeterministicAddress(origin);
    }

    /// @notice Returns whether an origin is mapped
    /// @param origin The origin string
    /// @return isMapped Whether the origin is mapped
    function isOriginMapped(string calldata origin) external view returns (bool isMapped) {
        isMapped = _originToAddress[origin] != address(0);
    }

    /// @notice Returns whether an address is mapped
    /// @param _address The address
    /// @return isMapped Whether the address is mapped
    function isAddressMapped(address _address) external view returns (bool isMapped) {
        isMapped = bytes(_addressToOrigin[_address]).length > 0;
    }

    /// @notice Returns the address for an origin
    /// @param origin The origin string
    /// @return _address The address
    function addressOf(string calldata origin) external view returns (address _address) {
        _address = _originToAddress[origin];
        if (_address == address(0)) revert OriginNotMapped(origin);
    }

    /// @notice Returns the origin for an address
    /// @param _address The address
    /// @return origin The origin string
    function originOf(address _address) external view returns (string memory origin) {
        origin = _addressToOrigin[_address];
        if (bytes(origin).length == 0) revert AddressNotMapped(_address);
    }

    /// @notice Returns the creator for an address
    /// @param _address The address
    /// @return creator The creator address
    function creatorOf(address _address) external view returns (address creator) {
        creator = _addressToCreator[_address];
        if (creator == address(0)) revert AddressNotMapped(_address);
    }

    /// @notice Returns the creator for an origin
    /// @param origin The origin string
    /// @return creator The creator address
    function originCreatorOf(string calldata origin) external view returns (address creator) {
        address _address = _originToAddress[origin];
        if (_address == address(0)) revert OriginNotMapped(origin);
        creator = _addressToCreator[_address];
    }
}

Settings
{
  "metadata": {
    "bytecodeHash": "none",
    "useLiteralContent": true
  },
  "optimizer": {
    "enabled": true,
    "runs": 800
  },
  "evmVersion": "paris",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"AddressNotMapped","type":"error"},{"inputs":[{"internalType":"string","name":"_origin","type":"string"}],"name":"AlreadyMapped","type":"error"},{"inputs":[],"name":"EmptyOrigin","type":"error"},{"inputs":[{"internalType":"string","name":"_origin","type":"string"}],"name":"OriginNotMapped","type":"error"},{"inputs":[],"name":"ZeroAddress","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_address","type":"address"},{"indexed":true,"internalType":"string","name":"_origin","type":"string"},{"indexed":true,"internalType":"address","name":"_creator","type":"address"}],"name":"OriginMapped","type":"event"},{"inputs":[],"name":"SEED","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"origin","type":"string"}],"name":"addressOf","outputs":[{"internalType":"address","name":"_address","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"origin","type":"string"}],"name":"createMapping","outputs":[{"internalType":"address","name":"_address","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"origin","type":"string"},{"internalType":"address","name":"creator","type":"address"}],"name":"createMappingFor","outputs":[{"internalType":"address","name":"_address","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"creatorOf","outputs":[{"internalType":"address","name":"creator","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"isAddressMapped","outputs":[{"internalType":"bool","name":"isMapped","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"origin","type":"string"}],"name":"isOriginMapped","outputs":[{"internalType":"bool","name":"isMapped","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"origin","type":"string"}],"name":"originCreatorOf","outputs":[{"internalType":"address","name":"creator","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"originOf","outputs":[{"internalType":"string","name":"origin","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"origin","type":"string"}],"name":"previewAddress","outputs":[{"internalType":"address","name":"_address","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"string","name":"origin","type":"string"}],"name":"safeCreateMapping","outputs":[{"internalType":"address","name":"_address","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"origin","type":"string"},{"internalType":"address","name":"creator","type":"address"}],"name":"safeCreateMappingFor","outputs":[{"internalType":"address","name":"_address","type":"address"}],"stateMutability":"nonpayable","type":"function"}]

6080604052348015600f57600080fd5b50610af08061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80639b566faf11610081578063b7ae30411161005b578063b7ae3041146101e7578063ccf1454a146101fa578063dea5c2e01461020d57600080fd5b80639b566faf146101ae578063a6c519cb146101c1578063b7022eeb146101d457600080fd5b80635773a279116100b25780635773a279146101755780637b72a289146101885780638e94ec651461019b57600080fd5b806306930cb4146100d95780630edc473714610101578063217cf7e41461014a575b600080fd5b6100ec6100e73660046107fe565b610220565b60405190151581526020015b60405180910390f35b61013d6040518060400160405280601d81526020017f496d6d757461626c655f526174696e67735f62795f474d5f45425f4d4200000081525081565b6040516100f89190610864565b61015d6101583660046107fe565b610260565b6040516001600160a01b0390911681526020016100f8565b6100ec6101833660046108ae565b6102d4565b61015d6101963660046107fe565b610304565b61015d6101a93660046108c9565b610349565b61015d6101bc3660046107fe565b6103b7565b61013d6101cf3660046108ae565b61042b565b61015d6101e23660046107fe565b610504565b61015d6101f53660046108c9565b610510565b61015d6102083660046107fe565b61059c565b61015d61021b3660046108ae565b6105ed565b6000806001600160a01b03166001848460405161023e92919061091d565b908152604051908190036020019020546001600160a01b031614159392505050565b6000806001600160a01b03166001848460405161027e92919061091d565b908152604051908190036020019020546001600160a01b0316146102c25782826040516325224b2b60e11b81526004016102b992919061092d565b60405180910390fd5b6102cd838333610631565b9392505050565b6001600160a01b038116600090815260208190526040812080548291906102fa9061095c565b9050119050919050565b60006001838360405161031892919061091d565b908152604051908190036020019020546001600160a01b0316905080610343576102cd838333610631565b92915050565b60006001600160a01b0382166103725760405163d92e233d60e01b815260040160405180910390fd5b6001848460405161038492919061091d565b908152604051908190036020019020546001600160a01b03169050806102cd576103af848484610631565b949350505050565b600080600184846040516103cc92919061091d565b908152604051908190036020019020546001600160a01b031690508061040957838360405163c4e93f0560e01b81526004016102b992919061092d565b6001600160a01b03908116600090815260026020526040902054169392505050565b6001600160a01b03811660009081526020819052604090208054606091906104529061095c565b80601f016020809104026020016040519081016040528092919081815260200182805461047e9061095c565b80156104cb5780601f106104a0576101008083540402835291602001916104cb565b820191906000526020600020905b8154815290600101906020018083116104ae57829003601f168201915b5050505050905080516000036104ff57604051632294d5eb60e01b81526001600160a01b03831660048201526024016102b9565b919050565b60006102cd838361072a565b60006001600160a01b0382166105395760405163d92e233d60e01b815260040160405180910390fd5b60006001600160a01b03166001858560405161055692919061091d565b908152604051908190036020019020546001600160a01b0316146105915783836040516325224b2b60e11b81526004016102b992919061092d565b6103af848484610631565b6000600183836040516105b092919061091d565b908152604051908190036020019020546001600160a01b031690508061034357828260405163c4e93f0560e01b81526004016102b992919061092d565b6001600160a01b0380821660009081526002602052604090205416806104ff57604051632294d5eb60e01b81526001600160a01b03831660048201526024016102b9565b600061063d848461072a565b6001600160a01b03811660009081526020819052604090209091506106638486836109fb565b50806001858560405161067792919061091d565b90815260408051918290036020908101832080546001600160a01b039586167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915585851660009081526002909252919020805493861693909116831790556106e8908690869061091d565b604051908190038120906001600160a01b038416907fa8dcd1622398f6bd02562add88113930eb87d3d8f7c7db37cc0b59d36cc777e190600090a49392505050565b600081810361074c576040516319cb0b0d60e11b815260040160405180910390fd5b6040518060400160405280601d81526020017f496d6d757461626c655f526174696e67735f62795f474d5f45425f4d42000000815250838360405160200161079693929190610abb565b60408051601f1981840301815291905280516020909101209392505050565b60008083601f8401126107c757600080fd5b50813567ffffffffffffffff8111156107df57600080fd5b6020830191508360208285010111156107f757600080fd5b9250929050565b6000806020838503121561081157600080fd5b823567ffffffffffffffff81111561082857600080fd5b610834858286016107b5565b90969095509350505050565b60005b8381101561085b578181015183820152602001610843565b50506000910152565b6020815260008251806020840152610883816040850160208701610840565b601f01601f19169190910160400192915050565b80356001600160a01b03811681146104ff57600080fd5b6000602082840312156108c057600080fd5b6102cd82610897565b6000806000604084860312156108de57600080fd5b833567ffffffffffffffff8111156108f557600080fd5b610901868287016107b5565b9094509250610914905060208501610897565b90509250925092565b8183823760009101908152919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b600181811c9082168061097057607f821691505b60208210810361099057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b601f8211156109f657806000526020600020601f840160051c810160208510156109d35750805b601f840160051c820191505b818110156109f357600081556001016109df565b50505b505050565b67ffffffffffffffff831115610a1357610a13610996565b610a2783610a21835461095c565b836109ac565b6000601f841160018114610a5b5760008515610a435750838201355b600019600387901b1c1916600186901b1783556109f3565b600083815260209020601f19861690835b82811015610a8c5786850135825560209485019460019092019101610a6c565b5086821015610aa95760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60008451610acd818460208901610840565b820183858237600093019283525090939250505056fea164736f6c634300081d000a

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100d45760003560e01c80639b566faf11610081578063b7ae30411161005b578063b7ae3041146101e7578063ccf1454a146101fa578063dea5c2e01461020d57600080fd5b80639b566faf146101ae578063a6c519cb146101c1578063b7022eeb146101d457600080fd5b80635773a279116100b25780635773a279146101755780637b72a289146101885780638e94ec651461019b57600080fd5b806306930cb4146100d95780630edc473714610101578063217cf7e41461014a575b600080fd5b6100ec6100e73660046107fe565b610220565b60405190151581526020015b60405180910390f35b61013d6040518060400160405280601d81526020017f496d6d757461626c655f526174696e67735f62795f474d5f45425f4d4200000081525081565b6040516100f89190610864565b61015d6101583660046107fe565b610260565b6040516001600160a01b0390911681526020016100f8565b6100ec6101833660046108ae565b6102d4565b61015d6101963660046107fe565b610304565b61015d6101a93660046108c9565b610349565b61015d6101bc3660046107fe565b6103b7565b61013d6101cf3660046108ae565b61042b565b61015d6101e23660046107fe565b610504565b61015d6101f53660046108c9565b610510565b61015d6102083660046107fe565b61059c565b61015d61021b3660046108ae565b6105ed565b6000806001600160a01b03166001848460405161023e92919061091d565b908152604051908190036020019020546001600160a01b031614159392505050565b6000806001600160a01b03166001848460405161027e92919061091d565b908152604051908190036020019020546001600160a01b0316146102c25782826040516325224b2b60e11b81526004016102b992919061092d565b60405180910390fd5b6102cd838333610631565b9392505050565b6001600160a01b038116600090815260208190526040812080548291906102fa9061095c565b9050119050919050565b60006001838360405161031892919061091d565b908152604051908190036020019020546001600160a01b0316905080610343576102cd838333610631565b92915050565b60006001600160a01b0382166103725760405163d92e233d60e01b815260040160405180910390fd5b6001848460405161038492919061091d565b908152604051908190036020019020546001600160a01b03169050806102cd576103af848484610631565b949350505050565b600080600184846040516103cc92919061091d565b908152604051908190036020019020546001600160a01b031690508061040957838360405163c4e93f0560e01b81526004016102b992919061092d565b6001600160a01b03908116600090815260026020526040902054169392505050565b6001600160a01b03811660009081526020819052604090208054606091906104529061095c565b80601f016020809104026020016040519081016040528092919081815260200182805461047e9061095c565b80156104cb5780601f106104a0576101008083540402835291602001916104cb565b820191906000526020600020905b8154815290600101906020018083116104ae57829003601f168201915b5050505050905080516000036104ff57604051632294d5eb60e01b81526001600160a01b03831660048201526024016102b9565b919050565b60006102cd838361072a565b60006001600160a01b0382166105395760405163d92e233d60e01b815260040160405180910390fd5b60006001600160a01b03166001858560405161055692919061091d565b908152604051908190036020019020546001600160a01b0316146105915783836040516325224b2b60e11b81526004016102b992919061092d565b6103af848484610631565b6000600183836040516105b092919061091d565b908152604051908190036020019020546001600160a01b031690508061034357828260405163c4e93f0560e01b81526004016102b992919061092d565b6001600160a01b0380821660009081526002602052604090205416806104ff57604051632294d5eb60e01b81526001600160a01b03831660048201526024016102b9565b600061063d848461072a565b6001600160a01b03811660009081526020819052604090209091506106638486836109fb565b50806001858560405161067792919061091d565b90815260408051918290036020908101832080546001600160a01b039586167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915585851660009081526002909252919020805493861693909116831790556106e8908690869061091d565b604051908190038120906001600160a01b038416907fa8dcd1622398f6bd02562add88113930eb87d3d8f7c7db37cc0b59d36cc777e190600090a49392505050565b600081810361074c576040516319cb0b0d60e11b815260040160405180910390fd5b6040518060400160405280601d81526020017f496d6d757461626c655f526174696e67735f62795f474d5f45425f4d42000000815250838360405160200161079693929190610abb565b60408051601f1981840301815291905280516020909101209392505050565b60008083601f8401126107c757600080fd5b50813567ffffffffffffffff8111156107df57600080fd5b6020830191508360208285010111156107f757600080fd5b9250929050565b6000806020838503121561081157600080fd5b823567ffffffffffffffff81111561082857600080fd5b610834858286016107b5565b90969095509350505050565b60005b8381101561085b578181015183820152602001610843565b50506000910152565b6020815260008251806020840152610883816040850160208701610840565b601f01601f19169190910160400192915050565b80356001600160a01b03811681146104ff57600080fd5b6000602082840312156108c057600080fd5b6102cd82610897565b6000806000604084860312156108de57600080fd5b833567ffffffffffffffff8111156108f557600080fd5b610901868287016107b5565b9094509250610914905060208501610897565b90509250925092565b8183823760009101908152919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b600181811c9082168061097057607f821691505b60208210810361099057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b601f8211156109f657806000526020600020601f840160051c810160208510156109d35750805b601f840160051c820191505b818110156109f357600081556001016109df565b50505b505050565b67ffffffffffffffff831115610a1357610a13610996565b610a2783610a21835461095c565b836109ac565b6000601f841160018114610a5b5760008515610a435750838201355b600019600387901b1c1916600186901b1783556109f3565b600083815260209020601f19861690835b82811015610a8c5786850135825560209485019460019092019101610a6c565b5086821015610aa95760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60008451610acd818460208901610840565b820183858237600093019283525090939250505056fea164736f6c634300081d000a

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.