Source Code
Overview
FRAX Balance | FXTL Balance
0 FRAX | 0 FXTL
FRAX Value
$0.00View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Cross-Chain Transactions
Loading...
Loading
Contract Name:
FraxtalTransportOracle
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
No with 1000000 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: ISC
pragma solidity ^0.8.19;
// ====================================================================
// | ______ _______ |
// | / _____________ __ __ / ____(_____ ____ _____ ________ |
// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ |
// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ |
// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ |
// | |
// ====================================================================
// ===================== FraxtalTransportOracle =======================
// ====================================================================
// Frax Finance: https://github.com/FraxFinance
// ====================================================================
import { FraxOracle, ConstructorParams as FraxOracleParams } from "src/contracts/frax-oracle/abstracts/FraxOracle.sol";
/// @title ClFraxOracle
/// @notice Drop in replacement for a chainlink oracle for price of ETH in USD
/// @dev High/low prices will be equivalent and return the L1 CL Oracle result
contract FraxtalTransportOracle 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 = "ETH/USD: Chainlink Transport";
}
/// @notice The ```decimals``` function returns same decimals value as CL Oracle
/// @return _decimals The decimals corresponding to the CL answer being transported to L2
/// @dev Needed for ingesting CL feed into Frax Oracles
function decimals() external pure override returns (uint8 _decimals) {
_decimals = 8;
}
}// 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.0;
// ====================================================================
// | ______ _______ |
// | / _____________ __ __ / ____(_____ ____ _____ ________ |
// | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ |
// | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ |
// | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ |
// | |
// ====================================================================
// ========================== 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.0;
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": [
"ds-test/=node_modules/ds-test/src/",
"forge-std/=node_modules/forge-std/src/",
"frax-std/=node_modules/frax-standard-solidity/src/",
"script/=src/script/",
"src/=src/",
"test/=src/test/",
"interfaces/=src/contracts/interfaces/",
"arbitrum/=node_modules/@arbitrum/",
"rlp/=node_modules/solidity-rlp/contracts/",
"@arbitrum/=node_modules/@arbitrum/",
"@chainlink/=node_modules/@chainlink/",
"@eth-optimism/=node_modules/@eth-optimism/",
"@mean-finance/=node_modules/@mean-finance/",
"@offchainlabs/=node_modules/@offchainlabs/",
"@openzeppelin/=node_modules/@openzeppelin/",
"@rari-capital/=node_modules/@rari-capital/",
"@safe-global/=node_modules/@safe-global/",
"@uniswap/=node_modules/@uniswap/",
"base64-sol/=node_modules/base64-sol/",
"frax-standard-solidity/=node_modules/frax-standard-solidity/",
"hardhat/=node_modules/hardhat/",
"prb-math/=node_modules/prb-math/",
"solidity-bytes-utils/=node_modules/solidity-bytes-utils/",
"solidity-rlp/=node_modules/solidity-rlp/"
],
"optimizer": {
"enabled": false,
"runs": 1000000
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "none",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "paris",
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"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
60c06040523480156200001157600080fd5b50604051620023c3380380620023c3833981810160405281019062000037919062000784565b8033600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200008e8160000151620001d860201b60201c565b620000bf7fbe8ff0c4000000000000000000000000000000000000000000000000000000006200029860201b60201c565b620000f07f73851258000000000000000000000000000000000000000000000000000000006200029860201b60201c565b620001217ff843a109000000000000000000000000000000000000000000000000000000006200029860201b60201c565b806020015173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050806040015173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620001a681608001516200036f60201b60201c565b620001bb8160a00151620003f660201b60201c565b620001d081606001516200047d60201b60201c565b5050620008b5565b8073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f31b6c5a04b069b6ec1b3cef44c4e7c1eadd721349cda9823d0b1877b3551cdc660405160405180910390a380600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19160362000303576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002fa9062000817565b60405180910390fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006003549050808203620003b0576040517fb99d8aaf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f7e2a21727a662d0def125b3d1237f41a099a760d472095091724cd8e56c25bf08183604051620003e39291906200084a565b60405180910390a1816003819055505050565b6000600454905081810362000437576040517f054e23d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fd72ef688fa430b6a285b84371ba35e8a8e0762b32c1deb7be9d9c111ca79f5ea81836040516200046a9291906200084a565b60405180910390a1816004819055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200050a576040517f22ba75b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f964298b435edfc268e11aa89b342ef1ddac566da6759b6dd15d7aad58a1dc93581836040516200053d92919062000888565b60405180910390a181600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6000604051905090565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620005e9826200059e565b810181811067ffffffffffffffff821117156200060b576200060a620005af565b5b80604052505050565b6000620006206200058a565b90506200062e8282620005de565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620006608262000633565b9050919050565b620006728162000653565b81146200067e57600080fd5b50565b600081519050620006928162000667565b92915050565b6000819050919050565b620006ad8162000698565b8114620006b957600080fd5b50565b600081519050620006cd81620006a2565b92915050565b600060c08284031215620006ec57620006eb62000599565b5b620006f860c062000614565b905060006200070a8482850162000681565b6000830152506020620007208482850162000681565b6020830152506040620007368482850162000681565b60408301525060606200074c8482850162000681565b60608301525060806200076284828501620006bc565b60808301525060a06200077884828501620006bc565b60a08301525092915050565b600060c082840312156200079d576200079c62000594565b5b6000620007ad84828501620006d3565b91505092915050565b600082825260208201905092915050565b7f4552433136353a20696e76616c696420696e7465726661636520696400000000600082015250565b6000620007ff601c83620007b6565b91506200080c82620007c7565b602082019050919050565b600060208201905081810360008301526200083281620007f0565b9050919050565b620008448162000698565b82525050565b600060408201905062000861600083018562000839565b62000870602083018462000839565b9392505050565b620008828162000653565b82525050565b60006040820190506200089f600083018562000877565b620008ae602083018462000877565b9392505050565b60805160a051611ae8620008db600039600061094e015260006105360152611ae86000f3fe608060405234801561001057600080fd5b506004361061018d5760003560e01c806354fd4d50116100e3578063bd9a548b1161008c578063d2333be711610066578063d2333be71461040d578063f6ccaad414610429578063feaf968c146104335761018d565b8063bd9a548b146103b3578063bda53107146103d3578063cede91a4146103ef5761018d565b80638c65c81f116100bd5780638c65c81f1461032e5780639152c29d146103615780639a6fc8f51461037f5761018d565b806354fd4d50146102d45780637284e416146102f257806378892cea146103105761018d565b80632dfa42671161014557806345d9f5821161011f57806345d9f582146102905780634bc66f32146102ac5780634f8b4ae7146102ca5761018d565b80632dfa42671461023a578063313ce5671461025657806345014095146102745761018d565b80630f4a05fb116101765780630f4a05fb146101e057806320531bc9146101fe578063210663e41461021c5761018d565b806301ffc9a714610192578063090f3f50146101c2575b600080fd5b6101ac60048036038101906101a791906113df565b610455565b6040516101b99190611427565b60405180910390f35b6101ca6104cc565b6040516101d79190611483565b60405180910390f35b6101e86104f2565b6040516101f591906114c3565b60405180910390f35b61020661050e565b6040516102139190611483565b60405180910390f35b610224610534565b6040516102319190611483565b60405180910390f35b610254600480360381019061024f9190611514565b610558565b005b61025e61056c565b60405161026b919061155d565b60405180910390f35b61028e600480360381019061028991906115a4565b610575565b005b6102aa60048036038101906102a5919061167f565b610589565b005b6102b46108ba565b6040516102c19190611483565b60405180910390f35b6102d26108e0565b005b6102dc610906565b6040516102e991906116f5565b60405180910390f35b6102fa61090f565b60405161030791906117a0565b60405180910390f35b61031861094c565b6040516103259190611483565b60405180910390f35b61034860048036038101906103439190611514565b610970565b60405161035894939291906117e0565b60405180910390f35b6103696109fc565b60405161037691906116f5565b60405180910390f35b61039960048036038101906103949190611851565b610a02565b6040516103aa959493929190611897565b60405180910390f35b6103bb610a30565b6040516103ca939291906118ea565b60405180910390f35b6103ed60048036038101906103e891906115a4565b610a4e565b005b6103f7610a62565b60405161040491906116f5565b60405180910390f35b61042760048036038101906104229190611514565b610a68565b005b610431610a7c565b005b61043b610a8e565b60405161044c959493929190611897565b60405180910390f35b600061046082610ad2565b806104c55750600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff165b9050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560149054906101000a900469ffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b610560610b3c565b61056981610bc5565b50565b60006008905090565b61057d610b3c565b61058681610c49565b50565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610610576040517f2937b3e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b428164ffffffffff161115610651576040517f7c729df400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060068054905090506000811180156106b7575060066001826106759190611950565b8154811061068657610685611984565b5b90600052602060002001600001601a9054906101000a900464ffffffffff1664ffffffffff168264ffffffffff1611155b156106ee576040517f44e8b44700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b841580156107545750600354836cffffffffffffffffffffffffff16670de0b6b3a7640000866cffffffffffffffffffffffffff16866cffffffffffffffffffffffffff1661073d9190611950565b61074791906119b3565b6107519190611a24565b11155b156107875780600560146101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505b60066040518060800160405280866cffffffffffffffffffffffffff168152602001856cffffffffffffffffffffffffff1681526020018464ffffffffff1681526020018715158152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a8154816cffffffffffffffffffffffffff02191690836cffffffffffffffffffffffffff160217905550602082015181600001600d6101000a8154816cffffffffffffffffffffffffff02191690836cffffffffffffffffffffffffff160217905550604082015181600001601a6101000a81548164ffffffffff021916908364ffffffffff160217905550606082015181600001601f6101000a81548160ff02191690831515021790555050505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108e8610b3c565b6108f0610d09565b6108fa6000610c49565b6109046000610d92565b565b60006001905090565b60606040518060400160405280601c81526020017f4554482f5553443a20436861696e6c696e6b205472616e73706f727400000000815250905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6006818154811061098057600080fd5b906000526020600020016000915090508060000160009054906101000a90046cffffffffffffffffffffffffff169080600001600d9054906101000a90046cffffffffffffffffffffffffff169080600001601a9054906101000a900464ffffffffff169080600001601f9054906101000a900460ff16905084565b60035481565b6000806000806000610a1386610e52565b809550819650829750839850849950505050505091939590929450565b6000806000610a3d611004565b809350819450829550505050909192565b610a56610b3c565b610a5f816111a7565b50565b60045481565b610a70610b3c565b610a79816112b1565b50565b610a84610d09565b610a8c611335565b565b6000806000806000610ab7600560149054906101000a900469ffffffffffffffffffff16610e52565b80955081965082975083985084995050505050509091929394565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bc3576040517f1c0be90a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60006003549050808203610c05576040517fb99d8aaf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f7e2a21727a662d0def125b3d1237f41a099a760d472095091724cd8e56c25bf08183604051610c36929190611a55565b60405180910390a1816003819055505050565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f162998b90abc2507f3953aa797827b03a14c42dbd9a35f09feaf02e0d592773a60405160405180910390a350565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d90576040517ff5c49e6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b8073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f31b6c5a04b069b6ec1b3cef44c4e7c1eadd721349cda9823d0b1877b3551cdc660405160405180910390a380600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008060008569ffffffffffffffffffff1660068054905011610ea4576040517f1b696c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060068769ffffffffffffffffffff1681548110610ec657610ec5611984565b5b906000526020600020016040518060800160405290816000820160009054906101000a90046cffffffffffffffffffffffffff166cffffffffffffffffffffffffff166cffffffffffffffffffffffffff16815260200160008201600d9054906101000a90046cffffffffffffffffffffffffff166cffffffffffffffffffffffffff166cffffffffffffffffffffffffff16815260200160008201601a9054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815260200160008201601f9054906101000a900460ff1615151515815250509050600281600001516cffffffffffffffffffffffffff1682602001516cffffffffffffffffffffffffff16610fd79190611a7e565b610fe19190611a24565b9450869150819550806040015164ffffffffff1692508293505091939590929450565b60008060008060068054905090506000810361104c576040517f1b696c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600660018361105d9190611950565b8154811061106e5761106d611984565b5b906000526020600020016040518060800160405290816000820160009054906101000a90046cffffffffffffffffffffffffff166cffffffffffffffffffffffffff166cffffffffffffffffffffffffff16815260200160008201600d9054906101000a90046cffffffffffffffffffffffffff166cffffffffffffffffffffffffff166cffffffffffffffffffffffffff16815260200160008201601a9054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815260200160008201601f9054906101000a900460ff1615151515815250509050806060015180611172575042600454826040015164ffffffffff166111709190611a7e565b105b945080600001516cffffffffffffffffffffffffff16935080602001516cffffffffffffffffffffffffff1692505050909192565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611233576040517f22ba75b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f964298b435edfc268e11aa89b342ef1ddac566da6759b6dd15d7aad58a1dc9358183604051611264929190611ab2565b60405180910390a181600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600060045490508181036112f1576040517f054e23d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fd72ef688fa430b6a285b84371ba35e8a8e0762b32c1deb7be9d9c111ca79f5ea8183604051611322929190611a55565b60405180910390a1816004819055505050565b6000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061138033610d92565b565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6113bc81611387565b81146113c757600080fd5b50565b6000813590506113d9816113b3565b92915050565b6000602082840312156113f5576113f4611382565b5b6000611403848285016113ca565b91505092915050565b60008115159050919050565b6114218161140c565b82525050565b600060208201905061143c6000830184611418565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061146d82611442565b9050919050565b61147d81611462565b82525050565b60006020820190506114986000830184611474565b92915050565b600069ffffffffffffffffffff82169050919050565b6114bd8161149e565b82525050565b60006020820190506114d860008301846114b4565b92915050565b6000819050919050565b6114f1816114de565b81146114fc57600080fd5b50565b60008135905061150e816114e8565b92915050565b60006020828403121561152a57611529611382565b5b6000611538848285016114ff565b91505092915050565b600060ff82169050919050565b61155781611541565b82525050565b6000602082019050611572600083018461154e565b92915050565b61158181611462565b811461158c57600080fd5b50565b60008135905061159e81611578565b92915050565b6000602082840312156115ba576115b9611382565b5b60006115c88482850161158f565b91505092915050565b6115da8161140c565b81146115e557600080fd5b50565b6000813590506115f7816115d1565b92915050565b60006cffffffffffffffffffffffffff82169050919050565b61161f816115fd565b811461162a57600080fd5b50565b60008135905061163c81611616565b92915050565b600064ffffffffff82169050919050565b61165c81611642565b811461166757600080fd5b50565b60008135905061167981611653565b92915050565b6000806000806080858703121561169957611698611382565b5b60006116a7878288016115e8565b94505060206116b88782880161162d565b93505060406116c98782880161162d565b92505060606116da8782880161166a565b91505092959194509250565b6116ef816114de565b82525050565b600060208201905061170a60008301846116e6565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561174a57808201518184015260208101905061172f565b60008484015250505050565b6000601f19601f8301169050919050565b600061177282611710565b61177c818561171b565b935061178c81856020860161172c565b61179581611756565b840191505092915050565b600060208201905081810360008301526117ba8184611767565b905092915050565b6117cb816115fd565b82525050565b6117da81611642565b82525050565b60006080820190506117f560008301876117c2565b61180260208301866117c2565b61180f60408301856117d1565b61181c6060830184611418565b95945050505050565b61182e8161149e565b811461183957600080fd5b50565b60008135905061184b81611825565b92915050565b60006020828403121561186757611866611382565b5b60006118758482850161183c565b91505092915050565b6000819050919050565b6118918161187e565b82525050565b600060a0820190506118ac60008301886114b4565b6118b96020830187611888565b6118c660408301866116e6565b6118d360608301856116e6565b6118e060808301846114b4565b9695505050505050565b60006060820190506118ff6000830186611418565b61190c60208301856116e6565b61191960408301846116e6565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061195b826114de565b9150611966836114de565b925082820390508181111561197e5761197d611921565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006119be826114de565b91506119c9836114de565b92508282026119d7816114de565b915082820484148315176119ee576119ed611921565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611a2f826114de565b9150611a3a836114de565b925082611a4a57611a496119f5565b5b828204905092915050565b6000604082019050611a6a60008301856116e6565b611a7760208301846116e6565b9392505050565b6000611a89826114de565b9150611a94836114de565b9250828201905080821115611aac57611aab611921565b5b92915050565b6000604082019050611ac76000830185611474565b611ad46020830184611474565b939250505056fea164736f6c6343000813000a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004ad728706bfe28a3f090b3f1d8ac3a8515805b41000000000000000000000000000000000000000000000000006a94d74f4300000000000000000000000000000000000000000000000000000000000000015f90
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061018d5760003560e01c806354fd4d50116100e3578063bd9a548b1161008c578063d2333be711610066578063d2333be71461040d578063f6ccaad414610429578063feaf968c146104335761018d565b8063bd9a548b146103b3578063bda53107146103d3578063cede91a4146103ef5761018d565b80638c65c81f116100bd5780638c65c81f1461032e5780639152c29d146103615780639a6fc8f51461037f5761018d565b806354fd4d50146102d45780637284e416146102f257806378892cea146103105761018d565b80632dfa42671161014557806345d9f5821161011f57806345d9f582146102905780634bc66f32146102ac5780634f8b4ae7146102ca5761018d565b80632dfa42671461023a578063313ce5671461025657806345014095146102745761018d565b80630f4a05fb116101765780630f4a05fb146101e057806320531bc9146101fe578063210663e41461021c5761018d565b806301ffc9a714610192578063090f3f50146101c2575b600080fd5b6101ac60048036038101906101a791906113df565b610455565b6040516101b99190611427565b60405180910390f35b6101ca6104cc565b6040516101d79190611483565b60405180910390f35b6101e86104f2565b6040516101f591906114c3565b60405180910390f35b61020661050e565b6040516102139190611483565b60405180910390f35b610224610534565b6040516102319190611483565b60405180910390f35b610254600480360381019061024f9190611514565b610558565b005b61025e61056c565b60405161026b919061155d565b60405180910390f35b61028e600480360381019061028991906115a4565b610575565b005b6102aa60048036038101906102a5919061167f565b610589565b005b6102b46108ba565b6040516102c19190611483565b60405180910390f35b6102d26108e0565b005b6102dc610906565b6040516102e991906116f5565b60405180910390f35b6102fa61090f565b60405161030791906117a0565b60405180910390f35b61031861094c565b6040516103259190611483565b60405180910390f35b61034860048036038101906103439190611514565b610970565b60405161035894939291906117e0565b60405180910390f35b6103696109fc565b60405161037691906116f5565b60405180910390f35b61039960048036038101906103949190611851565b610a02565b6040516103aa959493929190611897565b60405180910390f35b6103bb610a30565b6040516103ca939291906118ea565b60405180910390f35b6103ed60048036038101906103e891906115a4565b610a4e565b005b6103f7610a62565b60405161040491906116f5565b60405180910390f35b61042760048036038101906104229190611514565b610a68565b005b610431610a7c565b005b61043b610a8e565b60405161044c959493929190611897565b60405180910390f35b600061046082610ad2565b806104c55750600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff165b9050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560149054906101000a900469ffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b610560610b3c565b61056981610bc5565b50565b60006008905090565b61057d610b3c565b61058681610c49565b50565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610610576040517f2937b3e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b428164ffffffffff161115610651576040517f7c729df400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060068054905090506000811180156106b7575060066001826106759190611950565b8154811061068657610685611984565b5b90600052602060002001600001601a9054906101000a900464ffffffffff1664ffffffffff168264ffffffffff1611155b156106ee576040517f44e8b44700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b841580156107545750600354836cffffffffffffffffffffffffff16670de0b6b3a7640000866cffffffffffffffffffffffffff16866cffffffffffffffffffffffffff1661073d9190611950565b61074791906119b3565b6107519190611a24565b11155b156107875780600560146101000a81548169ffffffffffffffffffff021916908369ffffffffffffffffffff1602179055505b60066040518060800160405280866cffffffffffffffffffffffffff168152602001856cffffffffffffffffffffffffff1681526020018464ffffffffff1681526020018715158152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a8154816cffffffffffffffffffffffffff02191690836cffffffffffffffffffffffffff160217905550602082015181600001600d6101000a8154816cffffffffffffffffffffffffff02191690836cffffffffffffffffffffffffff160217905550604082015181600001601a6101000a81548164ffffffffff021916908364ffffffffff160217905550606082015181600001601f6101000a81548160ff02191690831515021790555050505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108e8610b3c565b6108f0610d09565b6108fa6000610c49565b6109046000610d92565b565b60006001905090565b60606040518060400160405280601c81526020017f4554482f5553443a20436861696e6c696e6b205472616e73706f727400000000815250905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6006818154811061098057600080fd5b906000526020600020016000915090508060000160009054906101000a90046cffffffffffffffffffffffffff169080600001600d9054906101000a90046cffffffffffffffffffffffffff169080600001601a9054906101000a900464ffffffffff169080600001601f9054906101000a900460ff16905084565b60035481565b6000806000806000610a1386610e52565b809550819650829750839850849950505050505091939590929450565b6000806000610a3d611004565b809350819450829550505050909192565b610a56610b3c565b610a5f816111a7565b50565b60045481565b610a70610b3c565b610a79816112b1565b50565b610a84610d09565b610a8c611335565b565b6000806000806000610ab7600560149054906101000a900469ffffffffffffffffffff16610e52565b80955081965082975083985084995050505050509091929394565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bc3576040517f1c0be90a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b60006003549050808203610c05576040517fb99d8aaf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f7e2a21727a662d0def125b3d1237f41a099a760d472095091724cd8e56c25bf08183604051610c36929190611a55565b60405180910390a1816003819055505050565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f162998b90abc2507f3953aa797827b03a14c42dbd9a35f09feaf02e0d592773a60405160405180910390a350565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d90576040517ff5c49e6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b8073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f31b6c5a04b069b6ec1b3cef44c4e7c1eadd721349cda9823d0b1877b3551cdc660405160405180910390a380600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008060008569ffffffffffffffffffff1660068054905011610ea4576040517f1b696c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060068769ffffffffffffffffffff1681548110610ec657610ec5611984565b5b906000526020600020016040518060800160405290816000820160009054906101000a90046cffffffffffffffffffffffffff166cffffffffffffffffffffffffff166cffffffffffffffffffffffffff16815260200160008201600d9054906101000a90046cffffffffffffffffffffffffff166cffffffffffffffffffffffffff166cffffffffffffffffffffffffff16815260200160008201601a9054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815260200160008201601f9054906101000a900460ff1615151515815250509050600281600001516cffffffffffffffffffffffffff1682602001516cffffffffffffffffffffffffff16610fd79190611a7e565b610fe19190611a24565b9450869150819550806040015164ffffffffff1692508293505091939590929450565b60008060008060068054905090506000810361104c576040517f1b696c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600660018361105d9190611950565b8154811061106e5761106d611984565b5b906000526020600020016040518060800160405290816000820160009054906101000a90046cffffffffffffffffffffffffff166cffffffffffffffffffffffffff166cffffffffffffffffffffffffff16815260200160008201600d9054906101000a90046cffffffffffffffffffffffffff166cffffffffffffffffffffffffff166cffffffffffffffffffffffffff16815260200160008201601a9054906101000a900464ffffffffff1664ffffffffff1664ffffffffff16815260200160008201601f9054906101000a900460ff1615151515815250509050806060015180611172575042600454826040015164ffffffffff166111709190611a7e565b105b945080600001516cffffffffffffffffffffffffff16935080602001516cffffffffffffffffffffffffff1692505050909192565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611233576040517f22ba75b300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f964298b435edfc268e11aa89b342ef1ddac566da6759b6dd15d7aad58a1dc9358183604051611264929190611ab2565b60405180910390a181600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600060045490508181036112f1576040517f054e23d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fd72ef688fa430b6a285b84371ba35e8a8e0762b32c1deb7be9d9c111ca79f5ea8183604051611322929190611a55565b60405180910390a1816004819055505050565b6000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061138033610d92565b565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6113bc81611387565b81146113c757600080fd5b50565b6000813590506113d9816113b3565b92915050565b6000602082840312156113f5576113f4611382565b5b6000611403848285016113ca565b91505092915050565b60008115159050919050565b6114218161140c565b82525050565b600060208201905061143c6000830184611418565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061146d82611442565b9050919050565b61147d81611462565b82525050565b60006020820190506114986000830184611474565b92915050565b600069ffffffffffffffffffff82169050919050565b6114bd8161149e565b82525050565b60006020820190506114d860008301846114b4565b92915050565b6000819050919050565b6114f1816114de565b81146114fc57600080fd5b50565b60008135905061150e816114e8565b92915050565b60006020828403121561152a57611529611382565b5b6000611538848285016114ff565b91505092915050565b600060ff82169050919050565b61155781611541565b82525050565b6000602082019050611572600083018461154e565b92915050565b61158181611462565b811461158c57600080fd5b50565b60008135905061159e81611578565b92915050565b6000602082840312156115ba576115b9611382565b5b60006115c88482850161158f565b91505092915050565b6115da8161140c565b81146115e557600080fd5b50565b6000813590506115f7816115d1565b92915050565b60006cffffffffffffffffffffffffff82169050919050565b61161f816115fd565b811461162a57600080fd5b50565b60008135905061163c81611616565b92915050565b600064ffffffffff82169050919050565b61165c81611642565b811461166757600080fd5b50565b60008135905061167981611653565b92915050565b6000806000806080858703121561169957611698611382565b5b60006116a7878288016115e8565b94505060206116b88782880161162d565b93505060406116c98782880161162d565b92505060606116da8782880161166a565b91505092959194509250565b6116ef816114de565b82525050565b600060208201905061170a60008301846116e6565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561174a57808201518184015260208101905061172f565b60008484015250505050565b6000601f19601f8301169050919050565b600061177282611710565b61177c818561171b565b935061178c81856020860161172c565b61179581611756565b840191505092915050565b600060208201905081810360008301526117ba8184611767565b905092915050565b6117cb816115fd565b82525050565b6117da81611642565b82525050565b60006080820190506117f560008301876117c2565b61180260208301866117c2565b61180f60408301856117d1565b61181c6060830184611418565b95945050505050565b61182e8161149e565b811461183957600080fd5b50565b60008135905061184b81611825565b92915050565b60006020828403121561186757611866611382565b5b60006118758482850161183c565b91505092915050565b6000819050919050565b6118918161187e565b82525050565b600060a0820190506118ac60008301886114b4565b6118b96020830187611888565b6118c660408301866116e6565b6118d360608301856116e6565b6118e060808301846114b4565b9695505050505050565b60006060820190506118ff6000830186611418565b61190c60208301856116e6565b61191960408301846116e6565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061195b826114de565b9150611966836114de565b925082820390508181111561197e5761197d611921565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006119be826114de565b91506119c9836114de565b92508282026119d7816114de565b915082820484148315176119ee576119ed611921565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611a2f826114de565b9150611a3a836114de565b925082611a4a57611a496119f5565b5b828204905092915050565b6000604082019050611a6a60008301856116e6565b611a7760208301846116e6565b9392505050565b6000611a89826114de565b9150611a94836114de565b9250828201905080821115611aac57611aab611921565b5b92915050565b6000604082019050611ac76000830185611474565b611ad46020830184611474565b939250505056fea164736f6c6343000813000a
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004ad728706bfe28a3f090b3f1d8ac3a8515805b41000000000000000000000000000000000000000000000000006a94d74f4300000000000000000000000000000000000000000000000000000000000000015f90
-----Decoded View---------------
Arg [0] : _params (tuple):
Arg [1] : timelockAddress (address): 0x0000000000000000000000000000000000000000
Arg [2] : baseErc20 (address): 0x0000000000000000000000000000000000000000
Arg [3] : quoteErc20 (address): 0x0000000000000000000000000000000000000000
Arg [4] : priceSource (address): 0x4AD728706bFe28A3F090b3f1D8Ac3A8515805B41
Arg [5] : maximumDeviation (uint256): 30000000000000000
Arg [6] : maximumOracleDelay (uint256): 90000
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [3] : 0000000000000000000000004ad728706bfe28a3f090b3f1d8ac3a8515805b41
Arg [4] : 000000000000000000000000000000000000000000000000006a94d74f430000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000015f90
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in FRAX
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.