Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 1 from a total of 1 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x60c03462 | 17571367 | 471 days ago | IN | 0 ETH | 0.02647679 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
FrxEthFraxOracle
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
Yes with 1000000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: ISC pragma solidity ^0.8.19; // ==================================================================== // | ______ _______ | // | / _____________ __ __ / ____(_____ ____ _____ ________ | // | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | // | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | // | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | // | | // ==================================================================== // ========================= FrxEthFraxOracle ========================= // ==================================================================== // Frax Finance: https://github.com/FraxFinance // Author // Jon Walch: https://github.com/jonwalch // Reviewers // Drake Evans: https://github.com/DrakeEvans // Dennis: https://github.com/denett // ==================================================================== import { FraxOracle, ConstructorParams as FraxOracleParams } from "src/abstracts/FraxOracle.sol"; /// @title FrxEthFraxOracle /// @author Jon Walch (Frax Finance) https://github.com/jonwalch /// @notice Drop in replacement for a chainlink oracle for price of frxEth in ETH contract FrxEthFraxOracle is FraxOracle { constructor(FraxOracleParams memory _params) FraxOracle(_params) {} // ==================================================================== // View Helpers // ==================================================================== /// @notice The ```description``` function returns the description of the contract /// @return _description The description of the contract function description() external pure override returns (string memory _description) { _description = "frxEth/ETH"; } }
// SPDX-License-Identifier: ISC pragma solidity ^0.8.19; // ==================================================================== // | ______ _______ | // | / _____________ __ __ / ____(_____ ____ _____ ________ | // | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | // | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | // | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | // | | // ==================================================================== // ============================ FraxOracle ============================ // ==================================================================== // Frax Finance: https://github.com/FraxFinance // Author // Jon Walch: https://github.com/jonwalch // Contributors // Dennis: https://github.com/denett // Reviewers // Drake Evans: https://github.com/DrakeEvans // ==================================================================== import { ERC165Storage } from "@openzeppelin/contracts/utils/introspection/ERC165Storage.sol"; import { AggregatorV3Interface } from "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; import { Timelock2Step } from "frax-std/access-control/v1/Timelock2Step.sol"; import { ITimelock2Step } from "frax-std/access-control/v1/interfaces/ITimelock2Step.sol"; import { IPriceSourceReceiver } from "../interfaces/IPriceSourceReceiver.sol"; /// @notice maximumDeviation Percentage of acceptable deviation i.e. 0.03e18 = 3% /// @notice maximumOracleDelay Seconds until data is considered stale struct ConstructorParams { // = Timelock2Step address timelockAddress; // = FraxOracle address baseErc20; address quoteErc20; address priceSource; uint256 maximumDeviation; uint256 maximumOracleDelay; } /// @title FraxOracle /// @author Jon Walch (Frax Finance) https://github.com/jonwalch /// @notice Drop in replacement for a chainlink oracle, also supports Fraxlend style high and low prices abstract contract FraxOracle is AggregatorV3Interface, IPriceSourceReceiver, ERC165Storage, Timelock2Step { /// @notice Maximum deviation of price source data between low and high, beyond which it is considered bad data uint256 public maximumDeviation; /// @notice Maximum delay of price source data, after which it is considered stale uint256 public maximumOracleDelay; /// @notice The address of the Erc20 base token contract address public immutable BASE_TOKEN; /// @notice The address of the Erc20 quote token contract address public immutable QUOTE_TOKEN; /// @notice Contract that posts price updates through addRoundData() address public priceSource; /// @notice Last round ID where isBadData is false and price is within maximum deviation uint80 public lastCorrectRoundId; /// @notice Array of round data Round[] public rounds; /// @notice Packed Round data struct /// @notice priceLow Lower of the two prices /// @notice priceHigh Higher of the two prices /// @notice timestamp Time of price /// @notice isBadData If data is bad / should be used struct Round { uint104 priceLow; uint104 priceHigh; uint40 timestamp; bool isBadData; } constructor(ConstructorParams memory _params) Timelock2Step() { _setTimelock({ _newTimelock: _params.timelockAddress }); _registerInterface({ interfaceId: type(ITimelock2Step).interfaceId }); _registerInterface({ interfaceId: type(AggregatorV3Interface).interfaceId }); _registerInterface({ interfaceId: type(IPriceSourceReceiver).interfaceId }); BASE_TOKEN = _params.baseErc20; QUOTE_TOKEN = _params.quoteErc20; _setMaximumDeviation(_params.maximumDeviation); _setMaximumOracleDelay(_params.maximumOracleDelay); _setPriceSource(_params.priceSource); } // ==================================================================== // Events // ==================================================================== /// @notice The ```SetMaximumOracleDelay``` event is emitted when the max oracle delay is set /// @param oldMaxOracleDelay The old max oracle delay /// @param newMaxOracleDelay The new max oracle delay event SetMaximumOracleDelay(uint256 oldMaxOracleDelay, uint256 newMaxOracleDelay); /// @notice The ```SetPriceSource``` event is emitted when the price source is set /// @param oldPriceSource The old price source address /// @param newPriceSource The new price source address event SetPriceSource(address oldPriceSource, address newPriceSource); /// @notice The ```SetMaximumDeviation``` event is emitted when the max oracle delay is set /// @param oldMaxDeviation The old max oracle delay /// @param newMaxDeviation The new max oracle delay event SetMaximumDeviation(uint256 oldMaxDeviation, uint256 newMaxDeviation); // ==================================================================== // Internal Configuration Setters // ==================================================================== /// @notice The ```_setMaximumOracleDelay``` function sets the max oracle delay to determine if data is stale /// @param _newMaxOracleDelay The new max oracle delay function _setMaximumOracleDelay(uint256 _newMaxOracleDelay) internal { uint256 _maxOracleDelay = maximumOracleDelay; if (_maxOracleDelay == _newMaxOracleDelay) revert SameMaximumOracleDelay(); emit SetMaximumOracleDelay({ oldMaxOracleDelay: _maxOracleDelay, newMaxOracleDelay: _newMaxOracleDelay }); maximumOracleDelay = _newMaxOracleDelay; } /// @notice The ```_setPriceSource``` function sets the price source /// @param _newPriceSource The new price source function _setPriceSource(address _newPriceSource) internal { address _priceSource = priceSource; if (_priceSource == _newPriceSource) revert SamePriceSource(); emit SetPriceSource({ oldPriceSource: _priceSource, newPriceSource: _newPriceSource }); priceSource = _newPriceSource; } /// @notice The ```_setMaximumDeviation``` function sets the maximum deviation between low and high /// @param _newMaximumDeviation The new maximum deviation function _setMaximumDeviation(uint256 _newMaximumDeviation) internal { uint256 _maxDeviation = maximumDeviation; if (_newMaximumDeviation == _maxDeviation) revert SameMaximumDeviation(); emit SetMaximumDeviation({ oldMaxDeviation: _maxDeviation, newMaxDeviation: _newMaximumDeviation }); maximumDeviation = _newMaximumDeviation; } // ==================================================================== // Configuration Setters // ==================================================================== /// @notice The ```setMaximumOracleDelay``` function sets the max oracle delay to determine if data is stale /// @dev Requires msg.sender to be the timelock address /// @param _newMaxOracleDelay The new max oracle delay function setMaximumOracleDelay(uint256 _newMaxOracleDelay) external { _requireTimelock(); _setMaximumOracleDelay({ _newMaxOracleDelay: _newMaxOracleDelay }); } /// @notice The ```setPriceSource``` function sets the price source /// @dev Requires msg.sender to be the timelock address /// @param _newPriceSource The new price source address function setPriceSource(address _newPriceSource) external { _requireTimelock(); _setPriceSource({ _newPriceSource: _newPriceSource }); } /// @notice The ```setMaximumDeviation``` function sets the max oracle delay to determine if data is stale /// @dev Requires msg.sender to be the timelock address /// @param _newMaxDeviation The new max oracle delay function setMaximumDeviation(uint256 _newMaxDeviation) external { _requireTimelock(); _setMaximumDeviation({ _newMaximumDeviation: _newMaxDeviation }); } // ==================================================================== // Metadata // ==================================================================== /// @notice The ```decimals``` function returns the number of decimals in the response. function decimals() external pure virtual override returns (uint8 _decimals) { _decimals = 18; } /// @notice The ```version``` function returns the version number for the AggregatorV3Interface. /// @dev Adheres to AggregatorV3Interface, which is different than typical semver function version() external view virtual returns (uint256 _version) { _version = 1; } // ==================================================================== // Price Source Receiver // ==================================================================== /// @notice The ```addRoundData``` adds new price data to be served later /// @dev Can only be called by the preconfigured price source /// @param _isBadData Boolean representing if the data is bad from underlying chainlink oracles from FraxDualOracle's getPrices() /// @param _priceLow The low price returned from a FraxDualOracle's getPrices() /// @param _priceHigh The high price returned from a FraxDualOracle's getPrices() /// @param _timestamp The timestamp that FraxDualOracle's getPrices() was called function addRoundData(bool _isBadData, uint104 _priceLow, uint104 _priceHigh, uint40 _timestamp) external { if (msg.sender != priceSource) revert OnlyPriceSource(); if (_timestamp > block.timestamp) revert CalledWithFutureTimestamp(); uint256 _roundsLength = rounds.length; if (_roundsLength > 0 && _timestamp <= rounds[_roundsLength - 1].timestamp) { revert CalledWithTimestampBeforePreviousRound(); } if (!_isBadData && (((uint256(_priceHigh) - _priceLow) * 1e18) / _priceHigh <= maximumDeviation)) { lastCorrectRoundId = uint80(_roundsLength); } rounds.push( Round({ isBadData: _isBadData, priceLow: _priceLow, priceHigh: _priceHigh, timestamp: _timestamp }) ); } // ==================================================================== // Price Functions // ==================================================================== function _getPrices() internal view returns (bool _isBadData, uint256 _priceLow, uint256 _priceHigh) { uint256 _roundsLength = rounds.length; if (_roundsLength == 0) revert NoPriceData(); Round memory _round = rounds[_roundsLength - 1]; _isBadData = _round.isBadData || _round.timestamp + maximumOracleDelay < block.timestamp; _priceLow = _round.priceLow; _priceHigh = _round.priceHigh; } /// @notice The ```getPrices``` function is intended to return two prices from different oracles /// @return _isBadData is true when data is stale or otherwise bad /// @return _priceLow is the lower of the two prices /// @return _priceHigh is the higher of the two prices function getPrices() external view returns (bool _isBadData, uint256 _priceLow, uint256 _priceHigh) { (_isBadData, _priceLow, _priceHigh) = _getPrices(); } function _getRoundData( uint80 _roundId ) internal view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound) { if (rounds.length <= _roundId) revert NoPriceData(); Round memory _round = rounds[_roundId]; answer = int256((uint256(_round.priceHigh) + _round.priceLow) / 2); roundId = answeredInRound = _roundId; startedAt = updatedAt = _round.timestamp; } /// @notice The ```getRoundData``` function returns price data /// @param _roundId The round ID /// @return roundId The round ID /// @return answer The data that this specific feed provides /// @return startedAt Timestamp of when the round started /// @return updatedAt Timestamp of when the round was updated /// @return answeredInRound The round ID in which the answer was computed function getRoundData( uint80 _roundId ) external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound) { (roundId, answer, startedAt, updatedAt, answeredInRound) = _getRoundData(_roundId); } /// @notice The ```latestRoundData``` function returns price data /// @dev Will only return the latest data that is not bad and within the maximum price deviation /// @return roundId The round ID /// @return answer The data that this specific feed provides /// @return startedAt Timestamp of when the round started /// @return updatedAt Timestamp of when the round was updated /// @return answeredInRound The round ID in which the answer was computed function latestRoundData() external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound) { (roundId, answer, startedAt, updatedAt, answeredInRound) = _getRoundData(lastCorrectRoundId); } // ==================================================================== // Errors // ==================================================================== error CalledWithFutureTimestamp(); error CalledWithTimestampBeforePreviousRound(); error NoPriceData(); error OnlyPriceSource(); error SameMaximumDeviation(); error SameMaximumOracleDelay(); error SamePriceSource(); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165Storage.sol) pragma solidity ^0.8.0; import "./ERC165.sol"; /** * @dev Storage based implementation of the {IERC165} interface. * * Contracts may inherit from this and call {_registerInterface} to declare * their support of an interface. */ abstract contract ERC165Storage is ERC165 { /** * @dev Mapping of interface ids to whether or not it's supported. */ mapping(bytes4 => bool) private _supportedInterfaces; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return super.supportsInterface(interfaceId) || _supportedInterfaces[interfaceId]; } /** * @dev Registers the contract as an implementer of the interface defined by * `interfaceId`. Support of the actual ERC165 interface is automatic and * registering its interface id is not required. * * See {IERC165-supportsInterface}. * * Requirements: * * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`). */ function _registerInterface(bytes4 interfaceId) internal virtual { require(interfaceId != 0xffffffff, "ERC165: invalid interface id"); _supportedInterfaces[interfaceId] = true; } }
// 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: ISC pragma solidity ^0.8.19; // ==================================================================== // | ______ _______ | // | / _____________ __ __ / ____(_____ ____ _____ ________ | // | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | // | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | // | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | // | | // ==================================================================== // ========================== Timelock2Step =========================== // ==================================================================== // Frax Finance: https://github.com/FraxFinance // Primary Author // Drake Evans: https://github.com/DrakeEvans // Reviewers // Dennis: https://github.com/denett // ==================================================================== /// @title Timelock2Step /// @author Drake Evans (Frax Finance) https://github.com/drakeevans /// @dev Inspired by the OpenZeppelin's Ownable2Step contract /// @notice An abstract contract which contains 2-step transfer and renounce logic for a timelock address abstract contract Timelock2Step { /// @notice The pending timelock address address public pendingTimelockAddress; /// @notice The current timelock address address public timelockAddress; constructor() { timelockAddress = msg.sender; } /// @notice Emitted when timelock is transferred error OnlyTimelock(); /// @notice Emitted when pending timelock is transferred error OnlyPendingTimelock(); /// @notice The ```TimelockTransferStarted``` event is emitted when the timelock transfer is initiated /// @param previousTimelock The address of the previous timelock /// @param newTimelock The address of the new timelock event TimelockTransferStarted(address indexed previousTimelock, address indexed newTimelock); /// @notice The ```TimelockTransferred``` event is emitted when the timelock transfer is completed /// @param previousTimelock The address of the previous timelock /// @param newTimelock The address of the new timelock event TimelockTransferred(address indexed previousTimelock, address indexed newTimelock); /// @notice The ```_isSenderTimelock``` function checks if msg.sender is current timelock address /// @return Whether or not msg.sender is current timelock address function _isSenderTimelock() internal view returns (bool) { return msg.sender == timelockAddress; } /// @notice The ```_requireTimelock``` function reverts if msg.sender is not current timelock address function _requireTimelock() internal view { if (msg.sender != timelockAddress) revert OnlyTimelock(); } /// @notice The ```_isSenderPendingTimelock``` function checks if msg.sender is pending timelock address /// @return Whether or not msg.sender is pending timelock address function _isSenderPendingTimelock() internal view returns (bool) { return msg.sender == pendingTimelockAddress; } /// @notice The ```_requirePendingTimelock``` function reverts if msg.sender is not pending timelock address function _requirePendingTimelock() internal view { if (msg.sender != pendingTimelockAddress) revert OnlyPendingTimelock(); } /// @notice The ```_transferTimelock``` function initiates the timelock transfer /// @dev This function is to be implemented by a public function /// @param _newTimelock The address of the nominated (pending) timelock function _transferTimelock(address _newTimelock) internal { pendingTimelockAddress = _newTimelock; emit TimelockTransferStarted(timelockAddress, _newTimelock); } /// @notice The ```_acceptTransferTimelock``` function completes the timelock transfer /// @dev This function is to be implemented by a public function function _acceptTransferTimelock() internal { pendingTimelockAddress = address(0); _setTimelock(msg.sender); } /// @notice The ```_setTimelock``` function sets the timelock address /// @dev This function is to be implemented by a public function /// @param _newTimelock The address of the new timelock function _setTimelock(address _newTimelock) internal { emit TimelockTransferred(timelockAddress, _newTimelock); timelockAddress = _newTimelock; } /// @notice The ```transferTimelock``` function initiates the timelock transfer /// @dev Must be called by the current timelock /// @param _newTimelock The address of the nominated (pending) timelock function transferTimelock(address _newTimelock) external virtual { _requireTimelock(); _transferTimelock(_newTimelock); } /// @notice The ```acceptTransferTimelock``` function completes the timelock transfer /// @dev Must be called by the pending timelock function acceptTransferTimelock() external virtual { _requirePendingTimelock(); _acceptTransferTimelock(); } /// @notice The ```renounceTimelock``` function renounces the timelock after setting pending timelock to current timelock /// @dev Pending timelock must be set to current timelock before renouncing, creating a 2-step renounce process function renounceTimelock() external virtual { _requireTimelock(); _requirePendingTimelock(); _transferTimelock(address(0)); _setTimelock(address(0)); } }
// SPDX-License-Identifier: UNLICENSED pragma solidity 0.8.19; interface ITimelock2Step { event TimelockTransferStarted(address indexed previousTimelock, address indexed newTimelock); event TimelockTransferred(address indexed previousTimelock, address indexed newTimelock); function acceptTransferTimelock() external; function pendingTimelockAddress() external view returns (address); function renounceTimelock() external; function timelockAddress() external view returns (address); function transferTimelock(address _newTimelock) external; }
// SPDX-License-Identifier: ISC pragma solidity ^0.8.19; interface IPriceSourceReceiver { function addRoundData(bool isBadData, uint104 priceLow, uint104 priceHigh, uint40 timestamp) external; function getPrices() external view returns (bool isBadData, uint256 priceLow, uint256 priceHigh); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
{ "remappings": [ "@chainlink/=node_modules/@chainlink/", "@eth-optimism/=node_modules/@eth-optimism/", "@mean-finance/=node_modules/@mean-finance/", "@openzeppelin/=node_modules/@openzeppelin/", "@rari-capital/=node_modules/@rari-capital/", "@uniswap/=node_modules/@uniswap/", "base64-sol/=node_modules/base64-sol/", "deploy/=deploy/", "ds-test/=node_modules/ds-test/src/", "forge-std/=node_modules/forge-std/src/", "frax-standard-solidity/=node_modules/frax-standard-solidity/", "frax-std/=node_modules/frax-standard-solidity/src/", "hardhat/=node_modules/hardhat/", "interfaces/=src/interfaces/", "script/=script/", "solidity-bytes-utils/=node_modules/solidity-bytes-utils/", "src/=src/", "test/=test/" ], "optimizer": { "enabled": true, "runs": 1000000 }, "metadata": { "bytecodeHash": "none", "appendCBOR": true }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "london", "viaIR": true, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"components":[{"internalType":"address","name":"timelockAddress","type":"address"},{"internalType":"address","name":"baseErc20","type":"address"},{"internalType":"address","name":"quoteErc20","type":"address"},{"internalType":"address","name":"priceSource","type":"address"},{"internalType":"uint256","name":"maximumDeviation","type":"uint256"},{"internalType":"uint256","name":"maximumOracleDelay","type":"uint256"}],"internalType":"struct ConstructorParams","name":"_params","type":"tuple"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"CalledWithFutureTimestamp","type":"error"},{"inputs":[],"name":"CalledWithTimestampBeforePreviousRound","type":"error"},{"inputs":[],"name":"NoPriceData","type":"error"},{"inputs":[],"name":"OnlyPendingTimelock","type":"error"},{"inputs":[],"name":"OnlyPriceSource","type":"error"},{"inputs":[],"name":"OnlyTimelock","type":"error"},{"inputs":[],"name":"SameMaximumDeviation","type":"error"},{"inputs":[],"name":"SameMaximumOracleDelay","type":"error"},{"inputs":[],"name":"SamePriceSource","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldMaxDeviation","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newMaxDeviation","type":"uint256"}],"name":"SetMaximumDeviation","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldMaxOracleDelay","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newMaxOracleDelay","type":"uint256"}],"name":"SetMaximumOracleDelay","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldPriceSource","type":"address"},{"indexed":false,"internalType":"address","name":"newPriceSource","type":"address"}],"name":"SetPriceSource","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousTimelock","type":"address"},{"indexed":true,"internalType":"address","name":"newTimelock","type":"address"}],"name":"TimelockTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousTimelock","type":"address"},{"indexed":true,"internalType":"address","name":"newTimelock","type":"address"}],"name":"TimelockTransferred","type":"event"},{"inputs":[],"name":"BASE_TOKEN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"QUOTE_TOKEN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptTransferTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isBadData","type":"bool"},{"internalType":"uint104","name":"_priceLow","type":"uint104"},{"internalType":"uint104","name":"_priceHigh","type":"uint104"},{"internalType":"uint40","name":"_timestamp","type":"uint40"}],"name":"addRoundData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"_decimals","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"_description","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getPrices","outputs":[{"internalType":"bool","name":"_isBadData","type":"bool"},{"internalType":"uint256","name":"_priceLow","type":"uint256"},{"internalType":"uint256","name":"_priceHigh","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint80","name":"_roundId","type":"uint80"}],"name":"getRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastCorrectRoundId","outputs":[{"internalType":"uint80","name":"","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumDeviation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maximumOracleDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingTimelockAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceSource","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rounds","outputs":[{"internalType":"uint104","name":"priceLow","type":"uint104"},{"internalType":"uint104","name":"priceHigh","type":"uint104"},{"internalType":"uint40","name":"timestamp","type":"uint40"},{"internalType":"bool","name":"isBadData","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxDeviation","type":"uint256"}],"name":"setMaximumDeviation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxOracleDelay","type":"uint256"}],"name":"setMaximumOracleDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newPriceSource","type":"address"}],"name":"setPriceSource","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timelockAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newTimelock","type":"address"}],"name":"transferTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"_version","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60c0346200029157601f6200159938819003918201601f19168301926001600160401b03929091838511838610176200027b578160c09284926040978852833981010312620002915782519160c08301908111838210176200027b578352620000688162000296565b918281526020926200007c84840162000296565b918481019283526200009086850162000296565b93868201948552620000a56060820162000296565b926060830193845260a080608084015193608086019485520151930192835260018060a01b03199586600254169160018060a01b039687938480931660009181337f31b6c5a04b069b6ec1b3cef44c4e7c1eadd721349cda9823d0b1877b3551cdc68580a3338c161717600255632fa3fc3160e21b8152808b528b81208054600160ff199182168117909255630e70a24b60e31b83528d8320805482168317905563f843a10960e01b8352918d902080549092161790555116608052511660a052516003548082146200026a57877f7e2a21727a662d0def125b3d1237f41a099a760d472095091724cd8e56c25bf09181519081528389820152a1600355516004548181146200025957907fd72ef688fa430b6a285b84371ba35e8a8e0762b32c1deb7be9d9c111ca79f5ea8785949381519081528389820152a16004555116926005549182169084821462000248577f964298b435edfc268e11aa89b342ef1ddac566da6759b6dd15d7aad58a1dc935918587928351928352820152a11617600555516112ed9081620002ac823960805181610ecd015260a051816106b20152f35b85516322ba75b360e01b8152600490fd5b865163054e23d160e01b8152600490fd5b875163b99d8aaf60e01b8152600490fd5b634e487b7160e01b600052604160045260246000fd5b600080fd5b51906001600160a01b0382168203620002915756fe608060408181526004918236101561001657600080fd5b600092833560e01c91826301ffc9a714610fe357508163090f3f5014610f905781630f4a05fb14610f4457816320531bc914610ef1578163210663e414610e825781632dfa426714610ddd578163313ce56714610da35781634501409514610cf557816345d9f582146109405781634bc66f32146108ed5781634f8b4ae71461081957816354fd4d50146107df5781637284e416146106d657816378892cea146106675781638c65c81f146105e15781639152c29d146105a45781639a6fc8f514610551578163bd9a548b14610428578163bda5310714610339578163cede91a4146102fd578163d2333be71461025a57508063f6ccaad4146101ae5763feaf968c1461012257600080fd5b346101aa57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa576101a69061016e69ffffffffffffffffffff60055460a01c1661125b565b945169ffffffffffffffffffff94851681526020810193909352604083019190915260608201529116608082015290819060a0820190565b0390f35b5080fd5b823461025757807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610257576101e5611141565b7fffffffffffffffffffffffff00000000000000000000000000000000000000008060015416600155600254903373ffffffffffffffffffffffffffffffffffffffff83167f31b6c5a04b069b6ec1b3cef44c4e7c1eadd721349cda9823d0b1877b3551cdc68580a316331760025580f35b80fd5b9050346102f95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f9578035916102966110f6565b81548381146102d257907fd72ef688fa430b6a285b84371ba35e8a8e0762b32c1deb7be9d9c111ca79f5ea918151908152846020820152a15580f35b50517f054e23d1000000000000000000000000000000000000000000000000000000008152fd5b8280fd5b9050346102f957827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f95760209250549051908152f35b9050346102f95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f95780359173ffffffffffffffffffffffffffffffffffffffff91828416809403610424576103956110f6565b600554928316908482146103fd5750817f964298b435edfc268e11aa89b342ef1ddac566da6759b6dd15d7aad58a1dc935917fffffffffffffffffffffffff0000000000000000000000000000000000000000949351908152856020820152a1161760055580f35b82517f22ba75b3000000000000000000000000000000000000000000000000000000008152fd5b8480fd5b919050346102f957827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f95760065492831561052a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84019384116104fe57506104a261049c606094611090565b506111db565b908382015115928315936104dc575b506cffffffffffffffffffffffffff6020818451169301511691815193151584526020840152820152f35b81935064ffffffffff6104f5928401511690549061121f565b421191386104b1565b806011847f4e487b71000000000000000000000000000000000000000000000000000000006024945252fd5b50517f1b696c15000000000000000000000000000000000000000000000000000000008152fd5b9050346102f95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f957359169ffffffffffffffffffff83168303610257575061016e6101a69261125b565b5050346101aa57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa576020906003549051908152f35b9050346102f95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f9573591600654831015610257575061062a608092611090565b50548151916cffffffffffffffffffffffffff80831684528260681c16602084015264ffffffffff8260d01c169083015260f81c15156060820152f35b5050346101aa57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b9050346102f957827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f9578151908282019082821067ffffffffffffffff8311176107b357508252600a81526020907f6672784574682f455448000000000000000000000000000000000000000000008282015282519382859384528251928382860152825b84811061079d57505050828201840152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168101030190f35b8181018301518882018801528795508201610761565b8460416024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b5050346101aa57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa576020905160018152f35b833461025757807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610257576108506110f6565b610858611141565b7fffffffffffffffffffffffff000000000000000000000000000000000000000080600154166001556002548273ffffffffffffffffffffffffffffffffffffffff821681817f162998b90abc2507f3953aa797827b03a14c42dbd9a35f09feaf02e0d592773a8280a37f31b6c5a04b069b6ec1b3cef44c4e7c1eadd721349cda9823d0b1877b3551cdc68280a31660025580f35b5050346101aa57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5760209073ffffffffffffffffffffffffffffffffffffffff600254169051908152f35b919050346102f95760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f95781358015801580920361042457602480356cffffffffffffffffffffffffff91828216809203610cf15760443593838516809503610ced576064359664ffffffffff91828916809903610ce9576005549073ffffffffffffffffffffffffffffffffffffffff82163303610cc157428a11610c9957600654938415159081610c2a575b50610c025780610b75575b610b24575b50610a0e61118c565b9384526020840195865283019687526060830195865268010000000000000000811015610af957806001610a459201600655611090565b979097610ad05750505191519351925160689490941b79ffffffffffffffffffffffffff000000000000000000000000001691161760d09190911b7effffffffff0000000000000000000000000000000000000000000000000000161790151560f81b7fff000000000000000000000000000000000000000000000000000000000000001617905580f35b8880917f4e487b7100000000000000000000000000000000000000000000000000000000825252fd5b50876041887f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b7fffff00000000000000000000ffffffffffffffffffffffffffffffffffffffff7dffffffffffffffffffff00000000000000000000000000000000000000008460a01b1691161760055538610a05565b50848703878111610bd757670de0b6b3a7640000808202918204148689141715610bd7578715610bac578760035491041115610a00565b848c60128d7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b848c60118d7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b8a83517f44e8b447000000000000000000000000000000000000000000000000000000008152fd5b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501858111610c6e57610c5f90611090565b505460d01c168a1115386109f5565b868e60118f7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b8a83517f7c729df4000000000000000000000000000000000000000000000000000000008152fd5b8a83517f2937b3e3000000000000000000000000000000000000000000000000000000008152fd5b8a80fd5b8880fd5b8780fd5b8390346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa573573ffffffffffffffffffffffffffffffffffffffff8082168092036102f957610d4e6110f6565b817fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155600254167f162998b90abc2507f3953aa797827b03a14c42dbd9a35f09feaf02e0d592773a8380a380f35b5050346101aa57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa576020905160128152f35b919050346102f95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f957813591610e1a6110f6565b60035490818414610e5b5750907f7e2a21727a662d0def125b3d1237f41a099a760d472095091724cd8e56c25bf0918151908152836020820152a160035580f35b82517fb99d8aaf000000000000000000000000000000000000000000000000000000008152fd5b5050346101aa57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5050346101aa57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5760209073ffffffffffffffffffffffffffffffffffffffff600554169051908152f35b5050346101aa57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5760209069ffffffffffffffffffff60055460a01c169051908152f35b5050346101aa57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b9291503461108c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261108c5735907fffffffff00000000000000000000000000000000000000000000000000000000821680920361108c576020937f01ffc9a7000000000000000000000000000000000000000000000000000000008314928315611078575b50505015158152f35b60ff9350815280855220541638808061106f565b8380fd5b6006548110156110c75760066000527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0190600090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff60025416330361111757565b60046040517f1c0be90a000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff60015416330361116257565b60046040517ff5c49e64000000000000000000000000000000000000000000000000000000008152fd5b604051906080820182811067ffffffffffffffff8211176111ac57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b906111e461118c565b91546cffffffffffffffffffffffffff80821684528160681c16602084015264ffffffffff8160d01c16604084015260f81c15156060830152565b9190820180921161122c57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60065469ffffffffffffffffffff821610156112b65761127d61049c82611090565b916112a06cffffffffffffffffffffffffff80602086015116908551169061121f565b60011c9164ffffffffff60408295015116908192565b60046040517f1b696c15000000000000000000000000000000000000000000000000000000008152fdfea164736f6c6343000813000a0000000000000000000000008412ebf45bac1b340bbe8f318b928c466c4e39ca0000000000000000000000005e8422345238f34275888049021821e8e08caa1f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000b12c19c838499e3447afd9e59274b1be56b1546a000000000000000000000000000000000000000000000000006a94d74f4300000000000000000000000000000000000000000000000000000000000000015f90
Deployed Bytecode
0x608060408181526004918236101561001657600080fd5b600092833560e01c91826301ffc9a714610fe357508163090f3f5014610f905781630f4a05fb14610f4457816320531bc914610ef1578163210663e414610e825781632dfa426714610ddd578163313ce56714610da35781634501409514610cf557816345d9f582146109405781634bc66f32146108ed5781634f8b4ae71461081957816354fd4d50146107df5781637284e416146106d657816378892cea146106675781638c65c81f146105e15781639152c29d146105a45781639a6fc8f514610551578163bd9a548b14610428578163bda5310714610339578163cede91a4146102fd578163d2333be71461025a57508063f6ccaad4146101ae5763feaf968c1461012257600080fd5b346101aa57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa576101a69061016e69ffffffffffffffffffff60055460a01c1661125b565b945169ffffffffffffffffffff94851681526020810193909352604083019190915260608201529116608082015290819060a0820190565b0390f35b5080fd5b823461025757807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610257576101e5611141565b7fffffffffffffffffffffffff00000000000000000000000000000000000000008060015416600155600254903373ffffffffffffffffffffffffffffffffffffffff83167f31b6c5a04b069b6ec1b3cef44c4e7c1eadd721349cda9823d0b1877b3551cdc68580a316331760025580f35b80fd5b9050346102f95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f9578035916102966110f6565b81548381146102d257907fd72ef688fa430b6a285b84371ba35e8a8e0762b32c1deb7be9d9c111ca79f5ea918151908152846020820152a15580f35b50517f054e23d1000000000000000000000000000000000000000000000000000000008152fd5b8280fd5b9050346102f957827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f95760209250549051908152f35b9050346102f95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f95780359173ffffffffffffffffffffffffffffffffffffffff91828416809403610424576103956110f6565b600554928316908482146103fd5750817f964298b435edfc268e11aa89b342ef1ddac566da6759b6dd15d7aad58a1dc935917fffffffffffffffffffffffff0000000000000000000000000000000000000000949351908152856020820152a1161760055580f35b82517f22ba75b3000000000000000000000000000000000000000000000000000000008152fd5b8480fd5b919050346102f957827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f95760065492831561052a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84019384116104fe57506104a261049c606094611090565b506111db565b908382015115928315936104dc575b506cffffffffffffffffffffffffff6020818451169301511691815193151584526020840152820152f35b81935064ffffffffff6104f5928401511690549061121f565b421191386104b1565b806011847f4e487b71000000000000000000000000000000000000000000000000000000006024945252fd5b50517f1b696c15000000000000000000000000000000000000000000000000000000008152fd5b9050346102f95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f957359169ffffffffffffffffffff83168303610257575061016e6101a69261125b565b5050346101aa57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa576020906003549051908152f35b9050346102f95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f9573591600654831015610257575061062a608092611090565b50548151916cffffffffffffffffffffffffff80831684528260681c16602084015264ffffffffff8260d01c169083015260f81c15156060820152f35b5050346101aa57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa576020905173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2168152f35b9050346102f957827ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f9578151908282019082821067ffffffffffffffff8311176107b357508252600a81526020907f6672784574682f455448000000000000000000000000000000000000000000008282015282519382859384528251928382860152825b84811061079d57505050828201840152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168101030190f35b8181018301518882018801528795508201610761565b8460416024927f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b5050346101aa57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa576020905160018152f35b833461025757807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610257576108506110f6565b610858611141565b7fffffffffffffffffffffffff000000000000000000000000000000000000000080600154166001556002548273ffffffffffffffffffffffffffffffffffffffff821681817f162998b90abc2507f3953aa797827b03a14c42dbd9a35f09feaf02e0d592773a8280a37f31b6c5a04b069b6ec1b3cef44c4e7c1eadd721349cda9823d0b1877b3551cdc68280a31660025580f35b5050346101aa57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5760209073ffffffffffffffffffffffffffffffffffffffff600254169051908152f35b919050346102f95760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f95781358015801580920361042457602480356cffffffffffffffffffffffffff91828216809203610cf15760443593838516809503610ced576064359664ffffffffff91828916809903610ce9576005549073ffffffffffffffffffffffffffffffffffffffff82163303610cc157428a11610c9957600654938415159081610c2a575b50610c025780610b75575b610b24575b50610a0e61118c565b9384526020840195865283019687526060830195865268010000000000000000811015610af957806001610a459201600655611090565b979097610ad05750505191519351925160689490941b79ffffffffffffffffffffffffff000000000000000000000000001691161760d09190911b7effffffffff0000000000000000000000000000000000000000000000000000161790151560f81b7fff000000000000000000000000000000000000000000000000000000000000001617905580f35b8880917f4e487b7100000000000000000000000000000000000000000000000000000000825252fd5b50876041887f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b7fffff00000000000000000000ffffffffffffffffffffffffffffffffffffffff7dffffffffffffffffffff00000000000000000000000000000000000000008460a01b1691161760055538610a05565b50848703878111610bd757670de0b6b3a7640000808202918204148689141715610bd7578715610bac578760035491041115610a00565b848c60128d7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b848c60118d7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b8a83517f44e8b447000000000000000000000000000000000000000000000000000000008152fd5b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8501858111610c6e57610c5f90611090565b505460d01c168a1115386109f5565b868e60118f7f4e487b7100000000000000000000000000000000000000000000000000000000835252fd5b8a83517f7c729df4000000000000000000000000000000000000000000000000000000008152fd5b8a83517f2937b3e3000000000000000000000000000000000000000000000000000000008152fd5b8a80fd5b8880fd5b8780fd5b8390346101aa5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa573573ffffffffffffffffffffffffffffffffffffffff8082168092036102f957610d4e6110f6565b817fffffffffffffffffffffffff00000000000000000000000000000000000000006001541617600155600254167f162998b90abc2507f3953aa797827b03a14c42dbd9a35f09feaf02e0d592773a8380a380f35b5050346101aa57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa576020905160128152f35b919050346102f95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102f957813591610e1a6110f6565b60035490818414610e5b5750907f7e2a21727a662d0def125b3d1237f41a099a760d472095091724cd8e56c25bf0918151908152836020820152a160035580f35b82517fb99d8aaf000000000000000000000000000000000000000000000000000000008152fd5b5050346101aa57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000005e8422345238f34275888049021821e8e08caa1f168152f35b5050346101aa57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5760209073ffffffffffffffffffffffffffffffffffffffff600554169051908152f35b5050346101aa57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5760209069ffffffffffffffffffff60055460a01c169051908152f35b5050346101aa57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101aa5760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b9291503461108c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261108c5735907fffffffff00000000000000000000000000000000000000000000000000000000821680920361108c576020937f01ffc9a7000000000000000000000000000000000000000000000000000000008314928315611078575b50505015158152f35b60ff9350815280855220541638808061106f565b8380fd5b6006548110156110c75760066000527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0190600090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b73ffffffffffffffffffffffffffffffffffffffff60025416330361111757565b60046040517f1c0be90a000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff60015416330361116257565b60046040517ff5c49e64000000000000000000000000000000000000000000000000000000008152fd5b604051906080820182811067ffffffffffffffff8211176111ac57604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b906111e461118c565b91546cffffffffffffffffffffffffff80821684528160681c16602084015264ffffffffff8160d01c16604084015260f81c15156060830152565b9190820180921161122c57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60065469ffffffffffffffffffff821610156112b65761127d61049c82611090565b916112a06cffffffffffffffffffffffffff80602086015116908551169061121f565b60011c9164ffffffffff60408295015116908192565b60046040517f1b696c15000000000000000000000000000000000000000000000000000000008152fdfea164736f6c6343000813000a
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000008412ebf45bac1b340bbe8f318b928c466c4e39ca0000000000000000000000005e8422345238f34275888049021821e8e08caa1f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2000000000000000000000000b12c19c838499e3447afd9e59274b1be56b1546a000000000000000000000000000000000000000000000000006a94d74f4300000000000000000000000000000000000000000000000000000000000000015f90
-----Decoded View---------------
Arg [0] : _params (tuple): System.Collections.Generic.List`1[Nethereum.ABI.FunctionEncoding.ParameterOutput]
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000008412ebf45bac1b340bbe8f318b928c466c4e39ca
Arg [1] : 0000000000000000000000005e8422345238f34275888049021821e8e08caa1f
Arg [2] : 000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2
Arg [3] : 000000000000000000000000b12c19c838499e3447afd9e59274b1be56b1546a
Arg [4] : 000000000000000000000000000000000000000000000000006a94d74f430000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000015f90
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 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.