Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 3,710 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Batch Set Asset ... | 16879848 | 647 days ago | IN | 0 ETH | 0.00053686 | ||||
Batch Set Asset ... | 16879673 | 647 days ago | IN | 0 ETH | 0.00057146 | ||||
Batch Set Asset ... | 16879500 | 647 days ago | IN | 0 ETH | 0.00060336 | ||||
Batch Set Asset ... | 16879330 | 647 days ago | IN | 0 ETH | 0.00063204 | ||||
Batch Set Asset ... | 16879156 | 647 days ago | IN | 0 ETH | 0.00075255 | ||||
Batch Set Asset ... | 16878984 | 647 days ago | IN | 0 ETH | 0.00088324 | ||||
Batch Set Asset ... | 16878810 | 647 days ago | IN | 0 ETH | 0.0006322 | ||||
Batch Set Asset ... | 16878638 | 647 days ago | IN | 0 ETH | 0.00070423 | ||||
Batch Set Asset ... | 16878464 | 647 days ago | IN | 0 ETH | 0.00093868 | ||||
Batch Set Asset ... | 16878290 | 648 days ago | IN | 0 ETH | 0.00082327 | ||||
Batch Set Asset ... | 16878117 | 648 days ago | IN | 0 ETH | 0.00070989 | ||||
Batch Set Asset ... | 16877945 | 648 days ago | IN | 0 ETH | 0.00079026 | ||||
Batch Set Asset ... | 16877776 | 648 days ago | IN | 0 ETH | 0.00077082 | ||||
Batch Set Asset ... | 16877776 | 648 days ago | IN | 0 ETH | 0.00103464 | ||||
Batch Set Asset ... | 16877574 | 648 days ago | IN | 0 ETH | 0.00114977 | ||||
Batch Set Asset ... | 16877379 | 648 days ago | IN | 0 ETH | 0.00114894 | ||||
Batch Set Asset ... | 16877184 | 648 days ago | IN | 0 ETH | 0.00118821 | ||||
Batch Set Asset ... | 16876997 | 648 days ago | IN | 0 ETH | 0.00103003 | ||||
Batch Set Asset ... | 16876823 | 648 days ago | IN | 0 ETH | 0.00103149 | ||||
Batch Set Asset ... | 16876644 | 648 days ago | IN | 0 ETH | 0.00124558 | ||||
Batch Set Asset ... | 16876442 | 648 days ago | IN | 0 ETH | 0.00093014 | ||||
Batch Set Asset ... | 16876270 | 648 days ago | IN | 0 ETH | 0.00122779 | ||||
Batch Set Asset ... | 16876074 | 648 days ago | IN | 0 ETH | 0.00063166 | ||||
Batch Set Asset ... | 16875898 | 648 days ago | IN | 0 ETH | 0.00059658 | ||||
Batch Set Asset ... | 16875726 | 648 days ago | IN | 0 ETH | 0.00055117 |
Loading...
Loading
Contract Name:
NFTOracle
Compiler Version
v0.8.11+commit.d7f03943
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: agpl-3.0 pragma solidity 0.8.11; import {INFTOracle} from '../interfaces/INFTOracle.sol'; import {Ownable} from '../dependencies/openzeppelin/contracts/Ownable.sol'; import {Pausable} from '../dependencies/openzeppelin/contracts/Pausable.sol'; /** * @title NFTOracle * @author Vinci **/ contract NFTOracle is INFTOracle, Ownable, Pausable { // asset address mapping (address => uint256) private _addressIndexes; mapping (address => bool) private _emergencyAdmin; address[] private _addressList; address private _operator; // price struct Price { uint32 v1; uint32 v2; uint32 v3; uint32 v4; uint32 v5; uint32 v6; uint32 v7; uint32 ts; } Price private _price; uint256 private constant PRECISION = 1e18; uint256 public constant MAX_PRICE_DEVIATION = 15 * 1e16; // 15% uint32 public constant MIN_UPDATE_TIME = 30 * 60; // 30 min event SetAssetData(uint32[7] prices); event ChangeOperator(address indexed oldOperator, address indexed newOperator); event SetEmergencyAdmin(address indexed admin, bool enabled); /// @notice Constructor /// @param assets The addresses of the assets constructor(address[] memory assets) { _operator = _msgSender(); _addAssets(assets); } function _addAssets(address[] memory addresses) private { uint256 index = _addressList.length + 1; for (uint256 i = 0; i < addresses.length; i++) { address addr = addresses[i]; if (_addressIndexes[addr] == 0) { _addressIndexes[addr] = index; _addressList.push(addr); index++; } } } function operator() external view returns (address) { return _operator; } function isEmergencyAdmin(address admin) external view returns (bool) { return _emergencyAdmin[admin]; } function getAddressList() external view returns (address[] memory) { return _addressList; } function getIndex(address asset) external view returns (uint256) { return _addressIndexes[asset]; } function addAssets(address[] memory assets) external onlyOwner { require(assets.length > 0); _addAssets(assets); } function setPause(bool val) external { require(_emergencyAdmin[_msgSender()], "NFTOracle: caller is not the emergencyAdmin"); if (val) { _pause(); } else { _unpause(); } } function setOperator(address newOperator) external onlyOwner { require(newOperator != address(0), 'NFTOracle: invalid operator'); address oldOperator = _operator; _operator = newOperator; emit ChangeOperator(oldOperator, newOperator); } function setEmergencyAdmin(address admin, bool enabled) external onlyOwner { require(admin != address(0), 'NFTOracle: invalid admin'); _emergencyAdmin[admin] = enabled; emit SetEmergencyAdmin(admin, enabled); } function _getPriceByIndex(uint256 index) private view returns(uint256) { Price memory cachePrice = _price; if (index == 1) { return cachePrice.v1; } else if (index == 2) { return cachePrice.v2; } else if (index == 3) { return cachePrice.v3; } else if (index == 4) { return cachePrice.v4; } else if (index == 5) { return cachePrice.v5; } else if (index == 6) { return cachePrice.v6; } else if (index == 7) { return cachePrice.v7; } else { return 0; } } function getLatestTimestamp() external view returns (uint256) { return uint256(_price.ts); } // return in Wei function getAssetPrice(address asset) external view returns (uint256) { uint256 price = _getPriceByIndex(_addressIndexes[asset]); return price * 1e14; } function getNewPrice( uint256 latestPrice, uint256 currentPrice ) private pure returns (uint256) { if (latestPrice == 0) { return currentPrice; } if (currentPrice == 0 || currentPrice == latestPrice) { return latestPrice; } uint256 percentDeviation; if (latestPrice > currentPrice) { percentDeviation = ((latestPrice - currentPrice) * PRECISION) / latestPrice; } else { percentDeviation = ((currentPrice - latestPrice) * PRECISION) / latestPrice; } if (percentDeviation > MAX_PRICE_DEVIATION) { return latestPrice; } return currentPrice; } // set with 1e4 function batchSetAssetPrice(uint256[7] memory prices) external whenNotPaused { require(_operator == _msgSender(), "NFTOracle: caller is not the operator"); Price storage cachePrice = _price; uint32 currentTimestamp = uint32(block.timestamp); if ((currentTimestamp - cachePrice.ts) >= MIN_UPDATE_TIME) { uint32[7] memory newPrices = [ uint32(getNewPrice(cachePrice.v1, prices[0])), uint32(getNewPrice(cachePrice.v2, prices[1])), uint32(getNewPrice(cachePrice.v3, prices[2])), uint32(getNewPrice(cachePrice.v4, prices[3])), uint32(getNewPrice(cachePrice.v5, prices[4])), uint32(getNewPrice(cachePrice.v6, prices[5])), uint32(getNewPrice(cachePrice.v7, prices[6])) ]; cachePrice.v1 = newPrices[0]; cachePrice.v2 = newPrices[1]; cachePrice.v3 = newPrices[2]; cachePrice.v4 = newPrices[3]; cachePrice.v5 = newPrices[4]; cachePrice.v6 = newPrices[5]; cachePrice.v7 = newPrices[6]; cachePrice.ts = currentTimestamp; emit SetAssetData(newPrices); } } }
// SPDX-License-Identifier: agpl-3.0 pragma solidity 0.8.11; /************ @title INFTOracle interface @notice Interface for the NFT price oracle.*/ interface INFTOracle { /*********** @dev returns the nft asset price in wei */ function getAssetPrice(address asset) external view returns (uint256); /*********** @dev returns the addresses of the assets */ function getAddressList() external view returns(address[] memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (security/Pausable.sol) pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.0 (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; } }
{ "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
[{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOperator","type":"address"},{"indexed":true,"internalType":"address","name":"newOperator","type":"address"}],"name":"ChangeOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32[7]","name":"prices","type":"uint32[7]"}],"name":"SetAssetData","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"admin","type":"address"},{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SetEmergencyAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"MAX_PRICE_DEVIATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_UPDATE_TIME","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"assets","type":"address[]"}],"name":"addAssets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[7]","name":"prices","type":"uint256[7]"}],"name":"batchSetAssetPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAddressList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getAssetPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"}],"name":"isEmergencyAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"admin","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setEmergencyAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOperator","type":"address"}],"name":"setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"val","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162001509380380620015098339810160408190526200003491620001ec565b6200003f3362000070565b6000805460ff60a01b19169055600480546001600160a01b031916331790556200006981620000c0565b5062000323565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600354600090620000d3906001620002d4565b905060005b8251811015620001b4576000838281518110620000f957620000f9620002ef565b6020026020010151905060016000826001600160a01b03166001600160a01b0316815260200190815260200160002054600014156200019e576001600160a01b038116600081815260016020819052604082208690556003805491820181559091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319169091179055826200019a8162000305565b9350505b5080620001ab8162000305565b915050620000d8565b505050565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620001e757600080fd5b919050565b600060208083850312156200020057600080fd5b82516001600160401b03808211156200021857600080fd5b818501915085601f8301126200022d57600080fd5b815181811115620002425762000242620001b9565b8060051b604051601f19603f830116810181811085821117156200026a576200026a620001b9565b6040529182528482019250838101850191888311156200028957600080fd5b938501935b82851015620002b257620002a285620001cf565b845293850193928501926200028e565b98975050505050505050565b634e487b7160e01b600052601160045260246000fd5b60008219821115620002ea57620002ea620002be565b500190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156200031c576200031c620002be565b5060010190565b6111d680620003336000396000f3fe608060405234801561001057600080fd5b506004361061010b5760003560e01c80638da5cb5b116100a2578063b3596f0711610071578063b3596f0714610255578063b3ab15fb14610268578063bedb86fb1461027b578063f2fde38b1461028e578063f43b52cb146102a157600080fd5b80638da5cb5b146101eb57806396f277b7146101fc578063aea321c614610219578063b31610db1461022c57600080fd5b80635c975abb116100de5780635c975abb1461019e57806363a5d7e7146101b0578063715018a6146101ce57806381119130146101d657600080fd5b80632500f2b6146101105780633cff265a146101515780634d0503d414610166578063570ca73514610179575b600080fd5b61013c61011e366004610e20565b6001600160a01b031660009081526002602052604090205460ff1690565b60405190151581526020015b60405180910390f35b61016461015f366004610e82565b6102b6565b005b610164610174366004610f10565b6105d4565b6004546001600160a01b03165b6040516001600160a01b039091168152602001610148565b600054600160a01b900460ff1661013c565b6101b961070881565b60405163ffffffff9091168152602001610148565b6101646106b3565b6101de6106e9565b6040516101489190610f43565b6000546001600160a01b0316610186565b61020b670214e8348c4f000081565b604051908152602001610148565b610164610227366004610f90565b61074b565b61020b61023a366004610e20565b6001600160a01b031660009081526001602052604090205490565b61020b610263366004610e20565b61078f565b610164610276366004610e20565b6107cc565b61016461028936600461103d565b61089e565b61016461029c366004610e20565b610927565b600554600160e01b900463ffffffff1661020b565b600054600160a01b900460ff16156103085760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064015b60405180910390fd5b6004546001600160a01b031633146103705760405162461bcd60e51b815260206004820152602560248201527f4e46544f7261636c653a2063616c6c6572206973206e6f7420746865206f70656044820152643930ba37b960d91b60648201526084016102ff565b6005805442906107089061039190600160e01b900463ffffffff168361106e565b63ffffffff16106105cf576040805160e0810190915282546000919081906103c69063ffffffff1687855b60200201516109bf565b63ffffffff908116825285546020909201916103ee91640100000000909104168760016103bc565b63ffffffff9081168252855460209092019161041591600160401b909104168760026103bc565b63ffffffff9081168252855460209092019161043c91600160601b909104168760036103bc565b63ffffffff9081168252855460209092019161046391600160801b909104168760046103bc565b63ffffffff9081168252855460209092019161048a91600160a01b909104168760056103bc565b63ffffffff908116825285546020909201916104b191600160c01b909104168760066103bc565b63ffffffff9081169091528151855460208401516040808601516060870151608088015160a089015160c08a01518c8a16600160e01b026001600160e01b03918b16600160c01b0291909116918a16600160a01b02938a16600160601b02968a1664010000000002988a1667ffffffffffffffff1990981697909717979097176fffffffffffffffff00000000000000001916928816600160401b0263ffffffff60601b1916929092179390931767ffffffffffffffff60801b19169516600160801b0263ffffffff60a01b191694909417176001600160c01b031691909117178555519091507f925d19ce349abfd2e5efba98cb0a2d414188f1ff4352f722af8277048b44a894906105c59083906110a9565b60405180910390a1505b505050565b6000546001600160a01b031633146105fe5760405162461bcd60e51b81526004016102ff906110e0565b6001600160a01b0382166106545760405162461bcd60e51b815260206004820152601860248201527f4e46544f7261636c653a20696e76616c69642061646d696e000000000000000060448201526064016102ff565b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591519182527fd31e6f3e4ff12681638f56ab4792e32b335f90235a708d31e741ee9dac011e91910160405180910390a25050565b6000546001600160a01b031633146106dd5760405162461bcd60e51b81526004016102ff906110e0565b6106e76000610a6d565b565b6060600380548060200260200160405190810160405280929190818152602001828054801561074157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610723575b5050505050905090565b6000546001600160a01b031633146107755760405162461bcd60e51b81526004016102ff906110e0565b600081511161078357600080fd5b61078c81610abd565b50565b6001600160a01b03811660009081526001602052604081205481906107b390610ba5565b90506107c581655af3107a4000611115565b9392505050565b6000546001600160a01b031633146107f65760405162461bcd60e51b81526004016102ff906110e0565b6001600160a01b03811661084c5760405162461bcd60e51b815260206004820152601b60248201527f4e46544f7261636c653a20696e76616c6964206f70657261746f72000000000060448201526064016102ff565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f43ecbc1bb0a9bebbcadca5bdaedc649040adb65597772899e25403afb28b679490600090a35050565b3360009081526002602052604090205460ff166109115760405162461bcd60e51b815260206004820152602b60248201527f4e46544f7261636c653a2063616c6c6572206973206e6f742074686520656d6560448201526a3933b2b731bca0b236b4b760a91b60648201526084016102ff565b801561091f5761078c610cdb565b61078c610d80565b6000546001600160a01b031633146109515760405162461bcd60e51b81526004016102ff906110e0565b6001600160a01b0381166109b65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102ff565b61078c81610a6d565b6000826109cd575080610a67565b8115806109d957508282145b156109e5575081610a67565b600082841115610a1e5783670de0b6b3a7640000610a038583611134565b610a0d9190611115565b610a17919061114b565b9050610a49565b83670de0b6b3a7640000610a328286611134565b610a3c9190611115565b610a46919061114b565b90505b670214e8348c4f0000811115610a625783915050610a67565b829150505b92915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600354600090610ace90600161116d565b905060005b82518110156105cf576000838281518110610af057610af0611093565b6020026020010151905060016000826001600160a01b03166001600160a01b031681526020019081526020016000205460001415610b92576001600160a01b038116600081815260016020819052604082208690556003805491820181559091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b031916909117905582610b8e81611185565b9350505b5080610b9d81611185565b915050610ad3565b604080516101008101825260055463ffffffff8082168352640100000000820481166020840152600160401b8204811693830193909352600160601b810483166060830152600160801b810483166080830152600160a01b8104831660a0830152600160c01b8104831660c0830152600160e01b900490911660e08201526000906001831415610c3c575163ffffffff1692915050565b8260021415610c55576020015163ffffffff1692915050565b8260031415610c6e576040015163ffffffff1692915050565b8260041415610c87576060015163ffffffff1692915050565b8260051415610ca0576080015163ffffffff1692915050565b8260061415610cb95760a0015163ffffffff1692915050565b8260071415610cd25760c0015163ffffffff1692915050565b50600092915050565b600054600160a01b900460ff1615610d285760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016102ff565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610d633390565b6040516001600160a01b03909116815260200160405180910390a1565b600054600160a01b900460ff16610dd05760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016102ff565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33610d63565b80356001600160a01b0381168114610e1b57600080fd5b919050565b600060208284031215610e3257600080fd5b6107c582610e04565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610e7a57610e7a610e3b565b604052919050565b600060e08284031215610e9457600080fd5b82601f830112610ea357600080fd5b60405160e0810181811067ffffffffffffffff82111715610ec657610ec6610e3b565b6040528060e0840185811115610edb57600080fd5b845b81811015610ef5578035835260209283019201610edd565b509195945050505050565b80358015158114610e1b57600080fd5b60008060408385031215610f2357600080fd5b610f2c83610e04565b9150610f3a60208401610f00565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015610f845783516001600160a01b031683529284019291840191600101610f5f565b50909695505050505050565b60006020808385031215610fa357600080fd5b823567ffffffffffffffff80821115610fbb57600080fd5b818501915085601f830112610fcf57600080fd5b813581811115610fe157610fe1610e3b565b8060051b9150610ff2848301610e51565b818152918301840191848101908884111561100c57600080fd5b938501935b838510156110315761102285610e04565b82529385019390850190611011565b98975050505050505050565b60006020828403121561104f57600080fd5b6107c582610f00565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff8381169083168181101561108b5761108b611058565b039392505050565b634e487b7160e01b600052603260045260246000fd5b60e08101818360005b60078110156110d757815163ffffffff168352602092830192909101906001016110b2565b50505092915050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600081600019048311821515161561112f5761112f611058565b500290565b60008282101561114657611146611058565b500390565b60008261116857634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561118057611180611058565b500190565b600060001982141561119957611199611058565b506001019056fea26469706673582212207a5897ad3cba83b5bc3c705516eda47714a497a10d3e6c961a05cf0ebc69c69964736f6c634300080b003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000007000000000000000000000000b7f7f6c52f2e2fdb1963eab30438024864c313f6000000000000000000000000bc4ca0eda7647a8ab7c2061c2e118a18a936f13d00000000000000000000000060e4d786628fea6478f785a6d7e704777c86a7c600000000000000000000000023581767a106ae21c074b2276d25e5c3e136a68b0000000000000000000000008a90cab2b38dba80c64b7734e58ee1db38b8992e00000000000000000000000049cf6f5d44e70224e2e23fdcdd2c053f30ada28b000000000000000000000000ed5af388653567af2f388e6224dc7c4b3241c544
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061010b5760003560e01c80638da5cb5b116100a2578063b3596f0711610071578063b3596f0714610255578063b3ab15fb14610268578063bedb86fb1461027b578063f2fde38b1461028e578063f43b52cb146102a157600080fd5b80638da5cb5b146101eb57806396f277b7146101fc578063aea321c614610219578063b31610db1461022c57600080fd5b80635c975abb116100de5780635c975abb1461019e57806363a5d7e7146101b0578063715018a6146101ce57806381119130146101d657600080fd5b80632500f2b6146101105780633cff265a146101515780634d0503d414610166578063570ca73514610179575b600080fd5b61013c61011e366004610e20565b6001600160a01b031660009081526002602052604090205460ff1690565b60405190151581526020015b60405180910390f35b61016461015f366004610e82565b6102b6565b005b610164610174366004610f10565b6105d4565b6004546001600160a01b03165b6040516001600160a01b039091168152602001610148565b600054600160a01b900460ff1661013c565b6101b961070881565b60405163ffffffff9091168152602001610148565b6101646106b3565b6101de6106e9565b6040516101489190610f43565b6000546001600160a01b0316610186565b61020b670214e8348c4f000081565b604051908152602001610148565b610164610227366004610f90565b61074b565b61020b61023a366004610e20565b6001600160a01b031660009081526001602052604090205490565b61020b610263366004610e20565b61078f565b610164610276366004610e20565b6107cc565b61016461028936600461103d565b61089e565b61016461029c366004610e20565b610927565b600554600160e01b900463ffffffff1661020b565b600054600160a01b900460ff16156103085760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064015b60405180910390fd5b6004546001600160a01b031633146103705760405162461bcd60e51b815260206004820152602560248201527f4e46544f7261636c653a2063616c6c6572206973206e6f7420746865206f70656044820152643930ba37b960d91b60648201526084016102ff565b6005805442906107089061039190600160e01b900463ffffffff168361106e565b63ffffffff16106105cf576040805160e0810190915282546000919081906103c69063ffffffff1687855b60200201516109bf565b63ffffffff908116825285546020909201916103ee91640100000000909104168760016103bc565b63ffffffff9081168252855460209092019161041591600160401b909104168760026103bc565b63ffffffff9081168252855460209092019161043c91600160601b909104168760036103bc565b63ffffffff9081168252855460209092019161046391600160801b909104168760046103bc565b63ffffffff9081168252855460209092019161048a91600160a01b909104168760056103bc565b63ffffffff908116825285546020909201916104b191600160c01b909104168760066103bc565b63ffffffff9081169091528151855460208401516040808601516060870151608088015160a089015160c08a01518c8a16600160e01b026001600160e01b03918b16600160c01b0291909116918a16600160a01b02938a16600160601b02968a1664010000000002988a1667ffffffffffffffff1990981697909717979097176fffffffffffffffff00000000000000001916928816600160401b0263ffffffff60601b1916929092179390931767ffffffffffffffff60801b19169516600160801b0263ffffffff60a01b191694909417176001600160c01b031691909117178555519091507f925d19ce349abfd2e5efba98cb0a2d414188f1ff4352f722af8277048b44a894906105c59083906110a9565b60405180910390a1505b505050565b6000546001600160a01b031633146105fe5760405162461bcd60e51b81526004016102ff906110e0565b6001600160a01b0382166106545760405162461bcd60e51b815260206004820152601860248201527f4e46544f7261636c653a20696e76616c69642061646d696e000000000000000060448201526064016102ff565b6001600160a01b038216600081815260026020908152604091829020805460ff191685151590811790915591519182527fd31e6f3e4ff12681638f56ab4792e32b335f90235a708d31e741ee9dac011e91910160405180910390a25050565b6000546001600160a01b031633146106dd5760405162461bcd60e51b81526004016102ff906110e0565b6106e76000610a6d565b565b6060600380548060200260200160405190810160405280929190818152602001828054801561074157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610723575b5050505050905090565b6000546001600160a01b031633146107755760405162461bcd60e51b81526004016102ff906110e0565b600081511161078357600080fd5b61078c81610abd565b50565b6001600160a01b03811660009081526001602052604081205481906107b390610ba5565b90506107c581655af3107a4000611115565b9392505050565b6000546001600160a01b031633146107f65760405162461bcd60e51b81526004016102ff906110e0565b6001600160a01b03811661084c5760405162461bcd60e51b815260206004820152601b60248201527f4e46544f7261636c653a20696e76616c6964206f70657261746f72000000000060448201526064016102ff565b600480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f43ecbc1bb0a9bebbcadca5bdaedc649040adb65597772899e25403afb28b679490600090a35050565b3360009081526002602052604090205460ff166109115760405162461bcd60e51b815260206004820152602b60248201527f4e46544f7261636c653a2063616c6c6572206973206e6f742074686520656d6560448201526a3933b2b731bca0b236b4b760a91b60648201526084016102ff565b801561091f5761078c610cdb565b61078c610d80565b6000546001600160a01b031633146109515760405162461bcd60e51b81526004016102ff906110e0565b6001600160a01b0381166109b65760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102ff565b61078c81610a6d565b6000826109cd575080610a67565b8115806109d957508282145b156109e5575081610a67565b600082841115610a1e5783670de0b6b3a7640000610a038583611134565b610a0d9190611115565b610a17919061114b565b9050610a49565b83670de0b6b3a7640000610a328286611134565b610a3c9190611115565b610a46919061114b565b90505b670214e8348c4f0000811115610a625783915050610a67565b829150505b92915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600354600090610ace90600161116d565b905060005b82518110156105cf576000838281518110610af057610af0611093565b6020026020010151905060016000826001600160a01b03166001600160a01b031681526020019081526020016000205460001415610b92576001600160a01b038116600081815260016020819052604082208690556003805491820181559091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b031916909117905582610b8e81611185565b9350505b5080610b9d81611185565b915050610ad3565b604080516101008101825260055463ffffffff8082168352640100000000820481166020840152600160401b8204811693830193909352600160601b810483166060830152600160801b810483166080830152600160a01b8104831660a0830152600160c01b8104831660c0830152600160e01b900490911660e08201526000906001831415610c3c575163ffffffff1692915050565b8260021415610c55576020015163ffffffff1692915050565b8260031415610c6e576040015163ffffffff1692915050565b8260041415610c87576060015163ffffffff1692915050565b8260051415610ca0576080015163ffffffff1692915050565b8260061415610cb95760a0015163ffffffff1692915050565b8260071415610cd25760c0015163ffffffff1692915050565b50600092915050565b600054600160a01b900460ff1615610d285760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016102ff565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610d633390565b6040516001600160a01b03909116815260200160405180910390a1565b600054600160a01b900460ff16610dd05760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016102ff565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33610d63565b80356001600160a01b0381168114610e1b57600080fd5b919050565b600060208284031215610e3257600080fd5b6107c582610e04565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610e7a57610e7a610e3b565b604052919050565b600060e08284031215610e9457600080fd5b82601f830112610ea357600080fd5b60405160e0810181811067ffffffffffffffff82111715610ec657610ec6610e3b565b6040528060e0840185811115610edb57600080fd5b845b81811015610ef5578035835260209283019201610edd565b509195945050505050565b80358015158114610e1b57600080fd5b60008060408385031215610f2357600080fd5b610f2c83610e04565b9150610f3a60208401610f00565b90509250929050565b6020808252825182820181905260009190848201906040850190845b81811015610f845783516001600160a01b031683529284019291840191600101610f5f565b50909695505050505050565b60006020808385031215610fa357600080fd5b823567ffffffffffffffff80821115610fbb57600080fd5b818501915085601f830112610fcf57600080fd5b813581811115610fe157610fe1610e3b565b8060051b9150610ff2848301610e51565b818152918301840191848101908884111561100c57600080fd5b938501935b838510156110315761102285610e04565b82529385019390850190611011565b98975050505050505050565b60006020828403121561104f57600080fd5b6107c582610f00565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff8381169083168181101561108b5761108b611058565b039392505050565b634e487b7160e01b600052603260045260246000fd5b60e08101818360005b60078110156110d757815163ffffffff168352602092830192909101906001016110b2565b50505092915050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600081600019048311821515161561112f5761112f611058565b500290565b60008282101561114657611146611058565b500390565b60008261116857634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561118057611180611058565b500190565b600060001982141561119957611199611058565b506001019056fea26469706673582212207a5897ad3cba83b5bc3c705516eda47714a497a10d3e6c961a05cf0ebc69c69964736f6c634300080b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000007000000000000000000000000b7f7f6c52f2e2fdb1963eab30438024864c313f6000000000000000000000000bc4ca0eda7647a8ab7c2061c2e118a18a936f13d00000000000000000000000060e4d786628fea6478f785a6d7e704777c86a7c600000000000000000000000023581767a106ae21c074b2276d25e5c3e136a68b0000000000000000000000008a90cab2b38dba80c64b7734e58ee1db38b8992e00000000000000000000000049cf6f5d44e70224e2e23fdcdd2c053f30ada28b000000000000000000000000ed5af388653567af2f388e6224dc7c4b3241c544
-----Decoded View---------------
Arg [0] : assets (address[]): 0xb7F7F6C52F2e2fdb1963Eab30438024864c313F6,0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D,0x60E4d786628Fea6478F785A6d7e704777c86a7c6,0x23581767a106ae21c074b2276D25e5C3e136a68b,0x8a90CAb2b38dba80c64b7734e58Ee1dB38B8992e,0x49cF6f5d44E70224e2E23fDcdd2C053F30aDA28B,0xED5AF388653567Af2F388E6224dC7C4b3241C544
-----Encoded View---------------
9 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [2] : 000000000000000000000000b7f7f6c52f2e2fdb1963eab30438024864c313f6
Arg [3] : 000000000000000000000000bc4ca0eda7647a8ab7c2061c2e118a18a936f13d
Arg [4] : 00000000000000000000000060e4d786628fea6478f785a6d7e704777c86a7c6
Arg [5] : 00000000000000000000000023581767a106ae21c074b2276d25e5c3e136a68b
Arg [6] : 0000000000000000000000008a90cab2b38dba80c64b7734e58ee1db38b8992e
Arg [7] : 00000000000000000000000049cf6f5d44e70224e2e23fdcdd2c053f30ada28b
Arg [8] : 000000000000000000000000ed5af388653567af2f388e6224dc7c4b3241c544
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.