More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 529 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim | 21452868 | 40 days ago | IN | 0 ETH | 0.00112989 | ||||
Claim | 21054466 | 96 days ago | IN | 0 ETH | 0.00111224 | ||||
Claim | 20894518 | 118 days ago | IN | 0 ETH | 0.00071791 | ||||
Claim | 20894508 | 118 days ago | IN | 0 ETH | 0.00078667 | ||||
Claim | 20488116 | 175 days ago | IN | 0 ETH | 0.00053718 | ||||
Claim | 20444068 | 181 days ago | IN | 0 ETH | 0.00037709 | ||||
Claim | 20372681 | 191 days ago | IN | 0 ETH | 0.00043082 | ||||
Claim | 20352722 | 194 days ago | IN | 0 ETH | 0.00065994 | ||||
Claim | 20109168 | 228 days ago | IN | 0 ETH | 0.00072811 | ||||
Claim | 19821524 | 268 days ago | IN | 0 ETH | 0.00059804 | ||||
Claim | 19315108 | 339 days ago | IN | 0 ETH | 0.00483942 | ||||
Claim | 19189239 | 357 days ago | IN | 0 ETH | 0.00651202 | ||||
Claim | 19035343 | 379 days ago | IN | 0 ETH | 0.00176129 | ||||
Claim | 18866231 | 402 days ago | IN | 0 ETH | 0.00179548 | ||||
Claim | 18866212 | 402 days ago | IN | 0 ETH | 0.00179584 | ||||
Claim | 18866180 | 402 days ago | IN | 0 ETH | 0.00168288 | ||||
Claim | 18866156 | 402 days ago | IN | 0 ETH | 0.00145953 | ||||
Claim | 18866144 | 402 days ago | IN | 0 ETH | 0.00181143 | ||||
Claim | 18866123 | 402 days ago | IN | 0 ETH | 0.00168318 | ||||
Claim | 18866105 | 402 days ago | IN | 0 ETH | 0.00194061 | ||||
Claim | 18806735 | 411 days ago | IN | 0 ETH | 0.00618856 | ||||
Claim | 18517386 | 451 days ago | IN | 0 ETH | 0.00265108 | ||||
Claim | 17827119 | 548 days ago | IN | 0 ETH | 0.00471237 | ||||
Claim | 17724027 | 562 days ago | IN | 0 ETH | 0.0046085 | ||||
Claim | 17675181 | 569 days ago | IN | 0 ETH | 0.00159724 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
MerkleWalletClaimer
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-08 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.11; // Take ownership of a wallet if a claim for it exists in a merkle root. interface IMerkleWalletClaimer { // Returns the address of the wallet factory. function factory() external view returns (address); // Returns the merkle root of the merkle tree containing wallets available to claim. function merkleRoot() external view returns (bytes32); // Returns true if the index has been marked claimed. function isClaimed(uint256 index) external view returns (bool); // Claim the wallet. Reverts if the inputs are invalid. Deploys the wallet if necessary using the initial signing key. function claim(uint256 index, address wallet, address initialSigningKey, bytes calldata claimantSignature, bytes32[] calldata merkleProof) external; // Claim the wallet on behalf of a specified owner. function claimFor(address owner, uint256 index, address wallet, address initialSigningKey, bytes calldata claimantSignature, bytes32[] calldata merkleProof) external; // This event is triggered whenever a call to #claim succeeds. event Claimed(uint256 index, address wallet, address owner); } /** * @dev Partial interface of the wallet factory. */ interface WalletFactory { /** * @dev Deploys a new wallet. */ function newSmartWallet( address userSigningKey ) external returns (address wallet); } /** * @dev Partial interface of the wallet. */ interface Wallet { /** * @dev Sets ownership on the wallet. */ function claimOwnership(address owner) external; } /** * @dev These functions deal with verification of Merkle trees (hash trees), */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } // Check if the computed hash (root) is equal to the provided root return computedHash == root; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } 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(address subject) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n20", subject)); } } /// @author 0age contract MerkleWalletClaimer is IMerkleWalletClaimer { using ECDSA for address; using ECDSA for bytes32; address public immutable override factory; bytes32 public immutable override merkleRoot; mapping (address => address[]) public claimedWalletsByOwner; // This is a packed array of booleans. mapping(uint256 => uint256) private claimedBitMap; constructor(address factory_, bytes32 merkleRoot_) { factory = factory_; merkleRoot = merkleRoot_; } function claim( uint256 index, address wallet, address initialSigningKey, bytes calldata claimantSignature, bytes32[] calldata merkleProof ) external override { _claim(msg.sender, index, wallet, initialSigningKey, claimantSignature, merkleProof); } function claimFor( address owner, uint256 index, address wallet, address initialSigningKey, bytes calldata claimantSignature, bytes32[] calldata merkleProof ) external override { _claim(owner, index, wallet, initialSigningKey, claimantSignature, merkleProof); } function isClaimed(uint256 index) public view override returns (bool) { uint256 claimedWordIndex = index >> 8; uint256 claimedBitIndex = index & 0xff; uint256 claimedWord = claimedBitMap[claimedWordIndex]; uint256 mask = (1 << claimedBitIndex); return claimedWord & mask != 0; } function _setClaimed(uint256 index) private { uint256 claimedWordIndex = index >> 8; uint256 claimedBitIndex = index & 0xff; claimedBitMap[claimedWordIndex] = claimedBitMap[claimedWordIndex] | (1 << claimedBitIndex); } function _deployIfNecessary(address wallet, address initialSigningKey) private { // Deploy the wallet if necessary. uint256 walletCode; assembly { walletCode := extcodesize(wallet) } if (walletCode == 0) { WalletFactory(factory).newSmartWallet(initialSigningKey); assembly { walletCode := extcodesize(wallet) } require( walletCode != 0, 'MerkleWalletClaimer: Invalid initial signing key supplied.' ); } } function _claim( address owner, uint256 index, address wallet, address initialSigningKey, bytes calldata claimantSignature, bytes32[] calldata merkleProof ) private { require(!isClaimed(index), 'MerkleWalletClaimer: Wallet already claimed.'); // Claimant signs an EIP-191 v0x45 message consisting of the designated owner. bytes32 messageHash = owner.toEthSignedMessageHash(); // Recover the claimant from the signature and cast the type. uint256 claimantKey = uint256(uint160(messageHash.recover(claimantSignature))); // Verify the merkle proof. bytes32 node = keccak256(abi.encodePacked(index, wallet, claimantKey)); require( MerkleProof.verify(merkleProof, merkleRoot, node), 'MerkleWalletClaimer: Invalid proof.' ); // Mark the wallet as claimed. _setClaimed(index); // Deploy the wallet if necessary. _deployIfNecessary(wallet, initialSigningKey); // Set the caller as the owner on the wallet. Wallet(wallet).claimOwnership(owner); // Track wallet as having been claimed by the owner and emit an event. claimedWalletsByOwner[owner].push(wallet); emit Claimed(index, wallet, owner); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"factory_","type":"address"},{"internalType":"bytes32","name":"merkleRoot_","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"Claimed","type":"event"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"wallet","type":"address"},{"internalType":"address","name":"initialSigningKey","type":"address"},{"internalType":"bytes","name":"claimantSignature","type":"bytes"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"wallet","type":"address"},{"internalType":"address","name":"initialSigningKey","type":"address"},{"internalType":"bytes","name":"claimantSignature","type":"bytes"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"claimFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimedWalletsByOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"isClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60c060405234801561001057600080fd5b50604051610b15380380610b1583398101604081905261002f91610045565b6001600160a01b0390911660805260a05261007f565b6000806040838503121561005857600080fd5b82516001600160a01b038116811461006f57600080fd5b6020939093015192949293505050565b60805160a051610a646100b1600039600081816081015261038901526000818161013a01526106a70152610a646000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806318a11e11146100675780632eb4a7ab1461007c57806399b736f3146100b65780639e34070f146100e1578063a306e8fb14610122578063c45a015514610135575b600080fd5b61007a610075366004610836565b61015c565b005b6100a37f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6100c96100c43660046108d5565b610175565b6040516001600160a01b0390911681526020016100ad565b6101126100ef366004610901565b600881901c60009081526001602081905260409091205460ff9092161b16151590565b60405190151581526020016100ad565b61007a61013036600461091a565b6101ad565b6100c97f000000000000000000000000000000000000000000000000000000000000000081565b61016c33888888888888886101c7565b50505050505050565b6000602052816000526040600020818154811061019157600080fd5b6000918252602090912001546001600160a01b03169150829050565b6101bd88888888888888886101c7565b5050505050505050565b6101ee87600881901c60009081526001602081905260409091205460ff9092161b16151590565b156102555760405162461bcd60e51b815260206004820152602c60248201527f4d65726b6c6557616c6c6574436c61696d65723a2057616c6c657420616c726560448201526b30b23c9031b630b4b6b2b21760a11b60648201526084015b60405180910390fd5b604080517f19457468657265756d205369676e6564204d6573736167653a0a32300000000060208083019190915260608b901b6bffffffffffffffffffffffff1916603c830152825160308184030181526050909201909252805191012060006102f786868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869392505061051f9050565b6001600160a01b03169050600089898360405160200161033c9392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b6040516020818303038152906040528051906020012090506103b48585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152507f0000000000000000000000000000000000000000000000000000000000000000925085915061060a9050565b61040c5760405162461bcd60e51b815260206004820152602360248201527f4d65726b6c6557616c6c6574436c61696d65723a20496e76616c69642070726f60448201526237b31760e91b606482015260840161024c565b60088a901c6000908152600160208190526040909120805460ff8d169290921b909117905561043b8989610681565b604051636d4969d760e11b81526001600160a01b038c811660048301528a169063da92d3ae90602401600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050506001600160a01b038b811660008181526020818152604080832080546001810182559084529282902090920180546001600160a01b031916948e16948517905581518e8152908101939093528201527f3c75fca1decf7e281012586b8fab4c62d1e876fc95d6d0335723cd6ea5bba73a9060600160405180910390a15050505050505050505050565b6000815160411461053257506000610604565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156105785760009350505050610604565b8060ff16601b1415801561059057508060ff16601c14155b156105a15760009350505050610604565b60408051600081526020810180835288905260ff831691810191909152606081018490526080810183905260019060a0016020604051602081039080840390855afa1580156105f4573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b600081815b855181101561067657600086828151811061062c5761062c6109cb565b602002602001015190508083116106525760008381526020829052604090209250610663565b600081815260208490526040902092505b508061066e816109e1565b91505061060f565b509092149392505050565b813b8061078b5760405163285e7bfd60e01b81526001600160a01b0383811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063285e7bfd906024016020604051808303816000875af11580156106f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107149190610a0a565b5050813b8061078b5760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c6557616c6c6574436c61696d65723a20496e76616c696420696e6960448201527f7469616c207369676e696e67206b657920737570706c6965642e000000000000606482015260840161024c565b505050565b6001600160a01b03811681146107a557600080fd5b50565b60008083601f8401126107ba57600080fd5b50813567ffffffffffffffff8111156107d257600080fd5b6020830191508360208285010111156107ea57600080fd5b9250929050565b60008083601f84011261080357600080fd5b50813567ffffffffffffffff81111561081b57600080fd5b6020830191508360208260051b85010111156107ea57600080fd5b600080600080600080600060a0888a03121561085157600080fd5b87359650602088013561086381610790565b9550604088013561087381610790565b9450606088013567ffffffffffffffff8082111561089057600080fd5b61089c8b838c016107a8565b909650945060808a01359150808211156108b557600080fd5b506108c28a828b016107f1565b989b979a50959850939692959293505050565b600080604083850312156108e857600080fd5b82356108f381610790565b946020939093013593505050565b60006020828403121561091357600080fd5b5035919050565b60008060008060008060008060c0898b03121561093657600080fd5b883561094181610790565b975060208901359650604089013561095881610790565b9550606089013561096881610790565b9450608089013567ffffffffffffffff8082111561098557600080fd5b6109918c838d016107a8565b909650945060a08b01359150808211156109aa57600080fd5b506109b78b828c016107f1565b999c989b5096995094979396929594505050565b634e487b7160e01b600052603260045260246000fd5b6000600019821415610a0357634e487b7160e01b600052601160045260246000fd5b5060010190565b600060208284031215610a1c57600080fd5b8151610a2781610790565b939250505056fea26469706673582212207b6b21a973dcc79ad30cdefe2a1c0c7e141968069db4ff5889dcaaf3a568eece64736f6c634300080b0033000000000000000000000000fc00c80b0000007f73004edb00094cad80626d8d58b21b0752dbf12949ea81305d33df0546ed6a59972a79cd0f0afa36c3f72f92
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100625760003560e01c806318a11e11146100675780632eb4a7ab1461007c57806399b736f3146100b65780639e34070f146100e1578063a306e8fb14610122578063c45a015514610135575b600080fd5b61007a610075366004610836565b61015c565b005b6100a37f58b21b0752dbf12949ea81305d33df0546ed6a59972a79cd0f0afa36c3f72f9281565b6040519081526020015b60405180910390f35b6100c96100c43660046108d5565b610175565b6040516001600160a01b0390911681526020016100ad565b6101126100ef366004610901565b600881901c60009081526001602081905260409091205460ff9092161b16151590565b60405190151581526020016100ad565b61007a61013036600461091a565b6101ad565b6100c97f000000000000000000000000fc00c80b0000007f73004edb00094cad80626d8d81565b61016c33888888888888886101c7565b50505050505050565b6000602052816000526040600020818154811061019157600080fd5b6000918252602090912001546001600160a01b03169150829050565b6101bd88888888888888886101c7565b5050505050505050565b6101ee87600881901c60009081526001602081905260409091205460ff9092161b16151590565b156102555760405162461bcd60e51b815260206004820152602c60248201527f4d65726b6c6557616c6c6574436c61696d65723a2057616c6c657420616c726560448201526b30b23c9031b630b4b6b2b21760a11b60648201526084015b60405180910390fd5b604080517f19457468657265756d205369676e6564204d6573736167653a0a32300000000060208083019190915260608b901b6bffffffffffffffffffffffff1916603c830152825160308184030181526050909201909252805191012060006102f786868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869392505061051f9050565b6001600160a01b03169050600089898360405160200161033c9392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b6040516020818303038152906040528051906020012090506103b48585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152507f58b21b0752dbf12949ea81305d33df0546ed6a59972a79cd0f0afa36c3f72f92925085915061060a9050565b61040c5760405162461bcd60e51b815260206004820152602360248201527f4d65726b6c6557616c6c6574436c61696d65723a20496e76616c69642070726f60448201526237b31760e91b606482015260840161024c565b60088a901c6000908152600160208190526040909120805460ff8d169290921b909117905561043b8989610681565b604051636d4969d760e11b81526001600160a01b038c811660048301528a169063da92d3ae90602401600060405180830381600087803b15801561047e57600080fd5b505af1158015610492573d6000803e3d6000fd5b505050506001600160a01b038b811660008181526020818152604080832080546001810182559084529282902090920180546001600160a01b031916948e16948517905581518e8152908101939093528201527f3c75fca1decf7e281012586b8fab4c62d1e876fc95d6d0335723cd6ea5bba73a9060600160405180910390a15050505050505050505050565b6000815160411461053257506000610604565b60208201516040830151606084015160001a7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156105785760009350505050610604565b8060ff16601b1415801561059057508060ff16601c14155b156105a15760009350505050610604565b60408051600081526020810180835288905260ff831691810191909152606081018490526080810183905260019060a0016020604051602081039080840390855afa1580156105f4573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b600081815b855181101561067657600086828151811061062c5761062c6109cb565b602002602001015190508083116106525760008381526020829052604090209250610663565b600081815260208490526040902092505b508061066e816109e1565b91505061060f565b509092149392505050565b813b8061078b5760405163285e7bfd60e01b81526001600160a01b0383811660048301527f000000000000000000000000fc00c80b0000007f73004edb00094cad80626d8d169063285e7bfd906024016020604051808303816000875af11580156106f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107149190610a0a565b5050813b8061078b5760405162461bcd60e51b815260206004820152603a60248201527f4d65726b6c6557616c6c6574436c61696d65723a20496e76616c696420696e6960448201527f7469616c207369676e696e67206b657920737570706c6965642e000000000000606482015260840161024c565b505050565b6001600160a01b03811681146107a557600080fd5b50565b60008083601f8401126107ba57600080fd5b50813567ffffffffffffffff8111156107d257600080fd5b6020830191508360208285010111156107ea57600080fd5b9250929050565b60008083601f84011261080357600080fd5b50813567ffffffffffffffff81111561081b57600080fd5b6020830191508360208260051b85010111156107ea57600080fd5b600080600080600080600060a0888a03121561085157600080fd5b87359650602088013561086381610790565b9550604088013561087381610790565b9450606088013567ffffffffffffffff8082111561089057600080fd5b61089c8b838c016107a8565b909650945060808a01359150808211156108b557600080fd5b506108c28a828b016107f1565b989b979a50959850939692959293505050565b600080604083850312156108e857600080fd5b82356108f381610790565b946020939093013593505050565b60006020828403121561091357600080fd5b5035919050565b60008060008060008060008060c0898b03121561093657600080fd5b883561094181610790565b975060208901359650604089013561095881610790565b9550606089013561096881610790565b9450608089013567ffffffffffffffff8082111561098557600080fd5b6109918c838d016107a8565b909650945060a08b01359150808211156109aa57600080fd5b506109b78b828c016107f1565b999c989b5096995094979396929594505050565b634e487b7160e01b600052603260045260246000fd5b6000600019821415610a0357634e487b7160e01b600052601160045260246000fd5b5060010190565b600060208284031215610a1c57600080fd5b8151610a2781610790565b939250505056fea26469706673582212207b6b21a973dcc79ad30cdefe2a1c0c7e141968069db4ff5889dcaaf3a568eece64736f6c634300080b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000fc00c80b0000007f73004edb00094cad80626d8d58b21b0752dbf12949ea81305d33df0546ed6a59972a79cd0f0afa36c3f72f92
-----Decoded View---------------
Arg [0] : factory_ (address): 0xfc00C80b0000007F73004edB00094caD80626d8D
Arg [1] : merkleRoot_ (bytes32): 0x58b21b0752dbf12949ea81305d33df0546ed6a59972a79cd0f0afa36c3f72f92
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000fc00c80b0000007f73004edb00094cad80626d8d
Arg [1] : 58b21b0752dbf12949ea81305d33df0546ed6a59972a79cd0f0afa36c3f72f92
Deployed Bytecode Sourcemap
3930:3684:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4452:312;;;;;;:::i;:::-;;:::i;:::-;;4098:44;;;;;;;;2116:25:1;;;2104:2;2089:18;4098:44:0;;;;;;;;4151:59;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2636:32:1;;;2618:51;;2606:2;2591:18;4151:59:0;2472:203:1;5114:328:0;;;;;;:::i;:::-;5231:1;5222:10;;;5178:4;5314:31;;;:13;:31;;;;;;;;;5277:4;5269:12;;;5372:20;5411:18;:23;;;5114:328;;;;3030:14:1;;3023:22;3005:41;;2993:2;2978:18;5114:328:0;2865:187:1;4772:334:0;;;;;;:::i;:::-;;:::i;4050:41::-;;;;;4452:312;4672:84;4679:10;4691:5;4698:6;4706:17;4725;;4744:11;;4672:6;:84::i;:::-;4452:312;;;;;;;:::o;4151:59::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4151:59:0;;-1:-1:-1;4151:59:0;;-1:-1:-1;4151:59:0:o;4772:334::-;5019:79;5026:5;5033;5040:6;5048:17;5067;;5086:11;;5019:6;:79::i;:::-;4772:334;;;;;;;;:::o;6258:1353::-;6502:16;6512:5;5231:1;5222:10;;;5178:4;5314:31;;;:13;:31;;;;;;;;;5277:4;5269:12;;;5372:20;5411:18;:23;;;5114:328;6502:16;6501:17;6493:74;;;;-1:-1:-1;;;6493:74:0;;4497:2:1;6493:74:0;;;4479:21:1;4536:2;4516:18;;;4509:30;4575:34;4555:18;;;4548:62;-1:-1:-1;;;4626:18:1;;;4619:42;4678:19;;6493:74:0;;;;;;;;;3837:61;;;6098:66:1;3837:61:0;;;;6086:79:1;;;;6203:2;6199:15;;;-1:-1:-1;;6199:15:1;6181:12;;;6174:75;3837:61:0;;;;;;;;;6265:12:1;;;;3837:61:0;;;3827:72;;;;;6804:19;6842:38;6862:17;;6842:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6842:11:0;;:38;-1:-1:-1;;6842:19:0;:38;-1:-1:-1;6842:38:0:i;:::-;-1:-1:-1;;;;;6826:56:0;6804:78;;6932:12;6974:5;6981:6;6989:11;6957:44;;;;;;;;;4893:19:1;;;4950:2;4946:15;;;;-1:-1:-1;;4942:53:1;4937:2;4928:12;;4921:75;5021:2;5012:12;;5005:28;5058:2;5049:12;;4708:359;6957:44:0;;;;;;;;;;;;;6947:55;;;;;;6932:70;;7035:49;7054:11;;7035:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7067:10:0;;-1:-1:-1;7079:4:0;;-1:-1:-1;7035:18:0;;-1:-1:-1;7035:49:0:i;:::-;7013:134;;;;-1:-1:-1;;;7013:134:0;;5274:2:1;7013:134:0;;;5256:21:1;5313:2;5293:18;;;5286:30;5352:34;5332:18;;;5325:62;-1:-1:-1;;;5403:18:1;;;5396:33;5446:19;;7013:134:0;5072:399:1;7013:134:0;5541:1;5532:10;;;5505:24;5636:31;;;5671:1;5636:31;;;;;;;;;;5587:4;5579:12;;5671:20;;;;5636:56;;;5602:90;;7275:45;7294:6;7302:17;7275:18;:45::i;:::-;7388:36;;-1:-1:-1;;;7388:36:0;;-1:-1:-1;;;;;2636:32:1;;;7388:36:0;;;2618:51:1;7388:29:0;;;;;2591:18:1;;7388:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;7517:28:0;;;:21;:28;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;7517:41:0;;;;;;;;;7574:29;;5678:25:1;;;5757:18;;;5750:43;;;;5809:18;;5802:43;7574:29:0;;5666:2:1;5651:18;7574:29:0;;;;;;;6482:1129;;;6258:1353;;;;;;;;:::o;3118:608::-;3206:7;3226:9;:16;3246:2;3226:22;3222:64;;-1:-1:-1;3275:1:0;3259:19;;3222:64;3386:4;3371:20;;3365:27;3426:4;3411:20;;3405:27;3474:4;3459:20;;3453:27;3294:9;3445:36;3513:66;3500:79;;3496:119;;;3605:1;3590:17;;;;;;;3496:119;3627:1;:7;;3632:2;3627:7;;:18;;;;;3638:1;:7;;3643:2;3638:7;;3627:18;3623:58;;;3671:1;3656:17;;;;;;;3623:58;3696:24;;;;;;;;;;;;6515:25:1;;;6588:4;6576:17;;6556:18;;;6549:45;;;;6610:18;;;6603:34;;;6653:18;;;6646:34;;;3696:24:0;;6487:19:1;;3696:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3689:31;;;;;3118:608;;;;;:::o;2090:770::-;2181:4;2221;2181;2238:499;2262:5;:12;2258:1;:16;2238:499;;;2296:20;2319:5;2325:1;2319:8;;;;;;;;:::i;:::-;;;;;;;2296:31;;2364:12;2348;:28;2344:382;;2936:13;2986:15;;;3022:4;3015:15;;;3069:4;3053:21;;2476:57;;2344:382;;;2936:13;2986:15;;;3022:4;3015:15;;;3069:4;3053:21;;2653:57;;2344:382;-1:-1:-1;2276:3:0;;;;:::i;:::-;;;;2238:499;;;-1:-1:-1;2832:20:0;;;;2090:770;-1:-1:-1;;;2090:770:0:o;5708:542::-;5896:19;;5931:15;5927:316;;5963:56;;-1:-1:-1;;;5963:56:0;;-1:-1:-1;;;;;2636:32:1;;;5963:56:0;;;2618:51:1;5977:7:0;5963:37;;;;2591:18:1;;5963:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;6061:19:0;;6122:15;6096:135;;;;-1:-1:-1;;;6096:135:0;;7518:2:1;6096:135:0;;;7500:21:1;7557:2;7537:18;;;7530:30;7596:34;7576:18;;;7569:62;7667:28;7647:18;;;7640:56;7713:19;;6096:135:0;7316:422:1;6096:135:0;5787:463;5708:542;;:::o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:347::-;201:8;211:6;265:3;258:4;250:6;246:17;242:27;232:55;;283:1;280;273:12;232:55;-1:-1:-1;306:20:1;;349:18;338:30;;335:50;;;381:1;378;371:12;335:50;418:4;410:6;406:17;394:29;;470:3;463:4;454:6;446;442:19;438:30;435:39;432:59;;;487:1;484;477:12;432:59;150:347;;;;;:::o;502:367::-;565:8;575:6;629:3;622:4;614:6;610:17;606:27;596:55;;647:1;644;637:12;596:55;-1:-1:-1;670:20:1;;713:18;702:30;;699:50;;;745:1;742;735:12;699:50;782:4;774:6;770:17;758:29;;842:3;835:4;825:6;822:1;818:14;810:6;806:27;802:38;799:47;796:67;;;859:1;856;849:12;874:1091;1007:6;1015;1023;1031;1039;1047;1055;1108:3;1096:9;1087:7;1083:23;1079:33;1076:53;;;1125:1;1122;1115:12;1076:53;1161:9;1148:23;1138:33;;1221:2;1210:9;1206:18;1193:32;1234:31;1259:5;1234:31;:::i;:::-;1284:5;-1:-1:-1;1341:2:1;1326:18;;1313:32;1354:33;1313:32;1354:33;:::i;:::-;1406:7;-1:-1:-1;1464:2:1;1449:18;;1436:32;1487:18;1517:14;;;1514:34;;;1544:1;1541;1534:12;1514:34;1583:58;1633:7;1624:6;1613:9;1609:22;1583:58;:::i;:::-;1660:8;;-1:-1:-1;1557:84:1;-1:-1:-1;1748:3:1;1733:19;;1720:33;;-1:-1:-1;1765:16:1;;;1762:36;;;1794:1;1791;1784:12;1762:36;;1833:72;1897:7;1886:8;1875:9;1871:24;1833:72;:::i;:::-;874:1091;;;;-1:-1:-1;874:1091:1;;-1:-1:-1;874:1091:1;;;;1807:98;;-1:-1:-1;;;874:1091:1:o;2152:315::-;2220:6;2228;2281:2;2269:9;2260:7;2256:23;2252:32;2249:52;;;2297:1;2294;2287:12;2249:52;2336:9;2323:23;2355:31;2380:5;2355:31;:::i;:::-;2405:5;2457:2;2442:18;;;;2429:32;;-1:-1:-1;;;2152:315:1:o;2680:180::-;2739:6;2792:2;2780:9;2771:7;2767:23;2763:32;2760:52;;;2808:1;2805;2798:12;2760:52;-1:-1:-1;2831:23:1;;2680:180;-1:-1:-1;2680:180:1:o;3057:1233::-;3199:6;3207;3215;3223;3231;3239;3247;3255;3308:3;3296:9;3287:7;3283:23;3279:33;3276:53;;;3325:1;3322;3315:12;3276:53;3364:9;3351:23;3383:31;3408:5;3383:31;:::i;:::-;3433:5;-1:-1:-1;3485:2:1;3470:18;;3457:32;;-1:-1:-1;3541:2:1;3526:18;;3513:32;3554:33;3513:32;3554:33;:::i;:::-;3606:7;-1:-1:-1;3665:2:1;3650:18;;3637:32;3678:33;3637:32;3678:33;:::i;:::-;3730:7;-1:-1:-1;3788:3:1;3773:19;;3760:33;3812:18;3842:14;;;3839:34;;;3869:1;3866;3859:12;3839:34;3908:58;3958:7;3949:6;3938:9;3934:22;3908:58;:::i;:::-;3985:8;;-1:-1:-1;3882:84:1;-1:-1:-1;4073:3:1;4058:19;;4045:33;;-1:-1:-1;4090:16:1;;;4087:36;;;4119:1;4116;4109:12;4087:36;;4158:72;4222:7;4211:8;4200:9;4196:24;4158:72;:::i;:::-;3057:1233;;;;-1:-1:-1;3057:1233:1;;-1:-1:-1;3057:1233:1;;;;;;4249:8;-1:-1:-1;;;3057:1233:1:o;6691:127::-;6752:10;6747:3;6743:20;6740:1;6733:31;6783:4;6780:1;6773:15;6807:4;6804:1;6797:15;6823:232;6862:3;-1:-1:-1;;6883:17:1;;6880:140;;;6942:10;6937:3;6933:20;6930:1;6923:31;6977:4;6974:1;6967:15;7005:4;7002:1;6995:15;6880:140;-1:-1:-1;7047:1:1;7036:13;;6823:232::o;7060:251::-;7130:6;7183:2;7171:9;7162:7;7158:23;7154:32;7151:52;;;7199:1;7196;7189:12;7151:52;7231:9;7225:16;7250:31;7275:5;7250:31;:::i;:::-;7300:5;7060:251;-1:-1:-1;;;7060:251:1:o
Swarm Source
ipfs://7b6b21a973dcc79ad30cdefe2a1c0c7e141968069db4ff5889dcaaf3a568eece
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.