Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0.173662811225354827 ETH
Eth Value
$690.07 (@ $3,973.61/ETH)More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 79 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim | 21402698 | 2 days ago | IN | 0 ETH | 0.00059787 | ||||
Claim | 21401693 | 2 days ago | IN | 0 ETH | 0.00068597 | ||||
Set Merkle Root | 21365695 | 7 days ago | IN | 0 ETH | 0.00128292 | ||||
Recieve | 21359684 | 8 days ago | IN | 0.1 ETH | 0.00025302 | ||||
Recieve | 21359678 | 8 days ago | IN | 0.01 ETH | 0.00025151 | ||||
Claim | 21161276 | 35 days ago | IN | 0 ETH | 0.00089874 | ||||
Claim | 21115984 | 42 days ago | IN | 0 ETH | 0.00043189 | ||||
Claim | 21048553 | 51 days ago | IN | 0 ETH | 0.00034756 | ||||
Claim | 21004373 | 57 days ago | IN | 0 ETH | 0.00044229 | ||||
Claim | 20965420 | 63 days ago | IN | 0 ETH | 0.00169825 | ||||
Set Merkle Root | 20954347 | 64 days ago | IN | 0 ETH | 0.00027402 | ||||
Claim | 20912480 | 70 days ago | IN | 0 ETH | 0.00065214 | ||||
Claim | 20789337 | 87 days ago | IN | 0 ETH | 0.00109061 | ||||
Claim | 20558022 | 120 days ago | IN | 0 ETH | 0.00007722 | ||||
Claim | 20549532 | 121 days ago | IN | 0 ETH | 0.00013094 | ||||
Claim | 20534417 | 123 days ago | IN | 0 ETH | 0.0002961 | ||||
Claim | 20519833 | 125 days ago | IN | 0 ETH | 0.00018097 | ||||
Claim | 20515978 | 126 days ago | IN | 0 ETH | 0.00016262 | ||||
Set Merkle Root | 20515960 | 126 days ago | IN | 0 ETH | 0.00010908 | ||||
Recieve | 20515936 | 126 days ago | IN | 0.391 ETH | 0.00006568 | ||||
Recieve | 20515931 | 126 days ago | IN | 0.01 ETH | 0.00006039 | ||||
Claim | 20442833 | 136 days ago | IN | 0 ETH | 0.00016605 | ||||
Claim | 20371648 | 146 days ago | IN | 0 ETH | 0.00013581 | ||||
Claim | 20371647 | 146 days ago | IN | 0 ETH | 0.00026968 | ||||
Claim | 20371133 | 146 days ago | IN | 0 ETH | 0.00031473 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
21402698 | 2 days ago | 0.00110238 ETH | ||||
21401693 | 2 days ago | 0.02584937 ETH | ||||
21161276 | 35 days ago | 0.03288824 ETH | ||||
21115984 | 42 days ago | 0.00142133 ETH | ||||
21048553 | 51 days ago | 0.00137477 ETH | ||||
21004373 | 57 days ago | 0.03246295 ETH | ||||
20965420 | 63 days ago | 0.08503132 ETH | ||||
20912480 | 70 days ago | 0.00287927 ETH | ||||
20789337 | 87 days ago | 0.06570254 ETH | ||||
20558022 | 120 days ago | 0.00283692 ETH | ||||
20549532 | 121 days ago | 0.12690076 ETH | ||||
20534417 | 123 days ago | 0.00285224 ETH | ||||
20519833 | 125 days ago | 0.002837 ETH | ||||
20515978 | 126 days ago | 0.0028387 ETH | ||||
20442833 | 136 days ago | 0.00083606 ETH | ||||
20371647 | 146 days ago | 0.00084322 ETH | ||||
20371133 | 146 days ago | 0.01925904 ETH | ||||
20363637 | 147 days ago | 0.00320003 ETH | ||||
20342288 | 150 days ago | 0.01931145 ETH | ||||
20297683 | 156 days ago | 0.00341183 ETH | ||||
20261009 | 161 days ago | 0.03737622 ETH | ||||
19966230 | 202 days ago | 0.01460964 ETH | ||||
19904855 | 211 days ago | 0.00479987 ETH | ||||
19892339 | 213 days ago | 0.07130784 ETH | ||||
19892332 | 213 days ago | 0.02890184 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Rewards
Compiler Version
v0.8.24+commit.e11b9ed9
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.19; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol"; /** * @title Rewards * @dev A contract for distributing ETH rewards from a merkle proof. */ contract Rewards is Ownable(msg.sender) { bytes32 public merkleRoot; //incremented for each new merkle root to reset isClaimed mapping uint256 public claimNonce; // Mapping of claimed status mapping(uint256 => mapping(address => bool)) public isClaimed; /** * @notice Sets the merkle root for the rewards claim. * @dev Only the contract owner can call this function. * @param root The new merkle root. */ function setMerkleRoot(bytes32 root) external onlyOwner { merkleRoot = root; claimNonce++; } /** * @notice Claims the allocated tokens for the specified staker. * @param amount The amount of eth being claimed. * @param merkleProof The merkle proof. */ function claim(uint256 amount, bytes32[] calldata merkleProof) external { require(!isClaimed[claimNonce][msg.sender], "Already claimed."); require (verifyMerkleProof(amount, merkleProof), "Invalid proof."); isClaimed[claimNonce][msg.sender] = true; //https://solidity-by-example.org/sending-ether/ (bool sent, ) = payable(msg.sender).call{ value: amount }(""); require(sent, "Failed to send Ether"); } /** * @notice Verifies the merkle proof. * @param amount The amount of eth being claimed. * @param proof The merkle proof. * @return A boolean value indicating the validity of the proof. */ function verifyMerkleProof(uint256 amount, bytes32[] calldata proof) internal view returns (bool) { bytes32 leaf = keccak256(abi.encodePacked(msg.sender, amount)); return MerkleProof.verify(proof, merkleRoot, leaf); } function withdraw() external onlyOwner { (bool sent,) = owner().call{ value: address(this).balance }(""); require(sent, "Failed to send Ether"); } /** * @notice To send ether to the contract. */ function recieve() external payable {} }
// 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 // 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; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","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":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"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":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recieve","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561000f575f80fd5b50338061003557604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61003e81610044565b50610093565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61071e806100a05f395ff3fe60806040526004361061008f575f3560e01c80638da5cb5b116100575780638da5cb5b14610123578063a5212d9a14610149578063a9e10bf2146100da578063d2ef07951461015e578063f2fde38b146101a7575f80fd5b80632eb4a7ab146100935780632f52ebb7146100bb5780633ccfd60b146100dc578063715018a6146100f05780637cb6475914610104575b5f80fd5b34801561009e575f80fd5b506100a860015481565b6040519081526020015b60405180910390f35b3480156100c6575f80fd5b506100da6100d53660046105c3565b6101c6565b005b3480156100e7575f80fd5b506100da610325565b3480156100fb575f80fd5b506100da6103c7565b34801561010f575f80fd5b506100da61011e36600461063b565b6103da565b34801561012e575f80fd5b505f546040516001600160a01b0390911681526020016100b2565b348015610154575f80fd5b506100a860025481565b348015610169575f80fd5b5061019761017836600461066d565b600360209081525f928352604080842090915290825290205460ff1681565b60405190151581526020016100b2565b3480156101b2575f80fd5b506100da6101c1366004610697565b6103fe565b6002545f90815260036020908152604080832033845290915290205460ff161561022a5760405162461bcd60e51b815260206004820152601060248201526f20b63932b0b23c9031b630b4b6b2b21760811b60448201526064015b60405180910390fd5b610235838383610438565b6102725760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b210383937b7b31760911b6044820152606401610221565b6002545f908152600360209081526040808320338085529252808320805460ff191660011790555185908381818185875af1925050503d805f81146102d2576040519150601f19603f3d011682016040523d82523d5f602084013e6102d7565b606091505b505090508061031f5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b6044820152606401610221565b50505050565b61032d6104c2565b5f80546040516001600160a01b039091169047908381818185875af1925050503d805f8114610377576040519150601f19603f3d011682016040523d82523d5f602084013e61037c565b606091505b50509050806103c45760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b6044820152606401610221565b50565b6103cf6104c2565b6103d85f6104ee565b565b6103e26104c2565b600181905560028054905f6103f6836106b0565b919050555050565b6104066104c2565b6001600160a01b03811661042f57604051631e4fbdf760e01b81525f6004820152602401610221565b6103c4816104ee565b6040516bffffffffffffffffffffffff193360601b166020820152603481018490525f9081906054016040516020818303038152906040528051906020012090506104b98484808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050600154915084905061053d565b95945050505050565b5f546001600160a01b031633146103d85760405163118cdaa760e01b8152336004820152602401610221565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f826105498584610552565b14949350505050565b5f81815b845181101561058c5761058282868381518110610575576105756106d4565b6020026020010151610594565b9150600101610556565b509392505050565b5f8183106105ae575f8281526020849052604090206105bc565b5f8381526020839052604090205b9392505050565b5f805f604084860312156105d5575f80fd5b83359250602084013567ffffffffffffffff808211156105f3575f80fd5b818601915086601f830112610606575f80fd5b813581811115610614575f80fd5b8760208260051b8501011115610628575f80fd5b6020830194508093505050509250925092565b5f6020828403121561064b575f80fd5b5035919050565b80356001600160a01b0381168114610668575f80fd5b919050565b5f806040838503121561067e575f80fd5b8235915061068e60208401610652565b90509250929050565b5f602082840312156106a7575f80fd5b6105bc82610652565b5f600182016106cd57634e487b7160e01b5f52601160045260245ffd5b5060010190565b634e487b7160e01b5f52603260045260245ffdfea264697066735822122021e9788ed8eb778b9a12d0ea81a01eecb7940800a9b64df1d7a7c6d11227f1a364736f6c63430008180033
Deployed Bytecode
0x60806040526004361061008f575f3560e01c80638da5cb5b116100575780638da5cb5b14610123578063a5212d9a14610149578063a9e10bf2146100da578063d2ef07951461015e578063f2fde38b146101a7575f80fd5b80632eb4a7ab146100935780632f52ebb7146100bb5780633ccfd60b146100dc578063715018a6146100f05780637cb6475914610104575b5f80fd5b34801561009e575f80fd5b506100a860015481565b6040519081526020015b60405180910390f35b3480156100c6575f80fd5b506100da6100d53660046105c3565b6101c6565b005b3480156100e7575f80fd5b506100da610325565b3480156100fb575f80fd5b506100da6103c7565b34801561010f575f80fd5b506100da61011e36600461063b565b6103da565b34801561012e575f80fd5b505f546040516001600160a01b0390911681526020016100b2565b348015610154575f80fd5b506100a860025481565b348015610169575f80fd5b5061019761017836600461066d565b600360209081525f928352604080842090915290825290205460ff1681565b60405190151581526020016100b2565b3480156101b2575f80fd5b506100da6101c1366004610697565b6103fe565b6002545f90815260036020908152604080832033845290915290205460ff161561022a5760405162461bcd60e51b815260206004820152601060248201526f20b63932b0b23c9031b630b4b6b2b21760811b60448201526064015b60405180910390fd5b610235838383610438565b6102725760405162461bcd60e51b815260206004820152600e60248201526d24b73b30b634b210383937b7b31760911b6044820152606401610221565b6002545f908152600360209081526040808320338085529252808320805460ff191660011790555185908381818185875af1925050503d805f81146102d2576040519150601f19603f3d011682016040523d82523d5f602084013e6102d7565b606091505b505090508061031f5760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b6044820152606401610221565b50505050565b61032d6104c2565b5f80546040516001600160a01b039091169047908381818185875af1925050503d805f8114610377576040519150601f19603f3d011682016040523d82523d5f602084013e61037c565b606091505b50509050806103c45760405162461bcd60e51b81526020600482015260146024820152732330b4b632b2103a379039b2b7321022ba3432b960611b6044820152606401610221565b50565b6103cf6104c2565b6103d85f6104ee565b565b6103e26104c2565b600181905560028054905f6103f6836106b0565b919050555050565b6104066104c2565b6001600160a01b03811661042f57604051631e4fbdf760e01b81525f6004820152602401610221565b6103c4816104ee565b6040516bffffffffffffffffffffffff193360601b166020820152603481018490525f9081906054016040516020818303038152906040528051906020012090506104b98484808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050600154915084905061053d565b95945050505050565b5f546001600160a01b031633146103d85760405163118cdaa760e01b8152336004820152602401610221565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f826105498584610552565b14949350505050565b5f81815b845181101561058c5761058282868381518110610575576105756106d4565b6020026020010151610594565b9150600101610556565b509392505050565b5f8183106105ae575f8281526020849052604090206105bc565b5f8381526020839052604090205b9392505050565b5f805f604084860312156105d5575f80fd5b83359250602084013567ffffffffffffffff808211156105f3575f80fd5b818601915086601f830112610606575f80fd5b813581811115610614575f80fd5b8760208260051b8501011115610628575f80fd5b6020830194508093505050509250925092565b5f6020828403121561064b575f80fd5b5035919050565b80356001600160a01b0381168114610668575f80fd5b919050565b5f806040838503121561067e575f80fd5b8235915061068e60208401610652565b90509250929050565b5f602082840312156106a7575f80fd5b6105bc82610652565b5f600182016106cd57634e487b7160e01b5f52601160045260245ffd5b5060010190565b634e487b7160e01b5f52603260045260245ffdfea264697066735822122021e9788ed8eb778b9a12d0ea81a01eecb7940800a9b64df1d7a7c6d11227f1a364736f6c63430008180033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,973.61 | 0.1737 | $690.07 |
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.