Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,351 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Bud TH Cs | 14914947 | 935 days ago | IN | 0 ETH | 0.00480747 | ||||
Set Bud TH Cs | 14911923 | 936 days ago | IN | 0 ETH | 0.0032866 | ||||
Reveal | 14906180 | 937 days ago | IN | 0 ETH | 0.02655216 | ||||
Reveal | 14901118 | 937 days ago | IN | 0 ETH | 0.01504162 | ||||
Reveal | 14896119 | 938 days ago | IN | 0 ETH | 0.00505281 | ||||
Set Bud TH Cs | 14883591 | 940 days ago | IN | 0 ETH | 0.00381502 | ||||
Set Bud TH Cs | 14880188 | 941 days ago | IN | 0 ETH | 0.00483488 | ||||
Set Bud TH Cs | 14879819 | 941 days ago | IN | 0 ETH | 0.0065513 | ||||
Reveal | 14879810 | 941 days ago | IN | 0 ETH | 0.01609674 | ||||
Set Bud TH Cs | 14876216 | 942 days ago | IN | 0 ETH | 0.00201899 | ||||
Set Bud TH Cs | 14875421 | 942 days ago | IN | 0 ETH | 0.00306171 | ||||
Set Bud TH Cs | 14874324 | 942 days ago | IN | 0 ETH | 0.00190928 | ||||
Reveal | 14874317 | 942 days ago | IN | 0 ETH | 0.00383981 | ||||
Reveal | 14873531 | 942 days ago | IN | 0 ETH | 0.0066752 | ||||
Set Bud TH Cs | 14870868 | 942 days ago | IN | 0 ETH | 0.00284915 | ||||
Reveal | 14870857 | 942 days ago | IN | 0 ETH | 0.02857617 | ||||
Set Bud TH Cs | 14870458 | 942 days ago | IN | 0 ETH | 0.00248252 | ||||
Set Bud TH Cs | 14866945 | 943 days ago | IN | 0 ETH | 0.00290284 | ||||
Set Bud TH Cs | 14864030 | 943 days ago | IN | 0 ETH | 0.00130915 | ||||
Set Bud TH Cs | 14863600 | 944 days ago | IN | 0 ETH | 0.00117547 | ||||
Reveal | 14863586 | 944 days ago | IN | 0 ETH | 0.00881481 | ||||
Set Bud TH Cs | 14863553 | 944 days ago | IN | 0 ETH | 0.00113779 | ||||
Set Bud TH Cs | 14863156 | 944 days ago | IN | 0 ETH | 0.00325981 | ||||
Reveal | 14863152 | 944 days ago | IN | 0 ETH | 0.01969353 | ||||
Set Bud TH Cs | 14860180 | 944 days ago | IN | 0 ETH | 0.00147885 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
This contract contains unverified libraries: ArraySort, MerkleMultiProof
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
LL420BudReveal
Compiler Version
v0.8.9+commit.e5eed63a
Optimization Enabled:
Yes with 800 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// // __ __ _____ ______ // /__/\/__/\ /_____/\ /_____/\ // \ \ \: \ \__\:::_:\ \\:::_ \ \ // \::\_\::\/_/\ _\:\| \:\ \ \ \ // \_::: __\/ /::_/__ \:\ \ \ \ // \::\ \ \:\____/\\:\_\ \ \ // \__\/ \_____\/ \_____\/ // // 420.game Reveal Buds // // by LOOK LABS // // SPDX-License-Identifier: MIT pragma solidity ^0.8.7; import "@openzeppelin/contracts/security/Pausable.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; import "./interfaces/ILL420BudStaking.sol"; import "./libraries/MerkleMultiProof.sol"; import "./libraries/ArraySort.sol"; /** * @title LL420BudReveal * @dev Store the revealed timestamp to the staking contract, and also set the THC of a bud to the staking contract, * based on the verification of merkle proof * */ contract LL420BudReveal is Ownable, Pausable, ReentrancyGuard { uint16 public constant TOTAL_SUPPLY = 20000; uint256 public revealPeriod = 7 days; bytes32 public merkleRoot; address public immutable stakingContractAddress; mapping(uint256 => bool) public requested; event RequestReveal(uint256 indexed _budId, address indexed _user, uint256 indexed _timestamp); constructor(address _stakingAddress) { require(_stakingAddress != address(0), "Zero address"); stakingContractAddress = _stakingAddress; } /* ==================== External METHODS ==================== */ /** * @dev Reveal the buds * * @param _id Id of game key * @param _ids Id array of buds */ function reveal(uint256 _id, uint256[] memory _ids) external nonReentrant whenNotPaused { require(_ids.length <= TOTAL_SUPPLY, "Incorrect bud ids"); uint256 _revealPeriod = revealPeriod; ILL420BudStaking BUD_STAKING = ILL420BudStaking(stakingContractAddress); uint256[] memory budIds = BUD_STAKING.getGKBuds(_id, _msgSender()); /// Check if the ids belong to correct owner /// Check if the id is in pending of reveal for (uint256 i = 0; i < _ids.length; i++) { require(!requested[_ids[i]], "Bud is already requested to reveal"); bool belong = false; for (uint256 j = 0; j < budIds.length; j++) { if (_ids[i] == budIds[j]) { belong = true; break; } } require(belong, "Bud not belong to the sender"); } /// Check if Buds can be revealed (uint256[] memory periods, ) = BUD_STAKING.getBudInfo(_ids); for (uint256 i = 0; i < periods.length; i++) { require(periods[i] >= _revealPeriod, "Staked more than limit"); requested[_ids[i]] = true; emit RequestReveal(_ids[i], _msgSender(), block.timestamp); } BUD_STAKING.setRevealTimestamps(block.timestamp, _msgSender()); } /** * @dev Set THCs of revealed buds * * @param _ids bud id array * @param _thcs THC array * @param _proofs Multi-merkle proofs * @param _proofFlags Proof flags */ function setBudTHCs( uint256[] calldata _ids, uint256[] calldata _thcs, bytes32[] calldata _proofs, bool[] calldata _proofFlags ) external whenNotPaused nonReentrant { require(_ids.length == _thcs.length && _ids.length > 0, "Unmatched thc count"); require(merkleRoot != 0, "Merklet root not set"); bytes32[] memory nodes = new bytes32[](_ids.length); uint256 factor = 10**18; for (uint256 i = 0; i < _ids.length; i++) { nodes[i] = keccak256(abi.encodePacked(_ids[i] * factor, _thcs[i] * factor)); } nodes = ArraySort.sort(nodes); bool isValid = MerkleMultiProof.verifyMultiProof(merkleRoot, nodes, _proofs, _proofFlags); require(isValid, "Invalid proof"); ILL420BudStaking(stakingContractAddress).setRevealedTHC(_ids, _thcs); } /* ==================== OWNER METHODS ==================== */ /** */ function pause() external onlyOwner { _pause(); } /** */ function unpause() external onlyOwner { _unpause(); } /** * @dev this set the reveal lock period for test from owner side. * @param _seconds reveal period in seconds */ function setRevealPeriod(uint256 _seconds) external onlyOwner { revealPeriod = _seconds; } function setMerkleRoot(bytes32 _merkleRoot) external onlyOwner { merkleRoot = _merkleRoot; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../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. * * By default, the owner account will be the one that deploys the contract. 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; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing 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 { require(newOwner != address(0), "Ownable: new owner is the zero address"); _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 v4.4.1 (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() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
// // __ __ _____ ______ // /__/\/__/\ /_____/\ /_____/\ // \ \ \: \ \__\:::_:\ \\:::_ \ \ // \::\_\::\/_/\ _\:\| \:\ \ \ \ // \_::: __\/ /::_/__ \:\ \ \ \ // \::\ \ \:\____/\\:\_\ \ \ // \__\/ \_____\/ \_____\/ // // 420.game Bud / Game Key Staking Interface // // by LOOK LABS // // SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.4; interface ILL420BudStaking { function setRevealedTHC(uint256[] calldata _ids, uint256[] calldata _thc) external; function getBudInfo(uint256[] memory _ids) external view returns (uint256[] memory, uint256[] memory); function getGKBuds(uint256 _id, address _user) external view returns (uint256[] memory); function setRevealTimestamps(uint256 _timestamp, address _address) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.7; // @credit: https://github.com/miguelmota/merkletreejs-multiproof-solidity#example library MerkleMultiProof { function calculateMultiMerkleRoot( bytes32[] memory leafs, bytes32[] memory proofs, bool[] memory proofFlag ) public pure returns (bytes32 merkleRoot) { uint256 leafsLen = leafs.length; uint256 totalHashes = proofFlag.length; bytes32[] memory hashes = new bytes32[](totalHashes); uint256 leafPos = 0; uint256 hashPos = 0; uint256 proofPos = 0; for (uint256 i = 0; i < totalHashes; i++) { hashes[i] = hashPair( proofFlag[i] ? (leafPos < leafsLen ? leafs[leafPos++] : hashes[hashPos++]) : proofs[proofPos++], leafPos < leafsLen ? leafs[leafPos++] : hashes[hashPos++] ); } return hashes[totalHashes - 1]; } function hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) { return a < b ? hash_node(a, b) : hash_node(b, a); } function hash_node(bytes32 left, bytes32 right) private pure returns (bytes32 hash) { assembly { mstore(0x00, left) mstore(0x20, right) hash := keccak256(0x00, 0x40) } return hash; } function verifyMultiProof( bytes32 root, bytes32[] memory leafs, bytes32[] memory proofs, bool[] memory proofFlag ) public pure returns (bool) { return calculateMultiMerkleRoot(leafs, proofs, proofFlag) == root; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.7; library ArraySort { /** * Sort an array * @param array a bytes32 array */ function sort(bytes32[] memory array) public pure returns (bytes32[] memory) { _quickSort(array, 0, array.length); return array; } function _quickSort( bytes32[] memory array, uint256 i, uint256 j ) private pure { if (j - i < 2) return; uint256 p = i; for (uint256 k = i + 1; k < j; ++k) { if (array[i] > array[k]) { _swap(array, ++p, k); } } _swap(array, i, p); _quickSort(array, i, p); _quickSort(array, p + 1, j); } function _swap( bytes32[] memory array, uint256 i, uint256 j ) private pure { (array[i], array[j]) = (array[j], array[i]); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @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; } }
{ "metadata": { "bytecodeHash": "none" }, "optimizer": { "enabled": true, "runs": 800 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": { "contracts/libraries/ArraySort.sol": { "ArraySort": "0xf63ab13dc8ce2009a6a0ed86f84b2df2c30257fd" }, "contracts/libraries/MerkleMultiProof.sol": { "MerkleMultiProof": "0x8e613763d253713e221ada487542171fedbd29e5" } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_stakingAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_budId","type":"uint256"},{"indexed":true,"internalType":"address","name":"_user","type":"address"},{"indexed":true,"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"RequestReveal","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"TOTAL_SUPPLY","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"requested","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"}],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_thcs","type":"uint256[]"},{"internalType":"bytes32[]","name":"_proofs","type":"bytes32[]"},{"internalType":"bool[]","name":"_proofFlags","type":"bool[]"}],"name":"setBudTHCs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_seconds","type":"uint256"}],"name":"setRevealPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a060405262093a8060025534801561001757600080fd5b506040516117ca3803806117ca833981016040819052610036916100fa565b61003f336100aa565b6000805460ff60a01b19169055600180556001600160a01b0381166100995760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b604482015260640160405180910390fd5b6001600160a01b031660805261012a565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006020828403121561010c57600080fd5b81516001600160a01b038116811461012357600080fd5b9392505050565b6080516116776101536000396000818161011b0152818161061b01526107fa01526116776000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80637cb6475911610097578063a7b1071511610066578063a7b10715146101f3578063e65a57f114610206578063f2fde38b14610229578063f96046811461023c57600080fd5b80637cb64759146101ab5780638456cb59146101be5780638da5cb5b146101c6578063902d55a5146101d757600080fd5b80633f4ba83a116100d35780633f4ba83a1461016a5780634d96c8f2146101725780635c975abb14610185578063715018a6146101a357600080fd5b80632eb4a7ab146100fa5780633535f48b1461011657806335d00f4414610155575b600080fd5b61010360035481565b6040519081526020015b60405180910390f35b61013d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161010d565b6101686101633660046110a9565b610245565b005b610168610699565b6101686101803660046111d8565b6106fd565b600054600160a01b900460ff165b604051901515815260200161010d565b610168610c61565b6101686101b936600461127a565b610cc5565b610168610d24565b6000546001600160a01b031661013d565b6101e0614e2081565b60405161ffff909116815260200161010d565b61016861020136600461127a565b610d86565b61019361021436600461127a565b60046020526000908152604090205460ff1681565b610168610237366004611293565b610de5565b61010360025481565b600054600160a01b900460ff16156102975760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064015b60405180910390fd5b600260015414156102ea5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161028e565b600260015586851480156102fd57508615155b6103495760405162461bcd60e51b815260206004820152601360248201527f556e6d6174636865642074686320636f756e7400000000000000000000000000604482015260640161028e565b6003546103985760405162461bcd60e51b815260206004820152601460248201527f4d65726b6c657420726f6f74206e6f7420736574000000000000000000000000604482015260640161028e565b60008767ffffffffffffffff8111156103b3576103b361116d565b6040519080825280602002602001820160405280156103dc578160200160208202803683370190505b509050670de0b6b3a764000060005b8981101561049257818b8b83818110610406576104066112c3565b9050602002013561041791906112ef565b828a8a8481811061042a5761042a6112c3565b9050602002013561043b91906112ef565b60408051602081019390935282015260600160405160208183030381529060405280519060200120838281518110610475576104756112c3565b60209081029190910101528061048a8161130e565b9150506103eb565b50604051638ea613b760e01b815273f63ab13dc8ce2009a6a0ed86f84b2df2c30257fd90638ea613b7906104ca908590600401611364565b60006040518083038186803b1580156104e257600080fd5b505af41580156104f6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261051e9190810190611377565b91506000738e613763d253713e221ada487542171fedbd29e563bf3c160b600354858a8a8a8a6040518763ffffffff1660e01b815260040161056596959493929190611465565b60206040518083038186803b15801561057d57600080fd5b505af4158015610591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b591906114db565b9050806106045760405162461bcd60e51b815260206004820152600d60248201527f496e76616c69642070726f6f6600000000000000000000000000000000000000604482015260640161028e565b604051638186aa6360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638186aa6390610656908e908e908e908e906004016114f8565b600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b50506001805550505050505050505050505050565b6000546001600160a01b031633146106f35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161028e565b6106fb610ec7565b565b600260015414156107505760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161028e565b6002600155600054600160a01b900460ff16156107a25760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161028e565b8051614e2010156107f55760405162461bcd60e51b815260206004820152601160248201527f496e636f72726563742062756420696473000000000000000000000000000000604482015260640161028e565b6002547f000000000000000000000000000000000000000000000000000000000000000060006001600160a01b03821663bf91d02186336040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b15801561088957600080fd5b505afa15801561089d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108c59190810190611585565b905060005b8451811015610a2257600460008683815181106108e9576108e96112c3565b60209081029190910181015182528101919091526040016000205460ff161561095f5760405162461bcd60e51b815260206004820152602260248201527f42756420697320616c72656164792072657175657374656420746f2072657665604482015261185b60f21b606482015260840161028e565b6000805b83518110156109c15783818151811061097e5761097e6112c3565b6020026020010151878481518110610998576109986112c3565b602002602001015114156109af57600191506109c1565b806109b98161130e565b915050610963565b5080610a0f5760405162461bcd60e51b815260206004820152601c60248201527f427564206e6f742062656c6f6e6720746f207468652073656e64657200000000604482015260640161028e565b5080610a1a8161130e565b9150506108ca565b506040516328833a0560e01b81526000906001600160a01b038416906328833a0590610a529088906004016115c2565b60006040518083038186803b158015610a6a57600080fd5b505afa158015610a7e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610aa69190810190611606565b50905060005b8151811015610bcc5784828281518110610ac857610ac86112c3565b60200260200101511015610b1e5760405162461bcd60e51b815260206004820152601660248201527f5374616b6564206d6f7265207468616e206c696d697400000000000000000000604482015260640161028e565b600160046000888481518110610b3657610b366112c3565b6020026020010151815260200190815260200160002060006101000a81548160ff02191690831515021790555042610b6b3390565b6001600160a01b0316878381518110610b8657610b866112c3565b60200260200101517fdfc2a28abbe916a094ce9aca4b087825f409b6835477017bac01d8ee0fa32cc360405160405180910390a480610bc48161130e565b915050610aac565b506001600160a01b03831663e740504f42336040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526001600160a01b03166024820152604401600060405180830381600087803b158015610c3d57600080fd5b505af1158015610c51573d6000803e3d6000fd5b5050600180555050505050505050565b6000546001600160a01b03163314610cbb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161028e565b6106fb6000610f6d565b6000546001600160a01b03163314610d1f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161028e565b600355565b6000546001600160a01b03163314610d7e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161028e565b6106fb610fd5565b6000546001600160a01b03163314610de05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161028e565b600255565b6000546001600160a01b03163314610e3f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161028e565b6001600160a01b038116610ebb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161028e565b610ec481610f6d565b50565b600054600160a01b900460ff16610f205760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015260640161028e565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600054600160a01b900460ff16156110225760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161028e565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610f503390565b60008083601f84011261106f57600080fd5b50813567ffffffffffffffff81111561108757600080fd5b6020830191508360208260051b85010111156110a257600080fd5b9250929050565b6000806000806000806000806080898b0312156110c557600080fd5b883567ffffffffffffffff808211156110dd57600080fd5b6110e98c838d0161105d565b909a50985060208b013591508082111561110257600080fd5b61110e8c838d0161105d565b909850965060408b013591508082111561112757600080fd5b6111338c838d0161105d565b909650945060608b013591508082111561114c57600080fd5b506111598b828c0161105d565b999c989b5096995094979396929594505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111ac576111ac61116d565b604052919050565b600067ffffffffffffffff8211156111ce576111ce61116d565b5060051b60200190565b600080604083850312156111eb57600080fd5b8235915060208084013567ffffffffffffffff81111561120a57600080fd5b8401601f8101861361121b57600080fd5b803561122e611229826111b4565b611183565b81815260059190911b8201830190838101908883111561124d57600080fd5b928401925b8284101561126b57833582529284019290840190611252565b80955050505050509250929050565b60006020828403121561128c57600080fd5b5035919050565b6000602082840312156112a557600080fd5b81356001600160a01b03811681146112bc57600080fd5b9392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615611309576113096112d9565b500290565b6000600019821415611322576113226112d9565b5060010190565b600081518084526020808501945080840160005b838110156113595781518752958201959082019060010161133d565b509495945050505050565b6020815260006112bc6020830184611329565b6000602080838503121561138a57600080fd5b825167ffffffffffffffff8111156113a157600080fd5b8301601f810185136113b257600080fd5b80516113c0611229826111b4565b81815260059190911b820183019083810190878311156113df57600080fd5b928401925b828410156113fd578351825292840192908401906113e4565b979650505050505050565b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561143a57600080fd5b8260051b8083602087013760009401602001938452509192915050565b8015158114610ec457600080fd5b8681526000602060808184015261147f6080840189611329565b838103604085015261149281888a611408565b8481036060860152858152869150820160005b868110156114cc5782356114b881611457565b1515825291830191908301906001016114a5565b509a9950505050505050505050565b6000602082840312156114ed57600080fd5b81516112bc81611457565b60408152600061150c604083018688611408565b82810360208401526113fd818587611408565b600082601f83011261153057600080fd5b81516020611540611229836111b4565b82815260059290921b8401810191818101908684111561155f57600080fd5b8286015b8481101561157a5780518352918301918301611563565b509695505050505050565b60006020828403121561159757600080fd5b815167ffffffffffffffff8111156115ae57600080fd5b6115ba8482850161151f565b949350505050565b6020808252825182820181905260009190848201906040850190845b818110156115fa578351835292840192918401916001016115de565b50909695505050505050565b6000806040838503121561161957600080fd5b825167ffffffffffffffff8082111561163157600080fd5b61163d8683870161151f565b9350602085015191508082111561165357600080fd5b506116608582860161151f565b915050925092905056fea164736f6c6343000809000a000000000000000000000000cca03dd3843079e0beb0e98e0d7a946556caa097
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80637cb6475911610097578063a7b1071511610066578063a7b10715146101f3578063e65a57f114610206578063f2fde38b14610229578063f96046811461023c57600080fd5b80637cb64759146101ab5780638456cb59146101be5780638da5cb5b146101c6578063902d55a5146101d757600080fd5b80633f4ba83a116100d35780633f4ba83a1461016a5780634d96c8f2146101725780635c975abb14610185578063715018a6146101a357600080fd5b80632eb4a7ab146100fa5780633535f48b1461011657806335d00f4414610155575b600080fd5b61010360035481565b6040519081526020015b60405180910390f35b61013d7f000000000000000000000000cca03dd3843079e0beb0e98e0d7a946556caa09781565b6040516001600160a01b03909116815260200161010d565b6101686101633660046110a9565b610245565b005b610168610699565b6101686101803660046111d8565b6106fd565b600054600160a01b900460ff165b604051901515815260200161010d565b610168610c61565b6101686101b936600461127a565b610cc5565b610168610d24565b6000546001600160a01b031661013d565b6101e0614e2081565b60405161ffff909116815260200161010d565b61016861020136600461127a565b610d86565b61019361021436600461127a565b60046020526000908152604090205460ff1681565b610168610237366004611293565b610de5565b61010360025481565b600054600160a01b900460ff16156102975760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064015b60405180910390fd5b600260015414156102ea5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161028e565b600260015586851480156102fd57508615155b6103495760405162461bcd60e51b815260206004820152601360248201527f556e6d6174636865642074686320636f756e7400000000000000000000000000604482015260640161028e565b6003546103985760405162461bcd60e51b815260206004820152601460248201527f4d65726b6c657420726f6f74206e6f7420736574000000000000000000000000604482015260640161028e565b60008767ffffffffffffffff8111156103b3576103b361116d565b6040519080825280602002602001820160405280156103dc578160200160208202803683370190505b509050670de0b6b3a764000060005b8981101561049257818b8b83818110610406576104066112c3565b9050602002013561041791906112ef565b828a8a8481811061042a5761042a6112c3565b9050602002013561043b91906112ef565b60408051602081019390935282015260600160405160208183030381529060405280519060200120838281518110610475576104756112c3565b60209081029190910101528061048a8161130e565b9150506103eb565b50604051638ea613b760e01b815273f63ab13dc8ce2009a6a0ed86f84b2df2c30257fd90638ea613b7906104ca908590600401611364565b60006040518083038186803b1580156104e257600080fd5b505af41580156104f6573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261051e9190810190611377565b91506000738e613763d253713e221ada487542171fedbd29e563bf3c160b600354858a8a8a8a6040518763ffffffff1660e01b815260040161056596959493929190611465565b60206040518083038186803b15801561057d57600080fd5b505af4158015610591573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b591906114db565b9050806106045760405162461bcd60e51b815260206004820152600d60248201527f496e76616c69642070726f6f6600000000000000000000000000000000000000604482015260640161028e565b604051638186aa6360e01b81526001600160a01b037f000000000000000000000000cca03dd3843079e0beb0e98e0d7a946556caa0971690638186aa6390610656908e908e908e908e906004016114f8565b600060405180830381600087803b15801561067057600080fd5b505af1158015610684573d6000803e3d6000fd5b50506001805550505050505050505050505050565b6000546001600160a01b031633146106f35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161028e565b6106fb610ec7565b565b600260015414156107505760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161028e565b6002600155600054600160a01b900460ff16156107a25760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161028e565b8051614e2010156107f55760405162461bcd60e51b815260206004820152601160248201527f496e636f72726563742062756420696473000000000000000000000000000000604482015260640161028e565b6002547f000000000000000000000000cca03dd3843079e0beb0e98e0d7a946556caa09760006001600160a01b03821663bf91d02186336040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526001600160a01b0316602482015260440160006040518083038186803b15801561088957600080fd5b505afa15801561089d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108c59190810190611585565b905060005b8451811015610a2257600460008683815181106108e9576108e96112c3565b60209081029190910181015182528101919091526040016000205460ff161561095f5760405162461bcd60e51b815260206004820152602260248201527f42756420697320616c72656164792072657175657374656420746f2072657665604482015261185b60f21b606482015260840161028e565b6000805b83518110156109c15783818151811061097e5761097e6112c3565b6020026020010151878481518110610998576109986112c3565b602002602001015114156109af57600191506109c1565b806109b98161130e565b915050610963565b5080610a0f5760405162461bcd60e51b815260206004820152601c60248201527f427564206e6f742062656c6f6e6720746f207468652073656e64657200000000604482015260640161028e565b5080610a1a8161130e565b9150506108ca565b506040516328833a0560e01b81526000906001600160a01b038416906328833a0590610a529088906004016115c2565b60006040518083038186803b158015610a6a57600080fd5b505afa158015610a7e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610aa69190810190611606565b50905060005b8151811015610bcc5784828281518110610ac857610ac86112c3565b60200260200101511015610b1e5760405162461bcd60e51b815260206004820152601660248201527f5374616b6564206d6f7265207468616e206c696d697400000000000000000000604482015260640161028e565b600160046000888481518110610b3657610b366112c3565b6020026020010151815260200190815260200160002060006101000a81548160ff02191690831515021790555042610b6b3390565b6001600160a01b0316878381518110610b8657610b866112c3565b60200260200101517fdfc2a28abbe916a094ce9aca4b087825f409b6835477017bac01d8ee0fa32cc360405160405180910390a480610bc48161130e565b915050610aac565b506001600160a01b03831663e740504f42336040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16815260048101929092526001600160a01b03166024820152604401600060405180830381600087803b158015610c3d57600080fd5b505af1158015610c51573d6000803e3d6000fd5b5050600180555050505050505050565b6000546001600160a01b03163314610cbb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161028e565b6106fb6000610f6d565b6000546001600160a01b03163314610d1f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161028e565b600355565b6000546001600160a01b03163314610d7e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161028e565b6106fb610fd5565b6000546001600160a01b03163314610de05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161028e565b600255565b6000546001600160a01b03163314610e3f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161028e565b6001600160a01b038116610ebb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161028e565b610ec481610f6d565b50565b600054600160a01b900460ff16610f205760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015260640161028e565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600054600160a01b900460ff16156110225760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015260640161028e565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610f503390565b60008083601f84011261106f57600080fd5b50813567ffffffffffffffff81111561108757600080fd5b6020830191508360208260051b85010111156110a257600080fd5b9250929050565b6000806000806000806000806080898b0312156110c557600080fd5b883567ffffffffffffffff808211156110dd57600080fd5b6110e98c838d0161105d565b909a50985060208b013591508082111561110257600080fd5b61110e8c838d0161105d565b909850965060408b013591508082111561112757600080fd5b6111338c838d0161105d565b909650945060608b013591508082111561114c57600080fd5b506111598b828c0161105d565b999c989b5096995094979396929594505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156111ac576111ac61116d565b604052919050565b600067ffffffffffffffff8211156111ce576111ce61116d565b5060051b60200190565b600080604083850312156111eb57600080fd5b8235915060208084013567ffffffffffffffff81111561120a57600080fd5b8401601f8101861361121b57600080fd5b803561122e611229826111b4565b611183565b81815260059190911b8201830190838101908883111561124d57600080fd5b928401925b8284101561126b57833582529284019290840190611252565b80955050505050509250929050565b60006020828403121561128c57600080fd5b5035919050565b6000602082840312156112a557600080fd5b81356001600160a01b03811681146112bc57600080fd5b9392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615611309576113096112d9565b500290565b6000600019821415611322576113226112d9565b5060010190565b600081518084526020808501945080840160005b838110156113595781518752958201959082019060010161133d565b509495945050505050565b6020815260006112bc6020830184611329565b6000602080838503121561138a57600080fd5b825167ffffffffffffffff8111156113a157600080fd5b8301601f810185136113b257600080fd5b80516113c0611229826111b4565b81815260059190911b820183019083810190878311156113df57600080fd5b928401925b828410156113fd578351825292840192908401906113e4565b979650505050505050565b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561143a57600080fd5b8260051b8083602087013760009401602001938452509192915050565b8015158114610ec457600080fd5b8681526000602060808184015261147f6080840189611329565b838103604085015261149281888a611408565b8481036060860152858152869150820160005b868110156114cc5782356114b881611457565b1515825291830191908301906001016114a5565b509a9950505050505050505050565b6000602082840312156114ed57600080fd5b81516112bc81611457565b60408152600061150c604083018688611408565b82810360208401526113fd818587611408565b600082601f83011261153057600080fd5b81516020611540611229836111b4565b82815260059290921b8401810191818101908684111561155f57600080fd5b8286015b8481101561157a5780518352918301918301611563565b509695505050505050565b60006020828403121561159757600080fd5b815167ffffffffffffffff8111156115ae57600080fd5b6115ba8482850161151f565b949350505050565b6020808252825182820181905260009190848201906040850190845b818110156115fa578351835292840192918401916001016115de565b50909695505050505050565b6000806040838503121561161957600080fd5b825167ffffffffffffffff8082111561163157600080fd5b61163d8683870161151f565b9350602085015191508082111561165357600080fd5b506116608582860161151f565b915050925092905056fea164736f6c6343000809000a
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000cca03dd3843079e0beb0e98e0d7a946556caa097
-----Decoded View---------------
Arg [0] : _stakingAddress (address): 0xcCA03DD3843079e0BEb0e98E0d7A946556caA097
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000cca03dd3843079e0beb0e98e0d7a946556caa097
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.