Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
ChainlinkOracle
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.17; import "Denominations.sol"; import "FeedRegistryInterface.sol"; import "Ownable.sol"; import "IOracle.sol"; interface IAggregatorV3Interface { function decimals() external view returns (uint8); function description() external view returns (string memory); function version() external view returns (uint256); /// @notice `getRoundData` and `latestRoundData` should both raise "No data present" /// if they do not have data to report, instead of returning unset values /// which could be misinterpreted as actual reported values. function getRoundData( uint80 _roundId ) external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); function latestRoundData() external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); } contract ChainlinkOracle is IOracle, Ownable { event HeartbeatUpdated(uint256 heartbeat); uint256 public heartbeat = 24 hours; FeedRegistryInterface internal constant _feedRegistry = FeedRegistryInterface(0x47Fb2585D2C56Fe188D0E6ec628a38b74fCeeeDf); address internal constant _WETH = address(0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2); address internal constant _CURVE_ETH = address(0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE); uint256 internal constant _MIN_HEARTBEAT = 6 hours; function setHeartbeat(uint256 heartbeat_) external onlyOwner { require(heartbeat_ >= _MIN_HEARTBEAT, "heartbeat too low"); require(heartbeat_ != heartbeat, "same as current"); heartbeat = heartbeat_; emit HeartbeatUpdated(heartbeat_); } function isTokenSupported(address token) external view override returns (bool) { if (_isEth(token)) return true; try this.getUSDPrice(token) returns (uint256) { return true; } catch Error(string memory) { return false; } } // Prices are always provided with 18 decimals pecision function getUSDPrice(address token) external view returns (uint256) { return _getPrice(token, Denominations.USD, true); } function _getPrice( address token, address denomination, bool tryOtherDenomination ) internal view returns (uint256) { if (_isEth(token)) token = Denominations.ETH; try _feedRegistry.latestRoundData(token, denomination) returns ( uint80, int256 price_, uint256, uint256 updatedAt_, uint80 ) { require(updatedAt_ != 0, "round not complete"); require(price_ > 0, "negative price"); require(updatedAt_ >= block.timestamp - heartbeat, "price too old"); return _scaleFrom(uint256(price_), _feedRegistry.decimals(token, denomination)); } catch Error(string memory reason) { if (!tryOtherDenomination) revert(reason); if (denomination == Denominations.USD) { return (_getPrice(token, Denominations.ETH, false) * _getPrice(Denominations.ETH, Denominations.USD, false)) / 1e18; } return (_getPrice(token, Denominations.USD, false) * 1e18) / _getPrice(Denominations.ETH, Denominations.USD, false); } } function _scaleFrom(uint256 value, uint8 decimals) internal pure returns (uint256) { if (decimals == 18) return value; if (decimals > 18) return value / 10 ** (decimals - 18); else return value * 10 ** (18 - decimals); } function _isEth(address token) internal pure returns (bool) { return token == address(0) || token == _WETH || token == _CURVE_ETH; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; library Denominations { address public constant ETH = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; address public constant BTC = 0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB; // Fiat currencies follow https://en.wikipedia.org/wiki/ISO_4217 address public constant USD = address(840); address public constant GBP = address(826); address public constant EUR = address(978); address public constant JPY = address(392); address public constant KRW = address(410); address public constant CNY = address(156); address public constant AUD = address(36); address public constant CAD = address(124); address public constant CHF = address(756); address public constant ARS = address(32); address public constant PHP = address(608); address public constant NZD = address(554); address public constant SGD = address(702); address public constant NGN = address(566); address public constant ZAR = address(710); address public constant RUB = address(643); address public constant INR = address(356); address public constant BRL = address(986); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; pragma abicoder v2; import "AggregatorV2V3Interface.sol"; interface FeedRegistryInterface { struct Phase { uint16 phaseId; uint80 startingAggregatorRoundId; uint80 endingAggregatorRoundId; } event FeedProposed( address indexed asset, address indexed denomination, address indexed proposedAggregator, address currentAggregator, address sender ); event FeedConfirmed( address indexed asset, address indexed denomination, address indexed latestAggregator, address previousAggregator, uint16 nextPhaseId, address sender ); // V3 AggregatorV3Interface function decimals(address base, address quote) external view returns (uint8); function description(address base, address quote) external view returns (string memory); function version(address base, address quote) external view returns (uint256); function latestRoundData(address base, address quote) external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); function getRoundData( address base, address quote, uint80 _roundId ) external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); // V2 AggregatorInterface function latestAnswer(address base, address quote) external view returns (int256 answer); function latestTimestamp(address base, address quote) external view returns (uint256 timestamp); function latestRound(address base, address quote) external view returns (uint256 roundId); function getAnswer( address base, address quote, uint256 roundId ) external view returns (int256 answer); function getTimestamp( address base, address quote, uint256 roundId ) external view returns (uint256 timestamp); // Registry getters function getFeed(address base, address quote) external view returns (AggregatorV2V3Interface aggregator); function getPhaseFeed( address base, address quote, uint16 phaseId ) external view returns (AggregatorV2V3Interface aggregator); function isFeedEnabled(address aggregator) external view returns (bool); function getPhase( address base, address quote, uint16 phaseId ) external view returns (Phase memory phase); // Round helpers function getRoundFeed( address base, address quote, uint80 roundId ) external view returns (AggregatorV2V3Interface aggregator); function getPhaseRange( address base, address quote, uint16 phaseId ) external view returns (uint80 startingRoundId, uint80 endingRoundId); function getPreviousRoundId( address base, address quote, uint80 roundId ) external view returns (uint80 previousRoundId); function getNextRoundId( address base, address quote, uint80 roundId ) external view returns (uint80 nextRoundId); // Feed management function proposeFeed( address base, address quote, address aggregator ) external; function confirmFeed( address base, address quote, address aggregator ) external; // Proposed aggregator function getProposedFeed(address base, address quote) external view returns (AggregatorV2V3Interface proposedAggregator); function proposedGetRoundData( address base, address quote, uint80 roundId ) external view returns ( uint80 id, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); function proposedLatestRoundData(address base, address quote) external view returns ( uint80 id, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); // Phases function getCurrentPhaseId(address base, address quote) external view returns (uint16 currentPhaseId); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "AggregatorInterface.sol"; import "AggregatorV3Interface.sol"; interface AggregatorV2V3Interface is AggregatorInterface, AggregatorV3Interface {}
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface AggregatorInterface { function latestAnswer() external view returns (int256); function latestTimestamp() external view returns (uint256); function latestRound() external view returns (uint256); function getAnswer(uint256 roundId) external view returns (int256); function getTimestamp(uint256 roundId) external view returns (uint256); event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 updatedAt); event NewRound(uint256 indexed roundId, address indexed startedBy, uint256 startedAt); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface AggregatorV3Interface { function decimals() external view returns (uint8); function description() external view returns (string memory); function version() external view returns (uint256); function getRoundData(uint80 _roundId) external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); function latestRoundData() external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.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 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 v4.4.1 (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; } }
// SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.17; interface IOracle { event TokenUpdated(address indexed token, address feed, uint256 maxDelay, bool isEthPrice); /// @notice returns the price in USD of symbol. function getUSDPrice(address token) external view returns (uint256); /// @notice returns if the given token is supported for pricing. function isTokenSupported(address token) external view returns (bool); }
{ "evmVersion": "london", "optimizer": { "enabled": true, "runs": 200 }, "libraries": { "ChainlinkOracle.sol": {} }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"heartbeat","type":"uint256"}],"name":"HeartbeatUpdated","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":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"feed","type":"address"},{"indexed":false,"internalType":"uint256","name":"maxDelay","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isEthPrice","type":"bool"}],"name":"TokenUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"getUSDPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"heartbeat","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"isTokenSupported","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"heartbeat_","type":"uint256"}],"name":"setHeartbeat","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526201518060015534801561001757600080fd5b5061002133610026565b610076565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610b9f806100856000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638b2f0f4f1161005b5780638b2f0f4f146100cb5780638da5cb5b146100de578063d29dba91146100f9578063f2fde38b1461010c57600080fd5b80633defb96214610082578063715018a61461009e57806375151b63146100a8575b600080fd5b61008b60015481565b6040519081526020015b60405180910390f35b6100a661011f565b005b6100bb6100b63660046107e4565b610133565b6040519015158152602001610095565b61008b6100d93660046107e4565b6101f9565b6000546040516001600160a01b039091168152602001610095565b6100a661010736600461080d565b61020f565b6100a661011a3660046107e4565b6102e0565b610127610359565b61013160006103b3565b565b600061013e82610403565b1561014b57506001919050565b604051638b2f0f4f60e01b81526001600160a01b03831660048201523090638b2f0f4f90602401602060405180830381865afa9250505080156101ab575060408051601f3d908101601f191682019092526101a891810190610826565b60015b6101eb576101b761083f565b806308c379a0036101df57506101cb610896565b806101d657506101e1565b50600092915050565b505b3d6000803e3d6000fd5b50600192915050565b919050565b6000610209826103486001610463565b92915050565b610217610359565b6154608110156102625760405162461bcd60e51b815260206004820152601160248201527068656172746265617420746f6f206c6f7760781b60448201526064015b60405180910390fd5b60015481036102a55760405162461bcd60e51b815260206004820152600f60248201526e1cd85b5948185cc818dd5c9c995b9d608a1b6044820152606401610259565b60018190556040518181527fc2178046992f7ede7649071430a5471a38fa34dc920c308b50d50c3271519b6d9060200160405180910390a150565b6102e8610359565b6001600160a01b03811661034d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610259565b610356816103b3565b50565b6000546001600160a01b031633146101315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610259565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b038216158061043757506001600160a01b03821673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2145b8061020957506001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1492915050565b600061046e84610403565b1561048b5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee93505b60405163bcfd032d60e01b81526001600160a01b038086166004830152841660248201527347fb2585d2c56fe188d0e6ec628a38b74fceeedf9063bcfd032d9060440160a060405180830381865afa925050508015610507575060408051601f3d908101601f191682019092526105049181019061093a565b60015b61060d5761051361083f565b806308c379a0036101df5750610527610896565b8061053257506101e1565b82610551578060405162461bcd60e51b8152600401610259919061098a565b610347196001600160a01b038516016105cb57670de0b6b3a764000061058f73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6103486000610463565b6105af8773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6000610463565b6105b991906109ee565b6105c39190610a05565b915050610776565b6105ed73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6103486000610463565b6105fb866103486000610463565b6105b990670de0b6b3a76400006109ee565b816000036106525760405162461bcd60e51b8152602060048201526012602482015271726f756e64206e6f7420636f6d706c65746560701b6044820152606401610259565b600084136106935760405162461bcd60e51b815260206004820152600e60248201526d6e6567617469766520707269636560901b6044820152606401610259565b6001546106a09042610a27565b8210156106df5760405162461bcd60e51b815260206004820152600d60248201526c1c1c9a58d9481d1bdbc81bdb19609a1b6044820152606401610259565b604051630b1c5a7560e31b81526001600160a01b03808b1660048301528916602482015261076e9085907347fb2585d2c56fe188d0e6ec628a38b74fceeedf906358e2d3a890604401602060405180830381865afa158015610745573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107699190610a3a565b61077d565b955050505050505b9392505050565b60008160ff16601203610791575081610209565b60128260ff1611156107c4576107a8601283610a5d565b6107b390600a610b5a565b6107bd9084610a05565b9050610209565b6107cf826012610a5d565b6107da90600a610b5a565b6107bd90846109ee565b6000602082840312156107f657600080fd5b81356001600160a01b038116811461077657600080fd5b60006020828403121561081f57600080fd5b5035919050565b60006020828403121561083857600080fd5b5051919050565b600060033d11156108585760046000803e5060005160e01c5b90565b601f8201601f1916810167ffffffffffffffff8111828210171561088f57634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d10156108a45790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156108d457505050505090565b82850191508151818111156108ec5750505050505090565b843d87010160208285010111156109065750505050505090565b6109156020828601018761085b565b509095945050505050565b805169ffffffffffffffffffff811681146101f457600080fd5b600080600080600060a0868803121561095257600080fd5b61095b86610920565b945060208601519350604086015192506060860151915061097e60808701610920565b90509295509295909350565b600060208083528351808285015260005b818110156109b75785810183015185820160400152820161099b565b506000604082860101526040601f19601f8301168501019250505092915050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610209576102096109d8565b600082610a2257634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610209576102096109d8565b600060208284031215610a4c57600080fd5b815160ff8116811461077657600080fd5b60ff8281168282160390811115610209576102096109d8565b600181815b80851115610ab1578160001904821115610a9757610a976109d8565b80851615610aa457918102915b93841c9390800290610a7b565b509250929050565b600082610ac857506001610209565b81610ad557506000610209565b8160018114610aeb5760028114610af557610b11565b6001915050610209565b60ff841115610b0657610b066109d8565b50506001821b610209565b5060208310610133831016604e8410600b8410161715610b34575081810a610209565b610b3e8383610a76565b8060001904821115610b5257610b526109d8565b029392505050565b600061077660ff841683610ab956fea26469706673582212208159b71a9544352a5293a949b3d25feb921c96ae1b2b32e4ac77abc8938acc0664736f6c63430008110033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80638b2f0f4f1161005b5780638b2f0f4f146100cb5780638da5cb5b146100de578063d29dba91146100f9578063f2fde38b1461010c57600080fd5b80633defb96214610082578063715018a61461009e57806375151b63146100a8575b600080fd5b61008b60015481565b6040519081526020015b60405180910390f35b6100a661011f565b005b6100bb6100b63660046107e4565b610133565b6040519015158152602001610095565b61008b6100d93660046107e4565b6101f9565b6000546040516001600160a01b039091168152602001610095565b6100a661010736600461080d565b61020f565b6100a661011a3660046107e4565b6102e0565b610127610359565b61013160006103b3565b565b600061013e82610403565b1561014b57506001919050565b604051638b2f0f4f60e01b81526001600160a01b03831660048201523090638b2f0f4f90602401602060405180830381865afa9250505080156101ab575060408051601f3d908101601f191682019092526101a891810190610826565b60015b6101eb576101b761083f565b806308c379a0036101df57506101cb610896565b806101d657506101e1565b50600092915050565b505b3d6000803e3d6000fd5b50600192915050565b919050565b6000610209826103486001610463565b92915050565b610217610359565b6154608110156102625760405162461bcd60e51b815260206004820152601160248201527068656172746265617420746f6f206c6f7760781b60448201526064015b60405180910390fd5b60015481036102a55760405162461bcd60e51b815260206004820152600f60248201526e1cd85b5948185cc818dd5c9c995b9d608a1b6044820152606401610259565b60018190556040518181527fc2178046992f7ede7649071430a5471a38fa34dc920c308b50d50c3271519b6d9060200160405180910390a150565b6102e8610359565b6001600160a01b03811661034d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610259565b610356816103b3565b50565b6000546001600160a01b031633146101315760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610259565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006001600160a01b038216158061043757506001600160a01b03821673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2145b8061020957506001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1492915050565b600061046e84610403565b1561048b5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee93505b60405163bcfd032d60e01b81526001600160a01b038086166004830152841660248201527347fb2585d2c56fe188d0e6ec628a38b74fceeedf9063bcfd032d9060440160a060405180830381865afa925050508015610507575060408051601f3d908101601f191682019092526105049181019061093a565b60015b61060d5761051361083f565b806308c379a0036101df5750610527610896565b8061053257506101e1565b82610551578060405162461bcd60e51b8152600401610259919061098a565b610347196001600160a01b038516016105cb57670de0b6b3a764000061058f73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6103486000610463565b6105af8773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6000610463565b6105b991906109ee565b6105c39190610a05565b915050610776565b6105ed73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6103486000610463565b6105fb866103486000610463565b6105b990670de0b6b3a76400006109ee565b816000036106525760405162461bcd60e51b8152602060048201526012602482015271726f756e64206e6f7420636f6d706c65746560701b6044820152606401610259565b600084136106935760405162461bcd60e51b815260206004820152600e60248201526d6e6567617469766520707269636560901b6044820152606401610259565b6001546106a09042610a27565b8210156106df5760405162461bcd60e51b815260206004820152600d60248201526c1c1c9a58d9481d1bdbc81bdb19609a1b6044820152606401610259565b604051630b1c5a7560e31b81526001600160a01b03808b1660048301528916602482015261076e9085907347fb2585d2c56fe188d0e6ec628a38b74fceeedf906358e2d3a890604401602060405180830381865afa158015610745573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107699190610a3a565b61077d565b955050505050505b9392505050565b60008160ff16601203610791575081610209565b60128260ff1611156107c4576107a8601283610a5d565b6107b390600a610b5a565b6107bd9084610a05565b9050610209565b6107cf826012610a5d565b6107da90600a610b5a565b6107bd90846109ee565b6000602082840312156107f657600080fd5b81356001600160a01b038116811461077657600080fd5b60006020828403121561081f57600080fd5b5035919050565b60006020828403121561083857600080fd5b5051919050565b600060033d11156108585760046000803e5060005160e01c5b90565b601f8201601f1916810167ffffffffffffffff8111828210171561088f57634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d10156108a45790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156108d457505050505090565b82850191508151818111156108ec5750505050505090565b843d87010160208285010111156109065750505050505090565b6109156020828601018761085b565b509095945050505050565b805169ffffffffffffffffffff811681146101f457600080fd5b600080600080600060a0868803121561095257600080fd5b61095b86610920565b945060208601519350604086015192506060860151915061097e60808701610920565b90509295509295909350565b600060208083528351808285015260005b818110156109b75785810183015185820160400152820161099b565b506000604082860101526040601f19601f8301168501019250505092915050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610209576102096109d8565b600082610a2257634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610209576102096109d8565b600060208284031215610a4c57600080fd5b815160ff8116811461077657600080fd5b60ff8281168282160390811115610209576102096109d8565b600181815b80851115610ab1578160001904821115610a9757610a976109d8565b80851615610aa457918102915b93841c9390800290610a7b565b509250929050565b600082610ac857506001610209565b81610ad557506000610209565b8160018114610aeb5760028114610af557610b11565b6001915050610209565b60ff841115610b0657610b066109d8565b50506001821b610209565b5060208310610133831016604e8410600b8410161715610b34575081810a610209565b610b3e8383610a76565b8060001904821115610b5257610b526109d8565b029392505050565b600061077660ff841683610ab956fea26469706673582212208159b71a9544352a5293a949b3d25feb921c96ae1b2b32e4ac77abc8938acc0664736f6c63430008110033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 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.