Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 169 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Batch Withdraw | 21368265 | 14 days ago | IN | 0 ETH | 0.00213848 | ||||
Batch Withdraw | 21339045 | 18 days ago | IN | 0 ETH | 0.00191566 | ||||
Batch Withdraw | 21292977 | 24 days ago | IN | 0 ETH | 0.00057846 | ||||
Batch Withdraw | 21270651 | 27 days ago | IN | 0 ETH | 0.00067354 | ||||
Batch Withdraw | 21270624 | 27 days ago | IN | 0 ETH | 0.00070511 | ||||
Batch Withdraw | 21270560 | 27 days ago | IN | 0 ETH | 0.00053914 | ||||
Batch Withdraw | 21270248 | 27 days ago | IN | 0 ETH | 0.00070106 | ||||
Batch Withdraw | 21269694 | 27 days ago | IN | 0 ETH | 0.00042445 | ||||
Batch Withdraw | 21268421 | 28 days ago | IN | 0 ETH | 0.0004981 | ||||
Batch Withdraw | 21256727 | 29 days ago | IN | 0 ETH | 0.00062301 | ||||
Batch Withdraw | 21239857 | 32 days ago | IN | 0 ETH | 0.00090728 | ||||
Batch Withdraw | 21235778 | 32 days ago | IN | 0 ETH | 0.00068662 | ||||
Batch Withdraw | 21216378 | 35 days ago | IN | 0 ETH | 0.00123077 | ||||
Batch Withdraw | 21156888 | 43 days ago | IN | 0 ETH | 0.00070929 | ||||
Batch Withdraw | 21149687 | 44 days ago | IN | 0 ETH | 0.00081584 | ||||
Batch Withdraw | 21127797 | 47 days ago | IN | 0 ETH | 0.00079543 | ||||
Batch Withdraw | 21126911 | 47 days ago | IN | 0 ETH | 0.0019034 | ||||
Batch Withdraw | 21123267 | 48 days ago | IN | 0 ETH | 0.00150048 | ||||
Batch Withdraw | 21115686 | 49 days ago | IN | 0 ETH | 0.00050344 | ||||
Batch Withdraw | 21113333 | 49 days ago | IN | 0 ETH | 0.00022751 | ||||
Batch Withdraw | 21101141 | 51 days ago | IN | 0 ETH | 0.0020976 | ||||
Batch Withdraw | 21092690 | 52 days ago | IN | 0 ETH | 0.00030617 | ||||
Batch Withdraw | 21091739 | 52 days ago | IN | 0 ETH | 0.0003489 | ||||
Batch Withdraw | 21082606 | 54 days ago | IN | 0 ETH | 0.00048552 | ||||
Batch Withdraw | 21076706 | 54 days ago | IN | 0 ETH | 0.00070966 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
21381969 | 12 days ago | 7.61758838 ETH | ||||
21368265 | 14 days ago | 4.25027869 ETH | ||||
21339045 | 18 days ago | 2.4938224 ETH | ||||
21322984 | 20 days ago | 1.2728823 ETH | ||||
21292977 | 24 days ago | 15.0999648 ETH | ||||
21270651 | 27 days ago | 0.00180136 ETH | ||||
21270624 | 27 days ago | 0.00180102 ETH | ||||
21270560 | 27 days ago | 0.00180784 ETH | ||||
21270248 | 27 days ago | 0.00977901 ETH | ||||
21269694 | 27 days ago | 0.00365266 ETH | ||||
21268421 | 28 days ago | 0.31620774 ETH | ||||
21256727 | 29 days ago | 22.29291527 ETH | ||||
21239857 | 32 days ago | 0.00124783 ETH | ||||
21235778 | 32 days ago | 0.49006147 ETH | ||||
21216378 | 35 days ago | 12.23588466 ETH | ||||
21178410 | 40 days ago | 5.46070436 ETH | ||||
21176501 | 41 days ago | 17.3740562 ETH | ||||
21156888 | 43 days ago | 0.04478067 ETH | ||||
21149687 | 44 days ago | 9.07215023 ETH | ||||
21130070 | 47 days ago | 15.73206968 ETH | ||||
21127797 | 47 days ago | 3.2400635 ETH | ||||
21126911 | 47 days ago | 7.63142286 ETH | ||||
21123267 | 48 days ago | 0.35116131 ETH | ||||
21115686 | 49 days ago | 19.92061284 ETH | ||||
21113333 | 49 days ago | 7.28676637 ETH |
Loading...
Loading
Contract Name:
Vault
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0 pragma solidity 0.8.18; import "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; import "./OctantBase.sol"; import {CommonErrors, VaultErrors} from "./Errors.sol"; /** * @title Vault * @dev This contract allows for claiming the rewards from Octant. */ contract Vault is OctantBase, ReentrancyGuard { event EmergencyWithdrawn(address user, uint256 amount); event Withdrawn(address user, uint256 amount, uint256 epoch); event MerkleRootSet(uint256 epoch, bytes32 root); struct WithdrawPayload { // @notice The epoch number uint256 epoch; // @notice The amount to withdraw uint256 amount; // @notice The Merkle proof for the rewards bytes32[] proof; } /// @notice epoch => merkle root of the merkle tree containing users and proposals rewards mapping(uint256 => bytes32) public merkleRoots; /// @notice user or proposal address => last epoch that rewards were claimed from mapping(address => uint256) public lastClaimedEpoch; constructor(address _auth) OctantBase(_auth) {} /** * @notice Sets the Merkle root for the given epoch. * @param epoch The epoch number. * @param root The Merkle root. */ function setMerkleRoot(uint256 epoch, bytes32 root) external onlyMultisig { require(root != bytes32(0), VaultErrors.INVALID_MERKLE_ROOT); require( merkleRoots[epoch] == bytes32(0), VaultErrors.MERKLE_ROOT_ALREADY_SET ); merkleRoots[epoch] = root; emit MerkleRootSet(epoch, root); } /** * @notice Allows a user to claim their rewards for multiple epochs. * Payloads must be put in epochs order and it's only possible to withdraw from epochs higher * than the lastClaimedEpoch. * @param payloads An array of WithdrawPayload structs. */ function batchWithdraw(WithdrawPayload[] calldata payloads) external nonReentrant { require(payloads.length > 0, VaultErrors.EMPTY_PAYLOADS); uint256 amount = 0; uint256 claimedEpoch = lastClaimedEpoch[msg.sender]; for (uint256 i = 0; i < payloads.length; i++) { require( payloads[i].epoch > claimedEpoch, VaultErrors.ALREADY_CLAIMED ); bytes32 leaf = keccak256( bytes.concat( keccak256(abi.encode(msg.sender, payloads[i].amount)) ) ); bytes32 root = merkleRoots[payloads[i].epoch]; require( verify(payloads[i].proof, root, leaf), VaultErrors.INVALID_MERKLE_PROOF ); claimedEpoch = payloads[i].epoch; amount += payloads[i].amount; } lastClaimedEpoch[msg.sender] = claimedEpoch; emit Withdrawn(msg.sender, amount, claimedEpoch); (bool success, ) = payable(msg.sender).call{value: amount}(""); require(success, CommonErrors.FAILED_TO_SEND); } /** * @dev Allows the multisig to withdraw a specified amount in case of an emergency. * @param amount The amount to withdraw. */ function emergencyWithdraw(uint256 amount) external onlyMultisig { address multisig = super.getMultisig(); (bool success, ) = payable(msg.sender).call{value: amount}(""); require(success, CommonErrors.FAILED_TO_SEND); emit EmergencyWithdrawn(multisig, amount); } /** * @dev Verifies the Merkle proof for the given leaf and root. * @param proof The Merkle proof. * @param root The Merkle root. * @param leaf The leaf node. * @return A boolean value indicating whether the proof is valid. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) public pure returns (bool) { return MerkleProof.verify(proof, root, leaf); } receive() external payable { /* do not add any code here, it will get reverted because of tiny gas stipend */ } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @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 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} * * _Available since v4.7._ */ 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. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { computedHash = _hashPair(computedHash, proof[i]); } return computedHash; } /** * @dev Calldata version of {processProof} * * _Available since v4.7._ */ 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. * * _Available since v4.7._ */ 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. * * _Available since v4.7._ */ 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). * * _Available since v4.7._ */ function processMultiProof( bytes32[] memory proof, bool[] memory proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuild 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 totalHashes = proofFlags.length; // Check proof validity. require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof"); // 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 for 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) { 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. * * _Available since v4.7._ */ function processMultiProofCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuild 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 totalHashes = proofFlags.length; // Check proof validity. require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof"); // 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 for 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) { return hashes[totalHashes - 1]; } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) { return a < b ? _efficientHash(a, b) : _efficientHash(b, a); } 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: GPL-3.0 pragma solidity 0.8.18; import {CommonErrors} from "./Errors.sol"; /// @title Auth contract Auth { /// @dev Emitted when the Golem Foundation multisig address is set. /// @param oldValue The old Golem Foundation multisig address. /// @param newValue The new Golem Foundation multisig address. event MultisigSet(address oldValue, address newValue); /// @dev Emitted when ownership transfer is initiated. /// @param previousOwner Old multisig, one that initiated the process. /// @param newOwner New multisig, one that should finalize the process. event OwnershipTransferStarted( address indexed previousOwner, address indexed newOwner ); /// @dev The multisig address. address public multisig; /// @dev Pending multisig address. address public pendingOwner; /// @param _multisig The initial Golem Foundation multisig address. constructor(address _multisig) { require(_multisig != address(0), CommonErrors.INVALID_ARGUMENT); multisig = _multisig; emit MultisigSet(address(0), multisig); } /** * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. * Can only be called by the current owner. */ function transferOwnership(address newOwner) external { require(newOwner != address(0)); require(msg.sender == multisig, CommonErrors.UNAUTHORIZED_CALLER); pendingOwner = newOwner; emit OwnershipTransferStarted(multisig, newOwner); } /** * @dev The new owner accepts the ownership transfer. */ function acceptOwnership() external { require(msg.sender == pendingOwner, CommonErrors.UNAUTHORIZED_CALLER); emit MultisigSet(multisig, pendingOwner); multisig = pendingOwner; pendingOwner = address(0); } }
// SPDX-License-Identifier: GPL-3.0 pragma solidity 0.8.18; library DepositsErrors { /// @notice Thrown when transfer operation fails in GLM smart contract. /// @return HN:Deposits/cannot-transfer-from-sender string public constant GLM_TRANSFER_FAILED = "HN:Deposits/cannot-transfer-from-sender"; /// @notice Thrown when trying to withdraw more GLMs than are in deposit. /// @return HN:Deposits/deposit-is-smaller string public constant DEPOSIT_IS_TO_SMALL = "HN:Deposits/deposit-is-smaller"; } library EpochsErrors { /// @notice Thrown when calling the contract before the first epoch started. /// @return HN:Epochs/not-started-yet string public constant NOT_STARTED = "HN:Epochs/not-started-yet"; /// @notice Thrown when getFinalizedEpoch function is called before any epoch has been finalized. /// @return HN:Epochs/not-finalized string public constant NOT_FINALIZED = "HN:Epochs/not-finalized"; /// @notice Thrown when getPendingEpoch function is called during closed decision window. /// @return HN:Epochs/not-pending string public constant NOT_PENDING = "HN:Epochs/not-pending"; /// @notice Thrown when updating epoch props to invalid values (decision window bigger than epoch duration. /// @return HN:Epochs/decision-window-bigger-than-duration string public constant DECISION_WINDOW_TOO_BIG = "HN:Epochs/decision-window-bigger-than-duration"; } library ProposalsErrors { /// @notice Thrown when trying to change proposals that could already have been voted upon. /// @return HN:Proposals/only-future-proposals-changing-is-allowed string public constant CHANGING_PROPOSALS_IN_THE_PAST = "HN:Proposals/only-future-proposals-changing-is-allowed"; /// @notice Thrown when setting epochs multiple times. /// @return HN:Proposals/cannot-set-epochs-twice string public constant CANNOT_SET_EPOCHS_TWICE = "HN:Proposals/cannot-set-epochs-twice"; /// @notice Thrown when setting proposal with zero address. /// @return HN:Proposals/invalid-proposal string public constant INVALID_PROPOSAL = "HN:Proposals/invalid-proposal"; } library VaultErrors { /// @notice Thrown when trying to set merkle root for an epoch multiple times. /// @return HN:Vault/merkle-root-already-set string public constant MERKLE_ROOT_ALREADY_SET = "HN:Vault/merkle-root-already-set"; /// @notice Thrown when trying to set invalid merkle root. /// @return HN:Vault/invalid-merkle-root string public constant INVALID_MERKLE_ROOT = "HN:Vault/invalid-merkle-root"; /// @notice Thrown when trying to withdraw without providing valid merkle proof. /// @return HN:Vault/invalid-merkle-proof string public constant INVALID_MERKLE_PROOF = "HN:Vault/invalid-merkle-proof"; /// @notice Thrown when trying to withdraw multiple times. /// @return HN:Vault/already-claimed string public constant ALREADY_CLAIMED = "HN:Vault/already-claimed"; /// @notice Thrown when trying to send empty payload list. /// @return HN:Vault/empty-payloads string public constant EMPTY_PAYLOADS = "HN:Vault/empty-payloads"; } library CommonErrors { /// @notice Thrown when trying to call as an unauthorized account. /// @return HN:Common/unauthorized-caller string public constant UNAUTHORIZED_CALLER = "HN:Common/unauthorized-caller"; /// @notice Thrown when failed to send eth. /// @return HN:Common/failed-to-send string public constant FAILED_TO_SEND = "HN:Common/failed-to-send"; /// @notice Thrown when invalid argument provided. /// @return HN:Common/invalid-argument string public constant INVALID_ARGUMENT = "HN:Common/invalid-argument"; }
// SPDX-License-Identifier: GPL-3.0 pragma solidity 0.8.18; import {CommonErrors} from "./Errors.sol"; import "./Auth.sol"; /// @title OctantBase /// @dev This is the base contract for all Octant contracts that have functions with access restricted /// to deployer or the Golem Foundation multisig. /// It provides functionality for setting and accessing the Golem Foundation multisig address. abstract contract OctantBase { /// @dev The Auth contract instance Auth public immutable auth; /// @param _auth the contract containing Octant authorities. constructor(address _auth) { require(_auth != address(0), CommonErrors.INVALID_ARGUMENT); auth = Auth(_auth); } /// @dev Gets the Golem Foundation multisig address. function getMultisig() internal view returns (address) { return auth.multisig(); } /// @dev Modifier that allows only the Golem Foundation multisig address to call a function. modifier onlyMultisig() { require( msg.sender == auth.multisig(), CommonErrors.UNAUTHORIZED_CALLER ); _; } }
{ "evmVersion": "paris", "libraries": {}, "metadata": { "bytecodeHash": "ipfs", "useLiteralContent": true }, "optimizer": { "enabled": false, "runs": 200 }, "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_auth","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"MerkleRootSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"epoch","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"auth","outputs":[{"internalType":"contract Auth","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"internalType":"struct Vault.WithdrawPayload[]","name":"payloads","type":"tuple[]"}],"name":"batchWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastClaimedEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"merkleRoots","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"bytes32","name":"root","type":"bytes32"},{"internalType":"bytes32","name":"leaf","type":"bytes32"}],"name":"verify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040523480156200001157600080fd5b50604051620019ad380380620019ad833981810160405281019062000037919062000192565b80600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280601a81526020017f484e3a436f6d6d6f6e2f696e76616c69642d617267756d656e7400000000000081525090620000e3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000da91906200025e565b60405180910390fd5b508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505060016000819055505062000282565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200015a826200012d565b9050919050565b6200016c816200014d565b81146200017857600080fd5b50565b6000815190506200018c8162000161565b92915050565b600060208284031215620001ab57620001aa62000128565b5b6000620001bb848285016200017b565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101562000200578082015181840152602081019050620001e3565b60008484015250505050565b6000601f19601f8301169050919050565b60006200022a82620001c4565b620002368185620001cf565b935062000248818560208601620001e0565b62000253816200020c565b840191505092915050565b600060208201905081810360008301526200027a81846200021d565b905092915050565b6080516116fa620002b3600039600081816101df0152818161047901528181610c230152610c6101526116fa6000f3fe6080604052600436106100745760003560e01c806371c5ecb11161004e57806371c5ecb11461010f578063d3ed47de1461014c578063de9375f214610175578063f41c33e9146101a05761007b565b806318712c21146100805780635312ea8e146100a95780635a9a49c7146100d25761007b565b3661007b57005b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a29190610e7b565b6101dd565b005b3480156100b557600080fd5b506100d060048036038101906100cb9190610ebb565b610477565b005b3480156100de57600080fd5b506100f960048036038101906100f49190611041565b6106db565b60405161010691906110cb565b60405180910390f35b34801561011b57600080fd5b5061013660048036038101906101319190610ebb565b6106f1565b60405161014391906110f5565b60405180910390f35b34801561015857600080fd5b50610173600480360381019061016e919061116b565b610709565b005b34801561018157600080fd5b5061018a610c21565b6040516101979190611237565b60405180910390f35b3480156101ac57600080fd5b506101c760048036038101906101c29190611290565b610c45565b6040516101d491906112cc565b60405180910390f35b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634783c35b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026c91906112fc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280601d81526020017f484e3a436f6d6d6f6e2f756e617574686f72697a65642d63616c6c657200000081525090610311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030891906113a8565b60405180910390fd5b506000801b8114156040518060400160405280601c81526020017f484e3a5661756c742f696e76616c69642d6d65726b6c652d726f6f740000000081525090610390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038791906113a8565b60405180910390fd5b506000801b6001600084815260200190815260200160002054146040518060400160405280602081526020017f484e3a5661756c742f6d65726b6c652d726f6f742d616c72656164792d73657481525090610421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161041891906113a8565b60405180910390fd5b508060016000848152602001908152602001600020819055507fb04b7d6145a7588fdcf339a22877d5965f861c171204fc37688058c5f6c06d3b828260405161046b9291906113ca565b60405180910390a15050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634783c35b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050691906112fc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280601d81526020017f484e3a436f6d6d6f6e2f756e617574686f72697a65642d63616c6c6572000000815250906105ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a291906113a8565b60405180910390fd5b5060006105b6610c5d565b905060003373ffffffffffffffffffffffffffffffffffffffff16836040516105de90611424565b60006040518083038185875af1925050503d806000811461061b576040519150601f19603f3d011682016040523d82523d6000602084013e610620565b606091505b50509050806040518060400160405280601881526020017f484e3a436f6d6d6f6e2f6661696c65642d746f2d73656e6400000000000000008152509061069c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069391906113a8565b60405180910390fd5b507f2e39961a70a10f4d46383948095ac2752b3ee642a7c76aa827410aaff08c2e5182846040516106ce929190611448565b60405180910390a1505050565b60006106e8848484610cf3565b90509392505050565b60016020528060005260406000206000915090505481565b610711610d0a565b600082829050116040518060400160405280601781526020017f484e3a5661756c742f656d7074792d7061796c6f6164730000000000000000008152509061078f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078691906113a8565b60405180910390fd5b50600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060005b84849050811015610aad57818585838181106107f7576107f6611471565b5b905060200281019061080991906114af565b60000135116040518060400160405280601881526020017f484e3a5661756c742f616c72656164792d636c61696d6564000000000000000081525090610885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087c91906113a8565b60405180910390fd5b5060003386868481811061089c5761089b611471565b5b90506020028101906108ae91906114af565b602001356040516020016108c3929190611448565b604051602081830303815290604052805190602001206040516020016108e991906114f8565b60405160208183030381529060405280519060200120905060006001600088888681811061091a57610919611471565b5b905060200281019061092c91906114af565b6000013581526020019081526020016000205490506109bf87878581811061095757610956611471565b5b905060200281019061096991906114af565b80604001906109789190611513565b80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505082846106db565b6040518060400160405280601d81526020017f484e3a5661756c742f696e76616c69642d6d65726b6c652d70726f6f6600000081525090610a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2d91906113a8565b60405180910390fd5b50868684818110610a4a57610a49611471565b5b9050602002810190610a5c91906114af565b600001359350868684818110610a7557610a74611471565b5b9050602002810190610a8791906114af565b6020013585610a9691906115a5565b945050508080610aa5906115d9565b9150506107d8565b5080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f92ccf450a286a957af52509bc1c9939d1a6a481783e142e41e2499f0bb66ebc6338383604051610b2593929190611621565b60405180910390a160003373ffffffffffffffffffffffffffffffffffffffff1683604051610b5390611424565b60006040518083038185875af1925050503d8060008114610b90576040519150601f19603f3d011682016040523d82523d6000602084013e610b95565b606091505b50509050806040518060400160405280601881526020017f484e3a436f6d6d6f6e2f6661696c65642d746f2d73656e64000000000000000081525090610c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0891906113a8565b60405180910390fd5b50505050610c1d610d59565b5050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60026020528060005260406000206000915090505481565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634783c35b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cee91906112fc565b905090565b600082610d008584610d63565b1490509392505050565b600260005403610d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d46906116a4565b60405180910390fd5b6002600081905550565b6001600081905550565b60008082905060005b8451811015610dae57610d9982868381518110610d8c57610d8b611471565b5b6020026020010151610db9565b91508080610da6906115d9565b915050610d6c565b508091505092915050565b6000818310610dd157610dcc8284610de4565b610ddc565b610ddb8383610de4565b5b905092915050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b610e2281610e0f565b8114610e2d57600080fd5b50565b600081359050610e3f81610e19565b92915050565b6000819050919050565b610e5881610e45565b8114610e6357600080fd5b50565b600081359050610e7581610e4f565b92915050565b60008060408385031215610e9257610e91610e05565b5b6000610ea085828601610e30565b9250506020610eb185828601610e66565b9150509250929050565b600060208284031215610ed157610ed0610e05565b5b6000610edf84828501610e30565b91505092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610f3682610eed565b810181811067ffffffffffffffff82111715610f5557610f54610efe565b5b80604052505050565b6000610f68610dfb565b9050610f748282610f2d565b919050565b600067ffffffffffffffff821115610f9457610f93610efe565b5b602082029050602081019050919050565b600080fd5b6000610fbd610fb884610f79565b610f5e565b90508083825260208201905060208402830185811115610fe057610fdf610fa5565b5b835b818110156110095780610ff58882610e66565b845260208401935050602081019050610fe2565b5050509392505050565b600082601f83011261102857611027610ee8565b5b8135611038848260208601610faa565b91505092915050565b60008060006060848603121561105a57611059610e05565b5b600084013567ffffffffffffffff81111561107857611077610e0a565b5b61108486828701611013565b935050602061109586828701610e66565b92505060406110a686828701610e66565b9150509250925092565b60008115159050919050565b6110c5816110b0565b82525050565b60006020820190506110e060008301846110bc565b92915050565b6110ef81610e45565b82525050565b600060208201905061110a60008301846110e6565b92915050565b600080fd5b60008083601f84011261112b5761112a610ee8565b5b8235905067ffffffffffffffff81111561114857611147611110565b5b60208301915083602082028301111561116457611163610fa5565b5b9250929050565b6000806020838503121561118257611181610e05565b5b600083013567ffffffffffffffff8111156111a05761119f610e0a565b5b6111ac85828601611115565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006111fd6111f86111f3846111b8565b6111d8565b6111b8565b9050919050565b600061120f826111e2565b9050919050565b600061122182611204565b9050919050565b61123181611216565b82525050565b600060208201905061124c6000830184611228565b92915050565b600061125d826111b8565b9050919050565b61126d81611252565b811461127857600080fd5b50565b60008135905061128a81611264565b92915050565b6000602082840312156112a6576112a5610e05565b5b60006112b48482850161127b565b91505092915050565b6112c681610e0f565b82525050565b60006020820190506112e160008301846112bd565b92915050565b6000815190506112f681611264565b92915050565b60006020828403121561131257611311610e05565b5b6000611320848285016112e7565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611363578082015181840152602081019050611348565b60008484015250505050565b600061137a82611329565b6113848185611334565b9350611394818560208601611345565b61139d81610eed565b840191505092915050565b600060208201905081810360008301526113c2818461136f565b905092915050565b60006040820190506113df60008301856112bd565b6113ec60208301846110e6565b9392505050565b600081905092915050565b50565b600061140e6000836113f3565b9150611419826113fe565b600082019050919050565b600061142f82611401565b9150819050919050565b61144281611252565b82525050565b600060408201905061145d6000830185611439565b61146a60208301846112bd565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b6000823560016060038336030381126114cb576114ca6114a0565b5b80830191505092915050565b6000819050919050565b6114f26114ed82610e45565b6114d7565b82525050565b600061150482846114e1565b60208201915081905092915050565b600080833560016020038436030381126115305761152f6114a0565b5b80840192508235915067ffffffffffffffff821115611552576115516114a5565b5b60208301925060208202360383131561156e5761156d6114aa565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006115b082610e0f565b91506115bb83610e0f565b92508282019050808211156115d3576115d2611576565b5b92915050565b60006115e482610e0f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361161657611615611576565b5b600182019050919050565b60006060820190506116366000830186611439565b61164360208301856112bd565b61165060408301846112bd565b949350505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061168e601f83611334565b915061169982611658565b602082019050919050565b600060208201905081810360008301526116bd81611681565b905091905056fea26469706673582212206c0f636cc662cca287458ba003163a194312335ff0ad4ed3afbec94a8f66e51f64736f6c63430008120033000000000000000000000000287493f76b8a1833e9e0bf2de0d972fb16c6c8ae
Deployed Bytecode
0x6080604052600436106100745760003560e01c806371c5ecb11161004e57806371c5ecb11461010f578063d3ed47de1461014c578063de9375f214610175578063f41c33e9146101a05761007b565b806318712c21146100805780635312ea8e146100a95780635a9a49c7146100d25761007b565b3661007b57005b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a29190610e7b565b6101dd565b005b3480156100b557600080fd5b506100d060048036038101906100cb9190610ebb565b610477565b005b3480156100de57600080fd5b506100f960048036038101906100f49190611041565b6106db565b60405161010691906110cb565b60405180910390f35b34801561011b57600080fd5b5061013660048036038101906101319190610ebb565b6106f1565b60405161014391906110f5565b60405180910390f35b34801561015857600080fd5b50610173600480360381019061016e919061116b565b610709565b005b34801561018157600080fd5b5061018a610c21565b6040516101979190611237565b60405180910390f35b3480156101ac57600080fd5b506101c760048036038101906101c29190611290565b610c45565b6040516101d491906112cc565b60405180910390f35b7f000000000000000000000000287493f76b8a1833e9e0bf2de0d972fb16c6c8ae73ffffffffffffffffffffffffffffffffffffffff16634783c35b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026c91906112fc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280601d81526020017f484e3a436f6d6d6f6e2f756e617574686f72697a65642d63616c6c657200000081525090610311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161030891906113a8565b60405180910390fd5b506000801b8114156040518060400160405280601c81526020017f484e3a5661756c742f696e76616c69642d6d65726b6c652d726f6f740000000081525090610390576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038791906113a8565b60405180910390fd5b506000801b6001600084815260200190815260200160002054146040518060400160405280602081526020017f484e3a5661756c742f6d65726b6c652d726f6f742d616c72656164792d73657481525090610421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161041891906113a8565b60405180910390fd5b508060016000848152602001908152602001600020819055507fb04b7d6145a7588fdcf339a22877d5965f861c171204fc37688058c5f6c06d3b828260405161046b9291906113ca565b60405180910390a15050565b7f000000000000000000000000287493f76b8a1833e9e0bf2de0d972fb16c6c8ae73ffffffffffffffffffffffffffffffffffffffff16634783c35b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061050691906112fc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280601d81526020017f484e3a436f6d6d6f6e2f756e617574686f72697a65642d63616c6c6572000000815250906105ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a291906113a8565b60405180910390fd5b5060006105b6610c5d565b905060003373ffffffffffffffffffffffffffffffffffffffff16836040516105de90611424565b60006040518083038185875af1925050503d806000811461061b576040519150601f19603f3d011682016040523d82523d6000602084013e610620565b606091505b50509050806040518060400160405280601881526020017f484e3a436f6d6d6f6e2f6661696c65642d746f2d73656e6400000000000000008152509061069c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069391906113a8565b60405180910390fd5b507f2e39961a70a10f4d46383948095ac2752b3ee642a7c76aa827410aaff08c2e5182846040516106ce929190611448565b60405180910390a1505050565b60006106e8848484610cf3565b90509392505050565b60016020528060005260406000206000915090505481565b610711610d0a565b600082829050116040518060400160405280601781526020017f484e3a5661756c742f656d7074792d7061796c6f6164730000000000000000008152509061078f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078691906113a8565b60405180910390fd5b50600080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060005b84849050811015610aad57818585838181106107f7576107f6611471565b5b905060200281019061080991906114af565b60000135116040518060400160405280601881526020017f484e3a5661756c742f616c72656164792d636c61696d6564000000000000000081525090610885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087c91906113a8565b60405180910390fd5b5060003386868481811061089c5761089b611471565b5b90506020028101906108ae91906114af565b602001356040516020016108c3929190611448565b604051602081830303815290604052805190602001206040516020016108e991906114f8565b60405160208183030381529060405280519060200120905060006001600088888681811061091a57610919611471565b5b905060200281019061092c91906114af565b6000013581526020019081526020016000205490506109bf87878581811061095757610956611471565b5b905060200281019061096991906114af565b80604001906109789190611513565b80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505082846106db565b6040518060400160405280601d81526020017f484e3a5661756c742f696e76616c69642d6d65726b6c652d70726f6f6600000081525090610a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2d91906113a8565b60405180910390fd5b50868684818110610a4a57610a49611471565b5b9050602002810190610a5c91906114af565b600001359350868684818110610a7557610a74611471565b5b9050602002810190610a8791906114af565b6020013585610a9691906115a5565b945050508080610aa5906115d9565b9150506107d8565b5080600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507f92ccf450a286a957af52509bc1c9939d1a6a481783e142e41e2499f0bb66ebc6338383604051610b2593929190611621565b60405180910390a160003373ffffffffffffffffffffffffffffffffffffffff1683604051610b5390611424565b60006040518083038185875af1925050503d8060008114610b90576040519150601f19603f3d011682016040523d82523d6000602084013e610b95565b606091505b50509050806040518060400160405280601881526020017f484e3a436f6d6d6f6e2f6661696c65642d746f2d73656e64000000000000000081525090610c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0891906113a8565b60405180910390fd5b50505050610c1d610d59565b5050565b7f000000000000000000000000287493f76b8a1833e9e0bf2de0d972fb16c6c8ae81565b60026020528060005260406000206000915090505481565b60007f000000000000000000000000287493f76b8a1833e9e0bf2de0d972fb16c6c8ae73ffffffffffffffffffffffffffffffffffffffff16634783c35b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cee91906112fc565b905090565b600082610d008584610d63565b1490509392505050565b600260005403610d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d46906116a4565b60405180910390fd5b6002600081905550565b6001600081905550565b60008082905060005b8451811015610dae57610d9982868381518110610d8c57610d8b611471565b5b6020026020010151610db9565b91508080610da6906115d9565b915050610d6c565b508091505092915050565b6000818310610dd157610dcc8284610de4565b610ddc565b610ddb8383610de4565b5b905092915050565b600082600052816020526040600020905092915050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b610e2281610e0f565b8114610e2d57600080fd5b50565b600081359050610e3f81610e19565b92915050565b6000819050919050565b610e5881610e45565b8114610e6357600080fd5b50565b600081359050610e7581610e4f565b92915050565b60008060408385031215610e9257610e91610e05565b5b6000610ea085828601610e30565b9250506020610eb185828601610e66565b9150509250929050565b600060208284031215610ed157610ed0610e05565b5b6000610edf84828501610e30565b91505092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610f3682610eed565b810181811067ffffffffffffffff82111715610f5557610f54610efe565b5b80604052505050565b6000610f68610dfb565b9050610f748282610f2d565b919050565b600067ffffffffffffffff821115610f9457610f93610efe565b5b602082029050602081019050919050565b600080fd5b6000610fbd610fb884610f79565b610f5e565b90508083825260208201905060208402830185811115610fe057610fdf610fa5565b5b835b818110156110095780610ff58882610e66565b845260208401935050602081019050610fe2565b5050509392505050565b600082601f83011261102857611027610ee8565b5b8135611038848260208601610faa565b91505092915050565b60008060006060848603121561105a57611059610e05565b5b600084013567ffffffffffffffff81111561107857611077610e0a565b5b61108486828701611013565b935050602061109586828701610e66565b92505060406110a686828701610e66565b9150509250925092565b60008115159050919050565b6110c5816110b0565b82525050565b60006020820190506110e060008301846110bc565b92915050565b6110ef81610e45565b82525050565b600060208201905061110a60008301846110e6565b92915050565b600080fd5b60008083601f84011261112b5761112a610ee8565b5b8235905067ffffffffffffffff81111561114857611147611110565b5b60208301915083602082028301111561116457611163610fa5565b5b9250929050565b6000806020838503121561118257611181610e05565b5b600083013567ffffffffffffffff8111156111a05761119f610e0a565b5b6111ac85828601611115565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006111fd6111f86111f3846111b8565b6111d8565b6111b8565b9050919050565b600061120f826111e2565b9050919050565b600061122182611204565b9050919050565b61123181611216565b82525050565b600060208201905061124c6000830184611228565b92915050565b600061125d826111b8565b9050919050565b61126d81611252565b811461127857600080fd5b50565b60008135905061128a81611264565b92915050565b6000602082840312156112a6576112a5610e05565b5b60006112b48482850161127b565b91505092915050565b6112c681610e0f565b82525050565b60006020820190506112e160008301846112bd565b92915050565b6000815190506112f681611264565b92915050565b60006020828403121561131257611311610e05565b5b6000611320848285016112e7565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611363578082015181840152602081019050611348565b60008484015250505050565b600061137a82611329565b6113848185611334565b9350611394818560208601611345565b61139d81610eed565b840191505092915050565b600060208201905081810360008301526113c2818461136f565b905092915050565b60006040820190506113df60008301856112bd565b6113ec60208301846110e6565b9392505050565b600081905092915050565b50565b600061140e6000836113f3565b9150611419826113fe565b600082019050919050565b600061142f82611401565b9150819050919050565b61144281611252565b82525050565b600060408201905061145d6000830185611439565b61146a60208301846112bd565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b6000823560016060038336030381126114cb576114ca6114a0565b5b80830191505092915050565b6000819050919050565b6114f26114ed82610e45565b6114d7565b82525050565b600061150482846114e1565b60208201915081905092915050565b600080833560016020038436030381126115305761152f6114a0565b5b80840192508235915067ffffffffffffffff821115611552576115516114a5565b5b60208301925060208202360383131561156e5761156d6114aa565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006115b082610e0f565b91506115bb83610e0f565b92508282019050808211156115d3576115d2611576565b5b92915050565b60006115e482610e0f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361161657611615611576565b5b600182019050919050565b60006060820190506116366000830186611439565b61164360208301856112bd565b61165060408301846112bd565b949350505050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061168e601f83611334565b915061169982611658565b602082019050919050565b600060208201905081810360008301526116bd81611681565b905091905056fea26469706673582212206c0f636cc662cca287458ba003163a194312335ff0ad4ed3afbec94a8f66e51f64736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000287493f76b8a1833e9e0bf2de0d972fb16c6c8ae
-----Decoded View---------------
Arg [0] : _auth (address): 0x287493F76b8A1833E9E0BF2dE0D972Fb16C6C8ae
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000287493f76b8a1833e9e0bf2de0d972fb16c6c8ae
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,408.32 | 745.1891 | $2,539,846.27 |
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.