Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
8847777 | 1823 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
DharmaKeyRegistryV2
Compiler Version
v0.5.11+commit.c082d0b4
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-10-31 */ pragma solidity 0.5.11; // optimization runs: 200, evm version: petersburg interface DharmaKeyRegistryInterface { event NewGlobalKey(address oldGlobalKey, address newGlobalKey); event NewSpecificKey( address indexed account, address oldSpecificKey, address newSpecificKey ); function setGlobalKey(address globalKey, bytes calldata signature) external; function setSpecificKey(address account, address specificKey) external; function getKey() external view returns (address key); function getKeyForUser(address account) external view returns (address key); function getGlobalKey() external view returns (address globalKey); function getSpecificKey(address account) external view returns (address specificKey); } library ECDSA { function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { if (signature.length != 65) { return (address(0)); } bytes32 r; bytes32 s; uint8 v; assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return address(0); } if (v != 27 && v != 28) { return address(0); } return ecrecover(hash, v, r, s); } function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be aplied to your functions to restrict their use to * the owner. * * In order to transfer ownership, a recipient must be specified, at which point * the specified recipient can call `acceptOwnership` and take ownership. */ contract TwoStepOwnable { address private _owner; address private _newPotentialOwner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initialize contract by setting transaction submitter as initial owner. */ constructor() internal { _owner = tx.origin; emit OwnershipTransferred(address(0), _owner); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner(), "TwoStepOwnable: caller is not the owner."); _; } /** * @dev Returns true if the caller is the current owner. */ function isOwner() public view returns (bool) { return msg.sender == _owner; } /** * @dev Allows a new account (`newOwner`) to accept ownership. * Can only be called by the current owner. */ function transferOwnership(address newOwner) public onlyOwner { require( newOwner != address(0), "TwoStepOwnable: new potential owner is the zero address." ); _newPotentialOwner = newOwner; } /** * @dev Cancel a transfer of ownership to a new account. * Can only be called by the current owner. */ function cancelOwnershipTransfer() public onlyOwner { delete _newPotentialOwner; } /** * @dev Transfers ownership of the contract to the caller. * Can only be called by a new potential owner set by the current owner. */ function acceptOwnership() public { require( msg.sender == _newPotentialOwner, "TwoStepOwnable: current owner must set caller as new potential owner." ); delete _newPotentialOwner; emit OwnershipTransferred(_owner, msg.sender); _owner = msg.sender; } } /** * @title DharmaKeyRegistryV2 * @author 0age * @notice The Dharma Key Registry is an owned contract that holds the public * user signing keys that will be used by the Dharma Smart Wallet. Each time a * particular Dharma Smart Wallet instance needs to validate a signature, it * will first retrieve the public address for the secondary signing key * associated with that wallet from the Dharma Key Registry. If a specific key * has not been set for that smart wallet, it will return the global public key. * Otherwise, it will return the specific signing key. Additional view functions * are also provided for retrieving public keys directly. Only the owner may * update these keys. Also, note that the V2 key registry includes an additional * mapping to track all keys that have been used, and only allows a given key to * be set one time. */ contract DharmaKeyRegistryV2 is TwoStepOwnable, DharmaKeyRegistryInterface { using ECDSA for bytes32; // The global public key serves as the default signing key. address private _globalKey; // Specific keys may also be set on a per-caller basis. mapping (address => address) private _specificKeys; // Maintain a mapping of all used keys (to prevent reuse). mapping (address => bool) private _usedKeys; /** * @notice In the constructor, set the initial global key and the initial * owner to tx.origin. */ constructor() public { // Initially set the global key to the account of the transaction submitter. _registerGlobalKey(tx.origin); } /** * @notice Set a new global key. This method may only be called by the owner, * and a signature must also be provided in order to verify that the provided * global public key has a corresponding private key that can be used to sign * messages. * @param globalKey address The new global public key. * @param signature bytes A signature of a message hash containing the address * of this contract, the new global key, and a specific message, that must * resolve to the supplied global key. */ function setGlobalKey( address globalKey, bytes calldata signature ) external onlyOwner { // Ensure that the provided global key is not the null address. require(globalKey != address(0), "A global key must be supplied."); // Message hash constructed according to EIP-191-0x45 to prevent replays. bytes32 messageHash = keccak256( abi.encodePacked( address(this), globalKey, "This signature demonstrates that the supplied signing key is valid." ) ); // Recover the signer of the message hash using the provided signature. address signer = messageHash.toEthSignedMessageHash().recover(signature); // Ensure that the provided signature resolves to the provided global key. require(globalKey == signer, "Invalid signature for supplied global key."); // Update global key to the provided global key and prevent future reuse. _registerGlobalKey(globalKey); } /** * @notice Set a new specific key for a particular account. This method may * only be called by the owner. Signatures are not required in order to make * setting specific keys more efficient at scale. Providing the null address * for the specific key will remove a specific key from the given account. * @param account address The account to set the new specific public key for. * @param specificKey address The new specific public key. */ function setSpecificKey( address account, address specificKey ) external onlyOwner { // Ensure that the key has not been used previously. require(!_usedKeys[specificKey], "Key has been used previously."); // Emit an event signifying that the specific key has been modified. emit NewSpecificKey(account, _specificKeys[account], specificKey); // Update specific key for provided account to the provided specific key. _specificKeys[account] = specificKey; // Mark the key as having been used previously. _usedKeys[specificKey] = true; } /** * @notice Get the public key associated with the caller of this function. If * a specific key is set for the caller, it will be returned; otherwise, the * global key will be returned. * @return The public key to use for the caller. */ function getKey() external view returns (address key) { // Retrieve the specific key, if any, for the caller. key = _specificKeys[msg.sender]; // Fall back to the global key in the event that no specific key is set. if (key == address(0)) { key = _globalKey; } } /** * @notice Get the public key associated with a particular account. If a * specific key is set for the account, it will be returned; otherwise, the * global key will be returned. * @param account address The account to find the public key for. * @return The public key to use for the provided account. */ function getKeyForUser(address account) external view returns (address key) { // Retrieve the specific key, if any, for the specified account. key = _specificKeys[account]; // Fall back to the global key in the event that no specific key is set. if (key == address(0)) { key = _globalKey; } } /** * @notice Get the global public key. * @return The global public key. */ function getGlobalKey() external view returns (address globalKey) { // Retrieve and return the global key. globalKey = _globalKey; } /** * @notice Get the specific public key associated with the supplied account. * The call will revert if a specific public key is not set for the account. * @param account address The account to find the specific public key for. * @return The specific public key set on the provided account, if one exists. */ function getSpecificKey( address account ) external view returns (address specificKey) { // Retrieve the specific key, if any, for the account. specificKey = _specificKeys[account]; // Revert in the event that there is no specific key set. require( specificKey != address(0), "No specific key set for the provided account." ); } /** * @notice Internal function to set a new global key once contract ownership * and signature validity have both been checked, or during contract creation. * The provided global key must not have been used previously, and once set it * will be registered as having been used. * @param globalKey address The new global public key. */ function _registerGlobalKey(address globalKey) internal { // Ensure that the key has not been used previously. require(!_usedKeys[globalKey], "Key has been used previously."); // Emit an event signifying that the global key has been modified. emit NewGlobalKey(_globalKey, globalKey); // Update the global key to the provided global key. _globalKey = globalKey; // Mark the key as having been used previously. _usedKeys[globalKey] = true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[],"name":"cancelOwnershipTransfer","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getSpecificKey","outputs":[{"internalType":"address","name":"specificKey","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"globalKey","type":"address"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"setGlobalKey","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"acceptOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getKey","outputs":[{"internalType":"address","name":"key","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getGlobalKey","outputs":[{"internalType":"address","name":"globalKey","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getKeyForUser","outputs":[{"internalType":"address","name":"key","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"specificKey","type":"address"}],"name":"setSpecificKey","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldGlobalKey","type":"address"},{"indexed":false,"internalType":"address","name":"newGlobalKey","type":"address"}],"name":"NewGlobalKey","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"address","name":"oldSpecificKey","type":"address"},{"indexed":false,"internalType":"address","name":"newSpecificKey","type":"address"}],"name":"NewSpecificKey","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
Contract Creation Code
608060405234801561001057600080fd5b50600080546001600160a01b03191632178082556040516001600160a01b039190911691907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a361006c326001600160e01b0361007116565b61017b565b6001600160a01b03811660009081526004602052604090205460ff16156100f957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4b657920686173206265656e20757365642070726576696f75736c792e000000604482015290519081900360640190fd5b600254604080516001600160a01b039283168152918316602083015280517fa32b0a8ef3ffb88c03a342b78b72361e1338ec8943e550c93ddae4f45bab4a769281900390910190a1600280546001600160a01b039092166001600160a01b0319909216821790556000908152600460205260409020805460ff19166001179055565b610b728061018a6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806385d162ad1161007157806385d162ad1461018a5780638da5cb5b146101925780638f32d59b1461019a578063a00b6dd4146101b6578063a8f3a371146101dc578063f2fde38b1461020a576100a9565b806323452b9c146100ae5780635f98cd6c146100b85780636951e6da146100fa57806379ba50971461017a57806382678dd614610182575b600080fd5b6100b6610230565b005b6100de600480360360208110156100ce57600080fd5b50356001600160a01b0316610285565b604080516001600160a01b039092168252519081900360200190f35b6100b66004803603604081101561011057600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561013b57600080fd5b82018360208201111561014d57600080fd5b8035906020019184600183028401116401000000008311171561016f57600080fd5b5090925090506102e1565b6100b661049c565b6100de610541565b6100de610570565b6100de61057f565b6101a261058e565b604080519115158252519081900360200190f35b6100de600480360360208110156101cc57600080fd5b50356001600160a01b031661059f565b6100b6600480360360408110156101f257600080fd5b506001600160a01b03813581169160200135166105d0565b6100b66004803603602081101561022057600080fd5b50356001600160a01b0316610724565b61023861058e565b6102735760405162461bcd60e51b8152600401808060200182810382526028815260200180610a876028913960400191505060405180910390fd5b600180546001600160a01b0319169055565b6001600160a01b0380821660009081526003602052604090205416806102dc5760405162461bcd60e51b815260040180806020018281038252602d815260200180610b11602d913960400191505060405180910390fd5b919050565b6102e961058e565b6103245760405162461bcd60e51b8152600401808060200182810382526028815260200180610a876028913960400191505060405180910390fd5b6001600160a01b03831661037f576040805162461bcd60e51b815260206004820152601e60248201527f4120676c6f62616c206b6579206d75737420626520737570706c6965642e0000604482015290519081900360640190fd5b6000308460405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b8152601401806109ff6043913960430192505050604051602081830303815290604052805190602001209050600061043a84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061042e92508691506107ce9050565b9063ffffffff61081f16565b9050806001600160a01b0316856001600160a01b03161461048c5760405162461bcd60e51b815260040180806020018281038252602a815260200180610ae7602a913960400191505060405180910390fd5b6104958561090e565b5050505050565b6001546001600160a01b031633146104e55760405162461bcd60e51b8152600401808060200182810382526045815260200180610a426045913960600191505060405180910390fd5b600180546001600160a01b03191690556000805460405133926001600160a01b03909216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b03191633179055565b336000908152600360205260409020546001600160a01b03168061056d57506002546001600160a01b03165b90565b6002546001600160a01b031690565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6001600160a01b0380821660009081526003602052604090205416806102dc5750506002546001600160a01b031690565b6105d861058e565b6106135760405162461bcd60e51b8152600401808060200182810382526028815260200180610a876028913960400191505060405180910390fd5b6001600160a01b03811660009081526004602052604090205460ff1615610681576040805162461bcd60e51b815260206004820152601d60248201527f4b657920686173206265656e20757365642070726576696f75736c792e000000604482015290519081900360640190fd5b6001600160a01b03808316600081815260036020908152604091829020548251908516815293851690840152805191927f717e9e0e6039224cf9af30797a54e3a2cf19353d31e08c7e6544b199c3e6bc44929081900390910190a26001600160a01b03918216600090815260036020908152604080832080546001600160a01b03191694909516938417909455918152600490915220805460ff19166001179055565b61072c61058e565b6107675760405162461bcd60e51b8152600401808060200182810382526028815260200180610a876028913960400191505060405180910390fd5b6001600160a01b0381166107ac5760405162461bcd60e51b8152600401808060200182810382526038815260200180610aaf6038913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6000815160411461083257506000610908565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156108785760009350505050610908565b8060ff16601b1415801561089057508060ff16601c14155b156108a15760009350505050610908565b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa1580156108f8573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b6001600160a01b03811660009081526004602052604090205460ff161561097c576040805162461bcd60e51b815260206004820152601d60248201527f4b657920686173206265656e20757365642070726576696f75736c792e000000604482015290519081900360640190fd5b600254604080516001600160a01b039283168152918316602083015280517fa32b0a8ef3ffb88c03a342b78b72361e1338ec8943e550c93ddae4f45bab4a769281900390910190a1600280546001600160a01b039092166001600160a01b0319909216821790556000908152600460205260409020805460ff1916600117905556fe54686973207369676e61747572652064656d6f6e7374726174657320746861742074686520737570706c696564207369676e696e67206b65792069732076616c69642e54776f537465704f776e61626c653a2063757272656e74206f776e6572206d757374207365742063616c6c6572206173206e657720706f74656e7469616c206f776e65722e54776f537465704f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65722e54776f537465704f776e61626c653a206e657720706f74656e7469616c206f776e657220697320746865207a65726f20616464726573732e496e76616c6964207369676e617475726520666f7220737570706c69656420676c6f62616c206b65792e4e6f207370656369666963206b65792073657420666f72207468652070726f7669646564206163636f756e742ea265627a7a72315820202020202020446861726d614b6579526567697374727956322020202020202064736f6c634300050b0032
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100a95760003560e01c806385d162ad1161007157806385d162ad1461018a5780638da5cb5b146101925780638f32d59b1461019a578063a00b6dd4146101b6578063a8f3a371146101dc578063f2fde38b1461020a576100a9565b806323452b9c146100ae5780635f98cd6c146100b85780636951e6da146100fa57806379ba50971461017a57806382678dd614610182575b600080fd5b6100b6610230565b005b6100de600480360360208110156100ce57600080fd5b50356001600160a01b0316610285565b604080516001600160a01b039092168252519081900360200190f35b6100b66004803603604081101561011057600080fd5b6001600160a01b03823516919081019060408101602082013564010000000081111561013b57600080fd5b82018360208201111561014d57600080fd5b8035906020019184600183028401116401000000008311171561016f57600080fd5b5090925090506102e1565b6100b661049c565b6100de610541565b6100de610570565b6100de61057f565b6101a261058e565b604080519115158252519081900360200190f35b6100de600480360360208110156101cc57600080fd5b50356001600160a01b031661059f565b6100b6600480360360408110156101f257600080fd5b506001600160a01b03813581169160200135166105d0565b6100b66004803603602081101561022057600080fd5b50356001600160a01b0316610724565b61023861058e565b6102735760405162461bcd60e51b8152600401808060200182810382526028815260200180610a876028913960400191505060405180910390fd5b600180546001600160a01b0319169055565b6001600160a01b0380821660009081526003602052604090205416806102dc5760405162461bcd60e51b815260040180806020018281038252602d815260200180610b11602d913960400191505060405180910390fd5b919050565b6102e961058e565b6103245760405162461bcd60e51b8152600401808060200182810382526028815260200180610a876028913960400191505060405180910390fd5b6001600160a01b03831661037f576040805162461bcd60e51b815260206004820152601e60248201527f4120676c6f62616c206b6579206d75737420626520737570706c6965642e0000604482015290519081900360640190fd5b6000308460405160200180836001600160a01b03166001600160a01b031660601b8152601401826001600160a01b03166001600160a01b031660601b8152601401806109ff6043913960430192505050604051602081830303815290604052805190602001209050600061043a84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061042e92508691506107ce9050565b9063ffffffff61081f16565b9050806001600160a01b0316856001600160a01b03161461048c5760405162461bcd60e51b815260040180806020018281038252602a815260200180610ae7602a913960400191505060405180910390fd5b6104958561090e565b5050505050565b6001546001600160a01b031633146104e55760405162461bcd60e51b8152600401808060200182810382526045815260200180610a426045913960600191505060405180910390fd5b600180546001600160a01b03191690556000805460405133926001600160a01b03909216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b03191633179055565b336000908152600360205260409020546001600160a01b03168061056d57506002546001600160a01b03165b90565b6002546001600160a01b031690565b6000546001600160a01b031690565b6000546001600160a01b0316331490565b6001600160a01b0380821660009081526003602052604090205416806102dc5750506002546001600160a01b031690565b6105d861058e565b6106135760405162461bcd60e51b8152600401808060200182810382526028815260200180610a876028913960400191505060405180910390fd5b6001600160a01b03811660009081526004602052604090205460ff1615610681576040805162461bcd60e51b815260206004820152601d60248201527f4b657920686173206265656e20757365642070726576696f75736c792e000000604482015290519081900360640190fd5b6001600160a01b03808316600081815260036020908152604091829020548251908516815293851690840152805191927f717e9e0e6039224cf9af30797a54e3a2cf19353d31e08c7e6544b199c3e6bc44929081900390910190a26001600160a01b03918216600090815260036020908152604080832080546001600160a01b03191694909516938417909455918152600490915220805460ff19166001179055565b61072c61058e565b6107675760405162461bcd60e51b8152600401808060200182810382526028815260200180610a876028913960400191505060405180910390fd5b6001600160a01b0381166107ac5760405162461bcd60e51b8152600401808060200182810382526038815260200180610aaf6038913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6000815160411461083257506000610908565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156108785760009350505050610908565b8060ff16601b1415801561089057508060ff16601c14155b156108a15760009350505050610908565b6040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa1580156108f8573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b6001600160a01b03811660009081526004602052604090205460ff161561097c576040805162461bcd60e51b815260206004820152601d60248201527f4b657920686173206265656e20757365642070726576696f75736c792e000000604482015290519081900360640190fd5b600254604080516001600160a01b039283168152918316602083015280517fa32b0a8ef3ffb88c03a342b78b72361e1338ec8943e550c93ddae4f45bab4a769281900390910190a1600280546001600160a01b039092166001600160a01b0319909216821790556000908152600460205260409020805460ff1916600117905556fe54686973207369676e61747572652064656d6f6e7374726174657320746861742074686520737570706c696564207369676e696e67206b65792069732076616c69642e54776f537465704f776e61626c653a2063757272656e74206f776e6572206d757374207365742063616c6c6572206173206e657720706f74656e7469616c206f776e65722e54776f537465704f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65722e54776f537465704f776e61626c653a206e657720706f74656e7469616c206f776e657220697320746865207a65726f20616464726573732e496e76616c6964207369676e617475726520666f7220737570706c69656420676c6f62616c206b65792e4e6f207370656369666963206b65792073657420666f72207468652070726f7669646564206163636f756e742ea265627a7a72315820202020202020446861726d614b6579526567697374727956322020202020202064736f6c634300050b0032
Deployed Bytecode Sourcemap
5003:6331:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5003:6331:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3573:90;;;:::i;:::-;;10094:380;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;10094:380:0;-1:-1:-1;;;;;10094:380:0;;:::i;:::-;;;;-1:-1:-1;;;;;10094:380:0;;;;;;;;;;;;;;6238:966;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;6238:966:0;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;6238:966:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;6238:966:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;6238:966:0;;-1:-1:-1;6238:966:0;-1:-1:-1;6238:966:0;:::i;3821:298::-;;;:::i;8542:299::-;;;:::i;9609:145::-;;;:::i;2660:73::-;;;:::i;3002:86::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;9182:329;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9182:329:0;-1:-1:-1;;;;;9182:329:0;;:::i;7684:590::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7684:590:0;;;;;;;;;;:::i;3221:225::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;3221:225:0;-1:-1:-1;;;;;3221:225:0;;:::i;3573:90::-;2854:9;:7;:9::i;:::-;2846:62;;;;-1:-1:-1;;;2846:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3639:18;3632:25;;-1:-1:-1;;;;;;3632:25:0;;;3573:90::o;10094:380::-;-1:-1:-1;;;;;10270:22:0;;;10168:19;10270:22;;;:13;:22;;;;;;;10380:25;10364:104;;;;-1:-1:-1;;;10364:104:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10094:380;;;:::o;6238:966::-;2854:9;:7;:9::i;:::-;2846:62;;;;-1:-1:-1;;;2846:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6418:23:0;;6410:66;;;;;-1:-1:-1;;;6410:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;6564:19;6639:4;6655:9;6604:149;;;;;;-1:-1:-1;;;;;6604:149:0;-1:-1:-1;;;;;6604:149:0;;;;;;;;-1:-1:-1;;;;;6604:149:0;-1:-1:-1;;;;;6604:149:0;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;6604:149:0;;;6586:174;;;;;;6564:196;;6846:14;6863:55;6908:9;;6863:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;6863:36:0;;-1:-1:-1;6863:11:0;;-1:-1:-1;6863:34:0;;-1:-1:-1;6863:36:0:i;:::-;:44;:55;:44;:55;:::i;:::-;6846:72;;7028:6;-1:-1:-1;;;;;7015:19:0;:9;-1:-1:-1;;;;;7015:19:0;;7007:74;;;;-1:-1:-1;;;7007:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7169:29;7188:9;7169:18;:29::i;:::-;2915:1;;6238:966;;;:::o;3821:298::-;3892:18;;-1:-1:-1;;;;;3892:18:0;3878:10;:32;3862:135;;;;-1:-1:-1;;;3862:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4013:18;4006:25;;-1:-1:-1;;;;;;4006:25:0;;;-1:-1:-1;4066:6:0;;4045:40;;4074:10;;-1:-1:-1;;;;;4066:6:0;;;;4045:40;;;4094:6;:19;;-1:-1:-1;;;;;;4094:19:0;4103:10;4094:19;;;3821:298::o;8542:299::-;8682:10;8583:11;8668:25;;;:13;:25;;;;;;-1:-1:-1;;;;;8668:25:0;8784:17;8780:56;;-1:-1:-1;8818:10:0;;-1:-1:-1;;;;;8818:10:0;8780:56;8542:299;:::o;9609:145::-;9738:10;;-1:-1:-1;;;;;9738:10:0;;9609:145::o;2660:73::-;2698:7;2721:6;-1:-1:-1;;;;;2721:6:0;2660:73;:::o;3002:86::-;3042:4;3076:6;-1:-1:-1;;;;;3076:6:0;3062:10;:20;;3002:86::o;9182:329::-;-1:-1:-1;;;;;9341:22:0;;;9245:11;9341:22;;;:13;:22;;;;;;;9454:17;9450:56;;-1:-1:-1;;9488:10:0;;-1:-1:-1;;;;;9488:10:0;;9182:329::o;7684:590::-;2854:9;:7;:9::i;:::-;2846:62;;;;-1:-1:-1;;;2846:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7849:22:0;;;;;;:9;:22;;;;;;;;7848:23;7840:65;;;;;-1:-1:-1;;;7840:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7993:60:0;;;8017:22;;;;:13;:22;;;;;;;;;;7993:60;;8017:22;;;7993:60;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8141:22:0;;;;;;;:13;:22;;;;;;;;:36;;-1:-1:-1;;;;;;8141:36:0;;;;;;;;;;;8239:22;;;:9;:22;;;;:29;;-1:-1:-1;;8239:29:0;-1:-1:-1;8239:29:0;;;7684:590::o;3221:225::-;2854:9;:7;:9::i;:::-;2846:62;;;;-1:-1:-1;;;2846:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3306:22:0;;3290:112;;;;-1:-1:-1;;;3290:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3411:18;:29;;-1:-1:-1;;;;;;3411:29:0;-1:-1:-1;;;;;3411:29:0;;;;;;;;;;3221:225::o;1469:173::-;1575:58;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1575:58:0;;;;;;;1565:69;;;;;;1469:173::o;777:684::-;855:7;879:9;:16;899:2;879:22;875:74;;-1:-1:-1;934:1:0;918:19;;875:74;1071:4;1056:20;;1050:27;1117:4;1102:20;;1096:27;1171:4;1156:20;;1150:27;961:9;1142:36;1218:66;1205:79;;1201:129;;;1316:1;1301:17;;;;;;;1201:129;1346:1;:7;;1351:2;1346:7;;:18;;;;;1357:1;:7;;1362:2;1357:7;;1346:18;1342:68;;;1396:1;1381:17;;;;;;;1342:68;1429:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1429:24:0;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1429:24:0;;;;;;;;1422:31;;;;;777:684;;;;;:::o;10842:489::-;-1:-1:-1;;;;;10972:20:0;;;;;;:9;:20;;;;;;;;10971:21;10963:63;;;;;-1:-1:-1;;;10963:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11125:10;;11112:35;;;-1:-1:-1;;;;;11125:10:0;;;11112:35;;;;;;;;;;;;;;;;;;;;;11214:10;:22;;-1:-1:-1;;;;;11214:22:0;;;-1:-1:-1;;;;;;11214:22:0;;;;;;;:10;11298:20;;;:9;:20;;;;;:27;;-1:-1:-1;;11298:27:0;11214:22;11298:27;;;10842:489::o
Swarm Source
bzzr://202020202020446861726d614b65795265676973747279563220202020202020
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ 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.