More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer Ownersh... | 13680528 | 1126 days ago | IN | 0 ETH | 0.00498847 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
VestingPools
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
Yes with 800 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "./interfaces/Constants.sol"; import { PoolParams } from "./interfaces/Types.sol"; import "./interfaces/IMintable.sol"; import "./interfaces/IVestingPools.sol"; import "./utils/Claimable.sol"; import { TokenAddress } from "./utils/Linking.sol"; import "./utils/SafeUints.sol"; /** * @title VestingPools * @notice It mints and vests a (mintable) ERC-20 token to "Vesting Pools". * @dev Each "Vesting Pool" (or a "pool") has a `wallet` and `PoolParams`. * The `wallet` requests vesting and receives vested tokens, or nominate * another address that receives them. * `PoolParams` deterministically define minting and unlocking schedule. * Once added, a pool can not be removed. Subject to strict limitations, * owner may update a few parameters of a pool. */ contract VestingPools is Ownable, Claimable, SafeUints, Constants, IVestingPools { /// @notice Accumulated amount to be vested to all pools uint96 public totalAllocation; /// @notice Total amount already vested to all pools uint96 public totalVested; // ID of a pool (i.e. `poolId`) is the index in these two arrays address[] internal _wallets; PoolParams[] internal _pools; /// @inheritdoc IVestingPools function token() external view override returns (address) { return _getToken(); } /// @inheritdoc IVestingPools function getWallet(uint256 poolId) external view override returns (address) { _throwInvalidPoolId(poolId); return _wallets[poolId]; } /// @inheritdoc IVestingPools function getPool(uint256 poolId) external view override returns (PoolParams memory) { return _getPool(poolId); } /// @inheritdoc IVestingPools function releasableAmount(uint256 poolId) external view override returns (uint256) { PoolParams memory pool = _getPool(poolId); return _getReleasable(pool, _timeNow()); } /// @inheritdoc IVestingPools function vestedAmount(uint256 poolId) external view override returns (uint256) { PoolParams memory pool = _getPool(poolId); return uint256(pool.vested); } /// @inheritdoc IVestingPools function release(uint256 poolId, uint256 amount) external override returns (uint256 released) { return _releaseTo(poolId, msg.sender, amount); } /// @inheritdoc IVestingPools function releaseTo( uint256 poolId, address account, uint256 amount ) external override returns (uint256 released) { _throwZeroAddress(account); return _releaseTo(poolId, account, amount); } /// @inheritdoc IVestingPools function updatePoolWallet(uint256 poolId, address newWallet) external override { _throwZeroAddress(newWallet); _throwUnauthorizedWallet(poolId, msg.sender); _wallets[poolId] = newWallet; emit WalletUpdated(poolId, newWallet); } /// @inheritdoc IVestingPools function addVestingPools( address[] memory wallets, PoolParams[] memory pools ) external override onlyOwner { require(wallets.length == pools.length, "VPools: length mismatch"); uint256 timeNow = _timeNow(); IMintable theToken = IMintable(_getToken()); uint256 updAllocation = uint256(totalAllocation); uint256 preMinted = 0; uint256 poolId = _pools.length; for (uint256 i = 0; i < wallets.length; i++) { _throwZeroAddress(wallets[i]); require(pools[i].start >= timeNow, "VPools: start already passed"); require(pools[i].sAllocation != 0, "VPools: zero sAllocation"); require( pools[i].sAllocation >= pools[i].sUnlocked, "VPools: too big sUnlocked" ); require(pools[i].vested == 0, "VPools: zero vested expected"); uint256 allocation = uint256(pools[i].sAllocation) * SCALE; updAllocation += allocation; _wallets.push(wallets[i]); _pools.push(pools[i]); emit PoolAdded(poolId++, wallets[i], allocation); if (pools[i].isPreMinted) { preMinted += allocation; } } // left outside the cycle to save gas for a non-reverting transaction require(updAllocation <= MAX_SUPPLY, "VPools: supply exceeded"); totalAllocation = _safe96(updAllocation); if (preMinted != 0) { require(theToken.mint(address(this), preMinted), "VPools:E5"); } } /// @inheritdoc IVestingPools /// @dev Vesting schedule for a pool may be significantly altered by this. /// However, pool allocation (i.e. token amount to vest) remains unchanged. function updatePoolTime( uint256 poolId, uint32 start, uint16 vestingDays ) external override onlyOwner { PoolParams memory pool = _getPool(poolId); require(pool.isAdjustable, "VPools: non-adjustable"); require( uint256(pool.sAllocation) * SCALE > uint256(pool.vested), "VPools: fully vested" ); uint256 end = uint256(start) + uint256(vestingDays) * 1 days; // `end` may NOT be in the past, unlike `start` that may be even zero require(_timeNow() > end, "VPools: too late updates"); pool.start = start; pool.vestingDays = vestingDays; _pools[poolId] = pool; emit PoolUpdated(poolId, start, vestingDays); } /** * @notice Withdraws accidentally sent token from this contract. * @dev Owner may call only. */ function claimErc20( address claimedToken, address to, uint256 amount ) external onlyOwner nonReentrant { IERC20 vestedToken = IERC20(_getToken()); if (claimedToken == address(vestedToken)) { uint256 actual = vestedToken.balanceOf(address(this)); uint256 expected = vestedToken.totalSupply() - totalVested; require(actual >= expected + amount, "VPools: too big amount"); } _claimErc20(claimedToken, to, amount); } /// @notice Removes the contract from blockchain if there is no tokens to vest. /// @dev Owner may call only. function removeContract() external onlyOwner { // intended "strict comparison" require(totalAllocation == totalVested, "VPools:E1"); selfdestruct(payable(msg.sender)); } ////////////////// //// Internal //// ////////////////// /// @dev Returns token contract address // (declared `view` rather than `pure` to facilitate testing) function _getToken() internal view virtual returns (address) { return address(TokenAddress); } /// @dev Returns pool params for the pool with the given ID function _getPool(uint256 poolId) internal view returns (PoolParams memory) { _throwInvalidPoolId(poolId); return _pools[poolId]; } /// @dev Returns amount that may be released now for the pool given function _getReleasable(PoolParams memory pool, uint256 timeNow) internal pure returns (uint256) { if (timeNow < pool.start) return 0; uint256 allocation = uint256(pool.sAllocation) * SCALE; if (pool.vested >= allocation) return 0; uint256 releasable = allocation - uint256(pool.vested); uint256 duration = uint256(pool.vestingDays) * 1 days; uint256 end = uint256(pool.start) + duration; if (timeNow < end) { uint256 unlocked = uint256(pool.sUnlocked) * SCALE; uint256 locked = ((allocation - unlocked) * (end - timeNow)) / duration; // can't be 0 here releasable = locked > releasable ? 0 : releasable - locked; } return releasable; } /// @dev Vests from the pool the given or releasable amount to the given address function _releaseTo( uint256 poolId, address to, uint256 amount ) internal returns (uint256 released) { PoolParams memory pool = _getPool(poolId); _throwUnauthorizedWallet(poolId, msg.sender); uint256 releasable = _getReleasable(pool, _timeNow()); require(releasable >= amount, "VPools: not enough to release"); released = amount == 0 ? releasable : amount; _pools[poolId].vested = _safe96(released + uint256(pool.vested)); totalVested = _safe96(released + uint256(totalVested)); // reentrancy impossible (known contract called) if (pool.isPreMinted) { require(IERC20(_getToken()).transfer(to, released), "VPools:E6"); } else { require(IMintable(_getToken()).mint(to, released), "VPools:E7"); } emit Released(poolId, to, released); } function _throwZeroAddress(address account) private pure { require(account != address(0), "VPools: zero address(account|wallet)"); } function _throwInvalidPoolId(uint256 poolId) private view { require(poolId < _pools.length, "VPools: invalid pool id"); } function _throwUnauthorizedWallet(uint256 poolId, address wallet) private view { _throwZeroAddress(wallet); require(_wallets[poolId] == wallet, "VPools: unauthorized"); } /// @dev Returns the current block timestamp (added to ease testing) function _timeNow() internal view virtual returns (uint256) { return block.timestamp; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_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 { _setOwner(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"); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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 `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, 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 `sender` to `recipient` 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 sender, address recipient, uint256 amount ) external returns (bool); /** * @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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; contract Constants { // $ZKP token max supply uint256 internal constant MAX_SUPPLY = 1e27; // Scaling factor in token amount calculations uint256 internal constant SCALE = 1e12; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev To save gas, params are packed to fit into a single storage slot. * Some amounts are scaled (divided) by {SCALE} - note names starting with * the letter "s" (stands for "scaled") followed by a capital letter. */ struct PoolParams { // if `true`, allocation gets pre-minted, otherwise minted when vested bool isPreMinted; // if `true`, the owner may change {start} and {duration} bool isAdjustable; // (UNIX) time when vesting starts uint32 start; // period in days (since the {start}) of vesting uint16 vestingDays; // scaled total amount to (ever) vest from the pool uint48 sAllocation; // out of {sAllocation}, amount (also scaled) to be unlocked on the {start} uint48 sUnlocked; // amount vested from the pool so far (without scaling) uint96 vested; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; interface IMintable is IERC20 { function mint(address account, uint256 amount) external returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import { PoolParams } from "./Types.sol"; interface IVestingPools { /** * @notice Returns Token address. */ function token() external view returns (address); /** * @notice Returns the wallet address of the specified pool. */ function getWallet(uint256 poolId) external view returns (address); /** * @notice Returns parameters of the specified pool. */ function getPool(uint256 poolId) external view returns (PoolParams memory); /** * @notice Returns the amount that may be vested now from the given pool. */ function releasableAmount(uint256 poolId) external view returns (uint256); /** * @notice Returns the amount that has been vested from the given pool */ function vestedAmount(uint256 poolId) external view returns (uint256); /** * @notice Vests the specified amount from the given pool to the pool wallet. * If the amount is zero, it vests the entire "releasable" amount. * @dev Pool wallet may call only. * @return released - Amount released. */ function release(uint256 poolId, uint256 amount) external returns (uint256 released); /** * @notice Vests the specified amount from the given pool to the given address. * If the amount is zero, it vests the entire "releasable" amount. * @dev Pool wallet may call only. * @return released - Amount released. */ function releaseTo( uint256 poolId, address account, uint256 amount ) external returns (uint256 released); /** * @notice Updates the wallet for the given pool. * @dev (Current) wallet may call only. */ function updatePoolWallet(uint256 poolId, address newWallet) external; /** * @notice Adds new vesting pools with given wallets and parameters. * @dev Owner may call only. */ function addVestingPools( address[] memory wallets, PoolParams[] memory params ) external; /** * @notice Update `start` and `duration` for the given pool. * @param start - new (UNIX) time vesting starts at * @param vestingDays - new period in days, when vesting lasts * @dev Owner may call only. */ function updatePoolTime( uint256 poolId, uint32 start, uint16 vestingDays ) external; /// @notice Emitted on an amount vesting. event Released(uint256 indexed poolId, address to, uint256 amount); /// @notice Emitted on a pool wallet update. event WalletUpdated(uint256 indexedpoolId, address indexed newWallet); /// @notice Emitted on a new pool added. event PoolAdded( uint256 indexed poolId, address indexed wallet, uint256 allocation ); /// @notice Emitted on a pool params update. event PoolUpdated( uint256 indexed poolId, uint256 start, uint256 vestingDays ); }
// SPDX-License-Identifier: MIT pragma solidity >0.8.0; /** * @title Claimable * @notice It withdraws accidentally sent tokens from this contract. * @dev It provides reentrancy guard. The code borrowed from openzeppelin-contracts. * Unlike original code, this version does not require `constructor` call. */ contract Claimable { bytes4 private constant SELECTOR_TRANSFER = bytes4(keccak256(bytes("transfer(address,uint256)"))); uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _reentrancyStatus; /// @dev Withdraws ERC20 tokens from this contract /// (take care of reentrancy attack risk mitigation) function _claimErc20( address token, address to, uint256 amount ) internal { // solhint-disable avoid-low-level-calls (bool success, bytes memory data) = token.call( abi.encodeWithSelector(SELECTOR_TRANSFER, to, amount) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "claimErc20: TRANSFER_FAILED" ); } modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_reentrancyStatus != _ENTERED, "claimErc20: reentrant call"); // Any calls to nonReentrant after this point will fail _reentrancyStatus = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _reentrancyStatus = _NOT_ENTERED; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev This file contains fake libs just for static linking. * These fake libs' code is assumed to never run. * On compilation of dependant contracts, instead of fake libs addresses, * indicate addresses of deployed real contracts (or accounts). */ /// @dev Address of the ZKPToken contract ('../ZKPToken.sol') instance library TokenAddress { function neverCallIt() external pure { revert("FAKE"); } } /// @dev Address of the VestingPools ('../VestingPools.sol') instance library VestingPoolsAddress { function neverCallIt() external pure { revert("FAKE"); } } /// @dev Address of the PoolStakes._defaultOwner // (NB: if it's not a multisig, transfer ownership to a Multisig contract) library DefaultOwnerAddress { function neverCallIt() external pure { revert("FAKE"); } }
// SPDX-License-Identifier: MIT pragma solidity >0.8.0; /** * @title SafeUints * @notice Util functions which throws if a uint256 can't fit into smaller uints. */ contract SafeUints { // @dev Checks if the given uint256 does not overflow uint96 function _safe96(uint256 n) internal pure returns (uint96) { require(n < 2**96, "VPools: Unsafe96"); return uint96(n); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "metadata": { "bytecodeHash": "none" }, "optimizer": { "enabled": true, "runs": 800 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": { "contracts/utils/Linking.sol": { "TokenAddress": "0x909e34d3f6124c324ac83dcca84b74398a6fa173" } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":true,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"allocation","type":"uint256"}],"name":"PoolAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"start","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"vestingDays","type":"uint256"}],"name":"PoolUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Released","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"indexedpoolId","type":"uint256"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"WalletUpdated","type":"event"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"components":[{"internalType":"bool","name":"isPreMinted","type":"bool"},{"internalType":"bool","name":"isAdjustable","type":"bool"},{"internalType":"uint32","name":"start","type":"uint32"},{"internalType":"uint16","name":"vestingDays","type":"uint16"},{"internalType":"uint48","name":"sAllocation","type":"uint48"},{"internalType":"uint48","name":"sUnlocked","type":"uint48"},{"internalType":"uint96","name":"vested","type":"uint96"}],"internalType":"struct PoolParams[]","name":"pools","type":"tuple[]"}],"name":"addVestingPools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"claimedToken","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimErc20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"getPool","outputs":[{"components":[{"internalType":"bool","name":"isPreMinted","type":"bool"},{"internalType":"bool","name":"isAdjustable","type":"bool"},{"internalType":"uint32","name":"start","type":"uint32"},{"internalType":"uint16","name":"vestingDays","type":"uint16"},{"internalType":"uint48","name":"sAllocation","type":"uint48"},{"internalType":"uint48","name":"sUnlocked","type":"uint48"},{"internalType":"uint96","name":"vested","type":"uint96"}],"internalType":"struct PoolParams","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"getWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"releasableAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"release","outputs":[{"internalType":"uint256","name":"released","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"releaseTo","outputs":[{"internalType":"uint256","name":"released","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalAllocation","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalVested","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"uint32","name":"start","type":"uint32"},{"internalType":"uint16","name":"vestingDays","type":"uint16"}],"name":"updatePoolTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"address","name":"newWallet","type":"address"}],"name":"updatePoolWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"vestedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6121a78061007e6000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c8063715018a6116100b2578063db66bbd111610081578063f2fde38b11610066578063f2fde38b146102e8578063fc0c546a146102fb578063fe389e091461031557600080fd5b8063db66bbd1146102c2578063e11d1a98146102d557600080fd5b8063715018a61461028357806379203dc41461028b5780638da5cb5b1461029e57806392a70fb0146102af57600080fd5b80632a7d7bc5116100ee5780632a7d7bc51461021f578063366a4120146102325780635470b13b146102455780635927fca21461027057600080fd5b8063068bcd8d14610120578063085cb13f146101b7578063199cbc54146101cc5780631bfce853146101fe575b600080fd5b61013361012e366004611f45565b61031d565b6040516101ae9190600060e08201905082511515825260208301511515602083015263ffffffff604084015116604083015261ffff6060840151166060830152608083015165ffffffffffff80821660808501528060a08601511660a085015250506001600160601b0360c08401511660c083015292915050565b60405180910390f35b6101ca6101c5366004611f75565b610365565b005b6002546101e690600160601b90046001600160601b031681565b6040516001600160601b0390911681526020016101ae565b61021161020c366004611f45565b610406565b6040519081526020016101ae565b61021161022d366004611fa0565b610426565b610211610240366004611fc4565b610444565b610258610253366004611f45565b610458565b6040516001600160a01b0390911681526020016101ae565b61021161027e366004611f45565b61049f565b6101ca6104b7565b6002546101e6906001600160601b031681565b6000546001600160a01b0316610258565b6101ca6102bd366004611e2d565b610522565b6101ca6102d0366004611fe5565b610788565b6101ca6102e3366004611e68565b610aa9565b6101ca6102f6366004611e13565b61121c565b73909e34d3f6124c324ac83dcca84b74398a6fa173610258565b6101ca6112fe565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915261035f826113bf565b92915050565b61036e816114bb565b610378823361151d565b806003838154811061039a57634e487b7160e01b600052603260045260246000fd5b600091825260209182902001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03938416179055604051848152918316917ff2e290194c4582e14975be0ee8a27dcb9b7eb438a3d45c1bc51dfc6fe614c1bf910160405180910390a25050565b600080610412836113bf565b60c001516001600160601b03169392505050565b6000610431836114bb565b61043c8484846115b7565b949350505050565b60006104518333846115b7565b9392505050565b600061046382611925565b6003828154811061048457634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031692915050565b6000806104ab836113bf565b90506104518142611976565b6000546001600160a01b031633146105165760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6105206000611aa2565b565b6000546001600160a01b0316331461057c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161050d565b600260015414156105cf5760405162461bcd60e51b815260206004820152601a60248201527f636c61696d45726332303a207265656e7472616e742063616c6c000000000000604482015260640161050d565b600260015573909e34d3f6124c324ac83dcca84b74398a6fa1736001600160a01b038481169082161415610773576040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b15801561063f57600080fd5b505afa158015610653573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106779190611f5d565b905060006002600c9054906101000a90046001600160601b03166001600160601b0316836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156106d357600080fd5b505afa1580156106e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070b9190611f5d565b610715919061212e565b905061072184826120d7565b8210156107705760405162461bcd60e51b815260206004820152601660248201527f56506f6f6c733a20746f6f2062696720616d6f756e7400000000000000000000604482015260640161050d565b50505b61077e848484611aff565b5050600180555050565b6000546001600160a01b031633146107e25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161050d565b60006107ed846113bf565b905080602001516108405760405162461bcd60e51b815260206004820152601660248201527f56506f6f6c733a206e6f6e2d61646a75737461626c6500000000000000000000604482015260640161050d565b8060c001516001600160601b031664e8d4a51000826080015165ffffffffffff1661086b919061210f565b116108b85760405162461bcd60e51b815260206004820152601460248201527f56506f6f6c733a2066756c6c7920766573746564000000000000000000000000604482015260640161050d565b60006108cb61ffff84166201518061210f565b6108db9063ffffffff86166120d7565b905080421161092c5760405162461bcd60e51b815260206004820152601860248201527f56506f6f6c733a20746f6f206c61746520757064617465730000000000000000604482015260640161050d565b63ffffffff8416604083015261ffff83166060830152600480548391908790811061096757634e487b7160e01b600052603260045260246000fd5b6000918252602091829020835191018054848401516040808701516060880151608089015160a08a015160c0909a015161ffff1990961697151561ff00191697909717610100941515949094029390931767ffffffffffff000019166201000063ffffffff9283160267ffff000000000000191617660100000000000061ffff948516021773ffffffffffffffffffffffff000000000000000019166801000000000000000065ffffffffffff9788160273ffffffffffff0000000000000000000000000000191617600160701b9690981695909502969096176001600160a01b0316600160a01b6001600160601b0390931692909202919091179091558351918816825286169181019190915286917f17b8644f386d1c7c7138ef98b3c8035622bbe94d7be9b26f71d2654a547c2943910160405180910390a25050505050565b6000546001600160a01b03163314610b035760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161050d565b8051825114610b545760405162461bcd60e51b815260206004820152601760248201527f56506f6f6c733a206c656e677468206d69736d61746368000000000000000000604482015260640161050d565b600254600454429173909e34d3f6124c324ac83dcca84b74398a6fa173916001600160601b0390911690600090815b87518110156110b657610bbc888281518110610baf57634e487b7160e01b600052603260045260246000fd5b60200260200101516114bb565b85878281518110610bdd57634e487b7160e01b600052603260045260246000fd5b60200260200101516040015163ffffffff161015610c3d5760405162461bcd60e51b815260206004820152601c60248201527f56506f6f6c733a20737461727420616c72656164792070617373656400000000604482015260640161050d565b868181518110610c5d57634e487b7160e01b600052603260045260246000fd5b60200260200101516080015165ffffffffffff1660001415610cc15760405162461bcd60e51b815260206004820152601860248201527f56506f6f6c733a207a65726f2073416c6c6f636174696f6e0000000000000000604482015260640161050d565b868181518110610ce157634e487b7160e01b600052603260045260246000fd5b602002602001015160a0015165ffffffffffff16878281518110610d1557634e487b7160e01b600052603260045260246000fd5b60200260200101516080015165ffffffffffff161015610d775760405162461bcd60e51b815260206004820152601960248201527f56506f6f6c733a20746f6f206269672073556e6c6f636b656400000000000000604482015260640161050d565b868181518110610d9757634e487b7160e01b600052603260045260246000fd5b602002602001015160c001516001600160601b0316600014610dfb5760405162461bcd60e51b815260206004820152601c60248201527f56506f6f6c733a207a65726f2076657374656420657870656374656400000000604482015260640161050d565b600064e8d4a51000888381518110610e2357634e487b7160e01b600052603260045260246000fd5b60200260200101516080015165ffffffffffff16610e41919061210f565b9050610e4d81866120d7565b94506003898381518110610e7157634e487b7160e01b600052603260045260246000fd5b602090810291909101810151825460018101845560009384529190922001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169190911790558751600490899084908110610ede57634e487b7160e01b600052603260045260246000fd5b60209081029190910181015182546001810184556000938452928290208151930180549282015160408301516060840151608085015160a086015160c09096015161ffff1990971697151561ff00191697909717610100931515939093029290921767ffffffffffff000019166201000063ffffffff9092169190910267ffff000000000000191617660100000000000061ffff909216919091021773ffffffffffffffffffffffff000000000000000019166801000000000000000065ffffffffffff9586160273ffffffffffff0000000000000000000000000000191617600160701b9490921693909302176001600160a01b0316600160a01b6001600160601b0390921691909102179055885189908390811061100e57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316838061102a90612145565b94507f6c5d0ef1d0199b6de41ecbce95f59643be4d723ca363faf92d756e61e82fb13e8360405161105d91815260200190565b60405180910390a387828151811061108557634e487b7160e01b600052603260045260246000fd5b602002602001015160000151156110a3576110a081856120d7565b93505b50806110ae81612145565b915050610b83565b506b033b2e3c9fd0803ce80000008311156111135760405162461bcd60e51b815260206004820152601760248201527f56506f6f6c733a20737570706c79206578636565646564000000000000000000604482015260640161050d565b61111c83611c5f565b600280546bffffffffffffffffffffffff19166001600160601b03929092169190911790558115611213576040516340c10f1960e01b8152306004820152602481018390526001600160a01b038516906340c10f1990604401602060405180830381600087803b15801561118f57600080fd5b505af11580156111a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c79190611f29565b6112135760405162461bcd60e51b815260206004820152600960248201527f56506f6f6c733a45350000000000000000000000000000000000000000000000604482015260640161050d565b50505050505050565b6000546001600160a01b031633146112765760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161050d565b6001600160a01b0381166112f25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161050d565b6112fb81611aa2565b50565b6000546001600160a01b031633146113585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161050d565b6002546001600160601b03808216600160601b90920416146113bc5760405162461bcd60e51b815260206004820152600960248201527f56506f6f6c733a45310000000000000000000000000000000000000000000000604482015260640161050d565b33ff5b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915261140182611925565b6004828154811061142257634e487b7160e01b600052603260045260246000fd5b60009182526020918290206040805160e081018252929091015460ff8082161515845261010082041615159383019390935262010000830463ffffffff16908201526601000000000000820461ffff16606082015268010000000000000000820465ffffffffffff9081166080830152600160701b83041660a0820152600160a01b9091046001600160601b031660c082015292915050565b6001600160a01b0381166112fb5760405162461bcd60e51b8152602060048201526024808201527f56506f6f6c733a207a65726f2061646472657373286163636f756e747c77616c6044820152636c65742960e01b606482015260840161050d565b611526816114bb565b806001600160a01b03166003838154811061155157634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316146115b35760405162461bcd60e51b815260206004820152601460248201527f56506f6f6c733a20756e617574686f72697a6564000000000000000000000000604482015260640161050d565b5050565b6000806115c3856113bf565b90506115cf853361151d565b60006115db8242611976565b90508381101561162d5760405162461bcd60e51b815260206004820152601d60248201527f56506f6f6c733a206e6f7420656e6f75676820746f2072656c65617365000000604482015260640161050d565b8315611639578361163b565b805b925061165e8260c001516001600160601b03168461165991906120d7565b611c5f565b6004878154811061167f57634e487b7160e01b600052603260045260246000fd5b600091825260209091200180546001600160a01b0316600160a01b6001600160601b03938416021790556002546116c29161165991600160601b900416856120d7565b600280546001600160601b0392909216600160601b027fffffffffffffffff000000000000000000000000ffffffffffffffffffffffff9092169190911790558151156117f35773909e34d3f6124c324ac83dcca84b74398a6fa17360405163a9059cbb60e01b81526001600160a01b03878116600483015260248201869052919091169063a9059cbb90604401602060405180830381600087803b15801561176a57600080fd5b505af115801561177e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a29190611f29565b6117ee5760405162461bcd60e51b815260206004820152600960248201527f56506f6f6c733a45360000000000000000000000000000000000000000000000604482015260640161050d565b6118d8565b73909e34d3f6124c324ac83dcca84b74398a6fa1736040516340c10f1960e01b81526001600160a01b0387811660048301526024820186905291909116906340c10f1990604401602060405180830381600087803b15801561185457600080fd5b505af1158015611868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188c9190611f29565b6118d85760405162461bcd60e51b815260206004820152600960248201527f56506f6f6c733a45370000000000000000000000000000000000000000000000604482015260640161050d565b604080516001600160a01b03871681526020810185905287917f3bfce8de0db7450cc169b94323c210e69a36c6a4a58c9f5d96bec4973adce392910160405180910390a250509392505050565b60045481106112fb5760405162461bcd60e51b815260206004820152601760248201527f56506f6f6c733a20696e76616c696420706f6f6c206964000000000000000000604482015260640161050d565b6000826040015163ffffffff168210156119925750600061035f565b600064e8d4a51000846080015165ffffffffffff166119b1919061210f565b9050808460c001516001600160601b0316106119d157600091505061035f565b60008460c001516001600160601b0316826119ec919061212e565b90506000856060015161ffff1662015180611a07919061210f565b9050600081876040015163ffffffff16611a2191906120d7565b905080861015611a9757600064e8d4a510008860a0015165ffffffffffff16611a4a919061210f565b9050600083611a59898561212e565b611a63848961212e565b611a6d919061210f565b611a7791906120ef565b9050848111611a8f57611a8a818661212e565b611a92565b60005b945050505b509095945050505050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b17905291516000928392871691611ba09190612020565b6000604051808303816000865af19150503d8060008114611bdd576040519150601f19603f3d011682016040523d82523d6000602084013e611be2565b606091505b5091509150818015611c0c575080511580611c0c575080806020019051810190611c0c9190611f29565b611c585760405162461bcd60e51b815260206004820152601b60248201527f636c61696d45726332303a205452414e534645525f4641494c45440000000000604482015260640161050d565b5050505050565b6000600160601b8210611cb45760405162461bcd60e51b815260206004820152601060248201527f56506f6f6c733a20556e73616665393600000000000000000000000000000000604482015260640161050d565b5090565b80356001600160a01b0381168114611ccf57600080fd5b919050565b600082601f830112611ce4578081fd5b81356020611cf9611cf4836120b3565b612082565b8281528181019085830160e080860288018501891015611d17578687fd5b865b86811015611dc95781838b031215611d2f578788fd5b611d37612059565b8335611d428161218c565b815283870135611d518161218c565b818801526040611d62858201611de9565b908201526060611d73858201611dd7565b908201526080611d84858201611dfd565b9082015260a0611d95858201611dfd565b9082015260c0848101356001600160601b0381168114611db3578a8bfd5b9082015285529385019391810191600101611d19565b509198975050505050505050565b803561ffff81168114611ccf57600080fd5b803563ffffffff81168114611ccf57600080fd5b803565ffffffffffff81168114611ccf57600080fd5b600060208284031215611e24578081fd5b61045182611cb8565b600080600060608486031215611e41578182fd5b611e4a84611cb8565b9250611e5860208501611cb8565b9150604084013590509250925092565b60008060408385031215611e7a578182fd5b823567ffffffffffffffff80821115611e91578384fd5b818501915085601f830112611ea4578384fd5b81356020611eb4611cf4836120b3565b8083825282820191508286018a848660051b8901011115611ed3578889fd5b8896505b84871015611efc57611ee881611cb8565b835260019690960195918301918301611ed7565b5096505086013592505080821115611f12578283fd5b50611f1f85828601611cd4565b9150509250929050565b600060208284031215611f3a578081fd5b81516104518161218c565b600060208284031215611f56578081fd5b5035919050565b600060208284031215611f6e578081fd5b5051919050565b60008060408385031215611f87578182fd5b82359150611f9760208401611cb8565b90509250929050565b600080600060608486031215611fb4578283fd5b83359250611e5860208501611cb8565b60008060408385031215611fd6578182fd5b50508035926020909101359150565b600080600060608486031215611ff9578081fd5b8335925061200960208501611de9565b915061201760408501611dd7565b90509250925092565b60008251815b818110156120405760208186018101518583015201612026565b8181111561204e5782828501525b509190910192915050565b60405160e0810167ffffffffffffffff8111828210171561207c5761207c612176565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156120ab576120ab612176565b604052919050565b600067ffffffffffffffff8211156120cd576120cd612176565b5060051b60200190565b600082198211156120ea576120ea612160565b500190565b60008261210a57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561212957612129612160565b500290565b60008282101561214057612140612160565b500390565b600060001982141561215957612159612160565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b80151581146112fb57600080fdfea164736f6c6343000804000a
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061011b5760003560e01c8063715018a6116100b2578063db66bbd111610081578063f2fde38b11610066578063f2fde38b146102e8578063fc0c546a146102fb578063fe389e091461031557600080fd5b8063db66bbd1146102c2578063e11d1a98146102d557600080fd5b8063715018a61461028357806379203dc41461028b5780638da5cb5b1461029e57806392a70fb0146102af57600080fd5b80632a7d7bc5116100ee5780632a7d7bc51461021f578063366a4120146102325780635470b13b146102455780635927fca21461027057600080fd5b8063068bcd8d14610120578063085cb13f146101b7578063199cbc54146101cc5780631bfce853146101fe575b600080fd5b61013361012e366004611f45565b61031d565b6040516101ae9190600060e08201905082511515825260208301511515602083015263ffffffff604084015116604083015261ffff6060840151166060830152608083015165ffffffffffff80821660808501528060a08601511660a085015250506001600160601b0360c08401511660c083015292915050565b60405180910390f35b6101ca6101c5366004611f75565b610365565b005b6002546101e690600160601b90046001600160601b031681565b6040516001600160601b0390911681526020016101ae565b61021161020c366004611f45565b610406565b6040519081526020016101ae565b61021161022d366004611fa0565b610426565b610211610240366004611fc4565b610444565b610258610253366004611f45565b610458565b6040516001600160a01b0390911681526020016101ae565b61021161027e366004611f45565b61049f565b6101ca6104b7565b6002546101e6906001600160601b031681565b6000546001600160a01b0316610258565b6101ca6102bd366004611e2d565b610522565b6101ca6102d0366004611fe5565b610788565b6101ca6102e3366004611e68565b610aa9565b6101ca6102f6366004611e13565b61121c565b73909e34d3f6124c324ac83dcca84b74398a6fa173610258565b6101ca6112fe565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915261035f826113bf565b92915050565b61036e816114bb565b610378823361151d565b806003838154811061039a57634e487b7160e01b600052603260045260246000fd5b600091825260209182902001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03938416179055604051848152918316917ff2e290194c4582e14975be0ee8a27dcb9b7eb438a3d45c1bc51dfc6fe614c1bf910160405180910390a25050565b600080610412836113bf565b60c001516001600160601b03169392505050565b6000610431836114bb565b61043c8484846115b7565b949350505050565b60006104518333846115b7565b9392505050565b600061046382611925565b6003828154811061048457634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031692915050565b6000806104ab836113bf565b90506104518142611976565b6000546001600160a01b031633146105165760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6105206000611aa2565b565b6000546001600160a01b0316331461057c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161050d565b600260015414156105cf5760405162461bcd60e51b815260206004820152601a60248201527f636c61696d45726332303a207265656e7472616e742063616c6c000000000000604482015260640161050d565b600260015573909e34d3f6124c324ac83dcca84b74398a6fa1736001600160a01b038481169082161415610773576040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b15801561063f57600080fd5b505afa158015610653573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106779190611f5d565b905060006002600c9054906101000a90046001600160601b03166001600160601b0316836001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156106d357600080fd5b505afa1580156106e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070b9190611f5d565b610715919061212e565b905061072184826120d7565b8210156107705760405162461bcd60e51b815260206004820152601660248201527f56506f6f6c733a20746f6f2062696720616d6f756e7400000000000000000000604482015260640161050d565b50505b61077e848484611aff565b5050600180555050565b6000546001600160a01b031633146107e25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161050d565b60006107ed846113bf565b905080602001516108405760405162461bcd60e51b815260206004820152601660248201527f56506f6f6c733a206e6f6e2d61646a75737461626c6500000000000000000000604482015260640161050d565b8060c001516001600160601b031664e8d4a51000826080015165ffffffffffff1661086b919061210f565b116108b85760405162461bcd60e51b815260206004820152601460248201527f56506f6f6c733a2066756c6c7920766573746564000000000000000000000000604482015260640161050d565b60006108cb61ffff84166201518061210f565b6108db9063ffffffff86166120d7565b905080421161092c5760405162461bcd60e51b815260206004820152601860248201527f56506f6f6c733a20746f6f206c61746520757064617465730000000000000000604482015260640161050d565b63ffffffff8416604083015261ffff83166060830152600480548391908790811061096757634e487b7160e01b600052603260045260246000fd5b6000918252602091829020835191018054848401516040808701516060880151608089015160a08a015160c0909a015161ffff1990961697151561ff00191697909717610100941515949094029390931767ffffffffffff000019166201000063ffffffff9283160267ffff000000000000191617660100000000000061ffff948516021773ffffffffffffffffffffffff000000000000000019166801000000000000000065ffffffffffff9788160273ffffffffffff0000000000000000000000000000191617600160701b9690981695909502969096176001600160a01b0316600160a01b6001600160601b0390931692909202919091179091558351918816825286169181019190915286917f17b8644f386d1c7c7138ef98b3c8035622bbe94d7be9b26f71d2654a547c2943910160405180910390a25050505050565b6000546001600160a01b03163314610b035760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161050d565b8051825114610b545760405162461bcd60e51b815260206004820152601760248201527f56506f6f6c733a206c656e677468206d69736d61746368000000000000000000604482015260640161050d565b600254600454429173909e34d3f6124c324ac83dcca84b74398a6fa173916001600160601b0390911690600090815b87518110156110b657610bbc888281518110610baf57634e487b7160e01b600052603260045260246000fd5b60200260200101516114bb565b85878281518110610bdd57634e487b7160e01b600052603260045260246000fd5b60200260200101516040015163ffffffff161015610c3d5760405162461bcd60e51b815260206004820152601c60248201527f56506f6f6c733a20737461727420616c72656164792070617373656400000000604482015260640161050d565b868181518110610c5d57634e487b7160e01b600052603260045260246000fd5b60200260200101516080015165ffffffffffff1660001415610cc15760405162461bcd60e51b815260206004820152601860248201527f56506f6f6c733a207a65726f2073416c6c6f636174696f6e0000000000000000604482015260640161050d565b868181518110610ce157634e487b7160e01b600052603260045260246000fd5b602002602001015160a0015165ffffffffffff16878281518110610d1557634e487b7160e01b600052603260045260246000fd5b60200260200101516080015165ffffffffffff161015610d775760405162461bcd60e51b815260206004820152601960248201527f56506f6f6c733a20746f6f206269672073556e6c6f636b656400000000000000604482015260640161050d565b868181518110610d9757634e487b7160e01b600052603260045260246000fd5b602002602001015160c001516001600160601b0316600014610dfb5760405162461bcd60e51b815260206004820152601c60248201527f56506f6f6c733a207a65726f2076657374656420657870656374656400000000604482015260640161050d565b600064e8d4a51000888381518110610e2357634e487b7160e01b600052603260045260246000fd5b60200260200101516080015165ffffffffffff16610e41919061210f565b9050610e4d81866120d7565b94506003898381518110610e7157634e487b7160e01b600052603260045260246000fd5b602090810291909101810151825460018101845560009384529190922001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b039092169190911790558751600490899084908110610ede57634e487b7160e01b600052603260045260246000fd5b60209081029190910181015182546001810184556000938452928290208151930180549282015160408301516060840151608085015160a086015160c09096015161ffff1990971697151561ff00191697909717610100931515939093029290921767ffffffffffff000019166201000063ffffffff9092169190910267ffff000000000000191617660100000000000061ffff909216919091021773ffffffffffffffffffffffff000000000000000019166801000000000000000065ffffffffffff9586160273ffffffffffff0000000000000000000000000000191617600160701b9490921693909302176001600160a01b0316600160a01b6001600160601b0390921691909102179055885189908390811061100e57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316838061102a90612145565b94507f6c5d0ef1d0199b6de41ecbce95f59643be4d723ca363faf92d756e61e82fb13e8360405161105d91815260200190565b60405180910390a387828151811061108557634e487b7160e01b600052603260045260246000fd5b602002602001015160000151156110a3576110a081856120d7565b93505b50806110ae81612145565b915050610b83565b506b033b2e3c9fd0803ce80000008311156111135760405162461bcd60e51b815260206004820152601760248201527f56506f6f6c733a20737570706c79206578636565646564000000000000000000604482015260640161050d565b61111c83611c5f565b600280546bffffffffffffffffffffffff19166001600160601b03929092169190911790558115611213576040516340c10f1960e01b8152306004820152602481018390526001600160a01b038516906340c10f1990604401602060405180830381600087803b15801561118f57600080fd5b505af11580156111a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c79190611f29565b6112135760405162461bcd60e51b815260206004820152600960248201527f56506f6f6c733a45350000000000000000000000000000000000000000000000604482015260640161050d565b50505050505050565b6000546001600160a01b031633146112765760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161050d565b6001600160a01b0381166112f25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161050d565b6112fb81611aa2565b50565b6000546001600160a01b031633146113585760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161050d565b6002546001600160601b03808216600160601b90920416146113bc5760405162461bcd60e51b815260206004820152600960248201527f56506f6f6c733a45310000000000000000000000000000000000000000000000604482015260640161050d565b33ff5b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915261140182611925565b6004828154811061142257634e487b7160e01b600052603260045260246000fd5b60009182526020918290206040805160e081018252929091015460ff8082161515845261010082041615159383019390935262010000830463ffffffff16908201526601000000000000820461ffff16606082015268010000000000000000820465ffffffffffff9081166080830152600160701b83041660a0820152600160a01b9091046001600160601b031660c082015292915050565b6001600160a01b0381166112fb5760405162461bcd60e51b8152602060048201526024808201527f56506f6f6c733a207a65726f2061646472657373286163636f756e747c77616c6044820152636c65742960e01b606482015260840161050d565b611526816114bb565b806001600160a01b03166003838154811061155157634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316146115b35760405162461bcd60e51b815260206004820152601460248201527f56506f6f6c733a20756e617574686f72697a6564000000000000000000000000604482015260640161050d565b5050565b6000806115c3856113bf565b90506115cf853361151d565b60006115db8242611976565b90508381101561162d5760405162461bcd60e51b815260206004820152601d60248201527f56506f6f6c733a206e6f7420656e6f75676820746f2072656c65617365000000604482015260640161050d565b8315611639578361163b565b805b925061165e8260c001516001600160601b03168461165991906120d7565b611c5f565b6004878154811061167f57634e487b7160e01b600052603260045260246000fd5b600091825260209091200180546001600160a01b0316600160a01b6001600160601b03938416021790556002546116c29161165991600160601b900416856120d7565b600280546001600160601b0392909216600160601b027fffffffffffffffff000000000000000000000000ffffffffffffffffffffffff9092169190911790558151156117f35773909e34d3f6124c324ac83dcca84b74398a6fa17360405163a9059cbb60e01b81526001600160a01b03878116600483015260248201869052919091169063a9059cbb90604401602060405180830381600087803b15801561176a57600080fd5b505af115801561177e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117a29190611f29565b6117ee5760405162461bcd60e51b815260206004820152600960248201527f56506f6f6c733a45360000000000000000000000000000000000000000000000604482015260640161050d565b6118d8565b73909e34d3f6124c324ac83dcca84b74398a6fa1736040516340c10f1960e01b81526001600160a01b0387811660048301526024820186905291909116906340c10f1990604401602060405180830381600087803b15801561185457600080fd5b505af1158015611868573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188c9190611f29565b6118d85760405162461bcd60e51b815260206004820152600960248201527f56506f6f6c733a45370000000000000000000000000000000000000000000000604482015260640161050d565b604080516001600160a01b03871681526020810185905287917f3bfce8de0db7450cc169b94323c210e69a36c6a4a58c9f5d96bec4973adce392910160405180910390a250509392505050565b60045481106112fb5760405162461bcd60e51b815260206004820152601760248201527f56506f6f6c733a20696e76616c696420706f6f6c206964000000000000000000604482015260640161050d565b6000826040015163ffffffff168210156119925750600061035f565b600064e8d4a51000846080015165ffffffffffff166119b1919061210f565b9050808460c001516001600160601b0316106119d157600091505061035f565b60008460c001516001600160601b0316826119ec919061212e565b90506000856060015161ffff1662015180611a07919061210f565b9050600081876040015163ffffffff16611a2191906120d7565b905080861015611a9757600064e8d4a510008860a0015165ffffffffffff16611a4a919061210f565b9050600083611a59898561212e565b611a63848961212e565b611a6d919061210f565b611a7791906120ef565b9050848111611a8f57611a8a818661212e565b611a92565b60005b945050505b509095945050505050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1663a9059cbb60e01b17905291516000928392871691611ba09190612020565b6000604051808303816000865af19150503d8060008114611bdd576040519150601f19603f3d011682016040523d82523d6000602084013e611be2565b606091505b5091509150818015611c0c575080511580611c0c575080806020019051810190611c0c9190611f29565b611c585760405162461bcd60e51b815260206004820152601b60248201527f636c61696d45726332303a205452414e534645525f4641494c45440000000000604482015260640161050d565b5050505050565b6000600160601b8210611cb45760405162461bcd60e51b815260206004820152601060248201527f56506f6f6c733a20556e73616665393600000000000000000000000000000000604482015260640161050d565b5090565b80356001600160a01b0381168114611ccf57600080fd5b919050565b600082601f830112611ce4578081fd5b81356020611cf9611cf4836120b3565b612082565b8281528181019085830160e080860288018501891015611d17578687fd5b865b86811015611dc95781838b031215611d2f578788fd5b611d37612059565b8335611d428161218c565b815283870135611d518161218c565b818801526040611d62858201611de9565b908201526060611d73858201611dd7565b908201526080611d84858201611dfd565b9082015260a0611d95858201611dfd565b9082015260c0848101356001600160601b0381168114611db3578a8bfd5b9082015285529385019391810191600101611d19565b509198975050505050505050565b803561ffff81168114611ccf57600080fd5b803563ffffffff81168114611ccf57600080fd5b803565ffffffffffff81168114611ccf57600080fd5b600060208284031215611e24578081fd5b61045182611cb8565b600080600060608486031215611e41578182fd5b611e4a84611cb8565b9250611e5860208501611cb8565b9150604084013590509250925092565b60008060408385031215611e7a578182fd5b823567ffffffffffffffff80821115611e91578384fd5b818501915085601f830112611ea4578384fd5b81356020611eb4611cf4836120b3565b8083825282820191508286018a848660051b8901011115611ed3578889fd5b8896505b84871015611efc57611ee881611cb8565b835260019690960195918301918301611ed7565b5096505086013592505080821115611f12578283fd5b50611f1f85828601611cd4565b9150509250929050565b600060208284031215611f3a578081fd5b81516104518161218c565b600060208284031215611f56578081fd5b5035919050565b600060208284031215611f6e578081fd5b5051919050565b60008060408385031215611f87578182fd5b82359150611f9760208401611cb8565b90509250929050565b600080600060608486031215611fb4578283fd5b83359250611e5860208501611cb8565b60008060408385031215611fd6578182fd5b50508035926020909101359150565b600080600060608486031215611ff9578081fd5b8335925061200960208501611de9565b915061201760408501611dd7565b90509250925092565b60008251815b818110156120405760208186018101518583015201612026565b8181111561204e5782828501525b509190910192915050565b60405160e0810167ffffffffffffffff8111828210171561207c5761207c612176565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156120ab576120ab612176565b604052919050565b600067ffffffffffffffff8211156120cd576120cd612176565b5060051b60200190565b600082198211156120ea576120ea612160565b500190565b60008261210a57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561212957612129612160565b500290565b60008282101561214057612140612160565b500390565b600060001982141561215957612159612160565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b80151581146112fb57600080fdfea164736f6c6343000804000a
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.026709 | 2,400,000 | $64,101.19 |
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.