Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
Latest 25 from a total of 30 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Recover Lost Tok... | 19051698 | 352 days ago | IN | 0 ETH | 0.00056929 | ||||
Claim With Proof... | 19044966 | 353 days ago | IN | 0 ETH | 0.00056847 | ||||
Set Paused | 19036955 | 354 days ago | IN | 0 ETH | 0.00063517 | ||||
Claim With Proof... | 18969143 | 364 days ago | IN | 0 ETH | 0.00454501 | ||||
Claim With Proof... | 18940121 | 368 days ago | IN | 0 ETH | 0.00530572 | ||||
Claim With Proof... | 18868985 | 378 days ago | IN | 0 ETH | 0.0046555 | ||||
Claim With Proof... | 18867363 | 378 days ago | IN | 0 ETH | 0.00431187 | ||||
Claim For Share ... | 18760535 | 393 days ago | IN | 0 ETH | 0.01210409 | ||||
Claim With Proof... | 18683626 | 404 days ago | IN | 0 ETH | 0.00900946 | ||||
Claim With Proof... | 18625534 | 412 days ago | IN | 0 ETH | 0.00104479 | ||||
Claim With Proof... | 18609573 | 414 days ago | IN | 0 ETH | 0.00840218 | ||||
Claim For Share ... | 18609050 | 414 days ago | IN | 0 ETH | 0.01146261 | ||||
Claim With Proof... | 18602791 | 415 days ago | IN | 0 ETH | 0.00626814 | ||||
Claim With Proof... | 18599718 | 416 days ago | IN | 0 ETH | 0.00848668 | ||||
Claim With Proof... | 18584081 | 418 days ago | IN | 0 ETH | 0.00092909 | ||||
Claim With Proof... | 18579777 | 419 days ago | IN | 0 ETH | 0.01856752 | ||||
Claim With Proof... | 18569832 | 420 days ago | IN | 0 ETH | 0.01426641 | ||||
Claim For Share ... | 18557535 | 422 days ago | IN | 0 ETH | 0.01477691 | ||||
Claim For Share ... | 18546960 | 423 days ago | IN | 0 ETH | 0.00617534 | ||||
Claim With Proof... | 18546879 | 423 days ago | IN | 0 ETH | 0.00877776 | ||||
Claim For Share ... | 18546877 | 423 days ago | IN | 0 ETH | 0.00857461 | ||||
Claim With Proof... | 18532543 | 425 days ago | IN | 0 ETH | 0.00792883 | ||||
Claim For Share ... | 18532538 | 425 days ago | IN | 0 ETH | 0.01167441 | ||||
Claim With Proof... | 18531163 | 425 days ago | IN | 0 ETH | 0.01160699 | ||||
Claim With Proof... | 18527066 | 426 days ago | IN | 0 ETH | 0.01048256 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
HubAirdrop
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-11-08 */ pragma solidity ^0.8.19; // // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol) /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 amount) external returns (bool); } // // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC721/IERC721.sol) /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721 * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must * understand this adds an external call which potentially creates a reentrancy vulnerability. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); } // // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) /** * @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; } } // // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.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 Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { 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()); } } // // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.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 Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { 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); } } // // OpenZeppelin Contracts (last updated v4.9.2) (utils/cryptography/MerkleProof.sol) /** * @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 rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the merkle tree. uint256 leavesLen = leaves.length; uint256 proofLen = proof.length; uint256 totalHashes = proofFlags.length; // Check proof validity. require(leavesLen + proofLen - 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 from the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]) : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { require(proofPos == proofLen, "MerkleProof: invalid multiproof"); unchecked { return hashes[totalHashes - 1]; } } else if (leavesLen > 0) { return leaves[0]; } else { return proof[0]; } } /** * @dev Calldata version of {processMultiProof}. * * CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details. * * _Available since v4.7._ */ function processMultiProofCalldata( bytes32[] calldata proof, bool[] calldata proofFlags, bytes32[] memory leaves ) internal pure returns (bytes32 merkleRoot) { // This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by // consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the // `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of // the merkle tree. uint256 leavesLen = leaves.length; uint256 proofLen = proof.length; uint256 totalHashes = proofFlags.length; // Check proof validity. require(leavesLen + proofLen - 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 from the "main queue" (merging branches) or an element from the // `proof` array. for (uint256 i = 0; i < totalHashes; i++) { bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; bytes32 b = proofFlags[i] ? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]) : proof[proofPos++]; hashes[i] = _hashPair(a, b); } if (totalHashes > 0) { require(proofPos == proofLen, "MerkleProof: invalid multiproof"); unchecked { 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) } } } // struct LockArg { uint256 platform; address asset; address receiver; uint48 vestingStart; uint16 firstUnlockRatio; uint48 unlockInterval; uint48 lockDuration; uint192 totalAmount; bytes32 reason; bool allowTax; address paymentAsset; } bytes32 constant PRESALE_REASON = keccak256("Presale"); bytes32 constant LP_REASON = keccak256("Liquidity"); interface ICryptohubLockFactory { function setInternalLocker(address _locker, bool _isInternal) external; function lock(LockArg memory _lockArg) external returns (uint256, address); function internalFreeLock( LockArg calldata _lockArg ) external returns (uint256, address); function increaseCredits( uint256 _platform, address _user, uint256 _amount ) external; function increaseAmountForLock( uint256 _platform, uint256 _lockId, uint256 _amount ) external; function claimUnlockedToken( uint256 _platform, uint256 _lockId ) external returns (uint256 unlockedAmount); } // // import pauseable // import ownable // import merkletree contract HubAirdrop is Ownable, Pausable { uint256 public SHARE_TO_HUB = 150000 * 10 ** 18; IERC20 public immutable hub; IERC721 public immutable shareNft; address public immutable treasury; ICryptohubLockFactory public immutable lockFactory; // merkle root bytes32 public constant merkleRoot = 0xc16062aae93cac69c3ec3e811f24177509c2fe8c64a97743a95827bcb4e3b8eb; mapping(address => bool) public claimed; constructor( IERC20 _hub, IERC721 _shareNft, address _treasury, ICryptohubLockFactory _lockFactory, uint48 _vestingStart ) { hub = _hub; shareNft = _shareNft; treasury = _treasury; lockFactory = _lockFactory; vestingStart = _vestingStart; } /* uint256 platform; address asset; address receiver; uint48 vestingStart; uint16 firstUnlockRatio; uint48 unlockInterval; uint48 lockDuration; uint192 totalAmount; bytes32 reason; bool allowTax; address paymentAsset; */ uint48 public immutable vestingStart; uint16 constant firstUnlockRatio = 1000; uint48 constant unlockInterval = 30 days; uint48 constant lockDuration = 6 * 30 days; function claimForShareHolder( uint256[] calldata _tokenIds ) external whenNotPaused { for (uint256 i = 0; i < _tokenIds.length; i++) { uint256 tokenId = _tokenIds[i]; require( shareNft.ownerOf(tokenId) == msg.sender, "HubAirdrop: not owner" ); shareNft.transferFrom(msg.sender, owner(), tokenId); } uint256 amount = _tokenIds.length * SHARE_TO_HUB; LockArg memory _lockArg = LockArg({ platform: 0, asset: address(hub), receiver: msg.sender, vestingStart: vestingStart, firstUnlockRatio: firstUnlockRatio, unlockInterval: unlockInterval, lockDuration: lockDuration, totalAmount: uint192(amount), reason: PRESALE_REASON, allowTax: false, paymentAsset: address(0) }); // approve hub hub.approve(address(lockFactory), amount); (uint256 lockId, ) = lockFactory.internalFreeLock(_lockArg); // if vesting start has arived claim if (block.timestamp >= vestingStart) { lockFactory.claimUnlockedToken(0, lockId); } } function claimWithProofFor( address _user, uint256 _amount, bytes32[] calldata _proof ) external whenNotPaused { _claimWithProof(_user, _amount, _proof); } function claimWithProof( uint256 _amount, bytes32[] calldata _proof ) external whenNotPaused { _claimWithProof(msg.sender, _amount, _proof); } function batchClaimWithProof( address[] calldata _users, uint256[] calldata _amounts, bytes32[][] calldata _proofs ) external whenNotPaused { require( _users.length == _amounts.length && _users.length == _proofs.length, "HubAirdrop: invalid input" ); for (uint256 i = 0; i < _users.length; i++) { _claimWithProof(_users[i], _amounts[i], _proofs[i]); } } function _claimWithProof( address _user, uint256 _amount, bytes32[] calldata _proof ) internal { require(!claimed[_user], "HubAirdrop: already claimed"); // Verify the merkle proof. bytes32 node = keccak256(abi.encodePacked(_user, _amount)); require( MerkleProof.verify(_proof, merkleRoot, node), "HubAirdrop: Invalid proof." ); claimed[_user] = true; LockArg memory _lockArg = LockArg({ platform: 0, asset: address(hub), receiver: _user, vestingStart: vestingStart, firstUnlockRatio: firstUnlockRatio, unlockInterval: unlockInterval, lockDuration: lockDuration, totalAmount: uint192(_amount), reason: PRESALE_REASON, allowTax: false, paymentAsset: address(0) }); // approve hub hub.approve(address(lockFactory), _amount); (uint256 lockId, ) = lockFactory.internalFreeLock(_lockArg); // if vesting start has arived claim if (block.timestamp >= vestingStart) { lockFactory.claimUnlockedToken(0, lockId); } } function recoverLostTokens(address _token) external onlyOwner { if (address(0) == _token) { // use call to transfer eth (bool success, ) = payable(owner()).call{ value: address(this).balance }(""); require(success, "HubAirdrop: ETH_TRANSFER_FAILED"); } else { IERC20(_token).transfer( owner(), IERC20(_token).balanceOf(address(this)) ); } } function setPaused(bool _paused) external onlyOwner { if (_paused) { _pause(); } else { _unpause(); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IERC20","name":"_hub","type":"address"},{"internalType":"contract IERC721","name":"_shareNft","type":"address"},{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"contract ICryptohubLockFactory","name":"_lockFactory","type":"address"},{"internalType":"uint48","name":"_vestingStart","type":"uint48"}],"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":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"SHARE_TO_HUB","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"},{"internalType":"bytes32[][]","name":"_proofs","type":"bytes32[][]"}],"name":"batchClaimWithProof","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"claimForShareHolder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"claimWithProof","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"claimWithProofFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hub","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockFactory","outputs":[{"internalType":"contract ICryptohubLockFactory","name":"","type":"address"}],"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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"recoverLostTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"shareNft","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"vestingStart","outputs":[{"internalType":"uint48","name":"","type":"uint48"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
610120604052691fc3842bd1f071c000006001553480156200002057600080fd5b5060405162001870380380620018708339810160408190526200004391620000f6565b6200004e336200008d565b6000805460ff60a01b191690556001600160a01b0394851660805292841660a05290831660c05290911660e05265ffffffffffff166101005262000180565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114620000f357600080fd5b50565b600080600080600060a086880312156200010f57600080fd5b85516200011c81620000dd565b60208701519095506200012f81620000dd565b60408701519094506200014281620000dd565b60608701519093506200015581620000dd565b608087015190925065ffffffffffff811681146200017257600080fd5b809150509295509295909350565b60805160a05160c05160e0516101005161164962000227600039600081816101680152818161067b0152818161080f01528181610ddc0152610f6c0152600081816101210152818161070b015281816107930152818161085901528181610e6801528181610ef00152610fb60152600061020d01526000818161027d0152818161048d015261056a0152600081816101ce015281816106460152610da401526116496000f3fe608060405234801561001057600080fd5b50600436106100e65760003560e01c806316c38b3c146100eb57806317a3cc82146101005780631db9be1b1461011c57806322c8018f14610150578063254800d4146101635780632a7c6fbd146101a15780632eb4a7ab146101b4578063365a86fc146101c95780635c975abb146101f057806361d027b314610208578063715018a61461022f578063834fa310146102375780638da5cb5b1461024a5780639811445c14610252578063b9e8ce2c14610265578063bbc5703714610278578063c884ef831461029f578063f2fde38b146102c2575b600080fd5b6100fe6100f9366004611175565b6102d5565b005b61010960015481565b6040519081526020015b60405180910390f35b6101437f000000000000000000000000000000000000000000000000000000000000000081565b6040516101139190611192565b6100fe61015e3660046111f1565b6102f6565b61018a7f000000000000000000000000000000000000000000000000000000000000000081565b60405165ffffffffffff9091168152602001610113565b6100fe6101af366004611251565b61030f565b6101096000805160206115f483398151915281565b6101437f000000000000000000000000000000000000000000000000000000000000000081565b6101f8610329565b6040519015158152602001610113565b6101437f000000000000000000000000000000000000000000000000000000000000000081565b6100fe610339565b6100fe6102453660046112b9565b61034d565b610143610442565b6100fe610260366004611352565b610451565b6100fe610273366004611393565b6108d7565b6101437f000000000000000000000000000000000000000000000000000000000000000081565b6101f86102ad366004611393565b60026020526000908152604090205460ff1681565b6100fe6102d0366004611393565b610a82565b6102dd610af8565b80156102ee576102eb610b57565b50565b6102eb610bb1565b6102fe610bed565b61030a33848484610c35565b505050565b610317610bed565b61032384848484610c35565b50505050565b600054600160a01b900460ff1690565b610341610af8565b61034b6000611035565b565b610355610bed565b848314801561036357508481145b6103b05760405162461bcd60e51b8152602060048201526019602482015278121d58905a5c991c9bdc0e881a5b9d985b1a59081a5b9c1d5d603a1b60448201526064015b60405180910390fd5b60005b85811015610439576104278787838181106103d0576103d06113b0565b90506020020160208101906103e59190611393565b8686848181106103f7576103f76113b0565b90506020020135858585818110610410576104106113b0565b905060200281019061042291906113c6565b610c35565b8061043181611425565b9150506103b3565b50505050505050565b6000546001600160a01b031690565b610459610bed565b60005b8181101561061b576000838383818110610478576104786113b0565b905060200201359050336001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636352211e836040518263ffffffff1660e01b81526004016104d991815260200190565b602060405180830381865afa1580156104f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051a919061143e565b6001600160a01b0316146105685760405162461bcd60e51b8152602060048201526015602482015274243ab120b4b9323937b81d103737ba1037bbb732b960591b60448201526064016103a7565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166323b872dd336105a0610442565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260448101849052606401600060405180830381600087803b1580156105ef57600080fd5b505af1158015610603573d6000803e3d6000fd5b5050505050808061061390611425565b91505061045c565b5060015460009061062c908361145b565b604080516101608101825260008082526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660208301819052338385015265ffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660608401526103e8608084015262278d0060a084015262ed4e0060c08401526001600160c01b03851660e08401526000805160206115d48339815191526101008401526101208301829052610140830191909152915163095ea7b360e01b81529293509163095ea7b390610735907f0000000000000000000000000000000000000000000000000000000000000000908690600401611472565b6020604051808303816000875af1158015610754573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610778919061148b565b5060405163688a048560e11b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d114090a906107c89085906004016114a8565b60408051808303816000875af11580156107e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080a919061158a565b5090507f000000000000000000000000000000000000000000000000000000000000000065ffffffffffff1642106108d0576040516333e04d9160e21b815260006004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063cf813644906044016020604051808303816000875af11580156108aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ce91906115ba565b505b5050505050565b6108df610af8565b6001600160a01b03811660000361099e5760006108fa610442565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610944576040519150601f19603f3d011682016040523d82523d6000602084013e610949565b606091505b505090508061099a5760405162461bcd60e51b815260206004820152601f60248201527f48756241697264726f703a204554485f5452414e534645525f4641494c45440060448201526064016103a7565b5050565b806001600160a01b031663a9059cbb6109b5610442565b6040516370a0823160e01b81526001600160a01b038516906370a08231906109e1903090600401611192565b602060405180830381865afa1580156109fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2291906115ba565b6040518363ffffffff1660e01b8152600401610a3f929190611472565b6020604051808303816000875af1158015610a5e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099a919061148b565b610a8a610af8565b6001600160a01b038116610aef5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103a7565b6102eb81611035565b33610b01610442565b6001600160a01b03161461034b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103a7565b610b5f610bed565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b9a3390565b604051610ba79190611192565b60405180910390a1565b610bb9611085565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33610b9a565b610bf5610329565b1561034b5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016103a7565b6001600160a01b03841660009081526002602052604090205460ff1615610c9c5760405162461bcd60e51b815260206004820152601b60248201527a121d58905a5c991c9bdc0e88185b1c9958591e4818db185a5b5959602a1b60448201526064016103a7565b6040516001600160601b0319606086901b16602082015260348101849052600090605401604051602081830303815290604052805190602001209050610d268383808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506000805160206115f483398151915292508591506110d09050565b610d6f5760405162461bcd60e51b815260206004820152601a602482015279243ab120b4b9323937b81d1024b73b30b634b210383937b7b31760311b60448201526064016103a7565b6001600160a01b038086166000818152600260209081526040808320805460ff191660011790558051610160810182528381527f00000000000000000000000000000000000000000000000000000000000000009095169185018290528481019390935265ffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001660608501526103e8608085015262278d0060a085015262ed4e0060c08501526001600160c01b03881660e08501526000805160206115d48339815191526101008501526101208401829052610140840191909152905163095ea7b360e01b815263095ea7b390610e92907f0000000000000000000000000000000000000000000000000000000000000000908990600401611472565b6020604051808303816000875af1158015610eb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed5919061148b565b5060405163688a048560e11b81526000906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063d114090a90610f259085906004016114a8565b60408051808303816000875af1158015610f43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f67919061158a565b5090507f000000000000000000000000000000000000000000000000000000000000000065ffffffffffff164210610439576040516333e04d9160e21b815260006004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063cf813644906044016020604051808303816000875af1158015611007573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102b91906115ba565b5050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61108d610329565b61034b5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016103a7565b6000826110dd85846110e6565b14949350505050565b600081815b845181101561112b576111178286838151811061110a5761110a6113b0565b6020026020010151611135565b91508061112381611425565b9150506110eb565b5090505b92915050565b6000818310611151576000828152602084905260409020611160565b60008381526020839052604090205b9392505050565b80151581146102eb57600080fd5b60006020828403121561118757600080fd5b813561116081611167565b6001600160a01b0391909116815260200190565b60008083601f8401126111b857600080fd5b5081356001600160401b038111156111cf57600080fd5b6020830191508360208260051b85010111156111ea57600080fd5b9250929050565b60008060006040848603121561120657600080fd5b8335925060208401356001600160401b0381111561122357600080fd5b61122f868287016111a6565b9497909650939450505050565b6001600160a01b03811681146102eb57600080fd5b6000806000806060858703121561126757600080fd5b84356112728161123c565b93506020850135925060408501356001600160401b0381111561129457600080fd5b6112a0878288016111a6565b95989497509550505050565b6001600160a01b03169052565b600080600080600080606087890312156112d257600080fd5b86356001600160401b03808211156112e957600080fd5b6112f58a838b016111a6565b9098509650602089013591508082111561130e57600080fd5b61131a8a838b016111a6565b9096509450604089013591508082111561133357600080fd5b5061134089828a016111a6565b979a9699509497509295939492505050565b6000806020838503121561136557600080fd5b82356001600160401b0381111561137b57600080fd5b611387858286016111a6565b90969095509350505050565b6000602082840312156113a557600080fd5b81356111608161123c565b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126113dd57600080fd5b8301803591506001600160401b038211156113f757600080fd5b6020019150600581901b36038213156111ea57600080fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016114375761143761140f565b5060010190565b60006020828403121561145057600080fd5b81516111608161123c565b808202811582820484141761112f5761112f61140f565b6001600160a01b03929092168252602082015260400190565b60006020828403121561149d57600080fd5b815161116081611167565b815181526020808301516101608301916114c4908401826112ac565b5060408301516114d760408401826112ac565b5060608301516114f1606084018265ffffffffffff169052565b506080830151611507608084018261ffff169052565b5060a083015161152160a084018265ffffffffffff169052565b5060c083015161153b60c084018265ffffffffffff169052565b5060e083015161155660e08401826001600160c01b03169052565b5061010083810151908301526101208084015115159083015261014080840151611582828501826112ac565b505092915050565b6000806040838503121561159d57600080fd5b8251915060208301516115af8161123c565b809150509250929050565b6000602082840312156115cc57600080fd5b505191905056fecff8a2a4dc9d8050baca90b7a315a144de7e38fa773edf442d524939ffcce3fac16062aae93cac69c3ec3e811f24177509c2fe8c64a97743a95827bcb4e3b8eba26469706673582212206e29ce3aaf66a293220ea3cbd543cf464a01292c208bbbc8b28f5bca9e3d7bf364736f6c634300081300330000000000000000000000006923f9b683111dcc0e20124e9a031deeae5dad93000000000000000000000000d2e53a95facbd47fe3973b913cb91fa3b013bbf5000000000000000000000000dd48fa33ab3e6a094b1ca89c1578b9ca96d0e56300000000000000000000000046a43cf26743ba40d05ae350a85abba4883a629900000000000000000000000000000000000000000000000000000000654a9740
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100e65760003560e01c806316c38b3c146100eb57806317a3cc82146101005780631db9be1b1461011c57806322c8018f14610150578063254800d4146101635780632a7c6fbd146101a15780632eb4a7ab146101b4578063365a86fc146101c95780635c975abb146101f057806361d027b314610208578063715018a61461022f578063834fa310146102375780638da5cb5b1461024a5780639811445c14610252578063b9e8ce2c14610265578063bbc5703714610278578063c884ef831461029f578063f2fde38b146102c2575b600080fd5b6100fe6100f9366004611175565b6102d5565b005b61010960015481565b6040519081526020015b60405180910390f35b6101437f00000000000000000000000046a43cf26743ba40d05ae350a85abba4883a629981565b6040516101139190611192565b6100fe61015e3660046111f1565b6102f6565b61018a7f00000000000000000000000000000000000000000000000000000000654a974081565b60405165ffffffffffff9091168152602001610113565b6100fe6101af366004611251565b61030f565b6101096000805160206115f483398151915281565b6101437f0000000000000000000000006923f9b683111dcc0e20124e9a031deeae5dad9381565b6101f8610329565b6040519015158152602001610113565b6101437f000000000000000000000000dd48fa33ab3e6a094b1ca89c1578b9ca96d0e56381565b6100fe610339565b6100fe6102453660046112b9565b61034d565b610143610442565b6100fe610260366004611352565b610451565b6100fe610273366004611393565b6108d7565b6101437f000000000000000000000000d2e53a95facbd47fe3973b913cb91fa3b013bbf581565b6101f86102ad366004611393565b60026020526000908152604090205460ff1681565b6100fe6102d0366004611393565b610a82565b6102dd610af8565b80156102ee576102eb610b57565b50565b6102eb610bb1565b6102fe610bed565b61030a33848484610c35565b505050565b610317610bed565b61032384848484610c35565b50505050565b600054600160a01b900460ff1690565b610341610af8565b61034b6000611035565b565b610355610bed565b848314801561036357508481145b6103b05760405162461bcd60e51b8152602060048201526019602482015278121d58905a5c991c9bdc0e881a5b9d985b1a59081a5b9c1d5d603a1b60448201526064015b60405180910390fd5b60005b85811015610439576104278787838181106103d0576103d06113b0565b90506020020160208101906103e59190611393565b8686848181106103f7576103f76113b0565b90506020020135858585818110610410576104106113b0565b905060200281019061042291906113c6565b610c35565b8061043181611425565b9150506103b3565b50505050505050565b6000546001600160a01b031690565b610459610bed565b60005b8181101561061b576000838383818110610478576104786113b0565b905060200201359050336001600160a01b03167f000000000000000000000000d2e53a95facbd47fe3973b913cb91fa3b013bbf56001600160a01b0316636352211e836040518263ffffffff1660e01b81526004016104d991815260200190565b602060405180830381865afa1580156104f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051a919061143e565b6001600160a01b0316146105685760405162461bcd60e51b8152602060048201526015602482015274243ab120b4b9323937b81d103737ba1037bbb732b960591b60448201526064016103a7565b7f000000000000000000000000d2e53a95facbd47fe3973b913cb91fa3b013bbf56001600160a01b03166323b872dd336105a0610442565b6040516001600160e01b031960e085901b1681526001600160a01b0392831660048201529116602482015260448101849052606401600060405180830381600087803b1580156105ef57600080fd5b505af1158015610603573d6000803e3d6000fd5b5050505050808061061390611425565b91505061045c565b5060015460009061062c908361145b565b604080516101608101825260008082526001600160a01b037f0000000000000000000000006923f9b683111dcc0e20124e9a031deeae5dad931660208301819052338385015265ffffffffffff7f00000000000000000000000000000000000000000000000000000000654a97401660608401526103e8608084015262278d0060a084015262ed4e0060c08401526001600160c01b03851660e08401526000805160206115d48339815191526101008401526101208301829052610140830191909152915163095ea7b360e01b81529293509163095ea7b390610735907f00000000000000000000000046a43cf26743ba40d05ae350a85abba4883a6299908690600401611472565b6020604051808303816000875af1158015610754573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610778919061148b565b5060405163688a048560e11b81526000906001600160a01b037f00000000000000000000000046a43cf26743ba40d05ae350a85abba4883a6299169063d114090a906107c89085906004016114a8565b60408051808303816000875af11580156107e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080a919061158a565b5090507f00000000000000000000000000000000000000000000000000000000654a974065ffffffffffff1642106108d0576040516333e04d9160e21b815260006004820152602481018290527f00000000000000000000000046a43cf26743ba40d05ae350a85abba4883a62996001600160a01b03169063cf813644906044016020604051808303816000875af11580156108aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ce91906115ba565b505b5050505050565b6108df610af8565b6001600160a01b03811660000361099e5760006108fa610442565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610944576040519150601f19603f3d011682016040523d82523d6000602084013e610949565b606091505b505090508061099a5760405162461bcd60e51b815260206004820152601f60248201527f48756241697264726f703a204554485f5452414e534645525f4641494c45440060448201526064016103a7565b5050565b806001600160a01b031663a9059cbb6109b5610442565b6040516370a0823160e01b81526001600160a01b038516906370a08231906109e1903090600401611192565b602060405180830381865afa1580156109fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2291906115ba565b6040518363ffffffff1660e01b8152600401610a3f929190611472565b6020604051808303816000875af1158015610a5e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061099a919061148b565b610a8a610af8565b6001600160a01b038116610aef5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103a7565b6102eb81611035565b33610b01610442565b6001600160a01b03161461034b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103a7565b610b5f610bed565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b9a3390565b604051610ba79190611192565b60405180910390a1565b610bb9611085565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33610b9a565b610bf5610329565b1561034b5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016103a7565b6001600160a01b03841660009081526002602052604090205460ff1615610c9c5760405162461bcd60e51b815260206004820152601b60248201527a121d58905a5c991c9bdc0e88185b1c9958591e4818db185a5b5959602a1b60448201526064016103a7565b6040516001600160601b0319606086901b16602082015260348101849052600090605401604051602081830303815290604052805190602001209050610d268383808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506000805160206115f483398151915292508591506110d09050565b610d6f5760405162461bcd60e51b815260206004820152601a602482015279243ab120b4b9323937b81d1024b73b30b634b210383937b7b31760311b60448201526064016103a7565b6001600160a01b038086166000818152600260209081526040808320805460ff191660011790558051610160810182528381527f0000000000000000000000006923f9b683111dcc0e20124e9a031deeae5dad939095169185018290528481019390935265ffffffffffff7f00000000000000000000000000000000000000000000000000000000654a97401660608501526103e8608085015262278d0060a085015262ed4e0060c08501526001600160c01b03881660e08501526000805160206115d48339815191526101008501526101208401829052610140840191909152905163095ea7b360e01b815263095ea7b390610e92907f00000000000000000000000046a43cf26743ba40d05ae350a85abba4883a6299908990600401611472565b6020604051808303816000875af1158015610eb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed5919061148b565b5060405163688a048560e11b81526000906001600160a01b037f00000000000000000000000046a43cf26743ba40d05ae350a85abba4883a6299169063d114090a90610f259085906004016114a8565b60408051808303816000875af1158015610f43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f67919061158a565b5090507f00000000000000000000000000000000000000000000000000000000654a974065ffffffffffff164210610439576040516333e04d9160e21b815260006004820152602481018290527f00000000000000000000000046a43cf26743ba40d05ae350a85abba4883a62996001600160a01b03169063cf813644906044016020604051808303816000875af1158015611007573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102b91906115ba565b5050505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61108d610329565b61034b5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016103a7565b6000826110dd85846110e6565b14949350505050565b600081815b845181101561112b576111178286838151811061110a5761110a6113b0565b6020026020010151611135565b91508061112381611425565b9150506110eb565b5090505b92915050565b6000818310611151576000828152602084905260409020611160565b60008381526020839052604090205b9392505050565b80151581146102eb57600080fd5b60006020828403121561118757600080fd5b813561116081611167565b6001600160a01b0391909116815260200190565b60008083601f8401126111b857600080fd5b5081356001600160401b038111156111cf57600080fd5b6020830191508360208260051b85010111156111ea57600080fd5b9250929050565b60008060006040848603121561120657600080fd5b8335925060208401356001600160401b0381111561122357600080fd5b61122f868287016111a6565b9497909650939450505050565b6001600160a01b03811681146102eb57600080fd5b6000806000806060858703121561126757600080fd5b84356112728161123c565b93506020850135925060408501356001600160401b0381111561129457600080fd5b6112a0878288016111a6565b95989497509550505050565b6001600160a01b03169052565b600080600080600080606087890312156112d257600080fd5b86356001600160401b03808211156112e957600080fd5b6112f58a838b016111a6565b9098509650602089013591508082111561130e57600080fd5b61131a8a838b016111a6565b9096509450604089013591508082111561133357600080fd5b5061134089828a016111a6565b979a9699509497509295939492505050565b6000806020838503121561136557600080fd5b82356001600160401b0381111561137b57600080fd5b611387858286016111a6565b90969095509350505050565b6000602082840312156113a557600080fd5b81356111608161123c565b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126113dd57600080fd5b8301803591506001600160401b038211156113f757600080fd5b6020019150600581901b36038213156111ea57600080fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016114375761143761140f565b5060010190565b60006020828403121561145057600080fd5b81516111608161123c565b808202811582820484141761112f5761112f61140f565b6001600160a01b03929092168252602082015260400190565b60006020828403121561149d57600080fd5b815161116081611167565b815181526020808301516101608301916114c4908401826112ac565b5060408301516114d760408401826112ac565b5060608301516114f1606084018265ffffffffffff169052565b506080830151611507608084018261ffff169052565b5060a083015161152160a084018265ffffffffffff169052565b5060c083015161153b60c084018265ffffffffffff169052565b5060e083015161155660e08401826001600160c01b03169052565b5061010083810151908301526101208084015115159083015261014080840151611582828501826112ac565b505092915050565b6000806040838503121561159d57600080fd5b8251915060208301516115af8161123c565b809150509250929050565b6000602082840312156115cc57600080fd5b505191905056fecff8a2a4dc9d8050baca90b7a315a144de7e38fa773edf442d524939ffcce3fac16062aae93cac69c3ec3e811f24177509c2fe8c64a97743a95827bcb4e3b8eba26469706673582212206e29ce3aaf66a293220ea3cbd543cf464a01292c208bbbc8b28f5bca9e3d7bf364736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006923f9b683111dcc0e20124e9a031deeae5dad93000000000000000000000000d2e53a95facbd47fe3973b913cb91fa3b013bbf5000000000000000000000000dd48fa33ab3e6a094b1ca89c1578b9ca96d0e56300000000000000000000000046a43cf26743ba40d05ae350a85abba4883a629900000000000000000000000000000000000000000000000000000000654a9740
-----Decoded View---------------
Arg [0] : _hub (address): 0x6923F9B683111DCc0e20124e9A031dEeAE5DaD93
Arg [1] : _shareNft (address): 0xD2e53A95FaCbd47fe3973B913cB91FA3b013bbF5
Arg [2] : _treasury (address): 0xDD48fA33AB3e6A094B1cA89c1578B9ca96d0e563
Arg [3] : _lockFactory (address): 0x46A43cf26743BA40d05aE350A85ABBa4883A6299
Arg [4] : _vestingStart (uint48): 1699387200
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000006923f9b683111dcc0e20124e9a031deeae5dad93
Arg [1] : 000000000000000000000000d2e53a95facbd47fe3973b913cb91fa3b013bbf5
Arg [2] : 000000000000000000000000dd48fa33ab3e6a094b1ca89c1578b9ca96d0e563
Arg [3] : 00000000000000000000000046a43cf26743ba40d05ae350a85abba4883a6299
Arg [4] : 00000000000000000000000000000000000000000000000000000000654a9740
Deployed Bytecode Sourcemap
25495:5389:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30720:161;;;;;;:::i;:::-;;:::i;:::-;;25543:47;;;;;;;;;529:25:1;;;517:2;502:18;25543:47:0;;;;;;;;25713:50;;;;;;;;;;;;:::i;28278:179::-;;;;;;:::i;:::-;;:::i;26596:36::-;;;;;;;;1962:14:1;1950:27;;;1932:46;;1920:2;1905:18;26596:36:0;1788:196:1;28069:201:0;;;;;;:::i;:::-;;:::i;25792:112::-;;-1:-1:-1;;;;;;;;;;;25792:112:0;;25599:27;;;;;10916:86;;;:::i;:::-;;;3434:14:1;;3427:22;3409:41;;3397:2;3382:18;10916:86:0;3269:187:1;25673:33:0;;;;;13691:103;;;:::i;28465:467::-;;;;;;:::i;:::-;;:::i;13050:87::-;;;:::i;26783:1278::-;;;;;;:::i;:::-;;:::i;30211:501::-;;;;;;:::i;:::-;;:::i;25633:33::-;;;;;25913:39;;;;;;:::i;:::-;;;;;;;;;;;;;;;;13949:201;;;;;;:::i;:::-;;:::i;30720:161::-;12936:13;:11;:13::i;:::-;30787:7:::1;30783:91;;;30811:8;:6;:8::i;:::-;30720:161:::0;:::o;30783:91::-:1;30852:10;:8;:10::i;28278:179::-:0;10521:19;:17;:19::i;:::-;28405:44:::1;28421:10;28433:7;28442:6;;28405:15;:44::i;:::-;28278:179:::0;;;:::o;28069:201::-;10521:19;:17;:19::i;:::-;28223:39:::1;28239:5;28246:7;28255:6;;28223:15;:39::i;:::-;28069:201:::0;;;;:::o;10916:86::-;10963:4;10987:7;-1:-1:-1;;;10987:7:0;;;;;10916:86::o;13691:103::-;12936:13;:11;:13::i;:::-;13756:30:::1;13783:1;13756:18;:30::i;:::-;13691:103::o:0;28465:467::-;10521:19;:17;:19::i;:::-;28670:32;;::::1;:67:::0;::::1;;;-1:-1:-1::0;28706:31:0;;::::1;28670:67;28648:142;;;::::0;-1:-1:-1;;;28648:142:0;;6017:2:1;28648:142:0::1;::::0;::::1;5999:21:1::0;6056:2;6036:18;;;6029:30;-1:-1:-1;;;6075:18:1;;;6068:55;6140:18;;28648:142:0::1;;;;;;;;;28808:9;28803:122;28823:17:::0;;::::1;28803:122;;;28862:51;28878:6;;28885:1;28878:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;28889:8;;28898:1;28889:11;;;;;;;:::i;:::-;;;;;;;28902:7;;28910:1;28902:10;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;28862:15;:51::i;:::-;28842:3:::0;::::1;::::0;::::1;:::i;:::-;;;;28803:122;;;;28465:467:::0;;;;;;:::o;13050:87::-;13096:7;13123:6;-1:-1:-1;;;;;13123:6:0;;13050:87::o;26783:1278::-;10521:19;:17;:19::i;:::-;26897:9:::1;26892:309;26912:20:::0;;::::1;26892:309;;;26954:15;26972:9;;26982:1;26972:12;;;;;;;:::i;:::-;;;;;;;26954:30;;27054:10;-1:-1:-1::0;;;;;27025:39:0::1;:8;-1:-1:-1::0;;;;;27025:16:0::1;;27042:7;27025:25;;;;;;;;;;;;;529::1::0;;517:2;502:18;;383:177;27025:25:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27025:39:0::1;;26999:122;;;::::0;-1:-1:-1;;;26999:122:0;;7581:2:1;26999:122:0::1;::::0;::::1;7563:21:1::0;7620:2;7600:18;;;7593:30;-1:-1:-1;;;7639:18:1;;;7632:51;7700:18;;26999:122:0::1;7379:345:1::0;26999:122:0::1;27138:8;-1:-1:-1::0;;;;;27138:21:0::1;;27160:10;27172:7;:5;:7::i;:::-;27138:51;::::0;-1:-1:-1;;;;;;27138:51:0::1;::::0;;;;;;-1:-1:-1;;;;;7987:15:1;;;27138:51:0::1;::::0;::::1;7969:34:1::0;8039:15;;8019:18;;;8012:43;8071:18;;;8064:34;;;7904:18;;27138:51:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26939:262;26934:3;;;;;:::i;:::-;;;;26892:309;;;-1:-1:-1::0;27249:12:0::1;::::0;27213:14:::1;::::0;27230:31:::1;::::0;:9;:31:::1;:::i;:::-;27300:440;::::0;;::::1;::::0;::::1;::::0;;27274:23:::1;27300:440:::0;;;-1:-1:-1;;;;;27364:3:0::1;27300:440;;::::0;::::1;::::0;;;27393:10:::1;27300:440:::0;;;;::::1;27432:12;27300:440;::::0;;;;26674:4:::1;27300:440:::0;;;;26718:7:::1;27300:440:::0;;;;26763:11:::1;27300:440:::0;;;;-1:-1:-1;;;;;27300:440:0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27300:440:0;;;;;;;;;;;;;;;;;27777:41;;-1:-1:-1;;;27777:41:0;;27213:48;;-1:-1:-1;27300:440:0;27777:11:::1;::::0;:41:::1;::::0;27797:11:::1;::::0;27213:48;;27777:41:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;27852:38:0::1;::::0;-1:-1:-1;;;27852:38:0;;27832:14:::1;::::0;-1:-1:-1;;;;;27852:11:0::1;:28;::::0;::::1;::::0;:38:::1;::::0;27881:8;;27852:38:::1;;;:::i;:::-;;::::0;::::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27831:59;;;27972:12;27953:31;;:15;:31;27949:105;;28001:41;::::0;-1:-1:-1;;;28001:41:0;;28032:1:::1;28001:41;::::0;::::1;10947:25:1::0;10988:18;;;10981:34;;;28001:11:0::1;-1:-1:-1::0;;;;;28001:30:0::1;::::0;::::1;::::0;10920:18:1;;28001:41:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27949:105;26881:1180;;;26783:1278:::0;;:::o;30211:501::-;12936:13;:11;:13::i;:::-;-1:-1:-1;;;;;30288:20:0;::::1;30296:1;30288:20:::0;30284:421:::1;;30367:12;30393:7;:5;:7::i;:::-;-1:-1:-1::0;;;;;30385:21:0::1;30432;30385:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30366:106;;;30495:7;30487:51;;;::::0;-1:-1:-1;;;30487:51:0;;11627:2:1;30487:51:0::1;::::0;::::1;11609:21:1::0;11666:2;11646:18;;;11639:30;11705:33;11685:18;;;11678:61;11756:18;;30487:51:0::1;11425:355:1::0;30487:51:0::1;30310:240;30720:161:::0;:::o;30284:421::-:1;30578:6;-1:-1:-1::0;;;;;30571:23:0::1;;30613:7;:5;:7::i;:::-;30639:39;::::0;-1:-1:-1;;;30639:39:0;;-1:-1:-1;;;;;30639:24:0;::::1;::::0;::::1;::::0;:39:::1;::::0;30672:4:::1;::::0;30639:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30571:122;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13949:201::-:0;12936:13;:11;:13::i;:::-;-1:-1:-1;;;;;14038:22:0;::::1;14030:73;;;::::0;-1:-1:-1;;;14030:73:0;;11987:2:1;14030:73:0::1;::::0;::::1;11969:21:1::0;12026:2;12006:18;;;11999:30;12065:34;12045:18;;;12038:62;-1:-1:-1;;;12116:18:1;;;12109:36;12162:19;;14030:73:0::1;11785:402:1::0;14030:73:0::1;14114:28;14133:8;14114:18;:28::i;13215:132::-:0;9195:10;13279:7;:5;:7::i;:::-;-1:-1:-1;;;;;13279:23:0;;13271:68;;;;-1:-1:-1;;;13271:68:0;;12394:2:1;13271:68:0;;;12376:21:1;;;12413:18;;;12406:30;12472:34;12452:18;;;12445:62;12524:18;;13271:68:0;12192:356:1;11512:118:0;10521:19;:17;:19::i;:::-;11572:7:::1;:14:::0;;-1:-1:-1;;;;11572:14:0::1;-1:-1:-1::0;;;11572:14:0::1;::::0;;11602:20:::1;11609:12;9195:10:::0;;9115:98;11609:12:::1;11602:20;;;;;;:::i;:::-;;;;;;;;11512:118::o:0;11771:120::-;10780:16;:14;:16::i;:::-;11840:5:::1;11830:15:::0;;-1:-1:-1;;;;11830:15:0::1;::::0;;11861:22:::1;9195:10:::0;11870:12:::1;9115:98:::0;11075:108;11146:8;:6;:8::i;:::-;11145:9;11137:38;;;;-1:-1:-1;;;11137:38:0;;12755:2:1;11137:38:0;;;12737:21:1;12794:2;12774:18;;;12767:30;-1:-1:-1;;;12813:18:1;;;12806:46;12869:18;;11137:38:0;12553:340:1;28940:1263:0;-1:-1:-1;;;;;29087:14:0;;;;;;:7;:14;;;;;;;;29086:15;29078:55;;;;-1:-1:-1;;;29078:55:0;;13100:2:1;29078:55:0;;;13082:21:1;13139:2;13119:18;;;13112:30;-1:-1:-1;;;13158:18:1;;;13151:57;13225:18;;29078:55:0;12898:351:1;29078:55:0;29208:32;;-1:-1:-1;;;;;;13456:2:1;13427:15;;;13423:45;29208:32:0;;;13411:58:1;13485:12;;;13478:28;;;29183:12:0;;13522::1;;29208:32:0;;;;;;;;;;;;29198:43;;;;;;29183:58;;29274:44;29293:6;;29274:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;25838:66:0;-1:-1:-1;29313:4:0;;-1:-1:-1;29274:18:0;;-1:-1:-1;29274:44:0:i;:::-;29252:120;;;;-1:-1:-1;;;29252:120:0;;13747:2:1;29252:120:0;;;13729:21:1;13786:2;13766:18;;;13759:30;-1:-1:-1;;;13805:18:1;;;13798:56;13871:18;;29252:120:0;13545:350:1;29252:120:0;-1:-1:-1;;;;;29385:14:0;;;;;;;:7;:14;;;;;;;;:21;;-1:-1:-1;;29385:21:0;29402:4;29385:21;;;29445:436;;;;;;;;;;29509:3;29445:436;;;;;;;;;;;;;;;;;29572:12;29445:436;;;;;26674:4;29445:436;;;;26718:7;29445:436;;;;26763:11;29445:436;;;;-1:-1:-1;;;;;29445:436:0;;;;;;-1:-1:-1;;;;;;;;;;;29385:21:0;29445:436;;;;;;;;;;;;;;;;29918:42;;-1:-1:-1;;;29918:42:0;;:11;;:42;;29938:11;;29755:7;;29918:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;29994:38:0;;-1:-1:-1;;;29994:38:0;;29974:14;;-1:-1:-1;;;;;29994:11:0;:28;;;;:38;;30023:8;;29994:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29973:59;;;30114:12;30095:31;;:15;:31;30091:105;;30143:41;;-1:-1:-1;;;30143:41:0;;30174:1;30143:41;;;10947:25:1;10988:18;;;10981:34;;;30143:11:0;-1:-1:-1;;;;;30143:30:0;;;;10920:18:1;;30143:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29067:1136;;;28940:1263;;;;:::o;14310:191::-;14384:16;14403:6;;-1:-1:-1;;;;;14420:17:0;;;-1:-1:-1;;;;;;14420:17:0;;;;;;14453:40;;14403:6;;;;;;;14453:40;;14384:16;14453:40;14373:128;14310:191;:::o;11260:108::-;11327:8;:6;:8::i;:::-;11319:41;;;;-1:-1:-1;;;11319:41:0;;14102:2:1;11319:41:0;;;14084:21:1;14141:2;14121:18;;;14114:30;-1:-1:-1;;;14160:18:1;;;14153:50;14220:18;;11319:41:0;13900:344:1;15633:156:0;15724:4;15777;15748:25;15761:5;15768:4;15748:12;:25::i;:::-;:33;;15633:156;-1:-1:-1;;;;15633:156:0:o;16432:296::-;16515:7;16558:4;16515:7;16573:118;16597:5;:12;16593:1;:16;16573:118;;;16646:33;16656:12;16670:5;16676:1;16670:8;;;;;;;;:::i;:::-;;;;;;;16646:9;:33::i;:::-;16631:48;-1:-1:-1;16611:3:0;;;;:::i;:::-;;;;16573:118;;;-1:-1:-1;16708:12:0;-1:-1:-1;16432:296:0;;;;;:::o;23870:149::-;23933:7;23964:1;23960;:5;:51;;24095:13;24189:15;;;24225:4;24218:15;;;24272:4;24256:21;;23960:51;;;24095:13;24189:15;;;24225:4;24218:15;;;24272:4;24256:21;;23968:20;23953:58;23870:149;-1:-1:-1;;;23870:149:0:o;14:118:1:-;100:5;93:13;86:21;79:5;76:32;66:60;;122:1;119;112:12;137:241;193:6;246:2;234:9;225:7;221:23;217:32;214:52;;;262:1;259;252:12;214:52;301:9;288:23;320:28;342:5;320:28;:::i;565:233::-;-1:-1:-1;;;;;759:32:1;;;;741:51;;729:2;714:18;;565:233::o;803:367::-;866:8;876:6;930:3;923:4;915:6;911:17;907:27;897:55;;948:1;945;938:12;897:55;-1:-1:-1;971:20:1;;-1:-1:-1;;;;;1003:30:1;;1000:50;;;1046:1;1043;1036:12;1000:50;1083:4;1075:6;1071:17;1059:29;;1143:3;1136:4;1126:6;1123:1;1119:14;1111:6;1107:27;1103:38;1100:47;1097:67;;;1160:1;1157;1150:12;1097:67;803:367;;;;;:::o;1175:505::-;1270:6;1278;1286;1339:2;1327:9;1318:7;1314:23;1310:32;1307:52;;;1355:1;1352;1345:12;1307:52;1378:23;;;-1:-1:-1;1452:2:1;1437:18;;1424:32;-1:-1:-1;;;;;1468:30:1;;1465:50;;;1511:1;1508;1501:12;1465:50;1550:70;1612:7;1603:6;1592:9;1588:22;1550:70;:::i;:::-;1175:505;;1639:8;;-1:-1:-1;1524:96:1;;-1:-1:-1;;;;1175:505:1:o;1989:131::-;-1:-1:-1;;;;;2064:31:1;;2054:42;;2044:70;;2110:1;2107;2100:12;2125:640;2229:6;2237;2245;2253;2306:2;2294:9;2285:7;2281:23;2277:32;2274:52;;;2322:1;2319;2312:12;2274:52;2361:9;2348:23;2380:31;2405:5;2380:31;:::i;:::-;2430:5;-1:-1:-1;2482:2:1;2467:18;;2454:32;;-1:-1:-1;2537:2:1;2522:18;;2509:32;-1:-1:-1;;;;;2553:30:1;;2550:50;;;2596:1;2593;2586:12;2550:50;2635:70;2697:7;2688:6;2677:9;2673:22;2635:70;:::i;:::-;2125:640;;;;-1:-1:-1;2724:8:1;-1:-1:-1;;;;2125:640:1:o;3461:104::-;-1:-1:-1;;;;;3527:31:1;3515:44;;3461:104::o;3778:1115::-;3963:6;3971;3979;3987;3995;4003;4056:2;4044:9;4035:7;4031:23;4027:32;4024:52;;;4072:1;4069;4062:12;4024:52;4099:23;;-1:-1:-1;;;;;4171:14:1;;;4168:34;;;4198:1;4195;4188:12;4168:34;4237:70;4299:7;4290:6;4279:9;4275:22;4237:70;:::i;:::-;4326:8;;-1:-1:-1;4211:96:1;-1:-1:-1;4414:2:1;4399:18;;4386:32;;-1:-1:-1;4430:16:1;;;4427:36;;;4459:1;4456;4449:12;4427:36;4498:72;4562:7;4551:8;4540:9;4536:24;4498:72;:::i;:::-;4589:8;;-1:-1:-1;4472:98:1;-1:-1:-1;4677:2:1;4662:18;;4649:32;;-1:-1:-1;4693:16:1;;;4690:36;;;4722:1;4719;4712:12;4690:36;;4761:72;4825:7;4814:8;4803:9;4799:24;4761:72;:::i;:::-;3778:1115;;;;-1:-1:-1;3778:1115:1;;-1:-1:-1;3778:1115:1;;4852:8;;3778:1115;-1:-1:-1;;;3778:1115:1:o;4898:437::-;4984:6;4992;5045:2;5033:9;5024:7;5020:23;5016:32;5013:52;;;5061:1;5058;5051:12;5013:52;5088:23;;-1:-1:-1;;;;;5123:30:1;;5120:50;;;5166:1;5163;5156:12;5120:50;5205:70;5267:7;5258:6;5247:9;5243:22;5205:70;:::i;:::-;5294:8;;5179:96;;-1:-1:-1;4898:437:1;-1:-1:-1;;;;4898:437:1:o;5340:247::-;5399:6;5452:2;5440:9;5431:7;5427:23;5423:32;5420:52;;;5468:1;5465;5458:12;5420:52;5507:9;5494:23;5526:31;5551:5;5526:31;:::i;6169:127::-;6230:10;6225:3;6221:20;6218:1;6211:31;6261:4;6258:1;6251:15;6285:4;6282:1;6275:15;6301:545;6394:4;6400:6;6460:11;6447:25;6554:2;6550:7;6539:8;6523:14;6519:29;6515:43;6495:18;6491:68;6481:96;;6573:1;6570;6563:12;6481:96;6600:33;;6652:20;;;-1:-1:-1;;;;;;6684:30:1;;6681:50;;;6727:1;6724;6717:12;6681:50;6760:4;6748:17;;-1:-1:-1;6811:1:1;6807:14;;;6791;6787:35;6777:46;;6774:66;;;6836:1;6833;6826:12;6851:127;6912:10;6907:3;6903:20;6900:1;6893:31;6943:4;6940:1;6933:15;6967:4;6964:1;6957:15;6983:135;7022:3;7043:17;;;7040:43;;7063:18;;:::i;:::-;-1:-1:-1;7110:1:1;7099:13;;6983:135::o;7123:251::-;7193:6;7246:2;7234:9;7225:7;7221:23;7217:32;7214:52;;;7262:1;7259;7252:12;7214:52;7294:9;7288:16;7313:31;7338:5;7313:31;:::i;8109:168::-;8182:9;;;8213;;8230:15;;;8224:22;;8210:37;8200:71;;8251:18;;:::i;8282:274::-;-1:-1:-1;;;;;8474:32:1;;;;8456:51;;8538:2;8523:18;;8516:34;8444:2;8429:18;;8282:274::o;8561:245::-;8628:6;8681:2;8669:9;8660:7;8656:23;8652:32;8649:52;;;8697:1;8694;8687:12;8649:52;8729:9;8723:16;8748:28;8770:5;8748:28;:::i;9015:1428::-;9228:13;;9210:32;;9289:4;9277:17;;;9271:24;9197:3;9182:19;;;9304:54;;9337:20;;9271:24;9304:54;:::i;:::-;;9407:4;9399:6;9395:17;9389:24;9422:56;9472:4;9461:9;9457:20;9441:14;9422:56;:::i;:::-;;9527:4;9519:6;9515:17;9509:24;9542:55;9591:4;9580:9;9576:20;9560:14;1761;1750:26;1738:39;;1685:98;9542:55;;9646:4;9638:6;9634:17;9628:24;9661:55;9710:4;9699:9;9695:20;9679:14;8887:6;8876:18;8864:31;;8811:90;9661:55;;9765:4;9757:6;9753:17;9747:24;9780:55;9829:4;9818:9;9814:20;9798:14;1761;1750:26;1738:39;;1685:98;9780:55;;9884:4;9876:6;9872:17;9866:24;9899:55;9948:4;9937:9;9933:20;9917:14;1761;1750:26;1738:39;;1685:98;9899:55;;10003:4;9995:6;9991:17;9985:24;10018:56;10068:4;10057:9;10053:20;10037:14;-1:-1:-1;;;;;8972:31:1;8960:44;;8906:104;10018:56;-1:-1:-1;10093:6:1;10141:15;;;10135:22;10115:18;;;10108:50;10177:6;10220:15;;;10214:22;3243:13;3236:21;10277:18;;;3224:34;10315:6;10358:15;;;10352:22;10383:54;10418:18;;;10352:22;10383:54;:::i;:::-;;;9015:1428;;;;:::o;10448:312::-;10527:6;10535;10588:2;10576:9;10567:7;10563:23;10559:32;10556:52;;;10604:1;10601;10594:12;10556:52;10633:9;10627:16;10617:26;;10686:2;10675:9;10671:18;10665:25;10699:31;10724:5;10699:31;:::i;:::-;10749:5;10739:15;;;10448:312;;;;;:::o;11026:184::-;11096:6;11149:2;11137:9;11128:7;11124:23;11120:32;11117:52;;;11165:1;11162;11155:12;11117:52;-1:-1:-1;11188:16:1;;11026:184;-1:-1:-1;11026:184:1:o
Swarm Source
ipfs://6e29ce3aaf66a293220ea3cbd543cf464a01292c208bbbc8b28f5bca9e3d7bf3
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.