More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 784 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim Airdrop | 19818345 | 105 days ago | IN | 0 ETH | 0.00132037 | ||||
Claim Airdrop | 19619545 | 133 days ago | IN | 0 ETH | 0.00585356 | ||||
Claim Airdrop | 19495712 | 150 days ago | IN | 0 ETH | 0.00186429 | ||||
Claim Airdrop | 19430436 | 159 days ago | IN | 0 ETH | 0.00460814 | ||||
Claim Airdrop | 19420530 | 161 days ago | IN | 0 ETH | 0.00961408 | ||||
Claim Airdrop | 19381338 | 166 days ago | IN | 0 ETH | 0.00561099 | ||||
Claim Airdrop | 19374816 | 167 days ago | IN | 0 ETH | 0.00608035 | ||||
Claim Airdrop | 19364193 | 169 days ago | IN | 0 ETH | 0.00897238 | ||||
Claim Airdrop | 19352349 | 170 days ago | IN | 0 ETH | 0.00365928 | ||||
Claim Airdrop | 19344689 | 171 days ago | IN | 0 ETH | 0.00416377 | ||||
Claim Airdrop | 19341711 | 172 days ago | IN | 0 ETH | 0.00588792 | ||||
Claim Airdrop | 19340257 | 172 days ago | IN | 0 ETH | 0.00580807 | ||||
Claim Airdrop | 19339011 | 172 days ago | IN | 0 ETH | 0.00442379 | ||||
Claim Airdrop | 19338840 | 172 days ago | IN | 0 ETH | 0.00438811 | ||||
Claim Airdrop | 19338631 | 172 days ago | IN | 0 ETH | 0.00384239 | ||||
Claim Airdrop | 19337536 | 172 days ago | IN | 0 ETH | 0.00383245 | ||||
Claim Airdrop | 19332106 | 173 days ago | IN | 0 ETH | 0.00802013 | ||||
Claim Airdrop | 19332087 | 173 days ago | IN | 0 ETH | 0.00575583 | ||||
Claim Airdrop | 19330716 | 173 days ago | IN | 0 ETH | 0.00544895 | ||||
Claim Airdrop | 19326578 | 174 days ago | IN | 0 ETH | 0.00746753 | ||||
Claim Airdrop | 19325401 | 174 days ago | IN | 0 ETH | 0.00531212 | ||||
Claim Airdrop | 19325367 | 174 days ago | IN | 0 ETH | 0.00536006 | ||||
Claim Airdrop | 19324740 | 174 days ago | IN | 0 ETH | 0.00357447 | ||||
Claim Airdrop | 19324693 | 174 days ago | IN | 0 ETH | 0.00392906 | ||||
Claim Airdrop | 19323301 | 174 days ago | IN | 0 ETH | 0.00440266 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Box
Compiler Version
v0.8.23+commit.f704f362
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {MerkleProof} from "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol"; import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol"; import {IERC404} from "erc404/interfaces/IERC404.sol"; import {IBox} from "../interfaces/IBox.sol"; contract Box is Ownable, IBox { mapping(address => bytes32) public merkleRoots; mapping(address => mapping(address => uint256)) public claimedValue; error InvalidProof(); error ValueTooLarge(); constructor(address owner_) Ownable(owner_) {} function verifyProof( bytes32[] memory proof_, address claimer_, uint256 totalValue_, address airdrop_ ) public view returns (bool) { bytes32 leaf = keccak256( bytes.concat(keccak256(abi.encode(claimer_, totalValue_))) ); if (MerkleProof.verify(proof_, merkleRoots[airdrop_], leaf)) { return true; } return false; } function claimAirdrop( bytes32[] memory proof_, address claimer_, uint256 totalValue_, address airdrop_, uint256 value_ ) public override { if (!verifyProof(proof_, claimer_, totalValue_, airdrop_)) { revert InvalidProof(); } uint256 valueLeft = totalValue_ - claimedValue[claimer_][airdrop_]; if (value_ > valueLeft) { revert ValueTooLarge(); } claimedValue[claimer_][airdrop_] += value_; IERC404(airdrop_).transfer(claimer_, value_); } function claimAirdropBatch( bytes32[][] memory proofs_, address[] memory claimers_, uint256[] memory totalValues_, address[] memory airdrops_, uint256[] memory values_ ) public override { for (uint256 i = 0; i < proofs_.length; i++) { claimAirdrop( proofs_[i], claimers_[i], totalValues_[i], airdrops_[i], values_[i] ); } } function setMerkleRoot(address airdrop_, bytes32 root_) public onlyOwner { merkleRoots[airdrop_] = root_; } function setExempt(address target_, bool state_) public onlyOwner { IERC404(target_).setSelfERC721TransferExempt(state_); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.20; /** * @dev These functions deal with verification of Merkle Tree proofs. * * The tree and the proofs can be generated using our * https://github.com/OpenZeppelin/merkle-tree[JavaScript library]. * You will find a quickstart guide in the readme. * * 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. * OpenZeppelin's JavaScript library generates Merkle trees that are safe * against this attack out of the box. */ library MerkleProof { /** *@dev The multiproof provided is not valid. */ error MerkleProofInvalidMultiproof(); /** * @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 Calldata version of {verify} */ function verifyCalldata(bytes32[] calldata proof, bytes32 root, bytes32 leaf) internal pure returns (bool) { return processProofCalldata(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. */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } /** * @dev Calldata version of {processProof} */ function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } /** * @dev Returns true if the `leaves` can be simultaneously proven to be a part of a Merkle tree defined by * `root`, according to `proof` and `proofFlags` as described in {processMultiProof}. * * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details. */ function multiProofVerify( bytes32[] memory proof, bool[] memory proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProof(proof, proofFlags, leaves) == root; } /** * @dev Calldata version of {multiProofVerify} * * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details. */ function multiProofVerifyCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32 root, bytes32[] memory leaves ) internal pure returns (bool) { return processMultiProofCalldata(proof, proofFlags, leaves) == root; } /** * @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction * proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another * leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false * respectively. * * CAUTION: Not all Merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree * is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the * tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer). */ function processMultiProof( bytes32[] memory proof, bool[] memory proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the Merkle tree. uint256 leavesLen = leaves.length; uint256 proofLen = proof.length; uint256 totalHashes = proofFlags.length; // Check proof validity. if (leavesLen + proofLen != totalHashes + 1) { revert MerkleProofInvalidMultiproof(); } // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]) : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { if (proofPos != proofLen) { revert MerkleProofInvalidMultiproof(); } unchecked { return hashes[totalHashes - 1]; } } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } /** * @dev Calldata version of {processMultiProof}. * * CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details. */ function processMultiProofCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the Merkle tree. uint256 leavesLen = leaves.length; uint256 proofLen = proof.length; uint256 totalHashes = proofFlags.length; // Check proof validity. if (leavesLen + proofLen != totalHashes + 1) { revert MerkleProofInvalidMultiproof(); } // The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using // `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop". bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; // At each step, we compute the next hash using two values: // - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we // get the next hash. // - depending on the flag, either another value from the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]) : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { if (proofPos != proofLen) { revert MerkleProofInvalidMultiproof(); } unchecked { return hashes[totalHashes - 1]; } } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } /** * @dev Sorts the pair (a, b) and hashes the result. */ function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) { return a < b ? _efficientHash(a, b) : _efficientHash(b, a); } /** * @dev Implementation of keccak256(abi.encode(a, b)) that doesn't allocate or expand memory. */ function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { /// @solidity memory-safe-assembly assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; import {Context} from "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
//SPDX-License-Identifier: MIT pragma solidity ^0.8.20; import {IERC165} from "@openzeppelin/contracts/interfaces/IERC165.sol"; interface IERC404 is IERC165 { error NotFound(); error InvalidTokenId(); error AlreadyExists(); error InvalidRecipient(); error InvalidSender(); error InvalidSpender(); error InvalidOperator(); error UnsafeRecipient(); error RecipientIsERC721TransferExempt(); error Unauthorized(); error InsufficientAllowance(); error DecimalsTooLow(); error PermitDeadlineExpired(); error InvalidSigner(); error InvalidApproval(); error OwnedIndexOverflow(); error MintLimitReached(); error InvalidExemption(); function name() external view returns (string memory); function symbol() external view returns (string memory); function decimals() external view returns (uint8); function totalSupply() external view returns (uint256); function erc20TotalSupply() external view returns (uint256); function erc721TotalSupply() external view returns (uint256); function balanceOf(address owner_) external view returns (uint256); function erc721BalanceOf(address owner_) external view returns (uint256); function erc20BalanceOf(address owner_) external view returns (uint256); function erc721TransferExempt(address account_) external view returns (bool); function isApprovedForAll( address owner_, address operator_ ) external view returns (bool); function allowance( address owner_, address spender_ ) external view returns (uint256); function owned(address owner_) external view returns (uint256[] memory); function ownerOf(uint256 id_) external view returns (address erc721Owner); function tokenURI(uint256 id_) external view returns (string memory); function approve( address spender_, uint256 valueOrId_ ) external returns (bool); function erc20Approve( address spender_, uint256 value_ ) external returns (bool); function erc721Approve(address spender_, uint256 id_) external; function setApprovalForAll(address operator_, bool approved_) external; function transferFrom( address from_, address to_, uint256 valueOrId_ ) external returns (bool); function erc20TransferFrom( address from_, address to_, uint256 value_ ) external returns (bool); function erc721TransferFrom(address from_, address to_, uint256 id_) external; function transfer(address to_, uint256 amount_) external returns (bool); function getERC721QueueLength() external view returns (uint256); function getERC721TokensInQueue( uint256 start_, uint256 count_ ) external view returns (uint256[] memory); function setSelfERC721TransferExempt(bool state_) external; function safeTransferFrom(address from_, address to_, uint256 id_) external; function safeTransferFrom( address from_, address to_, uint256 id_, bytes calldata data_ ) external; function DOMAIN_SEPARATOR() external view returns (bytes32); function permit( address owner_, address spender_, uint256 value_, uint256 deadline_, uint8 v_, bytes32 r_, bytes32 s_ ) external; }
//SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IBox { function claimAirdrop( bytes32[] memory proof_, address claimer_, uint256 totalValue_, address airdrop_, uint256 value_ ) external; function claimAirdropBatch( bytes32[][] memory proofs_, address[] memory claimers_, uint256[] memory totalValues_, address[] memory airdrops_, uint256[] memory values_ ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC165.sol) pragma solidity ^0.8.20; import {IERC165} from "../utils/introspection/IERC165.sol";
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "remappings": [ "@openzeppelin/=lib/openzeppelin-contracts/", "murky/=lib/murky/src/", "forge-std/=lib/forge-std/src/", "erc404/=lib/erc404/contracts/", "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", "ds-test/=lib/forge-std/lib/ds-test/src/", "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/", "openzeppelin-contracts/=lib/openzeppelin-contracts/" ], "optimizer": { "enabled": true, "runs": 200 }, "metadata": { "useLiteralContent": false, "bytecodeHash": "ipfs", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "paris", "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidProof","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ValueTooLarge","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"bytes32[]","name":"proof_","type":"bytes32[]"},{"internalType":"address","name":"claimer_","type":"address"},{"internalType":"uint256","name":"totalValue_","type":"uint256"},{"internalType":"address","name":"airdrop_","type":"address"},{"internalType":"uint256","name":"value_","type":"uint256"}],"name":"claimAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[][]","name":"proofs_","type":"bytes32[][]"},{"internalType":"address[]","name":"claimers_","type":"address[]"},{"internalType":"uint256[]","name":"totalValues_","type":"uint256[]"},{"internalType":"address[]","name":"airdrops_","type":"address[]"},{"internalType":"uint256[]","name":"values_","type":"uint256[]"}],"name":"claimAirdropBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"claimedValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"merkleRoots","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target_","type":"address"},{"internalType":"bool","name":"state_","type":"bool"}],"name":"setExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"airdrop_","type":"address"},{"internalType":"bytes32","name":"root_","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof_","type":"bytes32[]"},{"internalType":"address","name":"claimer_","type":"address"},{"internalType":"uint256","name":"totalValue_","type":"uint256"},{"internalType":"address","name":"airdrop_","type":"address"}],"name":"verifyProof","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50604051610bf0380380610bf083398101604081905261002f916100be565b806001600160a01b03811661005e57604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b6100678161006e565b50506100ee565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100d057600080fd5b81516001600160a01b03811681146100e757600080fd5b9392505050565b610af3806100fd6000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c8063ab6defe211610066578063ab6defe21461012c578063ae9a68081461014f578063db663cec1461016f578063f2e0bf1e14610182578063f2fde38b1461019557600080fd5b8063430aa196146100a3578063715018a6146100b85780638cd9b792146100c05780638da5cb5b146100fe5780639fde54f514610119575b600080fd5b6100b66100b13660046107e7565b6101a8565b005b6100b661024e565b6100eb6100ce3660046108b9565b600260209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6000546040516001600160a01b0390911681526020016100f5565b6100b66101273660046108fa565b610262565b61013f61013a366004610931565b6102c1565b60405190151581526020016100f5565b6100eb61015d366004610999565b60016020526000908152604090205481565b6100b661017d3660046109b4565b610364565b6100b6610190366004610a24565b61049a565b6100b66101a3366004610999565b6104be565b60005b85518110156102465761023e8682815181106101c9576101c9610a4e565b60200260200101518683815181106101e3576101e3610a4e565b60200260200101518684815181106101fd576101fd610a4e565b602002602001015186858151811061021757610217610a4e565b602002602001015186868151811061023157610231610a4e565b6020026020010151610364565b6001016101ab565b505050505050565b610256610501565b610260600061052e565b565b61026a610501565b6040516308a696e560e41b815281151560048201526001600160a01b03831690638a696e5090602401600060405180830381600087803b1580156102ad57600080fd5b505af1158015610246573d6000803e3d6000fd5b604080516001600160a01b0385166020820152908101839052600090819060600160408051601f19818403018152828252805160209182012090830152016040516020818303038152906040528051906020012090506103478660016000866001600160a01b03166001600160a01b03168152602001908152602001600020548361057e565b1561035657600191505061035c565b60009150505b949350505050565b610370858585856102c1565b61038d576040516309bde33960e01b815260040160405180910390fd5b6001600160a01b0380851660009081526002602090815260408083209386168352929052908120546103bf9085610a7a565b9050808211156103e257604051632ad907fb60e01b815260040160405180910390fd5b6001600160a01b03808616600090815260026020908152604080832093871683529290529081208054849290610419908490610a8d565b909155505060405163a9059cbb60e01b81526001600160a01b0386811660048301526024820184905284169063a9059cbb906044016020604051808303816000875af115801561046d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104919190610aa0565b50505050505050565b6104a2610501565b6001600160a01b03909116600090815260016020526040902055565b6104c6610501565b6001600160a01b0381166104f557604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6104fe8161052e565b50565b6000546001600160a01b031633146102605760405163118cdaa760e01b81523360048201526024016104ec565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008261058b8584610594565b14949350505050565b600081815b84518110156105cf576105c5828683815181106105b8576105b8610a4e565b60200260200101516105d9565b9150600101610599565b5090505b92915050565b60008183106105f5576000828152602084905260409020610604565b60008381526020839052604090205b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561064a5761064a61060b565b604052919050565b600067ffffffffffffffff82111561066c5761066c61060b565b5060051b60200190565b600082601f83011261068757600080fd5b8135602061069c61069783610652565b610621565b8083825260208201915060208460051b8701019350868411156106be57600080fd5b602086015b848110156106da57803583529183019183016106c3565b509695505050505050565b600082601f8301126106f657600080fd5b8135602061070661069783610652565b82815260059290921b8401810191818101908684111561072557600080fd5b8286015b848110156106da57803567ffffffffffffffff8111156107495760008081fd5b6107578986838b0101610676565b845250918301918301610729565b80356001600160a01b038116811461077c57600080fd5b919050565b600082601f83011261079257600080fd5b813560206107a261069783610652565b8083825260208201915060208460051b8701019350868411156107c457600080fd5b602086015b848110156106da576107da81610765565b83529183019183016107c9565b600080600080600060a086880312156107ff57600080fd5b853567ffffffffffffffff8082111561081757600080fd5b61082389838a016106e5565b9650602088013591508082111561083957600080fd5b61084589838a01610781565b9550604088013591508082111561085b57600080fd5b61086789838a01610676565b9450606088013591508082111561087d57600080fd5b61088989838a01610781565b9350608088013591508082111561089f57600080fd5b506108ac88828901610676565b9150509295509295909350565b600080604083850312156108cc57600080fd5b6108d583610765565b91506108e360208401610765565b90509250929050565b80151581146104fe57600080fd5b6000806040838503121561090d57600080fd5b61091683610765565b91506020830135610926816108ec565b809150509250929050565b6000806000806080858703121561094757600080fd5b843567ffffffffffffffff81111561095e57600080fd5b61096a87828801610676565b94505061097960208601610765565b92506040850135915061098e60608601610765565b905092959194509250565b6000602082840312156109ab57600080fd5b61060482610765565b600080600080600060a086880312156109cc57600080fd5b853567ffffffffffffffff8111156109e357600080fd5b6109ef88828901610676565b9550506109fe60208701610765565b935060408601359250610a1360608701610765565b949793965091946080013592915050565b60008060408385031215610a3757600080fd5b610a4083610765565b946020939093013593505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156105d3576105d3610a64565b808201808211156105d3576105d3610a64565b600060208284031215610ab257600080fd5b8151610604816108ec56fea264697066735822122047212ba144fcb0e5ddca86ad1cd3ad7b6cef0ea43fcf2cda9861376f6054ed5164736f6c63430008170033000000000000000000000000508894abc5905ebe8c5b6d6ecaa0fe24bb63ab0b
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061009e5760003560e01c8063ab6defe211610066578063ab6defe21461012c578063ae9a68081461014f578063db663cec1461016f578063f2e0bf1e14610182578063f2fde38b1461019557600080fd5b8063430aa196146100a3578063715018a6146100b85780638cd9b792146100c05780638da5cb5b146100fe5780639fde54f514610119575b600080fd5b6100b66100b13660046107e7565b6101a8565b005b6100b661024e565b6100eb6100ce3660046108b9565b600260209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6000546040516001600160a01b0390911681526020016100f5565b6100b66101273660046108fa565b610262565b61013f61013a366004610931565b6102c1565b60405190151581526020016100f5565b6100eb61015d366004610999565b60016020526000908152604090205481565b6100b661017d3660046109b4565b610364565b6100b6610190366004610a24565b61049a565b6100b66101a3366004610999565b6104be565b60005b85518110156102465761023e8682815181106101c9576101c9610a4e565b60200260200101518683815181106101e3576101e3610a4e565b60200260200101518684815181106101fd576101fd610a4e565b602002602001015186858151811061021757610217610a4e565b602002602001015186868151811061023157610231610a4e565b6020026020010151610364565b6001016101ab565b505050505050565b610256610501565b610260600061052e565b565b61026a610501565b6040516308a696e560e41b815281151560048201526001600160a01b03831690638a696e5090602401600060405180830381600087803b1580156102ad57600080fd5b505af1158015610246573d6000803e3d6000fd5b604080516001600160a01b0385166020820152908101839052600090819060600160408051601f19818403018152828252805160209182012090830152016040516020818303038152906040528051906020012090506103478660016000866001600160a01b03166001600160a01b03168152602001908152602001600020548361057e565b1561035657600191505061035c565b60009150505b949350505050565b610370858585856102c1565b61038d576040516309bde33960e01b815260040160405180910390fd5b6001600160a01b0380851660009081526002602090815260408083209386168352929052908120546103bf9085610a7a565b9050808211156103e257604051632ad907fb60e01b815260040160405180910390fd5b6001600160a01b03808616600090815260026020908152604080832093871683529290529081208054849290610419908490610a8d565b909155505060405163a9059cbb60e01b81526001600160a01b0386811660048301526024820184905284169063a9059cbb906044016020604051808303816000875af115801561046d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104919190610aa0565b50505050505050565b6104a2610501565b6001600160a01b03909116600090815260016020526040902055565b6104c6610501565b6001600160a01b0381166104f557604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6104fe8161052e565b50565b6000546001600160a01b031633146102605760405163118cdaa760e01b81523360048201526024016104ec565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008261058b8584610594565b14949350505050565b600081815b84518110156105cf576105c5828683815181106105b8576105b8610a4e565b60200260200101516105d9565b9150600101610599565b5090505b92915050565b60008183106105f5576000828152602084905260409020610604565b60008381526020839052604090205b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561064a5761064a61060b565b604052919050565b600067ffffffffffffffff82111561066c5761066c61060b565b5060051b60200190565b600082601f83011261068757600080fd5b8135602061069c61069783610652565b610621565b8083825260208201915060208460051b8701019350868411156106be57600080fd5b602086015b848110156106da57803583529183019183016106c3565b509695505050505050565b600082601f8301126106f657600080fd5b8135602061070661069783610652565b82815260059290921b8401810191818101908684111561072557600080fd5b8286015b848110156106da57803567ffffffffffffffff8111156107495760008081fd5b6107578986838b0101610676565b845250918301918301610729565b80356001600160a01b038116811461077c57600080fd5b919050565b600082601f83011261079257600080fd5b813560206107a261069783610652565b8083825260208201915060208460051b8701019350868411156107c457600080fd5b602086015b848110156106da576107da81610765565b83529183019183016107c9565b600080600080600060a086880312156107ff57600080fd5b853567ffffffffffffffff8082111561081757600080fd5b61082389838a016106e5565b9650602088013591508082111561083957600080fd5b61084589838a01610781565b9550604088013591508082111561085b57600080fd5b61086789838a01610676565b9450606088013591508082111561087d57600080fd5b61088989838a01610781565b9350608088013591508082111561089f57600080fd5b506108ac88828901610676565b9150509295509295909350565b600080604083850312156108cc57600080fd5b6108d583610765565b91506108e360208401610765565b90509250929050565b80151581146104fe57600080fd5b6000806040838503121561090d57600080fd5b61091683610765565b91506020830135610926816108ec565b809150509250929050565b6000806000806080858703121561094757600080fd5b843567ffffffffffffffff81111561095e57600080fd5b61096a87828801610676565b94505061097960208601610765565b92506040850135915061098e60608601610765565b905092959194509250565b6000602082840312156109ab57600080fd5b61060482610765565b600080600080600060a086880312156109cc57600080fd5b853567ffffffffffffffff8111156109e357600080fd5b6109ef88828901610676565b9550506109fe60208701610765565b935060408601359250610a1360608701610765565b949793965091946080013592915050565b60008060408385031215610a3757600080fd5b610a4083610765565b946020939093013593505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b818103818111156105d3576105d3610a64565b808201808211156105d3576105d3610a64565b600060208284031215610ab257600080fd5b8151610604816108ec56fea264697066735822122047212ba144fcb0e5ddca86ad1cd3ad7b6cef0ea43fcf2cda9861376f6054ed5164736f6c63430008170033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000508894abc5905ebe8c5b6d6ecaa0fe24bb63ab0b
-----Decoded View---------------
Arg [0] : owner_ (address): 0x508894ABC5905eBE8c5B6D6EcaA0Fe24Bb63aB0b
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000508894abc5905ebe8c5b6d6ecaa0fe24bb63ab0b
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $61.27 | 231.8909 | $14,207.17 |
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.