Overview
ETH Balance
0 ETH
Eth Value
$0.00Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,339 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim | 19069906 | 305 days ago | IN | 0 ETH | 0.00100241 | ||||
Claim | 19069906 | 305 days ago | IN | 0 ETH | 0.00250446 | ||||
Claim | 18783609 | 345 days ago | IN | 0 ETH | 0.00334154 | ||||
Claim | 18665339 | 362 days ago | IN | 0 ETH | 0.00296714 | ||||
Claim | 18202720 | 426 days ago | IN | 0 ETH | 0.00053466 | ||||
Claim | 18181317 | 429 days ago | IN | 0 ETH | 0.00027972 | ||||
Claim | 18181316 | 429 days ago | IN | 0 ETH | 0.00062582 | ||||
Claim | 18129779 | 437 days ago | IN | 0 ETH | 0.00097395 | ||||
Claim | 18103374 | 440 days ago | IN | 0 ETH | 0.0006769 | ||||
Claim | 17692857 | 498 days ago | IN | 0 ETH | 0.00330021 | ||||
Claim | 17683163 | 499 days ago | IN | 0 ETH | 0.00124584 | ||||
Claim | 17656706 | 503 days ago | IN | 0 ETH | 0.00141771 | ||||
Claim | 17410426 | 538 days ago | IN | 0 ETH | 0.00186899 | ||||
Claim | 17288362 | 555 days ago | IN | 0 ETH | 0.00516675 | ||||
Claim | 17061471 | 587 days ago | IN | 0 ETH | 0.00202508 | ||||
Claim | 16779818 | 627 days ago | IN | 0 ETH | 0.00194469 | ||||
Claim | 16462927 | 671 days ago | IN | 0 ETH | 0.00122533 | ||||
Claim | 16263106 | 699 days ago | IN | 0 ETH | 0.00084607 | ||||
Claim | 16147401 | 715 days ago | IN | 0 ETH | 0.00160513 | ||||
Claim | 16099830 | 722 days ago | IN | 0 ETH | 0.00072057 | ||||
Claim | 15784127 | 766 days ago | IN | 0 ETH | 0.00409579 | ||||
Claim | 15582497 | 794 days ago | IN | 0 ETH | 0.00076783 | ||||
Claim | 15323013 | 835 days ago | IN | 0 ETH | 0.00369443 | ||||
Claim | 15196886 | 854 days ago | IN | 0 ETH | 0.00045523 | ||||
Claim | 15129998 | 865 days ago | IN | 0 ETH | 0.00153876 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
MerkleDistributor
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-05-24 */ // SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } /** * @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. */ 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 = keccak256(abi.encodePacked(computedHash, proofElement)); } else { // Hash(current element of the proof + current computed hash) computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } // Check if the computed hash (root) is equal to the provided root return computedHash == root; } } // Allows anyone to claim a token if they exist in a merkle root. interface IMerkleDistributor { // Returns the address of the token distributed by this contract. function token() external view returns (address); // Returns the merkle root of the merkle tree containing account balances 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 given amount of the token to the given address. Reverts if the inputs are invalid. function claim( uint256 index, address account, uint256 amount, bytes32[] calldata merkleProof ) external; // This event is triggered whenever a call to #claim succeeds. event Claimed(uint256 index, address account, uint256 amount); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // https://docs.synthetix.io/contracts/source/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 { _onlyOwner(); _; } function _onlyOwner() private view { require( msg.sender == owner, "Only the contract owner may perform this action" ); } event OwnerNominated(address newOwner); event OwnerChanged(address oldOwner, address newOwner); } contract MerkleDistributor is IMerkleDistributor, Owned { using SafeMath for uint256; using SafeERC20 for IERC20; address public immutable override token; bytes32 public immutable override merkleRoot; // This is a packed array of booleans. mapping(uint256 => uint256) private claimedBitMap; uint256 public immutable ownerUnlockTime; constructor( address _owner, address _token, bytes32 _merkleRoot, uint256 _daysUntilUnlock ) Owned(_owner) { require(_owner != address(0), "Owner must be non-zero address"); require(_token != address(0), "Airdrop token must be non-zero address"); require(_merkleRoot != bytes32(0), "Merkle root must be non-zero"); require( _daysUntilUnlock > 0, "Days until owner unlock must be in the future" ); token = _token; merkleRoot = _merkleRoot; ownerUnlockTime = block.timestamp.add(_daysUntilUnlock * 1 days); } function isClaimed(uint256 index) public view override returns (bool) { uint256 claimedWordIndex = index / 256; uint256 claimedBitIndex = index % 256; uint256 claimedWord = claimedBitMap[claimedWordIndex]; uint256 mask = (1 << claimedBitIndex); return claimedWord & mask == mask; } function _setClaimed(uint256 index) private { uint256 claimedWordIndex = index / 256; uint256 claimedBitIndex = index % 256; claimedBitMap[claimedWordIndex] = claimedBitMap[claimedWordIndex] | (1 << claimedBitIndex); } function claim( uint256 index, address account, uint256 amount, bytes32[] calldata merkleProof ) external override { require(!isClaimed(index), "MerkleDistributor: Drop already claimed."); // Verify the merkle proof. bytes32 node = keccak256(abi.encodePacked(index, account, amount)); require( MerkleProof.verify(merkleProof, merkleRoot, node), "MerkleDistributor: Invalid proof." ); // Mark it claimed and send the token. _setClaimed(index); IERC20(token).safeTransfer(account, amount); emit Claimed(index, account, amount); } // Used for recovery purposes function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyOwner { require( tokenAddress == address(token) ? block.timestamp >= ownerUnlockTime : true, "MerkleDistributor: Cannot withdraw the token before unlock time" ); IERC20(tokenAddress).safeTransfer(owner, tokenAmount); emit Recovered(tokenAddress, tokenAmount); } /* ========== EVENTS ========== */ event Recovered(address token, uint256 amount); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"},{"internalType":"uint256","name":"_daysUntilUnlock","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Claimed","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":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","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"},{"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":[],"name":"ownerUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60e06040523480156200001157600080fd5b50604051620011f6380380620011f68339810160408190526200003491620001d1565b836001600160a01b038116620000675760405162461bcd60e51b81526004016200005e90620002ed565b60405180910390fd5b600080546001600160a01b0319166001600160a01b0383161781556040517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c91620000b491849062000218565b60405180910390a1506001600160a01b038416620000e65760405162461bcd60e51b81526004016200005e90620002b6565b6001600160a01b0383166200010f5760405162461bcd60e51b81526004016200005e9062000324565b816200012f5760405162461bcd60e51b81526004016200005e906200027f565b60008111620001525760405162461bcd60e51b81526004016200005e9062000232565b6001600160601b0319606084901b1660805260a0829052620001916200017c826201518062000385565b426200019f60201b620005521790919060201c565b60c05250620003bd92505050565b6000620001ad82846200036a565b9392505050565b80516001600160a01b0381168114620001cc57600080fd5b919050565b60008060008060808587031215620001e7578384fd5b620001f285620001b4565b93506200020260208601620001b4565b6040860151606090960151949790965092505050565b6001600160a01b0392831681529116602082015260400190565b6020808252602d908201527f4461797320756e74696c206f776e657220756e6c6f636b206d7573742062652060408201526c696e207468652066757475726560981b606082015260800190565b6020808252601c908201527f4d65726b6c6520726f6f74206d757374206265206e6f6e2d7a65726f00000000604082015260600190565b6020808252601e908201527f4f776e6572206d757374206265206e6f6e2d7a65726f20616464726573730000604082015260600190565b60208082526019908201527f4f776e657220616464726573732063616e6e6f74206265203000000000000000604082015260600190565b60208082526026908201527f41697264726f7020746f6b656e206d757374206265206e6f6e2d7a65726f206160408201526564647265737360d01b606082015260800190565b60008219821115620003805762000380620003a7565b500190565b6000816000190483118215151615620003a257620003a2620003a7565b500290565b634e487b7160e01b600052601160045260246000fd5b60805160601c60a05160c051610dea6200040c6000396000818161033e0152610446015260008181610242015261030b01526000818161029f0152818161040601526105300152610dea6000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806379ba50971161006657806379ba5097146101065780638980f11f1461010e5780638da5cb5b146101215780639e34070f14610129578063fc0c546a146101495761009e565b80631627540c146100a35780632e7ba6ef146100b85780632eb4a7ab146100cb57806353a47bb7146100e9578063634465e4146100fe575b600080fd5b6100b66100b13660046108a1565b610151565b005b6100b66100c636600461091c565b6101af565b6100d3610309565b6040516100e09190610a51565b60405180910390f35b6100f161032d565b6040516100e091906109ff565b6100d361033c565b6100b6610360565b6100b661011c3660046108bb565b6103fc565b6100f16104dc565b61013c610137366004610904565b6104eb565b6040516100e09190610a46565b6100f161052e565b610159610565565b600180546001600160a01b0319166001600160a01b0383161790556040517f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce22906101a49083906109ff565b60405180910390a150565b6101b8856104eb565b156101de5760405162461bcd60e51b81526004016101d590610b3f565b60405180910390fd5b60008585856040516020016101f5939291906109d7565b60405160208183030381529060405280519060200120905061026d8383808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152507f000000000000000000000000000000000000000000000000000000000000000092508591506105919050565b6102895760405162461bcd60e51b81526004016101d590610bcd565b6102928661064c565b6102c66001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868661068a565b7f4ec90e965519d92681267467f775ada5bd214aa92c0dc93d90a5e880ce9ed0268686866040516102f993929190610cde565b60405180910390a1505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001546001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001546001600160a01b0316331461038a5760405162461bcd60e51b81526004016101d590610a8d565b6000546001546040517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c926103cd926001600160a01b0391821692911690610a13565b60405180910390a160018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b610404610565565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614610444576001610469565b7f00000000000000000000000000000000000000000000000000000000000000004210155b6104855760405162461bcd60e51b81526004016101d590610ae2565b60005461049f906001600160a01b0384811691168361068a565b7f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa2882826040516104d0929190610a2d565b60405180910390a15050565b6000546001600160a01b031681565b6000806104fa61010084610d15565b9050600061050a61010085610d74565b60009283526002602052604090922054600190921b9182169091149150505b919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061055e8284610cfd565b9392505050565b6000546001600160a01b0316331461058f5760405162461bcd60e51b81526004016101d590610c0e565b565b600081815b85518110156106415760008682815181106105c157634e487b7160e01b600052603260045260246000fd5b602002602001015190508083116106025782816040516020016105e59291906109ad565b60405160208183030381529060405280519060200120925061062e565b80836040516020016106159291906109ad565b6040516020818303038152906040528051906020012092505b508061063981610d59565b915050610596565b509092149392505050565b600061065a61010083610d15565b9050600061066a61010084610d74565b6000928352600260205260409092208054600190931b9092179091555050565b6106e08363a9059cbb60e01b84846040516024016106a9929190610a2d565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526106e5565b505050565b600061073a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166107749092919063ffffffff16565b8051909150156106e0578080602001905181019061075891906108e4565b6106e05760405162461bcd60e51b81526004016101d590610c94565b6060610783848460008561078b565b949350505050565b6060824710156107ad5760405162461bcd60e51b81526004016101d590610b87565b6107b68561084b565b6107d25760405162461bcd60e51b81526004016101d590610c5d565b600080866001600160a01b031685876040516107ee91906109bb565b60006040518083038185875af1925050503d806000811461082b576040519150601f19603f3d011682016040523d82523d6000602084013e610830565b606091505b5091509150610840828286610851565b979650505050505050565b3b151590565b6060831561086057508161055e565b8251156108705782518084602001fd5b8160405162461bcd60e51b81526004016101d59190610a5a565b80356001600160a01b038116811461052957600080fd5b6000602082840312156108b2578081fd5b61055e8261088a565b600080604083850312156108cd578081fd5b6108d68361088a565b946020939093013593505050565b6000602082840312156108f5578081fd5b8151801515811461055e578182fd5b600060208284031215610915578081fd5b5035919050565b600080600080600060808688031215610933578081fd5b853594506109436020870161088a565b935060408601359250606086013567ffffffffffffffff80821115610966578283fd5b818801915088601f830112610979578283fd5b813581811115610987578384fd5b896020808302850101111561099a578384fd5b9699959850939650602001949392505050565b918252602082015260400190565b600082516109cd818460208701610d29565b9190910192915050565b92835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b6000602082528251806020840152610a79816040850160208701610d29565b601f01601f19169190910160400192915050565b60208082526035908201527f596f75206d757374206265206e6f6d696e61746564206265666f726520796f7560408201527402063616e20616363657074206f776e65727368697605c1b606082015260800190565b6020808252603f908201527f4d65726b6c654469737472696275746f723a2043616e6e6f742077697468647260408201527f61772074686520746f6b656e206265666f726520756e6c6f636b2074696d6500606082015260800190565b60208082526028908201527f4d65726b6c654469737472696275746f723a2044726f7020616c72656164792060408201526731b630b4b6b2b21760c11b606082015260800190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b60208082526021908201527f4d65726b6c654469737472696275746f723a20496e76616c69642070726f6f666040820152601760f91b606082015260800190565b6020808252602f908201527f4f6e6c792074686520636f6e7472616374206f776e6572206d6179207065726660408201526e37b936903a3434b99030b1ba34b7b760891b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b9283526001600160a01b03919091166020830152604082015260600190565b60008219821115610d1057610d10610d88565b500190565b600082610d2457610d24610d9e565b500490565b60005b83811015610d44578181015183820152602001610d2c565b83811115610d53576000848401525b50505050565b6000600019821415610d6d57610d6d610d88565b5060010190565b600082610d8357610d83610d9e565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fdfea264697066735822122055c98485291541b68ddda53b38811e78aa5f1600f1679dbfcf963622ad6c521e64736f6c63430008000033000000000000000000000000daeada3d210d2f45874724beea03c7d4bbd416740000000000000000000000006123b0049f904d730db3c36a31167d9d4121fa6be173eda01b28c334c0265bf11a3fa3560c2c107c32d434b942391c448f8ade5b00000000000000000000000000000000000000000000000000000000000000c8
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061009e5760003560e01c806379ba50971161006657806379ba5097146101065780638980f11f1461010e5780638da5cb5b146101215780639e34070f14610129578063fc0c546a146101495761009e565b80631627540c146100a35780632e7ba6ef146100b85780632eb4a7ab146100cb57806353a47bb7146100e9578063634465e4146100fe575b600080fd5b6100b66100b13660046108a1565b610151565b005b6100b66100c636600461091c565b6101af565b6100d3610309565b6040516100e09190610a51565b60405180910390f35b6100f161032d565b6040516100e091906109ff565b6100d361033c565b6100b6610360565b6100b661011c3660046108bb565b6103fc565b6100f16104dc565b61013c610137366004610904565b6104eb565b6040516100e09190610a46565b6100f161052e565b610159610565565b600180546001600160a01b0319166001600160a01b0383161790556040517f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce22906101a49083906109ff565b60405180910390a150565b6101b8856104eb565b156101de5760405162461bcd60e51b81526004016101d590610b3f565b60405180910390fd5b60008585856040516020016101f5939291906109d7565b60405160208183030381529060405280519060200120905061026d8383808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152507fe173eda01b28c334c0265bf11a3fa3560c2c107c32d434b942391c448f8ade5b92508591506105919050565b6102895760405162461bcd60e51b81526004016101d590610bcd565b6102928661064c565b6102c66001600160a01b037f0000000000000000000000006123b0049f904d730db3c36a31167d9d4121fa6b16868661068a565b7f4ec90e965519d92681267467f775ada5bd214aa92c0dc93d90a5e880ce9ed0268686866040516102f993929190610cde565b60405180910390a1505050505050565b7fe173eda01b28c334c0265bf11a3fa3560c2c107c32d434b942391c448f8ade5b81565b6001546001600160a01b031681565b7f0000000000000000000000000000000000000000000000000000000061b368f781565b6001546001600160a01b0316331461038a5760405162461bcd60e51b81526004016101d590610a8d565b6000546001546040517fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c926103cd926001600160a01b0391821692911690610a13565b60405180910390a160018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b610404610565565b7f0000000000000000000000006123b0049f904d730db3c36a31167d9d4121fa6b6001600160a01b0316826001600160a01b031614610444576001610469565b7f0000000000000000000000000000000000000000000000000000000061b368f74210155b6104855760405162461bcd60e51b81526004016101d590610ae2565b60005461049f906001600160a01b0384811691168361068a565b7f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa2882826040516104d0929190610a2d565b60405180910390a15050565b6000546001600160a01b031681565b6000806104fa61010084610d15565b9050600061050a61010085610d74565b60009283526002602052604090922054600190921b9182169091149150505b919050565b7f0000000000000000000000006123b0049f904d730db3c36a31167d9d4121fa6b81565b600061055e8284610cfd565b9392505050565b6000546001600160a01b0316331461058f5760405162461bcd60e51b81526004016101d590610c0e565b565b600081815b85518110156106415760008682815181106105c157634e487b7160e01b600052603260045260246000fd5b602002602001015190508083116106025782816040516020016105e59291906109ad565b60405160208183030381529060405280519060200120925061062e565b80836040516020016106159291906109ad565b6040516020818303038152906040528051906020012092505b508061063981610d59565b915050610596565b509092149392505050565b600061065a61010083610d15565b9050600061066a61010084610d74565b6000928352600260205260409092208054600190931b9092179091555050565b6106e08363a9059cbb60e01b84846040516024016106a9929190610a2d565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526106e5565b505050565b600061073a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166107749092919063ffffffff16565b8051909150156106e0578080602001905181019061075891906108e4565b6106e05760405162461bcd60e51b81526004016101d590610c94565b6060610783848460008561078b565b949350505050565b6060824710156107ad5760405162461bcd60e51b81526004016101d590610b87565b6107b68561084b565b6107d25760405162461bcd60e51b81526004016101d590610c5d565b600080866001600160a01b031685876040516107ee91906109bb565b60006040518083038185875af1925050503d806000811461082b576040519150601f19603f3d011682016040523d82523d6000602084013e610830565b606091505b5091509150610840828286610851565b979650505050505050565b3b151590565b6060831561086057508161055e565b8251156108705782518084602001fd5b8160405162461bcd60e51b81526004016101d59190610a5a565b80356001600160a01b038116811461052957600080fd5b6000602082840312156108b2578081fd5b61055e8261088a565b600080604083850312156108cd578081fd5b6108d68361088a565b946020939093013593505050565b6000602082840312156108f5578081fd5b8151801515811461055e578182fd5b600060208284031215610915578081fd5b5035919050565b600080600080600060808688031215610933578081fd5b853594506109436020870161088a565b935060408601359250606086013567ffffffffffffffff80821115610966578283fd5b818801915088601f830112610979578283fd5b813581811115610987578384fd5b896020808302850101111561099a578384fd5b9699959850939650602001949392505050565b918252602082015260400190565b600082516109cd818460208701610d29565b9190910192915050565b92835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b6000602082528251806020840152610a79816040850160208701610d29565b601f01601f19169190910160400192915050565b60208082526035908201527f596f75206d757374206265206e6f6d696e61746564206265666f726520796f7560408201527402063616e20616363657074206f776e65727368697605c1b606082015260800190565b6020808252603f908201527f4d65726b6c654469737472696275746f723a2043616e6e6f742077697468647260408201527f61772074686520746f6b656e206265666f726520756e6c6f636b2074696d6500606082015260800190565b60208082526028908201527f4d65726b6c654469737472696275746f723a2044726f7020616c72656164792060408201526731b630b4b6b2b21760c11b606082015260800190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b60208082526021908201527f4d65726b6c654469737472696275746f723a20496e76616c69642070726f6f666040820152601760f91b606082015260800190565b6020808252602f908201527f4f6e6c792074686520636f6e7472616374206f776e6572206d6179207065726660408201526e37b936903a3434b99030b1ba34b7b760891b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b9283526001600160a01b03919091166020830152604082015260600190565b60008219821115610d1057610d10610d88565b500190565b600082610d2457610d24610d9e565b500490565b60005b83811015610d44578181015183820152602001610d2c565b83811115610d53576000848401525b50505050565b6000600019821415610d6d57610d6d610d88565b5060010190565b600082610d8357610d83610d9e565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fdfea264697066735822122055c98485291541b68ddda53b38811e78aa5f1600f1679dbfcf963622ad6c521e64736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000daeada3d210d2f45874724beea03c7d4bbd416740000000000000000000000006123b0049f904d730db3c36a31167d9d4121fa6be173eda01b28c334c0265bf11a3fa3560c2c107c32d434b942391c448f8ade5b00000000000000000000000000000000000000000000000000000000000000c8
-----Decoded View---------------
Arg [0] : _owner (address): 0xDAEada3d210D2f45874724BeEa03C7d4BBD41674
Arg [1] : _token (address): 0x6123B0049F904d730dB3C36a31167D9d4121fA6B
Arg [2] : _merkleRoot (bytes32): 0xe173eda01b28c334c0265bf11a3fa3560c2c107c32d434b942391c448f8ade5b
Arg [3] : _daysUntilUnlock (uint256): 200
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 000000000000000000000000daeada3d210d2f45874724beea03c7d4bbd41674
Arg [1] : 0000000000000000000000006123b0049f904d730db3c36a31167d9d4121fa6b
Arg [2] : e173eda01b28c334c0265bf11a3fa3560c2c107c32d434b942391c448f8ade5b
Arg [3] : 00000000000000000000000000000000000000000000000000000000000000c8
Deployed Bytecode Sourcemap
24906:2952:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24084:141;;;;;;:::i;:::-;;:::i;:::-;;26568:686;;;;;;:::i;:::-;;:::i;25083:44::-;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23860:29;;;:::i;:::-;;;;;;;:::i;25238:40::-;;;:::i;24233:308::-;;;:::i;27297:463::-;;;;;;:::i;:::-;;:::i;23833:20::-;;;:::i;25945:331::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;25037:39::-;;;:::i;24084:141::-;24579:12;:10;:12::i;:::-;24156:14:::1;:23:::0;;-1:-1:-1;;;;;;24156:23:0::1;-1:-1:-1::0;;;;;24156:23:0;::::1;;::::0;;24195:22:::1;::::0;::::1;::::0;::::1;::::0;24156:23;;24195:22:::1;:::i;:::-;;;;;;;;24084:141:::0;:::o;26568:686::-;26744:16;26754:5;26744:9;:16::i;:::-;26743:17;26735:70;;;;-1:-1:-1;;;26735:70:0;;;;;;;:::i;:::-;;;;;;;;;26855:12;26897:5;26904:7;26913:6;26880:40;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26870:51;;;;;;26855:66;;26954:49;26973:11;;26954:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26986:10:0;;-1:-1:-1;26998:4:0;;-1:-1:-1;26954:18:0;;-1:-1:-1;26954:49:0:i;:::-;26932:132;;;;-1:-1:-1;;;26932:132:0;;;;;;;:::i;:::-;27125:18;27137:5;27125:11;:18::i;:::-;27154:43;-1:-1:-1;;;;;27161:5:0;27154:26;27181:7;27190:6;27154:26;:43::i;:::-;27215:31;27223:5;27230:7;27239:6;27215:31;;;;;;;;:::i;:::-;;;;;;;;26568:686;;;;;;:::o;25083:44::-;;;:::o;23860:29::-;;;-1:-1:-1;;;;;23860:29:0;;:::o;25238:40::-;;;:::o;24233:308::-;24316:14;;-1:-1:-1;;;;;24316:14:0;24302:10;:28;24280:131;;;;-1:-1:-1;;;24280:131:0;;;;;;;:::i;:::-;24440:5;;;24447:14;24427:35;;;;;;-1:-1:-1;;;;;24440:5:0;;;;24447:14;;;24427:35;:::i;:::-;;;;;;;;24481:14;;;;24473:22;;-1:-1:-1;;;;;;24473:22:0;;;-1:-1:-1;;;;;24481:14:0;;24473:22;;;;24506:27;;;24233:308::o;27297:463::-;24579:12;:10;:12::i;:::-;27461:5:::1;-1:-1:-1::0;;;;;27437:30:0::1;:12;-1:-1:-1::0;;;;;27437:30:0::1;;:108;;27541:4;27437:108;;;27506:15;27487;:34;;27437:108;27415:221;;;;-1:-1:-1::0;;;27415:221:0::1;;;;;;;:::i;:::-;27681:5;::::0;27647:53:::1;::::0;-1:-1:-1;;;;;27647:33:0;;::::1;::::0;27681:5:::1;27688:11:::0;27647:33:::1;:53::i;:::-;27716:36;27726:12;27740:11;27716:36;;;;;;;:::i;:::-;;;;;;;;27297:463:::0;;:::o;23833:20::-;;;-1:-1:-1;;;;;23833:20:0;;:::o;25945:331::-;26009:4;;26053:11;26061:3;26053:5;:11;:::i;:::-;26026:38;-1:-1:-1;26075:23:0;26101:11;26109:3;26101:5;:11;:::i;:::-;26123:19;26145:31;;;:13;:31;;;;;;;26203:1;:20;;;26242:18;;;:26;;;;-1:-1:-1;;25945:331:0;;;;:::o;25037:39::-;;;:::o;5323:98::-;5381:7;5408:5;5412:1;5408;:5;:::i;:::-;5401:12;5323:98;-1:-1:-1;;;5323:98:0:o;24619:170::-;24701:5;;-1:-1:-1;;;;;24701:5:0;24687:10;:19;24665:116;;;;-1:-1:-1;;;24665:116:0;;;;;;;:::i;:::-;24619:170::o;10352:796::-;10443:4;10483;10443;10500:525;10524:5;:12;10520:1;:16;10500:525;;;10558:20;10581:5;10587:1;10581:8;;;;;;-1:-1:-1;;;10581:8:0;;;;;;;;;;;;;;;10558:31;;10626:12;10610;:28;10606:408;;10780:12;10794;10763:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10753:55;;;;;;10738:70;;10606:408;;;10970:12;10984;10953:44;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10943:55;;;;;;10928:70;;10606:408;-1:-1:-1;10538:3:0;;;;:::i;:::-;;;;10500:525;;;-1:-1:-1;11120:20:0;;;;10352:796;-1:-1:-1;;;10352:796:0:o;26284:276::-;26339:24;26366:11;26374:3;26366:5;:11;:::i;:::-;26339:38;-1:-1:-1;26388:23:0;26414:11;26422:3;26414:5;:11;:::i;:::-;26483:31;;;;:13;:31;;;;;;;;26531:1;:20;;;26483:69;;;26436:116;;;-1:-1:-1;;26284:276:0:o;20544:177::-;20627:86;20647:5;20677:23;;;20702:2;20706:5;20654:58;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;20654:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;20654:58:0;-1:-1:-1;;;;;;20654:58:0;;;;;;;;;;20627:19;:86::i;:::-;20544:177;;;:::o;22978:761::-;23402:23;23428:69;23456:4;23428:69;;;;;;;;;;;;;;;;;23436:5;-1:-1:-1;;;;;23428:27:0;;;:69;;;;;:::i;:::-;23512:17;;23402:95;;-1:-1:-1;23512:21:0;23508:224;;23654:10;23643:30;;;;;;;;;;;;:::i;:::-;23635:85;;;;-1:-1:-1;;;23635:85:0;;;;;;;:::i;15675:195::-;15778:12;15810:52;15832:6;15840:4;15846:1;15849:12;15810:21;:52::i;:::-;15803:59;15675:195;-1:-1:-1;;;;15675:195:0:o;16727:530::-;16854:12;16912:5;16887:21;:30;;16879:81;;;;-1:-1:-1;;;16879:81:0;;;;;;;:::i;:::-;16979:18;16990:6;16979:10;:18::i;:::-;16971:60;;;;-1:-1:-1;;;16971:60:0;;;;;;;:::i;:::-;17105:12;17119:23;17146:6;-1:-1:-1;;;;;17146:11:0;17166:5;17174:4;17146:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17104:75;;;;17197:52;17215:7;17224:10;17236:12;17197:17;:52::i;:::-;17190:59;16727:530;-1:-1:-1;;;;;;;16727:530:0:o;12757:422::-;13124:20;13163:8;;;12757:422::o;19267:742::-;19382:12;19411:7;19407:595;;;-1:-1:-1;19442:10:0;19435:17;;19407:595;19556:17;;:21;19552:439;;19819:10;19813:17;19880:15;19867:10;19863:2;19859:19;19852:44;19767:148;19962:12;19955:20;;-1:-1:-1;;;19955:20:0;;;;;;;;:::i;14:175:1:-;84:20;;-1:-1:-1;;;;;133:31:1;;123:42;;113:2;;179:1;176;169:12;194:198;;306:2;294:9;285:7;281:23;277:32;274:2;;;327:6;319;312:22;274:2;355:31;376:9;355:31;:::i;397:266::-;;;526:2;514:9;505:7;501:23;497:32;494:2;;;547:6;539;532:22;494:2;575:31;596:9;575:31;:::i;:::-;565:41;653:2;638:18;;;;625:32;;-1:-1:-1;;;484:179:1:o;668:297::-;;788:2;776:9;767:7;763:23;759:32;756:2;;;809:6;801;794:22;756:2;846:9;840:16;899:5;892:13;885:21;878:5;875:32;865:2;;926:6;918;911:22;970:190;;1082:2;1070:9;1061:7;1057:23;1053:32;1050:2;;;1103:6;1095;1088:22;1050:2;-1:-1:-1;1131:23:1;;1040:120;-1:-1:-1;1040:120:1:o;1165:879::-;;;;;;1363:3;1351:9;1342:7;1338:23;1334:33;1331:2;;;1385:6;1377;1370:22;1331:2;1426:9;1413:23;1403:33;;1455:40;1491:2;1480:9;1476:18;1455:40;:::i;:::-;1445:50;;1542:2;1531:9;1527:18;1514:32;1504:42;;1597:2;1586:9;1582:18;1569:32;1620:18;1661:2;1653:6;1650:14;1647:2;;;1682:6;1674;1667:22;1647:2;1725:6;1714:9;1710:22;1700:32;;1770:7;1763:4;1759:2;1755:13;1751:27;1741:2;;1797:6;1789;1782:22;1741:2;1842;1829:16;1868:2;1860:6;1857:14;1854:2;;;1889:6;1881;1874:22;1854:2;1948:7;1943:2;1937;1929:6;1925:15;1921:2;1917:24;1913:33;1910:46;1907:2;;;1974:6;1966;1959:22;1907:2;1321:723;;;;-1:-1:-1;1321:723:1;;-1:-1:-1;2010:2:1;2002:11;;2032:6;1321:723;-1:-1:-1;;;1321:723:1:o;2049:247::-;2206:19;;;2250:2;2241:12;;2234:28;2287:2;2278:12;;2196:100::o;2301:274::-;;2468:6;2462:13;2484:53;2530:6;2525:3;2518:4;2510:6;2506:17;2484:53;:::i;:::-;2553:16;;;;;2438:137;-1:-1:-1;;2438:137:1:o;2580:359::-;2765:19;;;2822:2;2818:15;;;;-1:-1:-1;;2814:53:1;2809:2;2800:12;;2793:75;2893:2;2884:12;;2877:28;2930:2;2921:12;;2755:184::o;2944:203::-;-1:-1:-1;;;;;3108:32:1;;;;3090:51;;3078:2;3063:18;;3045:102::o;3152:304::-;-1:-1:-1;;;;;3382:15:1;;;3364:34;;3434:15;;3429:2;3414:18;;3407:43;3314:2;3299:18;;3281:175::o;3461:274::-;-1:-1:-1;;;;;3653:32:1;;;;3635:51;;3717:2;3702:18;;3695:34;3623:2;3608:18;;3590:145::o;3740:187::-;3905:14;;3898:22;3880:41;;3868:2;3853:18;;3835:92::o;3932:177::-;4078:25;;;4066:2;4051:18;;4033:76::o;4114:383::-;;4263:2;4252:9;4245:21;4295:6;4289:13;4338:6;4333:2;4322:9;4318:18;4311:34;4354:66;4413:6;4408:2;4397:9;4393:18;4388:2;4380:6;4376:15;4354:66;:::i;:::-;4481:2;4460:15;-1:-1:-1;;4456:29:1;4441:45;;;;4488:2;4437:54;;4235:262;-1:-1:-1;;4235:262:1:o;4502:417::-;4704:2;4686:21;;;4743:2;4723:18;;;4716:30;4782:34;4777:2;4762:18;;4755:62;-1:-1:-1;;;4848:2:1;4833:18;;4826:51;4909:3;4894:19;;4676:243::o;4924:427::-;5126:2;5108:21;;;5165:2;5145:18;;;5138:30;5204:34;5199:2;5184:18;;5177:62;5275:33;5270:2;5255:18;;5248:61;5341:3;5326:19;;5098:253::o;5356:404::-;5558:2;5540:21;;;5597:2;5577:18;;;5570:30;5636:34;5631:2;5616:18;;5609:62;-1:-1:-1;;;5702:2:1;5687:18;;5680:38;5750:3;5735:19;;5530:230::o;5765:402::-;5967:2;5949:21;;;6006:2;5986:18;;;5979:30;6045:34;6040:2;6025:18;;6018:62;-1:-1:-1;;;6111:2:1;6096:18;;6089:36;6157:3;6142:19;;5939:228::o;6172:397::-;6374:2;6356:21;;;6413:2;6393:18;;;6386:30;6452:34;6447:2;6432:18;;6425:62;-1:-1:-1;;;6518:2:1;6503:18;;6496:31;6559:3;6544:19;;6346:223::o;6574:411::-;6776:2;6758:21;;;6815:2;6795:18;;;6788:30;6854:34;6849:2;6834:18;;6827:62;-1:-1:-1;;;6920:2:1;6905:18;;6898:45;6975:3;6960:19;;6748:237::o;6990:353::-;7192:2;7174:21;;;7231:2;7211:18;;;7204:30;7270:31;7265:2;7250:18;;7243:59;7334:2;7319:18;;7164:179::o;7348:406::-;7550:2;7532:21;;;7589:2;7569:18;;;7562:30;7628:34;7623:2;7608:18;;7601:62;-1:-1:-1;;;7694:2:1;7679:18;;7672:40;7744:3;7729:19;;7522:232::o;7941:345::-;8143:25;;;-1:-1:-1;;;;;8204:32:1;;;;8199:2;8184:18;;8177:60;8268:2;8253:18;;8246:34;8131:2;8116:18;;8098:188::o;8291:128::-;;8362:1;8358:6;8355:1;8352:13;8349:2;;;8368:18;;:::i;:::-;-1:-1:-1;8404:9:1;;8339:80::o;8424:120::-;;8490:1;8480:2;;8495:18;;:::i;:::-;-1:-1:-1;8529:9:1;;8470:74::o;8549:258::-;8621:1;8631:113;8645:6;8642:1;8639:13;8631:113;;;8721:11;;;8715:18;8702:11;;;8695:39;8667:2;8660:10;8631:113;;;8762:6;8759:1;8756:13;8753:2;;;8797:1;8788:6;8783:3;8779:16;8772:27;8753:2;;8602:205;;;:::o;8812:135::-;;-1:-1:-1;;8872:17:1;;8869:2;;;8892:18;;:::i;:::-;-1:-1:-1;8939:1:1;8928:13;;8859:88::o;8952:112::-;;9010:1;9000:2;;9015:18;;:::i;:::-;-1:-1:-1;9049:9:1;;8990:74::o;9069:127::-;9130:10;9125:3;9121:20;9118:1;9111:31;9161:4;9158:1;9151:15;9185:4;9182:1;9175:15;9201:127;9262:10;9257:3;9253:20;9250:1;9243:31;9293:4;9290:1;9283:15;9317:4;9314:1;9307:15
Swarm Source
ipfs://55c98485291541b68ddda53b38811e78aa5f1600f1679dbfcf963622ad6c521e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
POL | 100.00% | $0.017087 | 100 | $1.71 |
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.