More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 245 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Stake | 6688262 | 1 hr ago | IN | 0 APE | 0.00602498 | ||||
Stake | 6688145 | 1 hr ago | IN | 0 APE | 0.01552014 | ||||
Stake | 6680208 | 7 hrs ago | IN | 0 APE | 0.12946536 | ||||
Stake | 6663698 | 13 hrs ago | IN | 0 APE | 0.00602495 | ||||
Stake | 6663630 | 13 hrs ago | IN | 0 APE | 0.00602495 | ||||
Stake | 6663608 | 13 hrs ago | IN | 0 APE | 0.00602498 | ||||
Stake | 6663243 | 14 hrs ago | IN | 0 APE | 0.09148222 | ||||
Stake | 6662660 | 14 hrs ago | IN | 0 APE | 0.01552017 | ||||
Stake | 6652967 | 21 hrs ago | IN | 0 APE | 0.02976295 | ||||
Stake | 6652873 | 21 hrs ago | IN | 0 APE | 0.00602498 | ||||
Stake | 6652223 | 21 hrs ago | IN | 0 APE | 0.00602498 | ||||
Stake | 6651574 | 22 hrs ago | IN | 0 APE | 0.01552014 | ||||
Stake | 6651138 | 22 hrs ago | IN | 0 APE | 0.15795336 | ||||
Stake | 6640868 | 29 hrs ago | IN | 0 APE | 0.10572518 | ||||
Stake | 6638969 | 31 hrs ago | IN | 0 APE | 0.006025 | ||||
Stake | 6638953 | 31 hrs ago | IN | 0 APE | 0.00602498 | ||||
Stake | 6638216 | 31 hrs ago | IN | 0 APE | 0.04875319 | ||||
Stake | 6638171 | 31 hrs ago | IN | 0 APE | 0.0867332 | ||||
Stake | 6634964 | 33 hrs ago | IN | 0 APE | 0.01077275 | ||||
Stake | 6617992 | 39 hrs ago | IN | 0 APE | 0.00602498 | ||||
Stake | 6617907 | 39 hrs ago | IN | 0 APE | 0.04875319 | ||||
Stake | 6617819 | 39 hrs ago | IN | 0 APE | 0.02026794 | ||||
Stake | 6617476 | 39 hrs ago | IN | 0 APE | 0.0250136 | ||||
Stake | 6605994 | 47 hrs ago | IN | 0 APE | 0.00602495 | ||||
Stake | 6588438 | 2 days ago | IN | 0 APE | 0.00602498 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Staking
Compiler Version
v0.8.27+commit.40a35a09
Optimization Enabled:
Yes with 10000 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.27; /** * @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; } } /** * @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); } } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } function percentageOf(uint a, uint b) internal pure returns (uint256) { require(b > 0); return a * b / 100; } function percentageOf10000(uint a, uint b) internal pure returns (uint256) { require(b > 0); return a * b / 10000; } } interface IToken { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint); function mint(address to, uint256 amount) external; function burn(uint256 amount) external; event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } interface INft { event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); function balanceOf(address owner) external view returns (uint256 balance); function ownerOf(uint256 tokenId) external view returns (address owner); function transferFrom( address from, address to, uint256 tokenId ) external; function approve(address to, uint256 tokenId) external; function setApprovalForAll(address operator, bool _approved) external; function getApproved(uint256 tokenId) external view returns (address operator); function isApprovedForAll(address owner, address operator) external view returns (bool); } library TransferHelper { function safeApprove( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::safeApprove: approve failed' ); } function safeTransfer( address token, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::safeTransfer: transfer failed' ); } function safeTransferFrom( address token, address from, address to, uint256 value ) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::transferFrom: transferFrom failed' ); } function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require(success, 'TransferHelper::safeTransferETH: ETH transfer failed'); } function deposit(address _weth, uint256 _value) internal { (bool success, ) = _weth.call{value: _value}(new bytes(0)); require(success, 'TransferHelper::safeTransferETH: ETH transfer failed'); } function withdraw(address _weth, uint256 _value) internal { (bool success, bytes memory data) = _weth.call(abi.encodeWithSelector(0x2e1a7d4d, _value)); require( success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper::withdraw: withdraw failed' ); } } abstract contract BaseStake is Ownable { struct Pool { address erc721; uint duration; uint reward; } bytes32[] keys; mapping(bytes32 => Pool) values; mapping(bytes32 => uint256) indexOf; mapping(bytes32 => bool) inserted; uint private poolCounter; function get(bytes32 key) internal view returns (bytes32, address, uint, uint) { Pool memory val = values[key]; return (key, val.erc721, val.duration, val.reward); } function getKeyAtIndex(uint256 index) internal view returns (bytes32) { return keys[index]; } function size() internal view returns (uint256) { return keys.length; } function push( uint counter, address erc721, uint duration, uint reward) private { bytes32 key = keccak256(abi.encode(counter, erc721, duration, reward)); Pool memory val = Pool(erc721, duration, reward); if (inserted[key]) { values[key] = val; } else { inserted[key] = true; values[key] = val; indexOf[key] = keys.length; keys.push(key); } } function remove(bytes32 key) private { if (!inserted[key]) { return; } delete inserted[key]; delete values[key]; uint256 index = indexOf[key]; bytes32 lastKey = keys[keys.length - 1]; indexOf[lastKey] = index; delete indexOf[key]; keys[index] = lastKey; keys.pop(); } function _addPool(address erc721, uint duration, uint reward) internal { push(poolCounter, erc721, duration, reward); poolCounter += 1; } function _removePool(bytes32 key) internal { remove(key); } function getPools(bytes32 key) public view virtual returns (bytes32, address, uint, uint) { (bytes32 id, address nft, uint duration, uint reward) = get(key); return (id, nft, duration, reward); } function getPools() public view virtual returns (bytes32[] memory, address[] memory, uint[] memory, uint[] memory) { uint poolSize = size(); bytes32[] memory ids = new bytes32[](poolSize); address[] memory erc721 = new address[](poolSize); uint[] memory durations = new uint[](poolSize); uint[] memory rewards = new uint[](poolSize); for (uint256 i = 0; i < size(); i++) { bytes32 key = getKeyAtIndex(i); (bytes32 id, address nft, uint duration, uint reward) = get(key); ids[i] = id; erc721[i] = nft; durations[i] = duration; rewards[i] = reward; } return (ids, erc721, durations, rewards); } } contract Staking is BaseStake { using SafeMath for uint; struct Vesting { bytes32 uid; address erc721; uint tokenId; bytes32 poolId; uint duration; uint startDate; uint endDate; uint reward; } event LogStake(address sender, uint createdAt, bytes32 uid, address erc721, uint tokenId, bytes32 poolId, uint duration, uint startDate, uint endDate, uint reward); event LogUnstake(address sender, uint createdAt, bytes32 uid, address erc721, uint tokenId, bytes32 poolId, uint duration, uint startDate, uint endDate, uint reward); uint constant EXTRA_PERCENT = 10; bool public initiated; bool public paused; address public stakingToken; address public stakingNft; uint256 private decimal; mapping(bytes32 => Vesting) private staker; uint private stakerCount; constructor() BaseStake() { } modifier whenNotPaused() { require(!paused, "paused"); _; } function init(address erc20, address erc721, uint256 duration) onlyOwner external { require(!initiated, "already initiated"); stakingToken = erc20; stakingNft = erc721; decimal = 10 ** IToken(erc20).decimals(); _addPool(stakingNft, 10 * duration, 750 * decimal); _addPool(stakingNft, 30 * duration, 3500 * decimal); _addPool(stakingNft, 90 * duration, 16500 * decimal); initiated = true; } function pause(bool enable) onlyOwner external { paused = enable; } function addPool(address[] memory erc721, uint256[] memory duration, uint256[] memory reward) onlyOwner external { for (uint256 i = 0; i < erc721.length; i++) { _addPool(erc721[i], duration[i], reward[i]); } } function removePool(bytes32[] memory ids) onlyOwner external { for (uint256 i = 0; i < ids.length; i++) { _removePool(ids[i]); } } function stake(bytes32 poolId, address[] memory erc721, uint256[] memory tokenId, bool[] memory hasExtra) whenNotPaused external { require(erc721.length > 0 && erc721.length == tokenId.length && erc721.length == hasExtra.length, "input error"); require(balance() > 0, "pool empty"); (bytes32 _poolId, address _nft, uint _duration, uint _reward) = get(poolId); for (uint256 i = 0; i < erc721.length; i++) { bytes32 uid = nftHash(erc721[i], tokenId[i]); require(poolId == _poolId && erc721[i] == _nft, "pool not found"); require(staker[uid].uid == bytes32(0), "already staked"); require(INft(erc721[i]).ownerOf(tokenId[i]) == msg.sender, "not owner"); uint reward = _reward; if(stakingNft == erc721[i] && hasExtra[i]) { uint extra = reward.percentageOf(EXTRA_PERCENT); reward += extra; } Vesting memory item = Vesting(uid, erc721[i], tokenId[i], poolId, _duration, block.timestamp, block.timestamp + _duration, reward); staker[uid] = item; logStake(item); stakerCount += 1; } } function claimAndStake(address[] memory erc721, uint256[] memory tokenId) whenNotPaused external { require(erc721.length > 0 && erc721.length == tokenId.length, "input error"); require(balance() > 0, "pool empty"); uint totalReward = 0; for (uint256 i = 0; i < erc721.length; i++) { require(INft(erc721[i]).ownerOf(tokenId[i]) == msg.sender, "not owner"); bytes32 uid = nftHash(erc721[i], tokenId[i]); Vesting memory current = staker[uid]; require(current.uid != bytes32(0), "not staked"); require(block.timestamp > current.endDate, "not reached yet"); (bytes32 _poolId, , ,) = get(current.poolId); require(current.poolId == _poolId && current.erc721 == erc721[i], "pool not found"); logUnstake(current); totalReward += current.reward; Vesting memory item = Vesting(uid, erc721[i], tokenId[i], current.poolId, current.duration, block.timestamp, block.timestamp + current.duration, current.reward); staker[uid] = item; logStake(item); } sendReward(stakingToken, msg.sender, totalReward); } function unstake(address[] memory erc721, uint256[] memory tokenId) external { require(erc721.length > 0 && erc721.length == tokenId.length, "input error"); uint totalReward = 0; for (uint256 i = 0; i < erc721.length; i++) { require(INft(erc721[i]).ownerOf(tokenId[i]) == msg.sender, "not owner"); Vesting memory current = staker[nftHash(erc721[i], tokenId[i])]; require(current.uid != bytes32(0), "not staked"); require(block.timestamp > current.endDate, "not reached yet"); logUnstake(current); totalReward += current.reward; stakerCount -= 1; delete staker[current.uid]; } sendReward(stakingToken, msg.sender, totalReward); } function balance() public view returns (uint256) { return IToken(stakingToken).balanceOf(address(this)); } function logStake(Vesting memory data) private { emit LogStake(msg.sender, block.timestamp, data.uid, data.erc721, data.tokenId, data.poolId, data.duration, data.startDate, data.endDate, data.reward); } function logUnstake(Vesting memory data) private { emit LogUnstake(msg.sender, block.timestamp, data.uid, data.erc721, data.tokenId, data.poolId, data.duration, data.startDate, data.endDate, data.reward); } function nftHash(address nft, uint256 tokenId) private pure returns (bytes32) { return keccak256(abi.encode(nft, tokenId)); } function sendReward(address erc20, address recipient, uint amount) private returns (uint256) { uint _balance = balance(); if(_balance == 0 || amount == 0) { return 0; } if(_balance >= amount) { TransferHelper.safeTransfer(erc20, recipient, amount); return amount; } TransferHelper.safeTransfer(erc20, recipient, _balance); return _balance; } function participants() public view returns (uint256) { return stakerCount; } function vesting(address erc721, uint256 tokenId) public view returns (Vesting memory data) { return staker[nftHash(erc721, tokenId)]; } function vestings(address[] calldata erc721, uint256[] calldata tokenId) public view returns (Vesting[] memory data) { data = new Vesting[](erc721.length); for (uint256 i = 0; i < erc721.length; i++) { data[i] = staker[nftHash(erc721[i], tokenId[i])]; } } }
{ "optimizer": { "enabled": true, "runs": 10000 }, "evmVersion": "paris", "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"createdAt","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"uid","type":"bytes32"},{"indexed":false,"internalType":"address","name":"erc721","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"poolId","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startDate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endDate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"LogStake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"createdAt","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"uid","type":"bytes32"},{"indexed":false,"internalType":"address","name":"erc721","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"bytes32","name":"poolId","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"startDate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endDate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"LogUnstake","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address[]","name":"erc721","type":"address[]"},{"internalType":"uint256[]","name":"duration","type":"uint256[]"},{"internalType":"uint256[]","name":"reward","type":"uint256[]"}],"name":"addPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"balance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"erc721","type":"address[]"},{"internalType":"uint256[]","name":"tokenId","type":"uint256[]"}],"name":"claimAndStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getPools","outputs":[{"internalType":"bytes32[]","name":"","type":"bytes32[]"},{"internalType":"address[]","name":"","type":"address[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"key","type":"bytes32"}],"name":"getPools","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"erc20","type":"address"},{"internalType":"address","name":"erc721","type":"address"},{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initiated","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"participants","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enable","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"ids","type":"bytes32[]"}],"name":"removePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"poolId","type":"bytes32"},{"internalType":"address[]","name":"erc721","type":"address[]"},{"internalType":"uint256[]","name":"tokenId","type":"uint256[]"},{"internalType":"bool[]","name":"hasExtra","type":"bool[]"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingNft","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingToken","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":[{"internalType":"address[]","name":"erc721","type":"address[]"},{"internalType":"uint256[]","name":"tokenId","type":"uint256[]"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"erc721","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"vesting","outputs":[{"components":[{"internalType":"bytes32","name":"uid","type":"bytes32"},{"internalType":"address","name":"erc721","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes32","name":"poolId","type":"bytes32"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"startDate","type":"uint256"},{"internalType":"uint256","name":"endDate","type":"uint256"},{"internalType":"uint256","name":"reward","type":"uint256"}],"internalType":"struct Staking.Vesting","name":"data","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"erc721","type":"address[]"},{"internalType":"uint256[]","name":"tokenId","type":"uint256[]"}],"name":"vestings","outputs":[{"components":[{"internalType":"bytes32","name":"uid","type":"bytes32"},{"internalType":"address","name":"erc721","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes32","name":"poolId","type":"bytes32"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"startDate","type":"uint256"},{"internalType":"uint256","name":"endDate","type":"uint256"},{"internalType":"uint256","name":"reward","type":"uint256"}],"internalType":"struct Staking.Vesting[]","name":"data","type":"tuple[]"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052348015600f57600080fd5b50601733601b565b606b565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b612ecd8061007a6000396000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c8063715018a6116100cd578063b69ef8a811610081578063cfa4a6a611610066578063cfa4a6a6146102ec578063e5b4752214610327578063f2fde38b1461033a57600080fd5b8063b69ef8a8146102d1578063bcca1e04146102d957600080fd5b806386863ec6116100b257806386863ec6146102a05780638da5cb5b146102b35780639f118536146102c457600080fd5b8063715018a61461027f57806372f702f31461028757600080fd5b80635c975abb116101245780636982d815116101095780636982d815146102225780636b1309991461024d5780636c4470fb1461026d57600080fd5b80635c975abb146101e8578063673a2a1f1461020a57600080fd5b80630f3da118116101555780630f3da11814610199578063143ee5b9146101ac5780633628a8ed146101d557600080fd5b806302329a29146101715780630666c68114610186575b600080fd5b61018461017f366004612455565b61034d565b005b610184610194366004612514565b6103e3565b6101846101a7366004612693565b610477565b6101bf6101ba366004612727565b610541565b6040516101cc9190612753565b60405180910390f35b6101846101e33660046127b4565b61062f565b6006546101fa90610100900460ff1681565b60405190151581526020016101cc565b610212610c0e565b6040516101cc9493929190612859565b600754610235906001600160a01b031681565b6040516001600160a01b0390911681526020016101cc565b61026061025b366004612958565b610e5f565b6040516101cc91906129c9565b600a545b6040519081526020016101cc565b61018461103b565b600654610235906201000090046001600160a01b031681565b6101846102ae366004612a6a565b6110a1565b6000546001600160a01b0316610235565b6006546101fa9060ff1681565b6102716112f5565b6101846102e73660046127b4565b611386565b6102ff6102fa366004612aab565b6116dc565b604080519485526001600160a01b0390931660208501529183015260608201526080016101cc565b610184610335366004612ac4565b611745565b610184610348366004612bc4565b611c9a565b6000546001600160a01b031633146103ac5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b60068054911515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909216919091179055565b6000546001600160a01b0316331461043d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103a3565b60005b81518110156104735761046b82828151811061045e5761045e612be1565b6020026020010151611d7c565b600101610440565b5050565b6000546001600160a01b031633146104d15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103a3565b60005b835181101561053b576105338482815181106104f2576104f2612be1565b602002602001015184838151811061050c5761050c612be1565b602002602001015184848151811061052657610526612be1565b6020026020010151611d85565b6001016104d4565b50505050565b60408051610100810182526000808252602080830182905282840182905260608084018390526080840183905260a0840183905260c0840183905260e0840183905284516001600160a01b03881681840152808601879052855180820387018152910190945283519301929092209091600991815260208082019290925260409081016000208151610100810183528154815260018201546001600160a01b0316938101939093526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015290505b92915050565b600654610100900460ff16156106875760405162461bcd60e51b815260206004820152600660248201527f706175736564000000000000000000000000000000000000000000000000000060448201526064016103a3565b60008251118015610699575080518251145b6106e55760405162461bcd60e51b815260206004820152600b60248201527f696e707574206572726f7200000000000000000000000000000000000000000060448201526064016103a3565b60006106ef6112f5565b1161073c5760405162461bcd60e51b815260206004820152600a60248201527f706f6f6c20656d7074790000000000000000000000000000000000000000000060448201526064016103a3565b6000805b8351811015610bf057336001600160a01b031684828151811061076557610765612be1565b60200260200101516001600160a01b0316636352211e85848151811061078d5761078d612be1565b60200260200101516040518263ffffffff1660e01b81526004016107b391815260200190565b602060405180830381865afa1580156107d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f49190612c10565b6001600160a01b03161461084a5760405162461bcd60e51b815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016103a3565b60006108c085838151811061086157610861612be1565b602002602001015185848151811061087b5761087b612be1565b6020026020010151604080516001600160a01b038416602082015290810182905260009060600160405160208183030381529060405280519060200120905092915050565b600081815260096020908152604091829020825161010081018452815480825260018301546001600160a01b0316938201939093526002820154938101939093526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e0830152919250906109825760405162461bcd60e51b815260206004820152600a60248201527f6e6f74207374616b65640000000000000000000000000000000000000000000060448201526064016103a3565b8060c0015142116109d55760405162461bcd60e51b815260206004820152600f60248201527f6e6f74207265616368656420796574000000000000000000000000000000000060448201526064016103a3565b606081810180516000818152600260208181526040928390208351968701845280546001600160a01b0316875260018101549187019190915201549301929092525181148015610a535750868481518110610a3257610a32612be1565b60200260200101516001600160a01b031682602001516001600160a01b0316145b610a9f5760405162461bcd60e51b815260206004820152600e60248201527f706f6f6c206e6f7420666f756e6400000000000000000000000000000000000060448201526064016103a3565b610aa882611db0565b60e0820151610ab79086612c5c565b94506000604051806101000160405280858152602001898781518110610adf57610adf612be1565b60200260200101516001600160a01b03168152602001888781518110610b0757610b07612be1565b602002602001015181526020018460600151815260200184608001518152602001428152602001846080015142610b3e9190612c5c565b815260e08581015160209283015260008781526009835260409081902084518155928401516001840180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039092169190911790558301516002830155606083015160038301556080830151600483015560a0830151600583015560c083015160068301558201516007909101559050610be081611e5f565b5050600190920191506107409050565b5060065461053b906201000090046001600160a01b03163383611f07565b6060806060806000610c1f60015490565b905060008167ffffffffffffffff811115610c3c57610c3c612472565b604051908082528060200260200182016040528015610c65578160200160208202803683370190505b50905060008267ffffffffffffffff811115610c8357610c83612472565b604051908082528060200260200182016040528015610cac578160200160208202803683370190505b50905060008367ffffffffffffffff811115610cca57610cca612472565b604051908082528060200260200182016040528015610cf3578160200160208202803683370190505b50905060008467ffffffffffffffff811115610d1157610d11612472565b604051908082528060200260200182016040528015610d3a578160200160208202803683370190505b50905060005b600154811015610e4f576000610d5582611f5e565b9050600080600080610da785600081815260026020818152604092839020835160608101855281546001600160a01b031680825260018301549382018490529190930154929093018290529293919291565b9350935093509350838a8781518110610dc257610dc2612be1565b60200260200101818152505082898781518110610de157610de1612be1565b60200260200101906001600160a01b031690816001600160a01b03168152505081888781518110610e1457610e14612be1565b60200260200101818152505080878781518110610e3357610e33612be1565b6020908102919091010152505060019093019250610d40915050565b5092989197509550909350915050565b60608367ffffffffffffffff811115610e7a57610e7a612472565b604051908082528060200260200182016040528015610f0757816020015b604080516101008101825260008082526020808301829052928201819052606082018190526080820181905260a0820181905260c0820181905260e082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610e985790505b50905060005b848110156110325760096000610f99888885818110610f2e57610f2e612be1565b9050602002016020810190610f439190612bc4565b878786818110610f5557610f55612be1565b90506020020135604080516001600160a01b038416602082015290810182905260009060600160405160208183030381529060405280519060200120905092915050565b815260208082019290925260409081016000208151610100810183528154815260018201546001600160a01b0316938101939093526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e0820152825183908390811061101f5761101f612be1565b6020908102919091010152600101610f0d565b50949350505050565b6000546001600160a01b031633146110955760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103a3565b61109f6000611f85565b565b6000546001600160a01b031633146110fb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103a3565b60065460ff161561114e5760405162461bcd60e51b815260206004820152601160248201527f616c726561647920696e6974696174656400000000000000000000000000000060448201526064016103a3565b600680547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b0386811691820292909217909255600780547fffffffffffffffffffffffff000000000000000000000000000000000000000016918516919091179055604080517f313ce567000000000000000000000000000000000000000000000000000000008152905163313ce567916004808201926020929091908290030181865afa158015611210573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112349190612c6f565b61123f90600a612dab565b600855600754611271906001600160a01b031661125d83600a612db7565b60085461126c906102ee612db7565b611d85565b60075461129b906001600160a01b031661128c83601e612db7565b60085461126c90610dac612db7565b6007546112c5906001600160a01b03166112b683605a612db7565b60085461126c90614074612db7565b5050600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b6006546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000916201000090046001600160a01b0316906370a0823190602401602060405180830381865afa15801561135d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113819190612c6f565b905090565b60008251118015611398575080518251145b6113e45760405162461bcd60e51b815260206004820152600b60248201527f696e707574206572726f7200000000000000000000000000000000000000000060448201526064016103a3565b6000805b8351811015610bf057336001600160a01b031684828151811061140d5761140d612be1565b60200260200101516001600160a01b0316636352211e85848151811061143557611435612be1565b60200260200101516040518263ffffffff1660e01b815260040161145b91815260200190565b602060405180830381865afa158015611478573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149c9190612c10565b6001600160a01b0316146114f25760405162461bcd60e51b815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016103a3565b60006009600061152787858151811061150d5761150d612be1565b602002602001015187868151811061087b5761087b612be1565b81526020808201929092526040908101600020815161010081018352815480825260018301546001600160a01b0316948201949094526002820154928101929092526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015291506115e85760405162461bcd60e51b815260206004820152600a60248201527f6e6f74207374616b65640000000000000000000000000000000000000000000060448201526064016103a3565b8060c00151421161163b5760405162461bcd60e51b815260206004820152600f60248201527f6e6f74207265616368656420796574000000000000000000000000000000000060448201526064016103a3565b61164481611db0565b60e08101516116539084612c5c565b92506001600a60008282546116689190612dce565b9091555050516000908152600960205260408120818155600180820180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556002820183905560038201839055600482018390556005820183905560068201839055600790910191909155016113e8565b60008060008060008060008061173289600081815260026020818152604092839020835160608101855281546001600160a01b031680825260018301549382018490529190930154929093018290529293919291565b929c919b50995090975095505050505050565b600654610100900460ff161561179d5760405162461bcd60e51b815260206004820152600660248201527f706175736564000000000000000000000000000000000000000000000000000060448201526064016103a3565b600083511180156117af575081518351145b80156117bc575080518351145b6118085760405162461bcd60e51b815260206004820152600b60248201527f696e707574206572726f7200000000000000000000000000000000000000000060448201526064016103a3565b60006118126112f5565b1161185f5760405162461bcd60e51b815260206004820152600a60248201527f706f6f6c20656d7074790000000000000000000000000000000000000000000060448201526064016103a3565b6000806000806118af88600081815260026020818152604092839020835160608101855281546001600160a01b031680825260018301549382018490529190930154929093018290529293919291565b935093509350935060005b8751811015611c8f5760006118f48983815181106118da576118da612be1565b602002602001015189848151811061087b5761087b612be1565b9050858a14801561192f5750846001600160a01b031689838151811061191c5761191c612be1565b60200260200101516001600160a01b0316145b61197b5760405162461bcd60e51b815260206004820152600e60248201527f706f6f6c206e6f7420666f756e6400000000000000000000000000000000000060448201526064016103a3565b600081815260096020526040902054156119d75760405162461bcd60e51b815260206004820152600e60248201527f616c7265616479207374616b656400000000000000000000000000000000000060448201526064016103a3565b336001600160a01b03168983815181106119f3576119f3612be1565b60200260200101516001600160a01b0316636352211e8a8581518110611a1b57611a1b612be1565b60200260200101516040518263ffffffff1660e01b8152600401611a4191815260200190565b602060405180830381865afa158015611a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a829190612c10565b6001600160a01b031614611ad85760405162461bcd60e51b815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016103a3565b6000839050898381518110611aef57611aef612be1565b60209081029190910101516007546001600160a01b039081169116148015611b2d5750878381518110611b2457611b24612be1565b60200260200101515b15611b4f576000611b3f82600a611fed565b9050611b4b8183612c5c565b9150505b60006040518061010001604052808481526020018c8681518110611b7557611b75612be1565b60200260200101516001600160a01b031681526020018b8681518110611b9d57611b9d612be1565b602002602001015181526020018d81526020018781526020014281526020018742611bc89190612c5c565b8152602090810184905260008581526009825260409081902083518155918301516001830180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039092169190911790558201516002820155606082015160038201556080820151600482015560a0820151600582015560c0820151600682015560e08201516007909101559050611c6881611e5f565b6001600a6000828254611c7b9190612c5c565b9091555050600190930192506118ba915050565b505050505050505050565b6000546001600160a01b03163314611cf45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103a3565b6001600160a01b038116611d705760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016103a3565b611d7981611f85565b50565b611d7981612011565b611d9360055484848461213d565b600160056000828254611da69190612c5c565b9091555050505050565b805160208083015160408085015160608087015160808089015160a0808b015160c0808d015160e0808f01518b51338152429e81019e909e529a8d019d909d526001600160a01b03909a16968b0196909652928901959095529387019190915290850191909152938301939093526101008201526101208101919091527f4ad4e00f7548f7da9a1763c1d447789dbf141b8b91b13b01df350ab643423ed890610140015b60405180910390a150565b805160208083015160408085015160608087015160808089015160a0808b015160c0808d015160e0808f01518b51338152429e81019e909e529a8d019d909d526001600160a01b03909a16968b0196909652928901959095529387019190915290850191909152938301939093526101008201526101208101919091527f9eb120f0fdd9bcf5e5901cd6709f4c7d3d3d01d0752036bb5b71d4630ae00ac89061014001611e54565b600080611f126112f5565b9050801580611f1f575082155b15611f2e576000915050611f57565b828110611f4957611f408585856122d8565b82915050611f57565b611f548585836122d8565b90505b9392505050565b600060018281548110611f7357611f73612be1565b90600052602060002001549050919050565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000808211611ffb57600080fd5b60646120078385612db7565b611f579190612de1565b60008181526004602052604090205460ff1661202a5750565b600081815260046020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280835281842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001818101869055910184905560039092528220548154909291906120b5908290612dce565b815481106120c5576120c5612be1565b6000918252602080832090910154808352600390915260408083208590558583528220919091556001805491925082918490811061210557612105612be1565b600091825260209091200155600180548061212257612122612e1c565b60019003818190600052602060002001600090559055505050565b6040805160208082018790526001600160a01b0386168284018190526060830186905260808084018690528451808503909101815260a084018086528151918401919091206101008501865291815260c0840187905260e0909301859052600081815260049092529290205460ff161561220c57600082815260026020818152604092839020845181547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03909116178155908401516001820155918301519101556122d0565b6000828152600460209081526040808320805460017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090911681179091556002808452828520865181547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039091161781558685015181840155868401519101558054600390935290832082905581810181559091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6018290555b505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291516000928392908716916123629190612e4b565b6000604051808303816000865af19150503d806000811461239f576040519150601f19603f3d011682016040523d82523d6000602084013e6123a4565b606091505b50915091508180156123ce5750805115806123ce5750808060200190518101906123ce9190612e7a565b6124405760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201527f616e73666572206661696c65640000000000000000000000000000000000000060648201526084016103a3565b5050505050565b8015158114611d7957600080fd5b60006020828403121561246757600080fd5b8135611f5781612447565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156124e8576124e8612472565b604052919050565b600067ffffffffffffffff82111561250a5761250a612472565b5060051b60200190565b60006020828403121561252657600080fd5b813567ffffffffffffffff81111561253d57600080fd5b8201601f8101841361254e57600080fd5b803561256161255c826124f0565b6124a1565b8082825260208201915060208360051b85010192508683111561258357600080fd5b6020840193505b828410156125a557833582526020938401939091019061258a565b9695505050505050565b6001600160a01b0381168114611d7957600080fd5b600082601f8301126125d557600080fd5b81356125e361255c826124f0565b8082825260208201915060208360051b86010192508583111561260557600080fd5b602085015b8381101561262b57803561261d816125af565b83526020928301920161260a565b5095945050505050565b600082601f83011261264657600080fd5b813561265461255c826124f0565b8082825260208201915060208360051b86010192508583111561267657600080fd5b602085015b8381101561262b57803583526020928301920161267b565b6000806000606084860312156126a857600080fd5b833567ffffffffffffffff8111156126bf57600080fd5b6126cb868287016125c4565b935050602084013567ffffffffffffffff8111156126e857600080fd5b6126f486828701612635565b925050604084013567ffffffffffffffff81111561271157600080fd5b61271d86828701612635565b9150509250925092565b6000806040838503121561273a57600080fd5b8235612745816125af565b946020939093013593505050565b61010081016106298284805182526001600160a01b03602082015116602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301525050565b600080604083850312156127c757600080fd5b823567ffffffffffffffff8111156127de57600080fd5b6127ea858286016125c4565b925050602083013567ffffffffffffffff81111561280757600080fd5b61281385828601612635565b9150509250929050565b600081518084526020840193506020830160005b8281101561284f578151865260209586019590910190600101612831565b5093949350505050565b60808082528551908201819052600090602087019060a0840190835b81811015612893578351835260209384019390920191600101612875565b50508381036020808601919091528751808352918101925087019060005b818110156128d85782516001600160a01b03168452602093840193909201916001016128b1565b50505082810360408401526128ed818661281d565b90508281036060840152612901818561281d565b979650505050505050565b60008083601f84011261291e57600080fd5b50813567ffffffffffffffff81111561293657600080fd5b6020830191508360208260051b850101111561295157600080fd5b9250929050565b6000806000806040858703121561296e57600080fd5b843567ffffffffffffffff81111561298557600080fd5b6129918782880161290c565b909550935050602085013567ffffffffffffffff8111156129b157600080fd5b6129bd8782880161290c565b95989497509550505050565b602080825282518282018190526000918401906040840190835b81811015612a5f57612a48838551805182526001600160a01b03602082015116602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301525050565b6020939093019261010092909201916001016129e3565b509095945050505050565b600080600060608486031215612a7f57600080fd5b8335612a8a816125af565b92506020840135612a9a816125af565b929592945050506040919091013590565b600060208284031215612abd57600080fd5b5035919050565b60008060008060808587031215612ada57600080fd5b84359350602085013567ffffffffffffffff811115612af857600080fd5b612b04878288016125c4565b935050604085013567ffffffffffffffff811115612b2157600080fd5b612b2d87828801612635565b925050606085013567ffffffffffffffff811115612b4a57600080fd5b8501601f81018713612b5b57600080fd5b8035612b6961255c826124f0565b8082825260208201915060208360051b850101925089831115612b8b57600080fd5b6020840193505b82841015612bb6578335612ba581612447565b825260209384019390910190612b92565b969995985093965050505050565b600060208284031215612bd657600080fd5b8135611f57816125af565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215612c2257600080fd5b8151611f57816125af565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561062957610629612c2d565b600060208284031215612c8157600080fd5b5051919050565b6001815b6001841115612cc357808504811115612ca757612ca7612c2d565b6001841615612cb557908102905b60019390931c928002612c8c565b935093915050565b600082612cda57506001610629565b81612ce757506000610629565b8160018114612cfd5760028114612d0757612d23565b6001915050610629565b60ff841115612d1857612d18612c2d565b50506001821b610629565b5060208310610133831016604e8410600b8410161715612d46575081810a610629565b612d717fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612c88565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612da357612da3612c2d565b029392505050565b6000611f578383612ccb565b808202811582820484141761062957610629612c2d565b8181038181111561062957610629612c2d565b600082612e17577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000825160005b81811015612e6c5760208186018101518583015201612e52565b506000920191825250919050565b600060208284031215612e8c57600080fd5b8151611f578161244756fea26469706673582212202651f2a67941b9a4068d09c766de18fdaa503bd4a07547e5825fe4141a86499164736f6c634300081b0033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061016c5760003560e01c8063715018a6116100cd578063b69ef8a811610081578063cfa4a6a611610066578063cfa4a6a6146102ec578063e5b4752214610327578063f2fde38b1461033a57600080fd5b8063b69ef8a8146102d1578063bcca1e04146102d957600080fd5b806386863ec6116100b257806386863ec6146102a05780638da5cb5b146102b35780639f118536146102c457600080fd5b8063715018a61461027f57806372f702f31461028757600080fd5b80635c975abb116101245780636982d815116101095780636982d815146102225780636b1309991461024d5780636c4470fb1461026d57600080fd5b80635c975abb146101e8578063673a2a1f1461020a57600080fd5b80630f3da118116101555780630f3da11814610199578063143ee5b9146101ac5780633628a8ed146101d557600080fd5b806302329a29146101715780630666c68114610186575b600080fd5b61018461017f366004612455565b61034d565b005b610184610194366004612514565b6103e3565b6101846101a7366004612693565b610477565b6101bf6101ba366004612727565b610541565b6040516101cc9190612753565b60405180910390f35b6101846101e33660046127b4565b61062f565b6006546101fa90610100900460ff1681565b60405190151581526020016101cc565b610212610c0e565b6040516101cc9493929190612859565b600754610235906001600160a01b031681565b6040516001600160a01b0390911681526020016101cc565b61026061025b366004612958565b610e5f565b6040516101cc91906129c9565b600a545b6040519081526020016101cc565b61018461103b565b600654610235906201000090046001600160a01b031681565b6101846102ae366004612a6a565b6110a1565b6000546001600160a01b0316610235565b6006546101fa9060ff1681565b6102716112f5565b6101846102e73660046127b4565b611386565b6102ff6102fa366004612aab565b6116dc565b604080519485526001600160a01b0390931660208501529183015260608201526080016101cc565b610184610335366004612ac4565b611745565b610184610348366004612bc4565b611c9a565b6000546001600160a01b031633146103ac5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b60068054911515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909216919091179055565b6000546001600160a01b0316331461043d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103a3565b60005b81518110156104735761046b82828151811061045e5761045e612be1565b6020026020010151611d7c565b600101610440565b5050565b6000546001600160a01b031633146104d15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103a3565b60005b835181101561053b576105338482815181106104f2576104f2612be1565b602002602001015184838151811061050c5761050c612be1565b602002602001015184848151811061052657610526612be1565b6020026020010151611d85565b6001016104d4565b50505050565b60408051610100810182526000808252602080830182905282840182905260608084018390526080840183905260a0840183905260c0840183905260e0840183905284516001600160a01b03881681840152808601879052855180820387018152910190945283519301929092209091600991815260208082019290925260409081016000208151610100810183528154815260018201546001600160a01b0316938101939093526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015290505b92915050565b600654610100900460ff16156106875760405162461bcd60e51b815260206004820152600660248201527f706175736564000000000000000000000000000000000000000000000000000060448201526064016103a3565b60008251118015610699575080518251145b6106e55760405162461bcd60e51b815260206004820152600b60248201527f696e707574206572726f7200000000000000000000000000000000000000000060448201526064016103a3565b60006106ef6112f5565b1161073c5760405162461bcd60e51b815260206004820152600a60248201527f706f6f6c20656d7074790000000000000000000000000000000000000000000060448201526064016103a3565b6000805b8351811015610bf057336001600160a01b031684828151811061076557610765612be1565b60200260200101516001600160a01b0316636352211e85848151811061078d5761078d612be1565b60200260200101516040518263ffffffff1660e01b81526004016107b391815260200190565b602060405180830381865afa1580156107d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107f49190612c10565b6001600160a01b03161461084a5760405162461bcd60e51b815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016103a3565b60006108c085838151811061086157610861612be1565b602002602001015185848151811061087b5761087b612be1565b6020026020010151604080516001600160a01b038416602082015290810182905260009060600160405160208183030381529060405280519060200120905092915050565b600081815260096020908152604091829020825161010081018452815480825260018301546001600160a01b0316938201939093526002820154938101939093526003810154606084015260048101546080840152600581015460a0840152600681015460c08401526007015460e0830152919250906109825760405162461bcd60e51b815260206004820152600a60248201527f6e6f74207374616b65640000000000000000000000000000000000000000000060448201526064016103a3565b8060c0015142116109d55760405162461bcd60e51b815260206004820152600f60248201527f6e6f74207265616368656420796574000000000000000000000000000000000060448201526064016103a3565b606081810180516000818152600260208181526040928390208351968701845280546001600160a01b0316875260018101549187019190915201549301929092525181148015610a535750868481518110610a3257610a32612be1565b60200260200101516001600160a01b031682602001516001600160a01b0316145b610a9f5760405162461bcd60e51b815260206004820152600e60248201527f706f6f6c206e6f7420666f756e6400000000000000000000000000000000000060448201526064016103a3565b610aa882611db0565b60e0820151610ab79086612c5c565b94506000604051806101000160405280858152602001898781518110610adf57610adf612be1565b60200260200101516001600160a01b03168152602001888781518110610b0757610b07612be1565b602002602001015181526020018460600151815260200184608001518152602001428152602001846080015142610b3e9190612c5c565b815260e08581015160209283015260008781526009835260409081902084518155928401516001840180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039092169190911790558301516002830155606083015160038301556080830151600483015560a0830151600583015560c083015160068301558201516007909101559050610be081611e5f565b5050600190920191506107409050565b5060065461053b906201000090046001600160a01b03163383611f07565b6060806060806000610c1f60015490565b905060008167ffffffffffffffff811115610c3c57610c3c612472565b604051908082528060200260200182016040528015610c65578160200160208202803683370190505b50905060008267ffffffffffffffff811115610c8357610c83612472565b604051908082528060200260200182016040528015610cac578160200160208202803683370190505b50905060008367ffffffffffffffff811115610cca57610cca612472565b604051908082528060200260200182016040528015610cf3578160200160208202803683370190505b50905060008467ffffffffffffffff811115610d1157610d11612472565b604051908082528060200260200182016040528015610d3a578160200160208202803683370190505b50905060005b600154811015610e4f576000610d5582611f5e565b9050600080600080610da785600081815260026020818152604092839020835160608101855281546001600160a01b031680825260018301549382018490529190930154929093018290529293919291565b9350935093509350838a8781518110610dc257610dc2612be1565b60200260200101818152505082898781518110610de157610de1612be1565b60200260200101906001600160a01b031690816001600160a01b03168152505081888781518110610e1457610e14612be1565b60200260200101818152505080878781518110610e3357610e33612be1565b6020908102919091010152505060019093019250610d40915050565b5092989197509550909350915050565b60608367ffffffffffffffff811115610e7a57610e7a612472565b604051908082528060200260200182016040528015610f0757816020015b604080516101008101825260008082526020808301829052928201819052606082018190526080820181905260a0820181905260c0820181905260e082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610e985790505b50905060005b848110156110325760096000610f99888885818110610f2e57610f2e612be1565b9050602002016020810190610f439190612bc4565b878786818110610f5557610f55612be1565b90506020020135604080516001600160a01b038416602082015290810182905260009060600160405160208183030381529060405280519060200120905092915050565b815260208082019290925260409081016000208151610100810183528154815260018201546001600160a01b0316938101939093526002810154918301919091526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e0820152825183908390811061101f5761101f612be1565b6020908102919091010152600101610f0d565b50949350505050565b6000546001600160a01b031633146110955760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103a3565b61109f6000611f85565b565b6000546001600160a01b031633146110fb5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103a3565b60065460ff161561114e5760405162461bcd60e51b815260206004820152601160248201527f616c726561647920696e6974696174656400000000000000000000000000000060448201526064016103a3565b600680547fffffffffffffffffffff0000000000000000000000000000000000000000ffff16620100006001600160a01b0386811691820292909217909255600780547fffffffffffffffffffffffff000000000000000000000000000000000000000016918516919091179055604080517f313ce567000000000000000000000000000000000000000000000000000000008152905163313ce567916004808201926020929091908290030181865afa158015611210573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112349190612c6f565b61123f90600a612dab565b600855600754611271906001600160a01b031661125d83600a612db7565b60085461126c906102ee612db7565b611d85565b60075461129b906001600160a01b031661128c83601e612db7565b60085461126c90610dac612db7565b6007546112c5906001600160a01b03166112b683605a612db7565b60085461126c90614074612db7565b5050600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905550565b6006546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000916201000090046001600160a01b0316906370a0823190602401602060405180830381865afa15801561135d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113819190612c6f565b905090565b60008251118015611398575080518251145b6113e45760405162461bcd60e51b815260206004820152600b60248201527f696e707574206572726f7200000000000000000000000000000000000000000060448201526064016103a3565b6000805b8351811015610bf057336001600160a01b031684828151811061140d5761140d612be1565b60200260200101516001600160a01b0316636352211e85848151811061143557611435612be1565b60200260200101516040518263ffffffff1660e01b815260040161145b91815260200190565b602060405180830381865afa158015611478573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149c9190612c10565b6001600160a01b0316146114f25760405162461bcd60e51b815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016103a3565b60006009600061152787858151811061150d5761150d612be1565b602002602001015187868151811061087b5761087b612be1565b81526020808201929092526040908101600020815161010081018352815480825260018301546001600160a01b0316948201949094526002820154928101929092526003810154606083015260048101546080830152600581015460a0830152600681015460c08301526007015460e082015291506115e85760405162461bcd60e51b815260206004820152600a60248201527f6e6f74207374616b65640000000000000000000000000000000000000000000060448201526064016103a3565b8060c00151421161163b5760405162461bcd60e51b815260206004820152600f60248201527f6e6f74207265616368656420796574000000000000000000000000000000000060448201526064016103a3565b61164481611db0565b60e08101516116539084612c5c565b92506001600a60008282546116689190612dce565b9091555050516000908152600960205260408120818155600180820180547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556002820183905560038201839055600482018390556005820183905560068201839055600790910191909155016113e8565b60008060008060008060008061173289600081815260026020818152604092839020835160608101855281546001600160a01b031680825260018301549382018490529190930154929093018290529293919291565b929c919b50995090975095505050505050565b600654610100900460ff161561179d5760405162461bcd60e51b815260206004820152600660248201527f706175736564000000000000000000000000000000000000000000000000000060448201526064016103a3565b600083511180156117af575081518351145b80156117bc575080518351145b6118085760405162461bcd60e51b815260206004820152600b60248201527f696e707574206572726f7200000000000000000000000000000000000000000060448201526064016103a3565b60006118126112f5565b1161185f5760405162461bcd60e51b815260206004820152600a60248201527f706f6f6c20656d7074790000000000000000000000000000000000000000000060448201526064016103a3565b6000806000806118af88600081815260026020818152604092839020835160608101855281546001600160a01b031680825260018301549382018490529190930154929093018290529293919291565b935093509350935060005b8751811015611c8f5760006118f48983815181106118da576118da612be1565b602002602001015189848151811061087b5761087b612be1565b9050858a14801561192f5750846001600160a01b031689838151811061191c5761191c612be1565b60200260200101516001600160a01b0316145b61197b5760405162461bcd60e51b815260206004820152600e60248201527f706f6f6c206e6f7420666f756e6400000000000000000000000000000000000060448201526064016103a3565b600081815260096020526040902054156119d75760405162461bcd60e51b815260206004820152600e60248201527f616c7265616479207374616b656400000000000000000000000000000000000060448201526064016103a3565b336001600160a01b03168983815181106119f3576119f3612be1565b60200260200101516001600160a01b0316636352211e8a8581518110611a1b57611a1b612be1565b60200260200101516040518263ffffffff1660e01b8152600401611a4191815260200190565b602060405180830381865afa158015611a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a829190612c10565b6001600160a01b031614611ad85760405162461bcd60e51b815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016103a3565b6000839050898381518110611aef57611aef612be1565b60209081029190910101516007546001600160a01b039081169116148015611b2d5750878381518110611b2457611b24612be1565b60200260200101515b15611b4f576000611b3f82600a611fed565b9050611b4b8183612c5c565b9150505b60006040518061010001604052808481526020018c8681518110611b7557611b75612be1565b60200260200101516001600160a01b031681526020018b8681518110611b9d57611b9d612be1565b602002602001015181526020018d81526020018781526020014281526020018742611bc89190612c5c565b8152602090810184905260008581526009825260409081902083518155918301516001830180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039092169190911790558201516002820155606082015160038201556080820151600482015560a0820151600582015560c0820151600682015560e08201516007909101559050611c6881611e5f565b6001600a6000828254611c7b9190612c5c565b9091555050600190930192506118ba915050565b505050505050505050565b6000546001600160a01b03163314611cf45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103a3565b6001600160a01b038116611d705760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016103a3565b611d7981611f85565b50565b611d7981612011565b611d9360055484848461213d565b600160056000828254611da69190612c5c565b9091555050505050565b805160208083015160408085015160608087015160808089015160a0808b015160c0808d015160e0808f01518b51338152429e81019e909e529a8d019d909d526001600160a01b03909a16968b0196909652928901959095529387019190915290850191909152938301939093526101008201526101208101919091527f4ad4e00f7548f7da9a1763c1d447789dbf141b8b91b13b01df350ab643423ed890610140015b60405180910390a150565b805160208083015160408085015160608087015160808089015160a0808b015160c0808d015160e0808f01518b51338152429e81019e909e529a8d019d909d526001600160a01b03909a16968b0196909652928901959095529387019190915290850191909152938301939093526101008201526101208101919091527f9eb120f0fdd9bcf5e5901cd6709f4c7d3d3d01d0752036bb5b71d4630ae00ac89061014001611e54565b600080611f126112f5565b9050801580611f1f575082155b15611f2e576000915050611f57565b828110611f4957611f408585856122d8565b82915050611f57565b611f548585836122d8565b90505b9392505050565b600060018281548110611f7357611f73612be1565b90600052602060002001549050919050565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000808211611ffb57600080fd5b60646120078385612db7565b611f579190612de1565b60008181526004602052604090205460ff1661202a5750565b600081815260046020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280835281842080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001818101869055910184905560039092528220548154909291906120b5908290612dce565b815481106120c5576120c5612be1565b6000918252602080832090910154808352600390915260408083208590558583528220919091556001805491925082918490811061210557612105612be1565b600091825260209091200155600180548061212257612122612e1c565b60019003818190600052602060002001600090559055505050565b6040805160208082018790526001600160a01b0386168284018190526060830186905260808084018690528451808503909101815260a084018086528151918401919091206101008501865291815260c0840187905260e0909301859052600081815260049092529290205460ff161561220c57600082815260026020818152604092839020845181547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03909116178155908401516001820155918301519101556122d0565b6000828152600460209081526040808320805460017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0090911681179091556002808452828520865181547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039091161781558685015181840155868401519101558054600390935290832082905581810181559091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6018290555b505050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291516000928392908716916123629190612e4b565b6000604051808303816000865af19150503d806000811461239f576040519150601f19603f3d011682016040523d82523d6000602084013e6123a4565b606091505b50915091508180156123ce5750805115806123ce5750808060200190518101906123ce9190612e7a565b6124405760405162461bcd60e51b815260206004820152602d60248201527f5472616e7366657248656c7065723a3a736166655472616e736665723a20747260448201527f616e73666572206661696c65640000000000000000000000000000000000000060648201526084016103a3565b5050505050565b8015158114611d7957600080fd5b60006020828403121561246757600080fd5b8135611f5781612447565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156124e8576124e8612472565b604052919050565b600067ffffffffffffffff82111561250a5761250a612472565b5060051b60200190565b60006020828403121561252657600080fd5b813567ffffffffffffffff81111561253d57600080fd5b8201601f8101841361254e57600080fd5b803561256161255c826124f0565b6124a1565b8082825260208201915060208360051b85010192508683111561258357600080fd5b6020840193505b828410156125a557833582526020938401939091019061258a565b9695505050505050565b6001600160a01b0381168114611d7957600080fd5b600082601f8301126125d557600080fd5b81356125e361255c826124f0565b8082825260208201915060208360051b86010192508583111561260557600080fd5b602085015b8381101561262b57803561261d816125af565b83526020928301920161260a565b5095945050505050565b600082601f83011261264657600080fd5b813561265461255c826124f0565b8082825260208201915060208360051b86010192508583111561267657600080fd5b602085015b8381101561262b57803583526020928301920161267b565b6000806000606084860312156126a857600080fd5b833567ffffffffffffffff8111156126bf57600080fd5b6126cb868287016125c4565b935050602084013567ffffffffffffffff8111156126e857600080fd5b6126f486828701612635565b925050604084013567ffffffffffffffff81111561271157600080fd5b61271d86828701612635565b9150509250925092565b6000806040838503121561273a57600080fd5b8235612745816125af565b946020939093013593505050565b61010081016106298284805182526001600160a01b03602082015116602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301525050565b600080604083850312156127c757600080fd5b823567ffffffffffffffff8111156127de57600080fd5b6127ea858286016125c4565b925050602083013567ffffffffffffffff81111561280757600080fd5b61281385828601612635565b9150509250929050565b600081518084526020840193506020830160005b8281101561284f578151865260209586019590910190600101612831565b5093949350505050565b60808082528551908201819052600090602087019060a0840190835b81811015612893578351835260209384019390920191600101612875565b50508381036020808601919091528751808352918101925087019060005b818110156128d85782516001600160a01b03168452602093840193909201916001016128b1565b50505082810360408401526128ed818661281d565b90508281036060840152612901818561281d565b979650505050505050565b60008083601f84011261291e57600080fd5b50813567ffffffffffffffff81111561293657600080fd5b6020830191508360208260051b850101111561295157600080fd5b9250929050565b6000806000806040858703121561296e57600080fd5b843567ffffffffffffffff81111561298557600080fd5b6129918782880161290c565b909550935050602085013567ffffffffffffffff8111156129b157600080fd5b6129bd8782880161290c565b95989497509550505050565b602080825282518282018190526000918401906040840190835b81811015612a5f57612a48838551805182526001600160a01b03602082015116602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301525050565b6020939093019261010092909201916001016129e3565b509095945050505050565b600080600060608486031215612a7f57600080fd5b8335612a8a816125af565b92506020840135612a9a816125af565b929592945050506040919091013590565b600060208284031215612abd57600080fd5b5035919050565b60008060008060808587031215612ada57600080fd5b84359350602085013567ffffffffffffffff811115612af857600080fd5b612b04878288016125c4565b935050604085013567ffffffffffffffff811115612b2157600080fd5b612b2d87828801612635565b925050606085013567ffffffffffffffff811115612b4a57600080fd5b8501601f81018713612b5b57600080fd5b8035612b6961255c826124f0565b8082825260208201915060208360051b850101925089831115612b8b57600080fd5b6020840193505b82841015612bb6578335612ba581612447565b825260209384019390910190612b92565b969995985093965050505050565b600060208284031215612bd657600080fd5b8135611f57816125af565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060208284031215612c2257600080fd5b8151611f57816125af565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561062957610629612c2d565b600060208284031215612c8157600080fd5b5051919050565b6001815b6001841115612cc357808504811115612ca757612ca7612c2d565b6001841615612cb557908102905b60019390931c928002612c8c565b935093915050565b600082612cda57506001610629565b81612ce757506000610629565b8160018114612cfd5760028114612d0757612d23565b6001915050610629565b60ff841115612d1857612d18612c2d565b50506001821b610629565b5060208310610133831016604e8410600b8410161715612d46575081810a610629565b612d717fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612c88565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115612da357612da3612c2d565b029392505050565b6000611f578383612ccb565b808202811582820484141761062957610629612c2d565b8181038181111561062957610629612c2d565b600082612e17577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000825160005b81811015612e6c5760208186018101518583015201612e52565b506000920191825250919050565b600060208284031215612e8c57600080fd5b8151611f578161244756fea26469706673582212202651f2a67941b9a4068d09c766de18fdaa503bd4a07547e5825fe4141a86499164736f6c634300081b0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.