Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,582 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim | 15372959 | 865 days ago | IN | 0 ETH | 0.00103009 | ||||
Claim | 15334204 | 872 days ago | IN | 0 ETH | 0.00089509 | ||||
Claim | 15328850 | 872 days ago | IN | 0 ETH | 0.00127802 | ||||
Claim | 15306514 | 876 days ago | IN | 0 ETH | 0.00070146 | ||||
Claim | 15261404 | 883 days ago | IN | 0 ETH | 0.00063818 | ||||
Claim | 15243469 | 886 days ago | IN | 0 ETH | 0.00086333 | ||||
Claim | 15242320 | 886 days ago | IN | 0 ETH | 0.00094076 | ||||
Claim | 15195447 | 893 days ago | IN | 0 ETH | 0.00089109 | ||||
Claim | 15168518 | 897 days ago | IN | 0 ETH | 0.00194802 | ||||
Claim | 15146271 | 901 days ago | IN | 0 ETH | 0.00117744 | ||||
Claim | 15101647 | 908 days ago | IN | 0 ETH | 0.00144563 | ||||
Claim | 15082459 | 911 days ago | IN | 0 ETH | 0.00200839 | ||||
Claim | 15059202 | 914 days ago | IN | 0 ETH | 0.00062937 | ||||
Claim | 15027647 | 920 days ago | IN | 0 ETH | 0.00160112 | ||||
Claim | 15010824 | 923 days ago | IN | 0 ETH | 0.00202187 | ||||
Claim | 15010327 | 923 days ago | IN | 0 ETH | 0.00353141 | ||||
Claim | 14999980 | 925 days ago | IN | 0 ETH | 0.00081575 | ||||
Claim | 14969262 | 930 days ago | IN | 0 ETH | 0.00825173 | ||||
Claim | 14953996 | 933 days ago | IN | 0 ETH | 0.00784289 | ||||
Claim | 14953271 | 933 days ago | IN | 0 ETH | 0.00944326 | ||||
Claim | 14944653 | 935 days ago | IN | 0 ETH | 0.00320979 | ||||
Claim | 14925376 | 938 days ago | IN | 0 ETH | 0.00363764 | ||||
Claim | 14917082 | 939 days ago | IN | 0 ETH | 0.00404522 | ||||
Claim | 14914291 | 940 days ago | IN | 0 ETH | 0.00184886 | ||||
Claim | 14907517 | 941 days ago | IN | 0 ETH | 0.00183762 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
MerkleClaim
Compiler Version
v0.8.7+commit.e28d00a7
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: AGPL-3.0-only pragma solidity >=0.8.0; /// ============ Imports ============ //import { MerkleProof } from "@openzeppelin/utils/cryptography/MerkleProof.sol"; // OZ: MerkleProof import { Owned } from "./Owned.sol"; import { TransferHelper } from "./TransferHelper.sol"; import { MerkleProof } from "./MerkleProof.sol"; // OZ: MerkleProof interface IERC20 { function approve(address spender, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 amount) external returns (bool); function transferFrom(address from, address to, uint256 amount ) external returns (bool); } /// @title MerkleClaim /// @notice Allows a held ERC20 to be claimable by members of a merkle tree /// @author Anish Agnihotri <[email protected]> /// @author Jack Corddry https://github.com/corddry contract MerkleClaim is Owned{ /// ============ Immutable storage ============ /// @notice ERC20-claimee inclusion root bytes32 public immutable merkleRoot; /// @notice Contract address of airdropped token IERC20 public immutable token; address public timelock_address; /// ============ Mutable storage ============ /// @notice Mapping of addresses who have claimed tokens mapping(address => bool) public hasClaimed; /// ============ Errors ============ /// @notice Thrown if address has already claimed error AlreadyClaimed(); /// @notice Thrown if address/amount are not part of Merkle tree error NotInMerkle(); /// @notice Thrown if claim contract doesn't have enough tokens to payout error notEnoughRewards(); /// ============ Modifiers ============ modifier onlyByOwnGov() { require(msg.sender == owner || msg.sender == timelock_address, "Not owner or timelock"); _; } /// ============ Constructor ============ /// @notice Creates a new MerkleClaimERC20 contract /// @param _erc20Address of token to be airdropped /// @param _merkleRoot of claimees constructor( address _erc20Address, bytes32 _merkleRoot, address _owner_address, address _timelock_address ) Owned(_owner_address) { merkleRoot = _merkleRoot; token = IERC20(_erc20Address); timelock_address = _timelock_address; } /// ============ Events ============ /// @notice Emitted after a successful token claim /// @param to recipient of claim /// @param amount of tokens claimed event Claim(address indexed to, uint256 amount); /// @notice Emitted after a successful token recovery /// @param token address being recovered /// @param amount of tokens recoverd event Recovered(address token, uint256 amount); /// ============ Functions ============ /// @notice Allows claiming tokens if address is part of merkle tree /// @param to address of claimee /// @param amount of tokens owed to claimee /// @param proof merkle proof to prove address and amount are in tree function claim(address to, uint256 amount, bytes32[] calldata proof) external { // Throw if address has already claimed tokens if (hasClaimed[to]) revert AlreadyClaimed(); // Verify merkle proof, or revert if not in tree bytes32 leaf = keccak256(abi.encodePacked(to, amount)); bool isValidLeaf = MerkleProof.verify(proof, merkleRoot, leaf); if (!isValidLeaf) revert NotInMerkle(); // Throw if the contract doesn't hold enough tokens for claimee if (amount > token.balanceOf(address(this))) revert notEnoughRewards(); // Set address to claimed hasClaimed[to] = true; // Award tokens to address token.transfer(to, amount); // Emit claim event emit Claim(to, amount); } /// ============ Permissioned Functions ============ function setTimelock(address _new_timelock_address) external onlyByOwnGov { timelock_address = _new_timelock_address; } function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyByOwnGov { // Can only be triggered by owner or governance TransferHelper.safeTransfer(tokenAddress, owner, tokenAmount); emit Recovered(tokenAddress, tokenAmount); } // Generic proxy function execute( address _to, uint256 _value, bytes calldata _data ) external onlyByOwnGov returns (bool, bytes memory) { (bool success, bytes memory result) = _to.call{value:_value}(_data); return (success, result); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. * * WARNING: You should avoid using leaf values that are 64 bytes long prior to * hashing, or use a hash function other than keccak256 for hashing leaves. * This is because the concatenation of a sorted pair of internal nodes in * the merkle tree could be reinterpreted as a leaf value. */ 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) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { 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); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.11; // helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false library TransferHelper { function safeApprove(address token, address to, uint value) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED'); } function safeTransfer(address token, address to, uint value) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED'); } function safeTransferFrom(address token, address from, address to, uint value) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED'); } function safeTransferETH(address to, uint value) internal { (bool success,) = to.call{value:value}(new bytes(0)); require(success, 'TransferHelper: ETH_TRANSFER_FAILED'); } }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity >=0.6.11; // https://docs.synthetix.io/contracts/Owned contract Owned { address public owner; address public nominatedOwner; constructor (address _owner) { require(_owner != address(0), "Owner address cannot be 0"); owner = _owner; emit OwnerChanged(address(0), _owner); } function nominateNewOwner(address _owner) external onlyOwner { nominatedOwner = _owner; emit OwnerNominated(_owner); } function acceptOwnership() external { require(msg.sender == nominatedOwner, "You must be nominated before you can accept ownership"); emit OwnerChanged(owner, nominatedOwner); owner = nominatedOwner; nominatedOwner = address(0); } modifier onlyOwner { require(msg.sender == owner, "Only the contract owner may perform this action"); _; } event OwnerNominated(address newOwner); event OwnerChanged(address oldOwner, address newOwner); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_erc20Address","type":"address"},{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"},{"internalType":"address","name":"_owner_address","type":"address"},{"internalType":"address","name":"_timelock_address","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyClaimed","type":"error"},{"inputs":[],"name":"NotInMerkle","type":"error"},{"inputs":[],"name":"notEnoughRewards","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claim","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerNominated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Recovered","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"execute","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hasClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"nominateNewOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"nominatedOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_new_timelock_address","type":"address"}],"name":"setTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"timelock_address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60c060405234801561001057600080fd5b50604051610e86380380610e8683398101604081905261002f9161013c565b816001600160a01b03811661008a5760405162461bcd60e51b815260206004820152601960248201527f4f776e657220616464726573732063616e6e6f74206265203000000000000000604482015260640160405180910390fd5b600080546001600160a01b0319166001600160a01b03831690811782556040805192835260208301919091527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c910160405180910390a1506080929092525060609190911b6001600160601b03191660a052600280546001600160a01b0319166001600160a01b03909216919091179055610189565b80516001600160a01b038116811461013757600080fd5b919050565b6000806000806080858703121561015257600080fd5b61015b85610120565b93506020850151925061017060408601610120565b915061017e60608601610120565b905092959194509250565b60805160a05160601c610cc16101c5600039600081816101f3015281816103f201526104d601526000818160d301526103920152610cc16000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80638980f11f116100715780638980f11f146101815780638da5cb5b14610194578063b61d27f6146101a7578063bdacb303146101c8578063dc6663c7146101db578063fc0c546a146101ee57600080fd5b80631627540c146100b95780632eb4a7ab146100ce5780633d13f8741461010857806353a47bb71461011b57806373b2e80e1461014657806379ba509714610179575b600080fd5b6100cc6100c73660046109fc565b610215565b005b6100f57f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6100cc610116366004610a48565b6102e0565b60015461012e906001600160a01b031681565b6040516001600160a01b0390911681526020016100ff565b6101696101543660046109fc565b60036020526000908152604090205460ff1681565b60405190151581526020016100ff565b6100cc6105a0565b6100cc61018f366004610a1e565b61068a565b60005461012e906001600160a01b031681565b6101ba6101b5366004610ad2565b610727565b6040516100ff929190610bb1565b6100cc6101d63660046109fc565b6107da565b60025461012e906001600160a01b031681565b61012e7f000000000000000000000000000000000000000000000000000000000000000081565b6000546001600160a01b0316331461028c5760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c792074686520636f6e7472616374206f776e6572206d6179207065726660448201526e37b936903a3434b99030b1ba34b7b760891b60648201526084015b60405180910390fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce229060200160405180910390a150565b6001600160a01b03841660009081526003602052604090205460ff161561031a57604051630c8d9eab60e31b815260040160405180910390fd5b6040516bffffffffffffffffffffffff19606086901b1660208201526034810184905260009060540160405160208183030381529060405280519060200120905060006103bd8484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152507f0000000000000000000000000000000000000000000000000000000000000000925086915061083b9050565b9050806103dd5760405163452c2df160e11b815260040160405180910390fd5b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561043c57600080fd5b505afa158015610450573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104749190610b6c565b8511156104945760405163963c0ffb60e01b815260040160405180910390fd5b6001600160a01b0386811660008181526003602052604090819020805460ff191660011790555163a9059cbb60e01b81526004810191909152602481018790527f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb90604401602060405180830381600087803b15801561051c57600080fd5b505af1158015610530573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105549190610b4a565b50856001600160a01b03167f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d48660405161059091815260200190565b60405180910390a2505050505050565b6001546001600160a01b031633146106185760405162461bcd60e51b815260206004820152603560248201527f596f75206d757374206265206e6f6d696e61746564206265666f726520796f7560448201527402063616e20616363657074206f776e65727368697605c1b6064820152608401610283565b600054600154604080516001600160a01b0393841681529290911660208301527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c910160405180910390a160018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000546001600160a01b03163314806106ad57506002546001600160a01b031633145b6106c95760405162461bcd60e51b815260040161028390610bed565b6000546106e19083906001600160a01b031683610851565b604080516001600160a01b0384168152602081018390527f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28910160405180910390a15050565b600080546060906001600160a01b031633148061074e57506002546001600160a01b031633145b61076a5760405162461bcd60e51b815260040161028390610bed565b600080876001600160a01b0316878787604051610788929190610b85565b60006040518083038185875af1925050503d80600081146107c5576040519150601f19603f3d011682016040523d82523d6000602084013e6107ca565b606091505b5090999098509650505050505050565b6000546001600160a01b03163314806107fd57506002546001600160a01b031633145b6108195760405162461bcd60e51b815260040161028390610bed565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600082610848858461096c565b14949350505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916108ad9190610b95565b6000604051808303816000865af19150503d80600081146108ea576040519150601f19603f3d011682016040523d82523d6000602084013e6108ef565b606091505b50915091508180156109195750805115806109195750808060200190518101906109199190610b4a565b6109655760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c4544006044820152606401610283565b5050505050565b600081815b84518110156109d857600085828151811061098e5761098e610c75565b602002602001015190508083116109b457600083815260208290526040902092506109c5565b600081815260208490526040902092505b50806109d081610c4c565b915050610971565b509392505050565b80356001600160a01b03811681146109f757600080fd5b919050565b600060208284031215610a0e57600080fd5b610a17826109e0565b9392505050565b60008060408385031215610a3157600080fd5b610a3a836109e0565b946020939093013593505050565b60008060008060608587031215610a5e57600080fd5b610a67856109e0565b935060208501359250604085013567ffffffffffffffff80821115610a8b57600080fd5b818701915087601f830112610a9f57600080fd5b813581811115610aae57600080fd5b8860208260051b8501011115610ac357600080fd5b95989497505060200194505050565b60008060008060608587031215610ae857600080fd5b610af1856109e0565b935060208501359250604085013567ffffffffffffffff80821115610b1557600080fd5b818701915087601f830112610b2957600080fd5b813581811115610b3857600080fd5b886020828501011115610ac357600080fd5b600060208284031215610b5c57600080fd5b81518015158114610a1757600080fd5b600060208284031215610b7e57600080fd5b5051919050565b8183823760009101908152919050565b60008251610ba7818460208701610c1c565b9190910192915050565b82151581526040602082015260008251806040840152610bd8816060850160208701610c1c565b601f01601f1916919091016060019392505050565b6020808252601590820152744e6f74206f776e6572206f722074696d656c6f636b60581b604082015260600190565b60005b83811015610c37578181015183820152602001610c1f565b83811115610c46576000848401525b50505050565b6000600019821415610c6e57634e487b7160e01b600052601160045260246000fd5b5060010190565b634e487b7160e01b600052603260045260246000fdfea26469706673582212204fc6d05bc691befe0e143b1ae54c331968b54a7e1a621d9d8027e738ba38a96664736f6c63430008070033000000000000000000000000c2544a32872a91f4a553b404c6950e89de901fdb1cc89145d7ddfb4a255e327ab01d1f98259db2b14430efdc24124d5cdb169ba10000000000000000000000003ce4d19c155d977b04c8560ed1cc9c6f38ee3d320000000000000000000000008412ebf45bac1b340bbe8f318b928c466c4e39ca
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100b45760003560e01c80638980f11f116100715780638980f11f146101815780638da5cb5b14610194578063b61d27f6146101a7578063bdacb303146101c8578063dc6663c7146101db578063fc0c546a146101ee57600080fd5b80631627540c146100b95780632eb4a7ab146100ce5780633d13f8741461010857806353a47bb71461011b57806373b2e80e1461014657806379ba509714610179575b600080fd5b6100cc6100c73660046109fc565b610215565b005b6100f57f1cc89145d7ddfb4a255e327ab01d1f98259db2b14430efdc24124d5cdb169ba181565b6040519081526020015b60405180910390f35b6100cc610116366004610a48565b6102e0565b60015461012e906001600160a01b031681565b6040516001600160a01b0390911681526020016100ff565b6101696101543660046109fc565b60036020526000908152604090205460ff1681565b60405190151581526020016100ff565b6100cc6105a0565b6100cc61018f366004610a1e565b61068a565b60005461012e906001600160a01b031681565b6101ba6101b5366004610ad2565b610727565b6040516100ff929190610bb1565b6100cc6101d63660046109fc565b6107da565b60025461012e906001600160a01b031681565b61012e7f000000000000000000000000c2544a32872a91f4a553b404c6950e89de901fdb81565b6000546001600160a01b0316331461028c5760405162461bcd60e51b815260206004820152602f60248201527f4f6e6c792074686520636f6e7472616374206f776e6572206d6179207065726660448201526e37b936903a3434b99030b1ba34b7b760891b60648201526084015b60405180910390fd5b600180546001600160a01b0319166001600160a01b0383169081179091556040519081527f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce229060200160405180910390a150565b6001600160a01b03841660009081526003602052604090205460ff161561031a57604051630c8d9eab60e31b815260040160405180910390fd5b6040516bffffffffffffffffffffffff19606086901b1660208201526034810184905260009060540160405160208183030381529060405280519060200120905060006103bd8484808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152507f1cc89145d7ddfb4a255e327ab01d1f98259db2b14430efdc24124d5cdb169ba1925086915061083b9050565b9050806103dd5760405163452c2df160e11b815260040160405180910390fd5b6040516370a0823160e01b81523060048201527f000000000000000000000000c2544a32872a91f4a553b404c6950e89de901fdb6001600160a01b0316906370a082319060240160206040518083038186803b15801561043c57600080fd5b505afa158015610450573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104749190610b6c565b8511156104945760405163963c0ffb60e01b815260040160405180910390fd5b6001600160a01b0386811660008181526003602052604090819020805460ff191660011790555163a9059cbb60e01b81526004810191909152602481018790527f000000000000000000000000c2544a32872a91f4a553b404c6950e89de901fdb9091169063a9059cbb90604401602060405180830381600087803b15801561051c57600080fd5b505af1158015610530573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105549190610b4a565b50856001600160a01b03167f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d48660405161059091815260200190565b60405180910390a2505050505050565b6001546001600160a01b031633146106185760405162461bcd60e51b815260206004820152603560248201527f596f75206d757374206265206e6f6d696e61746564206265666f726520796f7560448201527402063616e20616363657074206f776e65727368697605c1b6064820152608401610283565b600054600154604080516001600160a01b0393841681529290911660208301527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c910160405180910390a160018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6000546001600160a01b03163314806106ad57506002546001600160a01b031633145b6106c95760405162461bcd60e51b815260040161028390610bed565b6000546106e19083906001600160a01b031683610851565b604080516001600160a01b0384168152602081018390527f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28910160405180910390a15050565b600080546060906001600160a01b031633148061074e57506002546001600160a01b031633145b61076a5760405162461bcd60e51b815260040161028390610bed565b600080876001600160a01b0316878787604051610788929190610b85565b60006040518083038185875af1925050503d80600081146107c5576040519150601f19603f3d011682016040523d82523d6000602084013e6107ca565b606091505b5090999098509650505050505050565b6000546001600160a01b03163314806107fd57506002546001600160a01b031633145b6108195760405162461bcd60e51b815260040161028390610bed565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b600082610848858461096c565b14949350505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b17905291516000928392908716916108ad9190610b95565b6000604051808303816000865af19150503d80600081146108ea576040519150601f19603f3d011682016040523d82523d6000602084013e6108ef565b606091505b50915091508180156109195750805115806109195750808060200190518101906109199190610b4a565b6109655760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c4544006044820152606401610283565b5050505050565b600081815b84518110156109d857600085828151811061098e5761098e610c75565b602002602001015190508083116109b457600083815260208290526040902092506109c5565b600081815260208490526040902092505b50806109d081610c4c565b915050610971565b509392505050565b80356001600160a01b03811681146109f757600080fd5b919050565b600060208284031215610a0e57600080fd5b610a17826109e0565b9392505050565b60008060408385031215610a3157600080fd5b610a3a836109e0565b946020939093013593505050565b60008060008060608587031215610a5e57600080fd5b610a67856109e0565b935060208501359250604085013567ffffffffffffffff80821115610a8b57600080fd5b818701915087601f830112610a9f57600080fd5b813581811115610aae57600080fd5b8860208260051b8501011115610ac357600080fd5b95989497505060200194505050565b60008060008060608587031215610ae857600080fd5b610af1856109e0565b935060208501359250604085013567ffffffffffffffff80821115610b1557600080fd5b818701915087601f830112610b2957600080fd5b813581811115610b3857600080fd5b886020828501011115610ac357600080fd5b600060208284031215610b5c57600080fd5b81518015158114610a1757600080fd5b600060208284031215610b7e57600080fd5b5051919050565b8183823760009101908152919050565b60008251610ba7818460208701610c1c565b9190910192915050565b82151581526040602082015260008251806040840152610bd8816060850160208701610c1c565b601f01601f1916919091016060019392505050565b6020808252601590820152744e6f74206f776e6572206f722074696d656c6f636b60581b604082015260600190565b60005b83811015610c37578181015183820152602001610c1f565b83811115610c46576000848401525b50505050565b6000600019821415610c6e57634e487b7160e01b600052601160045260246000fd5b5060010190565b634e487b7160e01b600052603260045260246000fdfea26469706673582212204fc6d05bc691befe0e143b1ae54c331968b54a7e1a621d9d8027e738ba38a96664736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c2544a32872a91f4a553b404c6950e89de901fdb1cc89145d7ddfb4a255e327ab01d1f98259db2b14430efdc24124d5cdb169ba10000000000000000000000003ce4d19c155d977b04c8560ed1cc9c6f38ee3d320000000000000000000000008412ebf45bac1b340bbe8f318b928c466c4e39ca
-----Decoded View---------------
Arg [0] : _erc20Address (address): 0xc2544A32872A91F4A553b404C6950e89De901fdb
Arg [1] : _merkleRoot (bytes32): 0x1cc89145d7ddfb4a255e327ab01d1f98259db2b14430efdc24124d5cdb169ba1
Arg [2] : _owner_address (address): 0x3CE4d19C155D977B04C8560Ed1Cc9C6F38Ee3d32
Arg [3] : _timelock_address (address): 0x8412ebf45bAC1B340BbE8F318b928C466c4E39CA
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000c2544a32872a91f4a553b404c6950e89de901fdb
Arg [1] : 1cc89145d7ddfb4a255e327ab01d1f98259db2b14430efdc24124d5cdb169ba1
Arg [2] : 0000000000000000000000003ce4d19c155d977b04c8560ed1cc9c6f38ee3d32
Arg [3] : 0000000000000000000000008412ebf45bac1b340bbe8f318b928c466c4e39ca
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.