Overview
ETH Balance
ETH Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 12 from a total of 12 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Tokens | 14439011 | 102 days ago | IN | 0 ETH | 0.00000688 | ||||
Set Tokens | 13836174 | 117 days ago | IN | 0 ETH | 0.00002735 | ||||
Set Tokens | 12089745 | 159 days ago | IN | 0 ETH | 0.00004207 | ||||
Set Tokens | 10509665 | 196 days ago | IN | 0 ETH | 0.0000323 | ||||
Set Tokens | 10330615 | 200 days ago | IN | 0 ETH | 0.00001598 | ||||
Set Tokens | 10330270 | 200 days ago | IN | 0 ETH | 0.00000399 | ||||
Set Tokens | 10330268 | 200 days ago | IN | 0 ETH | 0.0000825 | ||||
Set Tokens | 10146306 | 204 days ago | IN | 0 ETH | 0.00001136 | ||||
Set Tokens | 10140461 | 204 days ago | IN | 0 ETH | 0.00000292 | ||||
Set Tokens | 10136237 | 205 days ago | IN | 0 ETH | 0.00000373 | ||||
Set Tokens | 9952751 | 209 days ago | IN | 0 ETH | 0.00001405 | ||||
Transfer Ownersh... | 9374654 | 222 days ago | IN | 0 ETH | 0.00000181 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
18304284 | 2 hrs ago | 0 ETH | ||||
18304284 | 2 hrs ago | 0 ETH | ||||
18304284 | 2 hrs ago | 0 ETH | ||||
18303160 | 3 hrs ago | 0 ETH | ||||
18303160 | 3 hrs ago | 0 ETH | ||||
18303160 | 3 hrs ago | 0 ETH | ||||
18302059 | 4 hrs ago | 0 ETH | ||||
18302059 | 4 hrs ago | 0 ETH | ||||
18302059 | 4 hrs ago | 0 ETH | ||||
18301762 | 4 hrs ago | 0 ETH | ||||
18301762 | 4 hrs ago | 0 ETH | ||||
18301762 | 4 hrs ago | 0 ETH | ||||
18297776 | 6 hrs ago | 0 ETH | ||||
18297776 | 6 hrs ago | 0 ETH | ||||
18297776 | 6 hrs ago | 0 ETH | ||||
18297762 | 6 hrs ago | 0 ETH | ||||
18297762 | 6 hrs ago | 0 ETH | ||||
18295540 | 8 hrs ago | 0 ETH | ||||
18295540 | 8 hrs ago | 0 ETH | ||||
18295444 | 8 hrs ago | 0 ETH | ||||
18295444 | 8 hrs ago | 0 ETH | ||||
18295444 | 8 hrs ago | 0 ETH | ||||
18295419 | 8 hrs ago | 0 ETH | ||||
18295419 | 8 hrs ago | 0 ETH | ||||
18295329 | 8 hrs ago | 0 ETH |
Loading...
Loading
Contract Name:
WhitelistV2
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENSED // Copyright (c) Eywa.Fi, 2021-2023 - all rights reserved pragma solidity 0.8.17; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/math/Math.sol"; import "./interfaces/IWhitelist.sol"; contract WhitelistV2 is IWhitelist, Ownable { /// @dev fee denominator uint256 public constant FEE_DENOMINATOR = 10000; /// @dev array of token indices mapping(address => uint256) private _tokenIds; /// @dev tokens IWhitelist.TokenStatus[] private _tokens; /// @dev array of pool indices mapping(address => uint256) private _poolIds; /// @dev pools IWhitelist.PoolStatus[] private _pools; event TokenSet(address token, uint256 max, uint256 min, uint256 fee, IWhitelist.TokenState state); event PoolSet(address pool, uint256 fee, IWhitelist.PoolState state); function tokenMin(address token_) external view returns (uint256) { return _getToken(token_).min; } function tokenMax(address token_) external view returns (uint256) { return _getToken(token_).max; } function tokenMinMax(address token_) external view returns (uint256, uint256) { IWhitelist.TokenStatus memory token = _getToken(token_); return (token.min, token.max); } function bridgeFee(address token_) external view returns (uint256) { return _getToken(token_).bridgeFee; } function tokenState(address token_) external view returns (uint8) { return uint8(_getToken(token_).state); } function tokenStatus(address token_) external view returns (IWhitelist.TokenStatus memory) { return _getToken(token_); } function aggregationFee(address pool_) external view returns (uint256) { return _getPool(pool_).aggregationFee; } function poolState(address pool_) external view returns (uint8){ return uint8(_getPool(pool_).state); } function poolStatus(address pool_) external view returns (IWhitelist.PoolStatus memory) { return _getPool(pool_); } function tokens(uint256 offset, uint256 count) external view returns (IWhitelist.TokenStatus[] memory) { require(offset <= _tokens.length, "Whitelist: wrong offset"); count = Math.min(_tokens.length, count + offset); IWhitelist.TokenStatus[] memory tokens_ = new IWhitelist.TokenStatus[](count - offset); for (uint256 i = offset; i < count; ++i) { tokens_[i] = _tokens[i]; } return tokens_; } function pools(uint256 offset, uint256 count) external view returns (IWhitelist.PoolStatus[] memory) { require(offset <= _pools.length, "Whitelist: wrong offset"); count = Math.min(_pools.length, count + offset); IWhitelist.PoolStatus[] memory pools_ = new IWhitelist.PoolStatus[](count - offset); for (uint256 i = offset; i < count; ++i) { pools_[i] = _pools[i]; } return pools_; } function setTokens(IWhitelist.TokenStatus[] memory tokens_) external onlyOwner { uint256 count = tokens_.length; for (uint256 i; i < count; ++i) { IWhitelist.TokenStatus memory status = tokens_[i]; require(status.token != address(0), "Whitelist: zero address"); require(status.max >= status.min, "Whitelist: min max wrong"); require(status.bridgeFee <= FEE_DENOMINATOR, "Whitelist: fee > 100%"); uint256 id = _tokenIds[status.token]; if (id == 0) { _tokens.push(status); _tokenIds[status.token] = _tokens.length; } else { --id; _tokens[id] = status; } emit TokenSet(status.token, status.max, status.min, status.bridgeFee, status.state); } } function setPools(IWhitelist.PoolStatus[] memory pools_) external onlyOwner { uint256 count = pools_.length; for (uint256 i; i < count; ++i) { IWhitelist.PoolStatus memory status = pools_[i]; require(status.pool != address(0), "Whitelist: zero address"); require(status.aggregationFee <= FEE_DENOMINATOR, "Whitelist: fee > 100%"); uint256 id = _poolIds[status.pool]; if (id == 0) { _pools.push(status); _poolIds[status.pool] = _pools.length; } else { --id; _pools[id] = status; } emit PoolSet(status.pool, status.aggregationFee, status.state); } } function _getToken(address token) private view returns (IWhitelist.TokenStatus memory) { uint256 id = _tokenIds[token]; require(id != 0, "Whitelist: token not set"); --id; return _tokens[id]; } function _getPool(address pool) private view returns (IWhitelist.PoolStatus memory) { uint256 id = _poolIds[pool]; require(id != 0, "Whitelist: pool not set"); --id; return _pools[id]; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) * with further edits by Uniswap Labs also under MIT license. */ function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { // Solidity will revert if denominator == 0, unlike the div opcode on its own. // The surrounding unchecked block does not change this fact. // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic. return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1, "Math: mulDiv overflow"); /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2, rounded down, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10, rounded down, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10 ** 64) { value /= 10 ** 64; result += 64; } if (value >= 10 ** 32) { value /= 10 ** 32; result += 32; } if (value >= 10 ** 16) { value /= 10 ** 16; result += 16; } if (value >= 10 ** 8) { value /= 10 ** 8; result += 8; } if (value >= 10 ** 4) { value /= 10 ** 4; result += 4; } if (value >= 10 ** 2) { value /= 10 ** 2; result += 2; } if (value >= 10 ** 1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0); } } /** * @dev Return the log in base 256, rounded down, of a positive value. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 256, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0); } } }
// SPDX-License-Identifier: UNLICENSED // Copyright (c) Eywa.Fi, 2021-2023 - all rights reserved pragma solidity 0.8.17; interface IWhitelist { enum TokenState { NotSet, InOut } enum PoolState { NotSet, AddSwapRemove } struct TokenStatus { address token; uint256 min; uint256 max; uint256 bridgeFee; TokenState state; } struct PoolStatus { address pool; uint256 aggregationFee; PoolState state; } function tokenMin(address token) external view returns (uint256); function tokenMax(address token) external view returns (uint256); function tokenMinMax(address token) external view returns (uint256, uint256); function bridgeFee(address token) external view returns (uint256); function tokenState(address token) external view returns (uint8); function tokenStatus(address token) external view returns (TokenStatus memory); function tokens(uint256 offset, uint256 count) external view returns (TokenStatus[] memory); function aggregationFee(address pool) external view returns (uint256); function poolState(address pool) external view returns (uint8); function poolStatus(address pool) external view returns (PoolStatus memory); function pools(uint256 offset, uint256 count) external view returns (PoolStatus[] memory); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pool","type":"address"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"},{"indexed":false,"internalType":"enum IWhitelist.PoolState","name":"state","type":"uint8"}],"name":"PoolSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"max","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"min","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fee","type":"uint256"},{"indexed":false,"internalType":"enum IWhitelist.TokenState","name":"state","type":"uint8"}],"name":"TokenSet","type":"event"},{"inputs":[],"name":"FEE_DENOMINATOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool_","type":"address"}],"name":"aggregationFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token_","type":"address"}],"name":"bridgeFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool_","type":"address"}],"name":"poolState","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool_","type":"address"}],"name":"poolStatus","outputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"aggregationFee","type":"uint256"},{"internalType":"enum IWhitelist.PoolState","name":"state","type":"uint8"}],"internalType":"struct IWhitelist.PoolStatus","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"offset","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"pools","outputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"aggregationFee","type":"uint256"},{"internalType":"enum IWhitelist.PoolState","name":"state","type":"uint8"}],"internalType":"struct IWhitelist.PoolStatus[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"aggregationFee","type":"uint256"},{"internalType":"enum IWhitelist.PoolState","name":"state","type":"uint8"}],"internalType":"struct IWhitelist.PoolStatus[]","name":"pools_","type":"tuple[]"}],"name":"setPools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"min","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"},{"internalType":"uint256","name":"bridgeFee","type":"uint256"},{"internalType":"enum IWhitelist.TokenState","name":"state","type":"uint8"}],"internalType":"struct IWhitelist.TokenStatus[]","name":"tokens_","type":"tuple[]"}],"name":"setTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token_","type":"address"}],"name":"tokenMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token_","type":"address"}],"name":"tokenMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token_","type":"address"}],"name":"tokenMinMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token_","type":"address"}],"name":"tokenState","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token_","type":"address"}],"name":"tokenStatus","outputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"min","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"},{"internalType":"uint256","name":"bridgeFee","type":"uint256"},{"internalType":"enum IWhitelist.TokenState","name":"state","type":"uint8"}],"internalType":"struct IWhitelist.TokenStatus","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"offset","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"tokens","outputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"min","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"},{"internalType":"uint256","name":"bridgeFee","type":"uint256"},{"internalType":"enum IWhitelist.TokenState","name":"state","type":"uint8"}],"internalType":"struct IWhitelist.TokenStatus[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5061001a3361001f565b61006f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6116668061007e6000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c8063715018a6116100a257806399cd120f1161007157806399cd120f1461024c578063d73792a91461025f578063e8f11c4514610268578063f2fde38b14610290578063f59ae9ae146102a357600080fd5b8063715018a6146101e95780637450e2de146101f15780638b4864d6146102115780638da5cb5b1461023157600080fd5b80633c38ccbb116100de5780633c38ccbb1461017c5780633fc8e65e1461019c57806359b6f0dc146101b157806367742bd4146101d657600080fd5b806308fe73b4146101105780630acac94214610136578063171ed7e9146101565780633b8b70bb14610169575b600080fd5b61012361011e366004611144565b6102b6565b6040519081526020015b60405180910390f35b610149610144366004611144565b6102cb565b60405161012d91906111d7565b610123610164366004611144565b6102e2565b610123610177366004611144565b6102f7565b61018f61018a366004611144565b61030c565b60405161012d9190611215565b6101af6101aa3660046112e7565b610336565b005b6101c46101bf366004611144565b61060d565b60405160ff909116815260200161012d565b6101236101e4366004611144565b61062d565b6101af610638565b6102046101ff3660046113ba565b61064c565b60405161012d91906113dc565b61022461021f3660046113ba565b6107eb565b60405161012d919061142a565b6000546040516001600160a01b03909116815260200161012d565b6101c461025a366004611144565b610997565b61012361271081565b61027b610276366004611144565b6109b7565b6040805192835260208301919091520161012d565b6101af61029e366004611144565b6109db565b6101af6102b136600461146c565b610a54565b60006102c182610deb565b6060015192915050565b6102d36110e0565b6102dc82610deb565b92915050565b60006102ed82610deb565b6020015192915050565b600061030282610deb565b6040015192915050565b61032d60408051606081018252600080825260208201819052909182015290565b6102dc82610f1f565b61033e61101e565b805160005b8181101561060857600083828151811061035f5761035f611542565b602090810291909101015180519091506001600160a01b03166103c35760405162461bcd60e51b815260206004820152601760248201527657686974656c6973743a207a65726f206164647265737360481b60448201526064015b60405180910390fd5b612710816020015111156104115760405162461bcd60e51b815260206004820152601560248201527457686974656c6973743a20666565203e203130302560581b60448201526064016103ba565b80516001600160a01b031660009081526003602052604081205490819003610524576004805460018181018355600092909252835160039091027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b810180546001600160a01b039093166001600160a01b031990931692909217825560208501517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c82015560408501517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d9091018054869460ff199091169083818111156104fb576104fb61115f565b02179055505060045483516001600160a01b0316600090815260036020526040902055506105ae565b61052d8161156e565b9050816004828154811061054357610543611542565b600091825260209182902083516003929092020180546001600160a01b0319166001600160a01b039092169190911781559082015160018083019190915560408301516002830180549192909160ff19169083818111156105a6576105a661115f565b021790555050505b7f35cf0ed869165a43444185b5768c9d223379438ca00add4ec553b761d79671488260000151836020015184604001516040516105ed93929190611585565b60405180910390a1505080610601906115b3565b9050610343565b505050565b600061061882610deb565b6080015160018111156102dc576102dc61115f565b60006102ed82610f1f565b61064061101e565b61064a6000611078565b565b60045460609083111561069b5760405162461bcd60e51b815260206004820152601760248201527615da1a5d195b1a5cdd0e881ddc9bdb99c81bd9999cd95d604a1b60448201526064016103ba565b6004546106b1906106ac85856115cc565b6110c8565b915060006106bf84846115df565b67ffffffffffffffff8111156106d7576106d7611223565b60405190808252806020026020018201604052801561072957816020015b61071660408051606081018252600080825260208201819052909182015290565b8152602001906001900390816106f55790505b509050835b838110156107e3576004818154811061074957610749611542565b600091825260209182902060408051606081018252600390930290910180546001600160a01b03168352600180820154948401949094526002810154929390929184019160ff16908111156107a0576107a061115f565b60018111156107b1576107b161115f565b815250508282815181106107c7576107c7611542565b6020026020010181905250806107dc906115b3565b905061072e565b509392505050565b60025460609083111561083a5760405162461bcd60e51b815260206004820152601760248201527615da1a5d195b1a5cdd0e881ddc9bdb99c81bd9999cd95d604a1b60448201526064016103ba565b60025461084b906106ac85856115cc565b9150600061085984846115df565b67ffffffffffffffff81111561087157610871611223565b6040519080825280602002602001820160405280156108aa57816020015b6108976110e0565b81526020019060019003908161088f5790505b509050835b838110156107e357600281815481106108ca576108ca611542565b90600052602060002090600502016040518060a00160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff1660018111156109545761095461115f565b60018111156109655761096561115f565b8152505082828151811061097b5761097b611542565b602002602001018190525080610990906115b3565b90506108af565b60006109a282610f1f565b6040015160018111156102dc576102dc61115f565b60008060006109c584610deb565b9050806020015181604001519250925050915091565b6109e361101e565b6001600160a01b038116610a485760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103ba565b610a5181611078565b50565b610a5c61101e565b805160005b81811015610608576000838281518110610a7d57610a7d611542565b602090810291909101015180519091506001600160a01b0316610adc5760405162461bcd60e51b815260206004820152601760248201527657686974656c6973743a207a65726f206164647265737360481b60448201526064016103ba565b806020015181604001511015610b345760405162461bcd60e51b815260206004820152601860248201527f57686974656c6973743a206d696e206d61782077726f6e67000000000000000060448201526064016103ba565b61271081606001511115610b825760405162461bcd60e51b815260206004820152601560248201527457686974656c6973743a20666565203e203130302560581b60448201526064016103ba565b80516001600160a01b031660009081526001602052604081205490819003610ce7576002805460018181018355600092909252835160059091027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace810180546001600160a01b039093166001600160a01b031990931692909217825560208501517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf82015560408501517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad082015560608501517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad182015560808501517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091018054869460ff19909116908381811115610cbe57610cbe61115f565b02179055505060025483516001600160a01b031660009081526001602052604090205550610d85565b610cf08161156e565b90508160028281548110610d0657610d06611542565b600091825260209182902083516005929092020180546001600160a01b0319166001600160a01b0390921691909117815590820151600180830191909155604083015160028301556060830151600383015560808301516004830180549192909160ff1916908381811115610d7d57610d7d61115f565b021790555050505b7f0d7b343ecd56f9990d6289234e875fec1546a589555b41e8c68d1b0bce612b6582600001518360400151846020015185606001518660800151604051610dd09594939291906115f2565b60405180910390a1505080610de4906115b3565b9050610a61565b610df36110e0565b6001600160a01b03821660009081526001602052604081205490819003610e5c5760405162461bcd60e51b815260206004820152601860248201527f57686974656c6973743a20746f6b656e206e6f7420736574000000000000000060448201526064016103ba565b610e658161156e565b905060028181548110610e7a57610e7a611542565b90600052602060002090600502016040518060a00160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff166001811115610f0457610f0461115f565b6001811115610f1557610f1561115f565b9052509392505050565b610f4060408051606081018252600080825260208201819052909182015290565b6001600160a01b03821660009081526003602052604081205490819003610fa95760405162461bcd60e51b815260206004820152601760248201527f57686974656c6973743a20706f6f6c206e6f742073657400000000000000000060448201526064016103ba565b610fb28161156e565b905060048181548110610fc757610fc7611542565b600091825260209182902060408051606081018252600390930290910180546001600160a01b03168352600180820154948401949094526002810154929390929184019160ff1690811115610f0457610f0461115f565b6000546001600160a01b0316331461064a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103ba565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008183106110d757816110d9565b825b9392505050565b6040518060a0016040528060006001600160a01b03168152602001600081526020016000815260200160008152602001600060018111156111235761112361115f565b905290565b80356001600160a01b038116811461113f57600080fd5b919050565b60006020828403121561115657600080fd5b6110d982611128565b634e487b7160e01b600052602160045260246000fd5b60028110610a5157634e487b7160e01b600052602160045260246000fd5b80516001600160a01b0316825260208082015190830152604080820151908301526060808201519083015260808101516111cc81611175565b806080840152505050565b60a081016102dc8284611193565b80516001600160a01b0316825260208082015190830152604081015161120a81611175565b806040840152505050565b606081016102dc82846111e5565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561125c5761125c611223565b60405290565b60405160a0810167ffffffffffffffff8111828210171561125c5761125c611223565b604051601f8201601f1916810167ffffffffffffffff811182821017156112ae576112ae611223565b604052919050565b600067ffffffffffffffff8211156112d0576112d0611223565b5060051b60200190565b60028110610a5157600080fd5b600060208083850312156112fa57600080fd5b823567ffffffffffffffff81111561131157600080fd5b8301601f8101851361132257600080fd5b8035611335611330826112b6565b611285565b8181526060918202830184019184820191908884111561135457600080fd5b938501935b838510156113ae5780858a0312156113715760008081fd5b611379611239565b61138286611128565b8152868601358782015260408087013561139b816112da565b9082015283529384019391850191611359565b50979650505050505050565b600080604083850312156113cd57600080fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b8181101561141e5761140b8385516111e5565b92840192606092909201916001016113f8565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561141e57611459838551611193565b9284019260a09290920191600101611446565b6000602080838503121561147f57600080fd5b823567ffffffffffffffff81111561149657600080fd5b8301601f810185136114a757600080fd5b80356114b5611330826112b6565b81815260a091820283018401918482019190888411156114d457600080fd5b938501935b838510156113ae5780858a0312156114f15760008081fd5b6114f9611262565b61150286611128565b81528587013587820152604080870135908201526060808701359082015260808087013561152f816112da565b90820152835293840193918501916114d9565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008161157d5761157d611558565b506000190190565b6001600160a01b038416815260208101839052606081016115a583611175565b826040830152949350505050565b6000600182016115c5576115c5611558565b5060010190565b808201808211156102dc576102dc611558565b818103818111156102dc576102dc611558565b6001600160a01b038616815260208101859052604081018490526060810183905260a0810161162083611175565b826080830152969550505050505056fea2646970667358221220158a009fe0c3a59c230d50b6e7cb7cc9897f33b52a7e52a5943dcd6f71cdfd0b64736f6c63430008110033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061010b5760003560e01c8063715018a6116100a257806399cd120f1161007157806399cd120f1461024c578063d73792a91461025f578063e8f11c4514610268578063f2fde38b14610290578063f59ae9ae146102a357600080fd5b8063715018a6146101e95780637450e2de146101f15780638b4864d6146102115780638da5cb5b1461023157600080fd5b80633c38ccbb116100de5780633c38ccbb1461017c5780633fc8e65e1461019c57806359b6f0dc146101b157806367742bd4146101d657600080fd5b806308fe73b4146101105780630acac94214610136578063171ed7e9146101565780633b8b70bb14610169575b600080fd5b61012361011e366004611144565b6102b6565b6040519081526020015b60405180910390f35b610149610144366004611144565b6102cb565b60405161012d91906111d7565b610123610164366004611144565b6102e2565b610123610177366004611144565b6102f7565b61018f61018a366004611144565b61030c565b60405161012d9190611215565b6101af6101aa3660046112e7565b610336565b005b6101c46101bf366004611144565b61060d565b60405160ff909116815260200161012d565b6101236101e4366004611144565b61062d565b6101af610638565b6102046101ff3660046113ba565b61064c565b60405161012d91906113dc565b61022461021f3660046113ba565b6107eb565b60405161012d919061142a565b6000546040516001600160a01b03909116815260200161012d565b6101c461025a366004611144565b610997565b61012361271081565b61027b610276366004611144565b6109b7565b6040805192835260208301919091520161012d565b6101af61029e366004611144565b6109db565b6101af6102b136600461146c565b610a54565b60006102c182610deb565b6060015192915050565b6102d36110e0565b6102dc82610deb565b92915050565b60006102ed82610deb565b6020015192915050565b600061030282610deb565b6040015192915050565b61032d60408051606081018252600080825260208201819052909182015290565b6102dc82610f1f565b61033e61101e565b805160005b8181101561060857600083828151811061035f5761035f611542565b602090810291909101015180519091506001600160a01b03166103c35760405162461bcd60e51b815260206004820152601760248201527657686974656c6973743a207a65726f206164647265737360481b60448201526064015b60405180910390fd5b612710816020015111156104115760405162461bcd60e51b815260206004820152601560248201527457686974656c6973743a20666565203e203130302560581b60448201526064016103ba565b80516001600160a01b031660009081526003602052604081205490819003610524576004805460018181018355600092909252835160039091027f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b810180546001600160a01b039093166001600160a01b031990931692909217825560208501517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19c82015560408501517f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19d9091018054869460ff199091169083818111156104fb576104fb61115f565b02179055505060045483516001600160a01b0316600090815260036020526040902055506105ae565b61052d8161156e565b9050816004828154811061054357610543611542565b600091825260209182902083516003929092020180546001600160a01b0319166001600160a01b039092169190911781559082015160018083019190915560408301516002830180549192909160ff19169083818111156105a6576105a661115f565b021790555050505b7f35cf0ed869165a43444185b5768c9d223379438ca00add4ec553b761d79671488260000151836020015184604001516040516105ed93929190611585565b60405180910390a1505080610601906115b3565b9050610343565b505050565b600061061882610deb565b6080015160018111156102dc576102dc61115f565b60006102ed82610f1f565b61064061101e565b61064a6000611078565b565b60045460609083111561069b5760405162461bcd60e51b815260206004820152601760248201527615da1a5d195b1a5cdd0e881ddc9bdb99c81bd9999cd95d604a1b60448201526064016103ba565b6004546106b1906106ac85856115cc565b6110c8565b915060006106bf84846115df565b67ffffffffffffffff8111156106d7576106d7611223565b60405190808252806020026020018201604052801561072957816020015b61071660408051606081018252600080825260208201819052909182015290565b8152602001906001900390816106f55790505b509050835b838110156107e3576004818154811061074957610749611542565b600091825260209182902060408051606081018252600390930290910180546001600160a01b03168352600180820154948401949094526002810154929390929184019160ff16908111156107a0576107a061115f565b60018111156107b1576107b161115f565b815250508282815181106107c7576107c7611542565b6020026020010181905250806107dc906115b3565b905061072e565b509392505050565b60025460609083111561083a5760405162461bcd60e51b815260206004820152601760248201527615da1a5d195b1a5cdd0e881ddc9bdb99c81bd9999cd95d604a1b60448201526064016103ba565b60025461084b906106ac85856115cc565b9150600061085984846115df565b67ffffffffffffffff81111561087157610871611223565b6040519080825280602002602001820160405280156108aa57816020015b6108976110e0565b81526020019060019003908161088f5790505b509050835b838110156107e357600281815481106108ca576108ca611542565b90600052602060002090600502016040518060a00160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff1660018111156109545761095461115f565b60018111156109655761096561115f565b8152505082828151811061097b5761097b611542565b602002602001018190525080610990906115b3565b90506108af565b60006109a282610f1f565b6040015160018111156102dc576102dc61115f565b60008060006109c584610deb565b9050806020015181604001519250925050915091565b6109e361101e565b6001600160a01b038116610a485760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103ba565b610a5181611078565b50565b610a5c61101e565b805160005b81811015610608576000838281518110610a7d57610a7d611542565b602090810291909101015180519091506001600160a01b0316610adc5760405162461bcd60e51b815260206004820152601760248201527657686974656c6973743a207a65726f206164647265737360481b60448201526064016103ba565b806020015181604001511015610b345760405162461bcd60e51b815260206004820152601860248201527f57686974656c6973743a206d696e206d61782077726f6e67000000000000000060448201526064016103ba565b61271081606001511115610b825760405162461bcd60e51b815260206004820152601560248201527457686974656c6973743a20666565203e203130302560581b60448201526064016103ba565b80516001600160a01b031660009081526001602052604081205490819003610ce7576002805460018181018355600092909252835160059091027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace810180546001600160a01b039093166001600160a01b031990931692909217825560208501517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf82015560408501517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad082015560608501517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad182015560808501517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ad29091018054869460ff19909116908381811115610cbe57610cbe61115f565b02179055505060025483516001600160a01b031660009081526001602052604090205550610d85565b610cf08161156e565b90508160028281548110610d0657610d06611542565b600091825260209182902083516005929092020180546001600160a01b0319166001600160a01b0390921691909117815590820151600180830191909155604083015160028301556060830151600383015560808301516004830180549192909160ff1916908381811115610d7d57610d7d61115f565b021790555050505b7f0d7b343ecd56f9990d6289234e875fec1546a589555b41e8c68d1b0bce612b6582600001518360400151846020015185606001518660800151604051610dd09594939291906115f2565b60405180910390a1505080610de4906115b3565b9050610a61565b610df36110e0565b6001600160a01b03821660009081526001602052604081205490819003610e5c5760405162461bcd60e51b815260206004820152601860248201527f57686974656c6973743a20746f6b656e206e6f7420736574000000000000000060448201526064016103ba565b610e658161156e565b905060028181548110610e7a57610e7a611542565b90600052602060002090600502016040518060a00160405290816000820160009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b031681526020016001820154815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff166001811115610f0457610f0461115f565b6001811115610f1557610f1561115f565b9052509392505050565b610f4060408051606081018252600080825260208201819052909182015290565b6001600160a01b03821660009081526003602052604081205490819003610fa95760405162461bcd60e51b815260206004820152601760248201527f57686974656c6973743a20706f6f6c206e6f742073657400000000000000000060448201526064016103ba565b610fb28161156e565b905060048181548110610fc757610fc7611542565b600091825260209182902060408051606081018252600390930290910180546001600160a01b03168352600180820154948401949094526002810154929390929184019160ff1690811115610f0457610f0461115f565b6000546001600160a01b0316331461064a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103ba565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008183106110d757816110d9565b825b9392505050565b6040518060a0016040528060006001600160a01b03168152602001600081526020016000815260200160008152602001600060018111156111235761112361115f565b905290565b80356001600160a01b038116811461113f57600080fd5b919050565b60006020828403121561115657600080fd5b6110d982611128565b634e487b7160e01b600052602160045260246000fd5b60028110610a5157634e487b7160e01b600052602160045260246000fd5b80516001600160a01b0316825260208082015190830152604080820151908301526060808201519083015260808101516111cc81611175565b806080840152505050565b60a081016102dc8284611193565b80516001600160a01b0316825260208082015190830152604081015161120a81611175565b806040840152505050565b606081016102dc82846111e5565b634e487b7160e01b600052604160045260246000fd5b6040516060810167ffffffffffffffff8111828210171561125c5761125c611223565b60405290565b60405160a0810167ffffffffffffffff8111828210171561125c5761125c611223565b604051601f8201601f1916810167ffffffffffffffff811182821017156112ae576112ae611223565b604052919050565b600067ffffffffffffffff8211156112d0576112d0611223565b5060051b60200190565b60028110610a5157600080fd5b600060208083850312156112fa57600080fd5b823567ffffffffffffffff81111561131157600080fd5b8301601f8101851361132257600080fd5b8035611335611330826112b6565b611285565b8181526060918202830184019184820191908884111561135457600080fd5b938501935b838510156113ae5780858a0312156113715760008081fd5b611379611239565b61138286611128565b8152868601358782015260408087013561139b816112da565b9082015283529384019391850191611359565b50979650505050505050565b600080604083850312156113cd57600080fd5b50508035926020909101359150565b6020808252825182820181905260009190848201906040850190845b8181101561141e5761140b8385516111e5565b92840192606092909201916001016113f8565b50909695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561141e57611459838551611193565b9284019260a09290920191600101611446565b6000602080838503121561147f57600080fd5b823567ffffffffffffffff81111561149657600080fd5b8301601f810185136114a757600080fd5b80356114b5611330826112b6565b81815260a091820283018401918482019190888411156114d457600080fd5b938501935b838510156113ae5780858a0312156114f15760008081fd5b6114f9611262565b61150286611128565b81528587013587820152604080870135908201526060808701359082015260808087013561152f816112da565b90820152835293840193918501916114d9565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008161157d5761157d611558565b506000190190565b6001600160a01b038416815260208101839052606081016115a583611175565b826040830152949350505050565b6000600182016115c5576115c5611558565b5060010190565b808201808211156102dc576102dc611558565b818103818111156102dc576102dc611558565b6001600160a01b038616815260208101859052604081018490526060810183905260a0810161162083611175565b826080830152969550505050505056fea2646970667358221220158a009fe0c3a59c230d50b6e7cb7cc9897f33b52a7e52a5943dcd6f71cdfd0b64736f6c63430008110033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.