Source Code
Overview
ETH Balance
0 ETH
ETH Value
$0.00| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 345372497 | 154 days ago | Contract Creation | 0 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
Contract Source Code (Solidity Standard Json-Input format)
// 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];
}
}{
"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
- No Contract Security Audit Submitted- Submit Audit Here
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"}]Contract Creation Code
6080604052348015600f57600080fd5b50610af08061001f6000396000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c80639b566faf11610081578063b7ae30411161005b578063b7ae3041146101e7578063ccf1454a146101fa578063dea5c2e01461020d57600080fd5b80639b566faf146101ae578063a6c519cb146101c1578063b7022eeb146101d457600080fd5b80635773a279116100b25780635773a279146101755780637b72a289146101885780638e94ec651461019b57600080fd5b806306930cb4146100d95780630edc473714610101578063217cf7e41461014a575b600080fd5b6100ec6100e73660046107fe565b610220565b60405190151581526020015b60405180910390f35b61013d6040518060400160405280601d81526020017f496d6d757461626c655f526174696e67735f62795f474d5f45425f4d4200000081525081565b6040516100f89190610864565b61015d6101583660046107fe565b610260565b6040516001600160a01b0390911681526020016100f8565b6100ec6101833660046108ae565b6102d4565b61015d6101963660046107fe565b610304565b61015d6101a93660046108c9565b610349565b61015d6101bc3660046107fe565b6103b7565b61013d6101cf3660046108ae565b61042b565b61015d6101e23660046107fe565b610504565b61015d6101f53660046108c9565b610510565b61015d6102083660046107fe565b61059c565b61015d61021b3660046108ae565b6105ed565b6000806001600160a01b03166001848460405161023e92919061091d565b908152604051908190036020019020546001600160a01b031614159392505050565b6000806001600160a01b03166001848460405161027e92919061091d565b908152604051908190036020019020546001600160a01b0316146102c25782826040516325224b2b60e11b81526004016102b992919061092d565b60405180910390fd5b6102cd838333610631565b9392505050565b6001600160a01b038116600090815260208190526040812080548291906102fa9061095c565b9050119050919050565b60006001838360405161031892919061091d565b908152604051908190036020019020546001600160a01b0316905080610343576102cd838333610631565b92915050565b60006001600160a01b0382166103725760405163d92e233d60e01b815260040160405180910390fd5b6001848460405161038492919061091d565b908152604051908190036020019020546001600160a01b03169050806102cd576103af848484610631565b949350505050565b600080600184846040516103cc92919061091d565b908152604051908190036020019020546001600160a01b031690508061040957838360405163c4e93f0560e01b81526004016102b992919061092d565b6001600160a01b03908116600090815260026020526040902054169392505050565b6001600160a01b03811660009081526020819052604090208054606091906104529061095c565b80601f016020809104026020016040519081016040528092919081815260200182805461047e9061095c565b80156104cb5780601f106104a0576101008083540402835291602001916104cb565b820191906000526020600020905b8154815290600101906020018083116104ae57829003601f168201915b5050505050905080516000036104ff57604051632294d5eb60e01b81526001600160a01b03831660048201526024016102b9565b919050565b60006102cd838361072a565b60006001600160a01b0382166105395760405163d92e233d60e01b815260040160405180910390fd5b60006001600160a01b03166001858560405161055692919061091d565b908152604051908190036020019020546001600160a01b0316146105915783836040516325224b2b60e11b81526004016102b992919061092d565b6103af848484610631565b6000600183836040516105b092919061091d565b908152604051908190036020019020546001600160a01b031690508061034357828260405163c4e93f0560e01b81526004016102b992919061092d565b6001600160a01b0380821660009081526002602052604090205416806104ff57604051632294d5eb60e01b81526001600160a01b03831660048201526024016102b9565b600061063d848461072a565b6001600160a01b03811660009081526020819052604090209091506106638486836109fb565b50806001858560405161067792919061091d565b90815260408051918290036020908101832080546001600160a01b039586167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915585851660009081526002909252919020805493861693909116831790556106e8908690869061091d565b604051908190038120906001600160a01b038416907fa8dcd1622398f6bd02562add88113930eb87d3d8f7c7db37cc0b59d36cc777e190600090a49392505050565b600081810361074c576040516319cb0b0d60e11b815260040160405180910390fd5b6040518060400160405280601d81526020017f496d6d757461626c655f526174696e67735f62795f474d5f45425f4d42000000815250838360405160200161079693929190610abb565b60408051601f1981840301815291905280516020909101209392505050565b60008083601f8401126107c757600080fd5b50813567ffffffffffffffff8111156107df57600080fd5b6020830191508360208285010111156107f757600080fd5b9250929050565b6000806020838503121561081157600080fd5b823567ffffffffffffffff81111561082857600080fd5b610834858286016107b5565b90969095509350505050565b60005b8381101561085b578181015183820152602001610843565b50506000910152565b6020815260008251806020840152610883816040850160208701610840565b601f01601f19169190910160400192915050565b80356001600160a01b03811681146104ff57600080fd5b6000602082840312156108c057600080fd5b6102cd82610897565b6000806000604084860312156108de57600080fd5b833567ffffffffffffffff8111156108f557600080fd5b610901868287016107b5565b9094509250610914905060208501610897565b90509250925092565b8183823760009101908152919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b600181811c9082168061097057607f821691505b60208210810361099057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b601f8211156109f657806000526020600020601f840160051c810160208510156109d35750805b601f840160051c820191505b818110156109f357600081556001016109df565b50505b505050565b67ffffffffffffffff831115610a1357610a13610996565b610a2783610a21835461095c565b836109ac565b6000601f841160018114610a5b5760008515610a435750838201355b600019600387901b1c1916600186901b1783556109f3565b600083815260209020601f19861690835b82811015610a8c5786850135825560209485019460019092019101610a6c565b5086821015610aa95760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60008451610acd818460208901610840565b820183858237600093019283525090939250505056fea164736f6c634300081d000a
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100d45760003560e01c80639b566faf11610081578063b7ae30411161005b578063b7ae3041146101e7578063ccf1454a146101fa578063dea5c2e01461020d57600080fd5b80639b566faf146101ae578063a6c519cb146101c1578063b7022eeb146101d457600080fd5b80635773a279116100b25780635773a279146101755780637b72a289146101885780638e94ec651461019b57600080fd5b806306930cb4146100d95780630edc473714610101578063217cf7e41461014a575b600080fd5b6100ec6100e73660046107fe565b610220565b60405190151581526020015b60405180910390f35b61013d6040518060400160405280601d81526020017f496d6d757461626c655f526174696e67735f62795f474d5f45425f4d4200000081525081565b6040516100f89190610864565b61015d6101583660046107fe565b610260565b6040516001600160a01b0390911681526020016100f8565b6100ec6101833660046108ae565b6102d4565b61015d6101963660046107fe565b610304565b61015d6101a93660046108c9565b610349565b61015d6101bc3660046107fe565b6103b7565b61013d6101cf3660046108ae565b61042b565b61015d6101e23660046107fe565b610504565b61015d6101f53660046108c9565b610510565b61015d6102083660046107fe565b61059c565b61015d61021b3660046108ae565b6105ed565b6000806001600160a01b03166001848460405161023e92919061091d565b908152604051908190036020019020546001600160a01b031614159392505050565b6000806001600160a01b03166001848460405161027e92919061091d565b908152604051908190036020019020546001600160a01b0316146102c25782826040516325224b2b60e11b81526004016102b992919061092d565b60405180910390fd5b6102cd838333610631565b9392505050565b6001600160a01b038116600090815260208190526040812080548291906102fa9061095c565b9050119050919050565b60006001838360405161031892919061091d565b908152604051908190036020019020546001600160a01b0316905080610343576102cd838333610631565b92915050565b60006001600160a01b0382166103725760405163d92e233d60e01b815260040160405180910390fd5b6001848460405161038492919061091d565b908152604051908190036020019020546001600160a01b03169050806102cd576103af848484610631565b949350505050565b600080600184846040516103cc92919061091d565b908152604051908190036020019020546001600160a01b031690508061040957838360405163c4e93f0560e01b81526004016102b992919061092d565b6001600160a01b03908116600090815260026020526040902054169392505050565b6001600160a01b03811660009081526020819052604090208054606091906104529061095c565b80601f016020809104026020016040519081016040528092919081815260200182805461047e9061095c565b80156104cb5780601f106104a0576101008083540402835291602001916104cb565b820191906000526020600020905b8154815290600101906020018083116104ae57829003601f168201915b5050505050905080516000036104ff57604051632294d5eb60e01b81526001600160a01b03831660048201526024016102b9565b919050565b60006102cd838361072a565b60006001600160a01b0382166105395760405163d92e233d60e01b815260040160405180910390fd5b60006001600160a01b03166001858560405161055692919061091d565b908152604051908190036020019020546001600160a01b0316146105915783836040516325224b2b60e11b81526004016102b992919061092d565b6103af848484610631565b6000600183836040516105b092919061091d565b908152604051908190036020019020546001600160a01b031690508061034357828260405163c4e93f0560e01b81526004016102b992919061092d565b6001600160a01b0380821660009081526002602052604090205416806104ff57604051632294d5eb60e01b81526001600160a01b03831660048201526024016102b9565b600061063d848461072a565b6001600160a01b03811660009081526020819052604090209091506106638486836109fb565b50806001858560405161067792919061091d565b90815260408051918290036020908101832080546001600160a01b039586167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915585851660009081526002909252919020805493861693909116831790556106e8908690869061091d565b604051908190038120906001600160a01b038416907fa8dcd1622398f6bd02562add88113930eb87d3d8f7c7db37cc0b59d36cc777e190600090a49392505050565b600081810361074c576040516319cb0b0d60e11b815260040160405180910390fd5b6040518060400160405280601d81526020017f496d6d757461626c655f526174696e67735f62795f474d5f45425f4d42000000815250838360405160200161079693929190610abb565b60408051601f1981840301815291905280516020909101209392505050565b60008083601f8401126107c757600080fd5b50813567ffffffffffffffff8111156107df57600080fd5b6020830191508360208285010111156107f757600080fd5b9250929050565b6000806020838503121561081157600080fd5b823567ffffffffffffffff81111561082857600080fd5b610834858286016107b5565b90969095509350505050565b60005b8381101561085b578181015183820152602001610843565b50506000910152565b6020815260008251806020840152610883816040850160208701610840565b601f01601f19169190910160400192915050565b80356001600160a01b03811681146104ff57600080fd5b6000602082840312156108c057600080fd5b6102cd82610897565b6000806000604084860312156108de57600080fd5b833567ffffffffffffffff8111156108f557600080fd5b610901868287016107b5565b9094509250610914905060208501610897565b90509250925092565b8183823760009101908152919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b600181811c9082168061097057607f821691505b60208210810361099057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b601f8211156109f657806000526020600020601f840160051c810160208510156109d35750805b601f840160051c820191505b818110156109f357600081556001016109df565b50505b505050565b67ffffffffffffffff831115610a1357610a13610996565b610a2783610a21835461095c565b836109ac565b6000601f841160018114610a5b5760008515610a435750838201355b600019600387901b1c1916600186901b1783556109f3565b600083815260209020601f19861690835b82811015610a8c5786850135825560209485019460019092019101610a6c565b5086821015610aa95760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b60008451610acd818460208901610840565b820183858237600093019283525090939250505056fea164736f6c634300081d000a
Loading...
Loading
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
[ 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.