Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
SfrxEthOracle
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 3000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.17; import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; import "@openzeppelin/contracts/utils/math/SafeCast.sol"; import "../Timelock2Step.sol"; import "../interfaces/IFrxEthStableSwap.sol"; import "../interfaces/ISfrxEth.sol"; contract SfrxEthOracle is Timelock2Step, AggregatorV3Interface { using SafeCast for uint256; /// @notice The contract where rewards are accrued ISfrxEth public constant staker = ISfrxEth(0xac3E018457B222d93114458476f3E3416Abbe38F); /// @notice The precision of staker pricePerShare, given as 10^decimals uint256 public constant stakingPricePrecision = 1e18; /// @notice Curve pool, source of EMA for token IFrxEthStableSwap public constant pool = IFrxEthStableSwap(0xa1F8A6807c402E4A15ef4EBa36528A3FED24E577); /// @notice Chainlink aggregator AggregatorV3Interface public constant chainlinkFeed = AggregatorV3Interface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419); /// @notice Decimals of ETH/USD chainlink feed uint8 public immutable chainlinkFeedDecimals; /// @notice Precision of ema oracle given as 10^decimals uint256 public immutable emaPrecision = 1e18; /// @notice Maximum price of frxEth in Ether units of the EAM /// @dev Must match precision of EMA uint256 public immutable emaMax = 1e18; /// @notice Minimum price of frxEth in Ether units of the EMA /// @dev Must match precision of EMA uint256 public emaMin; // Metadata /// @notice Description of oracle, follows chainlink convention string public description = "sfrxETH / USD v2 with min/max bounds"; /// @notice Decimals of precision for price data uint8 public constant decimals = 18; /// @notice Name of Oracle string public name = "Staked Frax Ether (USD) Oracle v2 (Chainlink + EMA with min/max bounds + ERC4626 sharePrice)"; /// @notice Version of Oracle (matches chainlink convention) uint256 public constant version = 4; constructor(address _timelockAddress, uint256 _emaMin) Timelock2Step() { chainlinkFeedDecimals = AggregatorV3Interface(chainlinkFeed).decimals(); _setTimelock(_timelockAddress); emaMin = _emaMin; } /// @notice The ```SetEmaMinimum``` event is emitted when the minimum price of frxEth in Ether units of the EMA is set /// @param oldMinimum The previous minimum price of frxEth in Ether units of the EMA /// @param newMinimum The new minimum price of frxEth in Ether units of the EMA event SetEmaMinimum(uint256 oldMinimum, uint256 newMinimum); /// @notice The ```setEmaMin``` function sets the minimum price of frxEth in Ether units of the EMA /// @dev Must match precision of the EMA /// @param _minPrice The minimum price of frxEth in Ether units of the EMA function setEmaMin(uint256 _minPrice) external { _requireTimelock(); emit SetEmaMinimum(emaMin, _minPrice); emaMin = _minPrice; } function getRoundData(uint80 _roundId) external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound) { revert("getRoundData not implemented"); } /// @notice The ```latestRoundData``` function returns the latest price and metadata for the oracle /// @dev Adheres to chainlink's AggregatorV3Interface /// @return roundId The round from the chainlinkFeed /// @return answer The price of sfrxEth in USD /// @return startedAt The timestamp of start of the update of the round from the chainlinkFeed /// @return updatedAt The timestamp of update of the round from the chainlinkFeed /// @return answeredInRound The round from the chainlinkFeed function latestRoundData() external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound) { // tokenA Eth price in USD // tokenB frxEth price in ETH // tokenC sfrxEth price in frxEth int256 _tokenAPriceInt; (roundId, _tokenAPriceInt, startedAt, updatedAt, answeredInRound) = chainlinkFeed.latestRoundData(); if (_tokenAPriceInt < 0) revert FeedPriceNegative(); uint256 _tokenAPrice = uint256(_tokenAPriceInt); // price oracle gives token1 price in terms of token0 units uint256 _oraclePrice = pool.price_oracle(); // Bound _tokenPrice uint256 _tokenBPriceRelative = _oraclePrice > emaMax ? emaMax : _oraclePrice; _tokenBPriceRelative = _tokenBPriceRelative < emaMin ? emaMin : _tokenBPriceRelative; uint256 _tokenCPriceInTokenB = staker.pricePerShare(); uint256 _tokenAPriceScaled = (_tokenAPrice * (10**decimals)) / (10**chainlinkFeedDecimals); answer = ((_tokenCPriceInTokenB * _tokenBPriceRelative * _tokenAPriceScaled) / (emaPrecision * stakingPricePrecision)).toInt256(); } error FeedPriceNegative(); }
// SPDX-License-Identifier: ISC pragma solidity ^0.8.17; // ==================================================================== // | ______ _______ | // | / _____________ __ __ / ____(_____ ____ _____ ________ | // | / /_ / ___/ __ `| |/_/ / /_ / / __ \/ __ `/ __ \/ ___/ _ \ | // | / __/ / / / /_/ _> < / __/ / / / / / /_/ / / / / /__/ __/ | // | /_/ /_/ \__,_/_/|_| /_/ /_/_/ /_/\__,_/_/ /_/\___/\___/ | // | | // ==================================================================== // ========================== Timelock2Step =========================== // ==================================================================== // Frax Finance: https://github.com/FraxFinance // Primary Author // Drake Evans: https://github.com/DrakeEvans // ==================================================================== 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.17; // NOTE: This file generated from sfrxEth contract at https://etherscan.io/address/0xac3e018457b222d93114458476f3e3416abbe38f#code interface ISfrxEth { function DOMAIN_SEPARATOR() external view returns (bytes32); function allowance(address, address) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function asset() external view returns (address); function balanceOf(address) external view returns (uint256); function convertToAssets(uint256 shares) external view returns (uint256); function convertToShares(uint256 assets) external view returns (uint256); function decimals() external view returns (uint8); function deposit(uint256 assets, address receiver) external returns (uint256 shares); function depositWithSignature( uint256 assets, address receiver, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 shares); function lastRewardAmount() external view returns (uint192); function lastSync() external view returns (uint32); function maxDeposit(address) external view returns (uint256); function maxMint(address) external view returns (uint256); function maxRedeem(address owner) external view returns (uint256); function maxWithdraw(address owner) external view returns (uint256); function mint(uint256 shares, address receiver) external returns (uint256 assets); function name() external view returns (string memory); function nonces(address) external view returns (uint256); function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; function previewDeposit(uint256 assets) external view returns (uint256); function previewMint(uint256 shares) external view returns (uint256); function previewRedeem(uint256 shares) external view returns (uint256); function previewWithdraw(uint256 assets) external view returns (uint256); function pricePerShare() external view returns (uint256); function redeem(uint256 shares, address receiver, address owner) external returns (uint256 assets); function rewardsCycleEnd() external view returns (uint32); function rewardsCycleLength() external view returns (uint32); function symbol() external view returns (string memory); function syncRewards() external; function totalAssets() external view returns (uint256); function totalSupply() external view returns (uint256); function transfer(address to, uint256 amount) external returns (bool); function transferFrom(address from, address to, uint256 amount) external returns (bool); function withdraw(uint256 assets, address receiver, address owner) external returns (uint256 shares); }
// SPDX-License-Identifier: UNLICENSED pragma solidity >=0.8.17; // NOTE: This file generated from ABI of the frxEth/Eth curve pool found at https://etherscan.io/address/0xa1f8a6807c402e4a15ef4eba36528a3fed24e577#code interface IFrxEthStableSwap { function A() external view returns (uint256); function A_precise() external view returns (uint256); function get_p() external view returns (uint256); function price_oracle() external view returns (uint256); function get_virtual_price() external view returns (uint256); function calc_token_amount(uint256[2] memory _amounts, bool _is_deposit) external view returns (uint256); function add_liquidity(uint256[2] memory _amounts, uint256 _min_mint_amount) external returns (uint256); function get_dy( int128 i, int128 j, uint256 _dx ) external view returns (uint256); function exchange( int128 i, int128 j, uint256 _dx, uint256 _min_dy ) external returns (uint256); function remove_liquidity(uint256 _amount, uint256[2] memory _min_amounts) external returns (uint256[2] memory); function remove_liquidity_imbalance(uint256[2] memory _amounts, uint256 _max_burn_amount) external returns (uint256); function calc_withdraw_one_coin(uint256 _token_amount, int128 i) external view returns (uint256); function remove_liquidity_one_coin( uint256 _token_amount, int128 i, uint256 _min_amount ) external returns (uint256); function ramp_A(uint256 _future_A, uint256 _future_time) external; function stop_ramp_A() external; function commit_new_fee(uint256 _new_fee, uint256 _new_admin_fee) external; function apply_new_fee() external; function revert_new_parameters() external; function set_ma_exp_time(uint256 _ma_exp_time) external; function commit_transfer_ownership(address _owner) external; function apply_transfer_ownership() external; function revert_transfer_ownership() external; function admin_balances(uint256 i) external view returns (uint256); function withdraw_admin_fees() external; function donate_admin_fees() external; function kill_me() external; function unkill_me() external; function coins(uint256 arg0) external view returns (address); function balances(uint256 arg0) external view returns (uint256); function fee() external view returns (uint256); function admin_fee() external view returns (uint256); function owner() external view returns (address); function lp_token() external view returns (address); function initial_A() external view returns (uint256); function future_A() external view returns (uint256); function initial_A_time() external view returns (uint256); function future_A_time() external view returns (uint256); function admin_actions_deadline() external view returns (uint256); function transfer_ownership_deadline() external view returns (uint256); function future_fee() external view returns (uint256); function future_admin_fee() external view returns (uint256); function future_owner() external view returns (address); function ma_exp_time() external view returns (uint256); function ma_last_time() external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface AggregatorV3Interface { function decimals() external view returns (uint8); function description() external view returns (string memory); function version() external view returns (uint256); function getRoundData(uint80 _roundId) external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); function latestRoundData() external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SafeCast.sol) // This file was procedurally generated from scripts/generate/templates/SafeCast.js. pragma solidity ^0.8.0; /** * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow * checks. * * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can * easily result in undesired exploitation or bugs, since developers usually * assume that overflows raise errors. `SafeCast` restores this intuition by * reverting the transaction when such an operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. * * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing * all math on `uint256` and `int256` and then downcasting. */ library SafeCast { /** * @dev Returns the downcasted uint248 from uint256, reverting on * overflow (when the input is greater than largest uint248). * * Counterpart to Solidity's `uint248` operator. * * Requirements: * * - input must fit into 248 bits * * _Available since v4.7._ */ function toUint248(uint256 value) internal pure returns (uint248) { require(value <= type(uint248).max, "SafeCast: value doesn't fit in 248 bits"); return uint248(value); } /** * @dev Returns the downcasted uint240 from uint256, reverting on * overflow (when the input is greater than largest uint240). * * Counterpart to Solidity's `uint240` operator. * * Requirements: * * - input must fit into 240 bits * * _Available since v4.7._ */ function toUint240(uint256 value) internal pure returns (uint240) { require(value <= type(uint240).max, "SafeCast: value doesn't fit in 240 bits"); return uint240(value); } /** * @dev Returns the downcasted uint232 from uint256, reverting on * overflow (when the input is greater than largest uint232). * * Counterpart to Solidity's `uint232` operator. * * Requirements: * * - input must fit into 232 bits * * _Available since v4.7._ */ function toUint232(uint256 value) internal pure returns (uint232) { require(value <= type(uint232).max, "SafeCast: value doesn't fit in 232 bits"); return uint232(value); } /** * @dev Returns the downcasted uint224 from uint256, reverting on * overflow (when the input is greater than largest uint224). * * Counterpart to Solidity's `uint224` operator. * * Requirements: * * - input must fit into 224 bits * * _Available since v4.2._ */ function toUint224(uint256 value) internal pure returns (uint224) { require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits"); return uint224(value); } /** * @dev Returns the downcasted uint216 from uint256, reverting on * overflow (when the input is greater than largest uint216). * * Counterpart to Solidity's `uint216` operator. * * Requirements: * * - input must fit into 216 bits * * _Available since v4.7._ */ function toUint216(uint256 value) internal pure returns (uint216) { require(value <= type(uint216).max, "SafeCast: value doesn't fit in 216 bits"); return uint216(value); } /** * @dev Returns the downcasted uint208 from uint256, reverting on * overflow (when the input is greater than largest uint208). * * Counterpart to Solidity's `uint208` operator. * * Requirements: * * - input must fit into 208 bits * * _Available since v4.7._ */ function toUint208(uint256 value) internal pure returns (uint208) { require(value <= type(uint208).max, "SafeCast: value doesn't fit in 208 bits"); return uint208(value); } /** * @dev Returns the downcasted uint200 from uint256, reverting on * overflow (when the input is greater than largest uint200). * * Counterpart to Solidity's `uint200` operator. * * Requirements: * * - input must fit into 200 bits * * _Available since v4.7._ */ function toUint200(uint256 value) internal pure returns (uint200) { require(value <= type(uint200).max, "SafeCast: value doesn't fit in 200 bits"); return uint200(value); } /** * @dev Returns the downcasted uint192 from uint256, reverting on * overflow (when the input is greater than largest uint192). * * Counterpart to Solidity's `uint192` operator. * * Requirements: * * - input must fit into 192 bits * * _Available since v4.7._ */ function toUint192(uint256 value) internal pure returns (uint192) { require(value <= type(uint192).max, "SafeCast: value doesn't fit in 192 bits"); return uint192(value); } /** * @dev Returns the downcasted uint184 from uint256, reverting on * overflow (when the input is greater than largest uint184). * * Counterpart to Solidity's `uint184` operator. * * Requirements: * * - input must fit into 184 bits * * _Available since v4.7._ */ function toUint184(uint256 value) internal pure returns (uint184) { require(value <= type(uint184).max, "SafeCast: value doesn't fit in 184 bits"); return uint184(value); } /** * @dev Returns the downcasted uint176 from uint256, reverting on * overflow (when the input is greater than largest uint176). * * Counterpart to Solidity's `uint176` operator. * * Requirements: * * - input must fit into 176 bits * * _Available since v4.7._ */ function toUint176(uint256 value) internal pure returns (uint176) { require(value <= type(uint176).max, "SafeCast: value doesn't fit in 176 bits"); return uint176(value); } /** * @dev Returns the downcasted uint168 from uint256, reverting on * overflow (when the input is greater than largest uint168). * * Counterpart to Solidity's `uint168` operator. * * Requirements: * * - input must fit into 168 bits * * _Available since v4.7._ */ function toUint168(uint256 value) internal pure returns (uint168) { require(value <= type(uint168).max, "SafeCast: value doesn't fit in 168 bits"); return uint168(value); } /** * @dev Returns the downcasted uint160 from uint256, reverting on * overflow (when the input is greater than largest uint160). * * Counterpart to Solidity's `uint160` operator. * * Requirements: * * - input must fit into 160 bits * * _Available since v4.7._ */ function toUint160(uint256 value) internal pure returns (uint160) { require(value <= type(uint160).max, "SafeCast: value doesn't fit in 160 bits"); return uint160(value); } /** * @dev Returns the downcasted uint152 from uint256, reverting on * overflow (when the input is greater than largest uint152). * * Counterpart to Solidity's `uint152` operator. * * Requirements: * * - input must fit into 152 bits * * _Available since v4.7._ */ function toUint152(uint256 value) internal pure returns (uint152) { require(value <= type(uint152).max, "SafeCast: value doesn't fit in 152 bits"); return uint152(value); } /** * @dev Returns the downcasted uint144 from uint256, reverting on * overflow (when the input is greater than largest uint144). * * Counterpart to Solidity's `uint144` operator. * * Requirements: * * - input must fit into 144 bits * * _Available since v4.7._ */ function toUint144(uint256 value) internal pure returns (uint144) { require(value <= type(uint144).max, "SafeCast: value doesn't fit in 144 bits"); return uint144(value); } /** * @dev Returns the downcasted uint136 from uint256, reverting on * overflow (when the input is greater than largest uint136). * * Counterpart to Solidity's `uint136` operator. * * Requirements: * * - input must fit into 136 bits * * _Available since v4.7._ */ function toUint136(uint256 value) internal pure returns (uint136) { require(value <= type(uint136).max, "SafeCast: value doesn't fit in 136 bits"); return uint136(value); } /** * @dev Returns the downcasted uint128 from uint256, reverting on * overflow (when the input is greater than largest uint128). * * Counterpart to Solidity's `uint128` operator. * * Requirements: * * - input must fit into 128 bits * * _Available since v2.5._ */ function toUint128(uint256 value) internal pure returns (uint128) { require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits"); return uint128(value); } /** * @dev Returns the downcasted uint120 from uint256, reverting on * overflow (when the input is greater than largest uint120). * * Counterpart to Solidity's `uint120` operator. * * Requirements: * * - input must fit into 120 bits * * _Available since v4.7._ */ function toUint120(uint256 value) internal pure returns (uint120) { require(value <= type(uint120).max, "SafeCast: value doesn't fit in 120 bits"); return uint120(value); } /** * @dev Returns the downcasted uint112 from uint256, reverting on * overflow (when the input is greater than largest uint112). * * Counterpart to Solidity's `uint112` operator. * * Requirements: * * - input must fit into 112 bits * * _Available since v4.7._ */ function toUint112(uint256 value) internal pure returns (uint112) { require(value <= type(uint112).max, "SafeCast: value doesn't fit in 112 bits"); return uint112(value); } /** * @dev Returns the downcasted uint104 from uint256, reverting on * overflow (when the input is greater than largest uint104). * * Counterpart to Solidity's `uint104` operator. * * Requirements: * * - input must fit into 104 bits * * _Available since v4.7._ */ function toUint104(uint256 value) internal pure returns (uint104) { require(value <= type(uint104).max, "SafeCast: value doesn't fit in 104 bits"); return uint104(value); } /** * @dev Returns the downcasted uint96 from uint256, reverting on * overflow (when the input is greater than largest uint96). * * Counterpart to Solidity's `uint96` operator. * * Requirements: * * - input must fit into 96 bits * * _Available since v4.2._ */ function toUint96(uint256 value) internal pure returns (uint96) { require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits"); return uint96(value); } /** * @dev Returns the downcasted uint88 from uint256, reverting on * overflow (when the input is greater than largest uint88). * * Counterpart to Solidity's `uint88` operator. * * Requirements: * * - input must fit into 88 bits * * _Available since v4.7._ */ function toUint88(uint256 value) internal pure returns (uint88) { require(value <= type(uint88).max, "SafeCast: value doesn't fit in 88 bits"); return uint88(value); } /** * @dev Returns the downcasted uint80 from uint256, reverting on * overflow (when the input is greater than largest uint80). * * Counterpart to Solidity's `uint80` operator. * * Requirements: * * - input must fit into 80 bits * * _Available since v4.7._ */ function toUint80(uint256 value) internal pure returns (uint80) { require(value <= type(uint80).max, "SafeCast: value doesn't fit in 80 bits"); return uint80(value); } /** * @dev Returns the downcasted uint72 from uint256, reverting on * overflow (when the input is greater than largest uint72). * * Counterpart to Solidity's `uint72` operator. * * Requirements: * * - input must fit into 72 bits * * _Available since v4.7._ */ function toUint72(uint256 value) internal pure returns (uint72) { require(value <= type(uint72).max, "SafeCast: value doesn't fit in 72 bits"); return uint72(value); } /** * @dev Returns the downcasted uint64 from uint256, reverting on * overflow (when the input is greater than largest uint64). * * Counterpart to Solidity's `uint64` operator. * * Requirements: * * - input must fit into 64 bits * * _Available since v2.5._ */ function toUint64(uint256 value) internal pure returns (uint64) { require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits"); return uint64(value); } /** * @dev Returns the downcasted uint56 from uint256, reverting on * overflow (when the input is greater than largest uint56). * * Counterpart to Solidity's `uint56` operator. * * Requirements: * * - input must fit into 56 bits * * _Available since v4.7._ */ function toUint56(uint256 value) internal pure returns (uint56) { require(value <= type(uint56).max, "SafeCast: value doesn't fit in 56 bits"); return uint56(value); } /** * @dev Returns the downcasted uint48 from uint256, reverting on * overflow (when the input is greater than largest uint48). * * Counterpart to Solidity's `uint48` operator. * * Requirements: * * - input must fit into 48 bits * * _Available since v4.7._ */ function toUint48(uint256 value) internal pure returns (uint48) { require(value <= type(uint48).max, "SafeCast: value doesn't fit in 48 bits"); return uint48(value); } /** * @dev Returns the downcasted uint40 from uint256, reverting on * overflow (when the input is greater than largest uint40). * * Counterpart to Solidity's `uint40` operator. * * Requirements: * * - input must fit into 40 bits * * _Available since v4.7._ */ function toUint40(uint256 value) internal pure returns (uint40) { require(value <= type(uint40).max, "SafeCast: value doesn't fit in 40 bits"); return uint40(value); } /** * @dev Returns the downcasted uint32 from uint256, reverting on * overflow (when the input is greater than largest uint32). * * Counterpart to Solidity's `uint32` operator. * * Requirements: * * - input must fit into 32 bits * * _Available since v2.5._ */ function toUint32(uint256 value) internal pure returns (uint32) { require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits"); return uint32(value); } /** * @dev Returns the downcasted uint24 from uint256, reverting on * overflow (when the input is greater than largest uint24). * * Counterpart to Solidity's `uint24` operator. * * Requirements: * * - input must fit into 24 bits * * _Available since v4.7._ */ function toUint24(uint256 value) internal pure returns (uint24) { require(value <= type(uint24).max, "SafeCast: value doesn't fit in 24 bits"); return uint24(value); } /** * @dev Returns the downcasted uint16 from uint256, reverting on * overflow (when the input is greater than largest uint16). * * Counterpart to Solidity's `uint16` operator. * * Requirements: * * - input must fit into 16 bits * * _Available since v2.5._ */ function toUint16(uint256 value) internal pure returns (uint16) { require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits"); return uint16(value); } /** * @dev Returns the downcasted uint8 from uint256, reverting on * overflow (when the input is greater than largest uint8). * * Counterpart to Solidity's `uint8` operator. * * Requirements: * * - input must fit into 8 bits * * _Available since v2.5._ */ function toUint8(uint256 value) internal pure returns (uint8) { require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits"); return uint8(value); } /** * @dev Converts a signed int256 into an unsigned uint256. * * Requirements: * * - input must be greater than or equal to 0. * * _Available since v3.0._ */ function toUint256(int256 value) internal pure returns (uint256) { require(value >= 0, "SafeCast: value must be positive"); return uint256(value); } /** * @dev Returns the downcasted int248 from int256, reverting on * overflow (when the input is less than smallest int248 or * greater than largest int248). * * Counterpart to Solidity's `int248` operator. * * Requirements: * * - input must fit into 248 bits * * _Available since v4.7._ */ function toInt248(int256 value) internal pure returns (int248 downcasted) { downcasted = int248(value); require(downcasted == value, "SafeCast: value doesn't fit in 248 bits"); } /** * @dev Returns the downcasted int240 from int256, reverting on * overflow (when the input is less than smallest int240 or * greater than largest int240). * * Counterpart to Solidity's `int240` operator. * * Requirements: * * - input must fit into 240 bits * * _Available since v4.7._ */ function toInt240(int256 value) internal pure returns (int240 downcasted) { downcasted = int240(value); require(downcasted == value, "SafeCast: value doesn't fit in 240 bits"); } /** * @dev Returns the downcasted int232 from int256, reverting on * overflow (when the input is less than smallest int232 or * greater than largest int232). * * Counterpart to Solidity's `int232` operator. * * Requirements: * * - input must fit into 232 bits * * _Available since v4.7._ */ function toInt232(int256 value) internal pure returns (int232 downcasted) { downcasted = int232(value); require(downcasted == value, "SafeCast: value doesn't fit in 232 bits"); } /** * @dev Returns the downcasted int224 from int256, reverting on * overflow (when the input is less than smallest int224 or * greater than largest int224). * * Counterpart to Solidity's `int224` operator. * * Requirements: * * - input must fit into 224 bits * * _Available since v4.7._ */ function toInt224(int256 value) internal pure returns (int224 downcasted) { downcasted = int224(value); require(downcasted == value, "SafeCast: value doesn't fit in 224 bits"); } /** * @dev Returns the downcasted int216 from int256, reverting on * overflow (when the input is less than smallest int216 or * greater than largest int216). * * Counterpart to Solidity's `int216` operator. * * Requirements: * * - input must fit into 216 bits * * _Available since v4.7._ */ function toInt216(int256 value) internal pure returns (int216 downcasted) { downcasted = int216(value); require(downcasted == value, "SafeCast: value doesn't fit in 216 bits"); } /** * @dev Returns the downcasted int208 from int256, reverting on * overflow (when the input is less than smallest int208 or * greater than largest int208). * * Counterpart to Solidity's `int208` operator. * * Requirements: * * - input must fit into 208 bits * * _Available since v4.7._ */ function toInt208(int256 value) internal pure returns (int208 downcasted) { downcasted = int208(value); require(downcasted == value, "SafeCast: value doesn't fit in 208 bits"); } /** * @dev Returns the downcasted int200 from int256, reverting on * overflow (when the input is less than smallest int200 or * greater than largest int200). * * Counterpart to Solidity's `int200` operator. * * Requirements: * * - input must fit into 200 bits * * _Available since v4.7._ */ function toInt200(int256 value) internal pure returns (int200 downcasted) { downcasted = int200(value); require(downcasted == value, "SafeCast: value doesn't fit in 200 bits"); } /** * @dev Returns the downcasted int192 from int256, reverting on * overflow (when the input is less than smallest int192 or * greater than largest int192). * * Counterpart to Solidity's `int192` operator. * * Requirements: * * - input must fit into 192 bits * * _Available since v4.7._ */ function toInt192(int256 value) internal pure returns (int192 downcasted) { downcasted = int192(value); require(downcasted == value, "SafeCast: value doesn't fit in 192 bits"); } /** * @dev Returns the downcasted int184 from int256, reverting on * overflow (when the input is less than smallest int184 or * greater than largest int184). * * Counterpart to Solidity's `int184` operator. * * Requirements: * * - input must fit into 184 bits * * _Available since v4.7._ */ function toInt184(int256 value) internal pure returns (int184 downcasted) { downcasted = int184(value); require(downcasted == value, "SafeCast: value doesn't fit in 184 bits"); } /** * @dev Returns the downcasted int176 from int256, reverting on * overflow (when the input is less than smallest int176 or * greater than largest int176). * * Counterpart to Solidity's `int176` operator. * * Requirements: * * - input must fit into 176 bits * * _Available since v4.7._ */ function toInt176(int256 value) internal pure returns (int176 downcasted) { downcasted = int176(value); require(downcasted == value, "SafeCast: value doesn't fit in 176 bits"); } /** * @dev Returns the downcasted int168 from int256, reverting on * overflow (when the input is less than smallest int168 or * greater than largest int168). * * Counterpart to Solidity's `int168` operator. * * Requirements: * * - input must fit into 168 bits * * _Available since v4.7._ */ function toInt168(int256 value) internal pure returns (int168 downcasted) { downcasted = int168(value); require(downcasted == value, "SafeCast: value doesn't fit in 168 bits"); } /** * @dev Returns the downcasted int160 from int256, reverting on * overflow (when the input is less than smallest int160 or * greater than largest int160). * * Counterpart to Solidity's `int160` operator. * * Requirements: * * - input must fit into 160 bits * * _Available since v4.7._ */ function toInt160(int256 value) internal pure returns (int160 downcasted) { downcasted = int160(value); require(downcasted == value, "SafeCast: value doesn't fit in 160 bits"); } /** * @dev Returns the downcasted int152 from int256, reverting on * overflow (when the input is less than smallest int152 or * greater than largest int152). * * Counterpart to Solidity's `int152` operator. * * Requirements: * * - input must fit into 152 bits * * _Available since v4.7._ */ function toInt152(int256 value) internal pure returns (int152 downcasted) { downcasted = int152(value); require(downcasted == value, "SafeCast: value doesn't fit in 152 bits"); } /** * @dev Returns the downcasted int144 from int256, reverting on * overflow (when the input is less than smallest int144 or * greater than largest int144). * * Counterpart to Solidity's `int144` operator. * * Requirements: * * - input must fit into 144 bits * * _Available since v4.7._ */ function toInt144(int256 value) internal pure returns (int144 downcasted) { downcasted = int144(value); require(downcasted == value, "SafeCast: value doesn't fit in 144 bits"); } /** * @dev Returns the downcasted int136 from int256, reverting on * overflow (when the input is less than smallest int136 or * greater than largest int136). * * Counterpart to Solidity's `int136` operator. * * Requirements: * * - input must fit into 136 bits * * _Available since v4.7._ */ function toInt136(int256 value) internal pure returns (int136 downcasted) { downcasted = int136(value); require(downcasted == value, "SafeCast: value doesn't fit in 136 bits"); } /** * @dev Returns the downcasted int128 from int256, reverting on * overflow (when the input is less than smallest int128 or * greater than largest int128). * * Counterpart to Solidity's `int128` operator. * * Requirements: * * - input must fit into 128 bits * * _Available since v3.1._ */ function toInt128(int256 value) internal pure returns (int128 downcasted) { downcasted = int128(value); require(downcasted == value, "SafeCast: value doesn't fit in 128 bits"); } /** * @dev Returns the downcasted int120 from int256, reverting on * overflow (when the input is less than smallest int120 or * greater than largest int120). * * Counterpart to Solidity's `int120` operator. * * Requirements: * * - input must fit into 120 bits * * _Available since v4.7._ */ function toInt120(int256 value) internal pure returns (int120 downcasted) { downcasted = int120(value); require(downcasted == value, "SafeCast: value doesn't fit in 120 bits"); } /** * @dev Returns the downcasted int112 from int256, reverting on * overflow (when the input is less than smallest int112 or * greater than largest int112). * * Counterpart to Solidity's `int112` operator. * * Requirements: * * - input must fit into 112 bits * * _Available since v4.7._ */ function toInt112(int256 value) internal pure returns (int112 downcasted) { downcasted = int112(value); require(downcasted == value, "SafeCast: value doesn't fit in 112 bits"); } /** * @dev Returns the downcasted int104 from int256, reverting on * overflow (when the input is less than smallest int104 or * greater than largest int104). * * Counterpart to Solidity's `int104` operator. * * Requirements: * * - input must fit into 104 bits * * _Available since v4.7._ */ function toInt104(int256 value) internal pure returns (int104 downcasted) { downcasted = int104(value); require(downcasted == value, "SafeCast: value doesn't fit in 104 bits"); } /** * @dev Returns the downcasted int96 from int256, reverting on * overflow (when the input is less than smallest int96 or * greater than largest int96). * * Counterpart to Solidity's `int96` operator. * * Requirements: * * - input must fit into 96 bits * * _Available since v4.7._ */ function toInt96(int256 value) internal pure returns (int96 downcasted) { downcasted = int96(value); require(downcasted == value, "SafeCast: value doesn't fit in 96 bits"); } /** * @dev Returns the downcasted int88 from int256, reverting on * overflow (when the input is less than smallest int88 or * greater than largest int88). * * Counterpart to Solidity's `int88` operator. * * Requirements: * * - input must fit into 88 bits * * _Available since v4.7._ */ function toInt88(int256 value) internal pure returns (int88 downcasted) { downcasted = int88(value); require(downcasted == value, "SafeCast: value doesn't fit in 88 bits"); } /** * @dev Returns the downcasted int80 from int256, reverting on * overflow (when the input is less than smallest int80 or * greater than largest int80). * * Counterpart to Solidity's `int80` operator. * * Requirements: * * - input must fit into 80 bits * * _Available since v4.7._ */ function toInt80(int256 value) internal pure returns (int80 downcasted) { downcasted = int80(value); require(downcasted == value, "SafeCast: value doesn't fit in 80 bits"); } /** * @dev Returns the downcasted int72 from int256, reverting on * overflow (when the input is less than smallest int72 or * greater than largest int72). * * Counterpart to Solidity's `int72` operator. * * Requirements: * * - input must fit into 72 bits * * _Available since v4.7._ */ function toInt72(int256 value) internal pure returns (int72 downcasted) { downcasted = int72(value); require(downcasted == value, "SafeCast: value doesn't fit in 72 bits"); } /** * @dev Returns the downcasted int64 from int256, reverting on * overflow (when the input is less than smallest int64 or * greater than largest int64). * * Counterpart to Solidity's `int64` operator. * * Requirements: * * - input must fit into 64 bits * * _Available since v3.1._ */ function toInt64(int256 value) internal pure returns (int64 downcasted) { downcasted = int64(value); require(downcasted == value, "SafeCast: value doesn't fit in 64 bits"); } /** * @dev Returns the downcasted int56 from int256, reverting on * overflow (when the input is less than smallest int56 or * greater than largest int56). * * Counterpart to Solidity's `int56` operator. * * Requirements: * * - input must fit into 56 bits * * _Available since v4.7._ */ function toInt56(int256 value) internal pure returns (int56 downcasted) { downcasted = int56(value); require(downcasted == value, "SafeCast: value doesn't fit in 56 bits"); } /** * @dev Returns the downcasted int48 from int256, reverting on * overflow (when the input is less than smallest int48 or * greater than largest int48). * * Counterpart to Solidity's `int48` operator. * * Requirements: * * - input must fit into 48 bits * * _Available since v4.7._ */ function toInt48(int256 value) internal pure returns (int48 downcasted) { downcasted = int48(value); require(downcasted == value, "SafeCast: value doesn't fit in 48 bits"); } /** * @dev Returns the downcasted int40 from int256, reverting on * overflow (when the input is less than smallest int40 or * greater than largest int40). * * Counterpart to Solidity's `int40` operator. * * Requirements: * * - input must fit into 40 bits * * _Available since v4.7._ */ function toInt40(int256 value) internal pure returns (int40 downcasted) { downcasted = int40(value); require(downcasted == value, "SafeCast: value doesn't fit in 40 bits"); } /** * @dev Returns the downcasted int32 from int256, reverting on * overflow (when the input is less than smallest int32 or * greater than largest int32). * * Counterpart to Solidity's `int32` operator. * * Requirements: * * - input must fit into 32 bits * * _Available since v3.1._ */ function toInt32(int256 value) internal pure returns (int32 downcasted) { downcasted = int32(value); require(downcasted == value, "SafeCast: value doesn't fit in 32 bits"); } /** * @dev Returns the downcasted int24 from int256, reverting on * overflow (when the input is less than smallest int24 or * greater than largest int24). * * Counterpart to Solidity's `int24` operator. * * Requirements: * * - input must fit into 24 bits * * _Available since v4.7._ */ function toInt24(int256 value) internal pure returns (int24 downcasted) { downcasted = int24(value); require(downcasted == value, "SafeCast: value doesn't fit in 24 bits"); } /** * @dev Returns the downcasted int16 from int256, reverting on * overflow (when the input is less than smallest int16 or * greater than largest int16). * * Counterpart to Solidity's `int16` operator. * * Requirements: * * - input must fit into 16 bits * * _Available since v3.1._ */ function toInt16(int256 value) internal pure returns (int16 downcasted) { downcasted = int16(value); require(downcasted == value, "SafeCast: value doesn't fit in 16 bits"); } /** * @dev Returns the downcasted int8 from int256, reverting on * overflow (when the input is less than smallest int8 or * greater than largest int8). * * Counterpart to Solidity's `int8` operator. * * Requirements: * * - input must fit into 8 bits * * _Available since v3.1._ */ function toInt8(int256 value) internal pure returns (int8 downcasted) { downcasted = int8(value); require(downcasted == value, "SafeCast: value doesn't fit in 8 bits"); } /** * @dev Converts an unsigned uint256 into a signed int256. * * Requirements: * * - input must be less than or equal to maxInt256. * * _Available since v3.0._ */ function toInt256(uint256 value) internal pure returns (int256) { // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256"); return int256(value); } }
{ "metadata": { "bytecodeHash": "none" }, "viaIR": true, "optimizer": { "enabled": true, "runs": 3000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_timelockAddress","type":"address"},{"internalType":"uint256","name":"_emaMin","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"FeedPriceNegative","type":"error"},{"inputs":[],"name":"OnlyPendingTimelock","type":"error"},{"inputs":[],"name":"OnlyTimelock","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldMinimum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newMinimum","type":"uint256"}],"name":"SetEmaMinimum","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":"acceptTransferTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"chainlinkFeed","outputs":[{"internalType":"contract AggregatorV3Interface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"chainlinkFeedDecimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emaMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emaMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emaPrecision","outputs":[{"internalType":"uint256","name":"","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":"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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingTimelockAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pool","outputs":[{"internalType":"contract IFrxEthStableSwap","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceTimelock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPrice","type":"uint256"}],"name":"setEmaMin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staker","outputs":[{"internalType":"contract ISfrxEth","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingPricePrecision","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60e08060405234620002ba57604081620010948038038091620000238285620002bf565b833981010312620002ba5780516001600160a01b039182821691829003620002ba576020809101519160018060a01b03196001923382855416178455670de0b6b3a76400008060a05260c0526200007c600354620002f9565b601f811162000285575b5060496003556000906003825263756e647360e01b858284207f73667278455448202f205553442076322077697468206d696e2f6d617820626f81550155620000d1600454620002f9565b601f811162000253575b5060b9600455600482527f626f756e6473202b20455243343632362073686172655072696365290000000060028284207f5374616b65642046726178204574686572202855534429204f7261636c65207681557f322028436861696e6c696e6b202b20454d412077697468206d696e2f6d61782088820155015560405163313ce56760e01b81528181600481735f4ec3df9cbd43714fe2740f5e3616155c5b84195afa9182156200024857839262000205575b5050608052828454917f31b6c5a04b069b6ec1b3cef44c4e7c1eadd721349cda9823d0b1877b3551cdc66040519884169180a316179055600255610d5d908162000337823960805181818161026b01526105f8015260a0518181816102b70152610730015260c0518181816101c401526105bb0152f35b90809250813d831162000240575b6200021f8183620002bf565b810103126200023c575160ff811681036200023c5738806200018e565b5080fd5b503d62000213565b6040513d85823e3d90fd5b60048352856003601f848620930160051c830192015b82811062000279575050620000db565b84815501869062000269565b600060038152856002601f858420940160051c840193015b838110620002ae5750505062000086565b8281550186906200029d565b600080fd5b601f909101601f19168101906001600160401b03821190821017620002e357604052565b634e487b7160e01b600052604160045260246000fd5b90600182811c921680156200032b575b60208310146200031557565b634e487b7160e01b600052602260045260246000fd5b91607f16916200030956fe608060409080825260048036101561001657600080fd5b600091823560e01c90816306d6d98014610bb85750806306fdde0314610ac3578063090f3f5014610a9057806316f0115b14610a61578063313ce56714610a4557806345014095146109b85780634bc66f32146109835780634f8b4ae7146108cf57806354fd4d50146108b35780635ebaf1db146108845780637284e416146107825780637dbdf1f514610753578063843099d11461071857806396a76e60146106c35780639a6fc8f51461063f578063de6f60fe1461061c578063dfe76afd146105de578063f18589b2146105a3578063f6ccaad4146105175763feaf968c1461010057600080fd5b3461047057816003193601126104705782517ffeaf968c00000000000000000000000000000000000000000000000000000000815260a0818381735f4ec3df9cbd43714fe2740f5e3616155c5b84195afa90811561050d57839284908591869387956104ad575b50868112610485578751967f86fc88d30000000000000000000000000000000000000000000000000000000088526020978881858173a1f8a6807c402e4a15ef4eba36528a3fed24e5775afa90811561047b57829161044a575b507f0000000000000000000000000000000000000000000000000000000000000000908181111561044357505b600254908181101561043c57505b8951907f99530b060000000000000000000000000000000000000000000000000000000082528982868173ac3e018457b222d93114458476f3e3416abbe38f5afa9182156104325783926103ff575b50670de0b6b3a764000093848102908082048614901517156103ec5760ff7f000000000000000000000000000000000000000000000000000000000000000016604d81116103d957916102a96102af926102b49594600a0a90610d30565b92610d07565b610d07565b907f00000000000000000000000000000000000000000000000000000000000000008381029381850414901517156103c65750906102f191610d30565b907f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821161034457509560a09681519669ffffffffffffffffffff80971688528701528501526060840152166080820152f35b608490878951917f08c379a0000000000000000000000000000000000000000000000000000000008352820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e206160448201527f6e20696e743235360000000000000000000000000000000000000000000000006064820152fd5b80601185634e487b7160e01b6024945252fd5b602485601189634e487b7160e01b835252fd5b602484601188634e487b7160e01b835252fd5b9091508981813d831161042b575b6104178183610bd4565b810103126104275751903861024b565b8280fd5b503d61040d565b8b513d85823e3d90fd5b90506101fc565b90506101ee565b90508881813d8311610474575b6104618183610bd4565b810103126104705751386101c1565b5080fd5b503d610457565b8a513d84823e3d90fd5b5086517f46f938e4000000000000000000000000000000000000000000000000000000008152fd5b9550509250505060a0823d8211610505575b816104cc60a09383610bd4565b81010312610427576104dd82610ceb565b60208301519285810151926104f9608060608401519301610ceb565b92949391929338610167565b3d91506104bf565b84513d85823e3d90fd5b82346105a057806003193601126105a057610530610ca0565b7fffffffffffffffffffffffff0000000000000000000000000000000000000000808254168255600154903373ffffffffffffffffffffffffffffffffffffffff83167f31b6c5a04b069b6ec1b3cef44c4e7c1eadd721349cda9823d0b1877b3551cdc68580a316331760015580f35b80fd5b828434610470578160031936011261047057602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b8284346104705781600319360112610470576020905160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b82843461047057816003193601126104705760209051670de0b6b3a76400008152f35b5090346105a05760206003193601126105a057813569ffffffffffffffffffff8116036105a05750602060649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601c60248201527f676574526f756e6444617461206e6f7420696d706c656d656e746564000000006044820152fd5b50829034610427576020600319360112610427577f4787a87c19444cb6f1498cf1ecc607e9ada6b1b83d09a18cfa397b5b817957ca903591610703610c55565b6002548151908152836020820152a160025580f35b828434610470578160031936011261047057602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b82843461047057816003193601126104705760209051735f4ec3df9cbd43714fe2740f5e3616155c5b84198152f35b508234610427578260031936011261042757805191836003549060019082821c92828116801561087a575b6020958686108214610867575084885290811561084557506001146107ec575b6107e886866107de828b0383610bd4565b5191829182610c0d565b0390f35b929550600383527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b82841061083257505050826107e8946107de9282010194866107cd565b8054868501880152928601928101610815565b60ff191687860152505050151560051b83010192506107de826107e8866107cd565b836022602492634e487b7160e01b835252fd5b93607f16936107ad565b8284346104705781600319360112610470576020905173ac3e018457b222d93114458476f3e3416abbe38f8152f35b5082346104275782600319360112610427576020925051908152f35b82346105a057806003193601126105a0576108e8610c55565b6108f0610ca0565b7fffffffffffffffffffffffff00000000000000000000000000000000000000008082541682556001548273ffffffffffffffffffffffffffffffffffffffff821681817f162998b90abc2507f3953aa797827b03a14c42dbd9a35f09feaf02e0d592773a8280a37f31b6c5a04b069b6ec1b3cef44c4e7c1eadd721349cda9823d0b1877b3551cdc68280a31660015580f35b82843461047057816003193601126104705760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b5034610470576020600319360112610470573573ffffffffffffffffffffffffffffffffffffffff808216809203610427576109f2610c55565b817fffffffffffffffffffffffff0000000000000000000000000000000000000000845416178355600154167f162998b90abc2507f3953aa797827b03a14c42dbd9a35f09feaf02e0d592773a8380a380f35b8284346104705781600319360112610470576020905160128152f35b8284346104705781600319360112610470576020905173a1f8a6807c402e4a15ef4eba36528a3fed24e5778152f35b82843461047057816003193601126104705773ffffffffffffffffffffffffffffffffffffffff60209254169051908152f35b509134610470578160031936011261047057805191809380549160019083821c92828516948515610bae575b6020958686108114610b9b57858952908115610b775750600114610b1f575b6107e887876107de828c0383610bd4565b81529295507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b828410610b6457505050826107e8946107de92820101943880610b0e565b8054868501880152928601928101610b46565b60ff19168887015250505050151560051b83010192506107de826107e83880610b0e565b602484602285634e487b7160e01b835252fd5b93607f1693610aef565b8390346104705781600319360112610470576020906002548152f35b90601f601f19910116810190811067ffffffffffffffff821117610bf757604052565b634e487b7160e01b600052604160045260246000fd5b60208082528251818301819052939260005b858110610c4157505050601f19601f8460006040809697860101520116010190565b818101830151848201604001528201610c1f565b73ffffffffffffffffffffffffffffffffffffffff600154163303610c7657565b60046040517f1c0be90a000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff600054163303610cc157565b60046040517ff5c49e64000000000000000000000000000000000000000000000000000000008152fd5b519069ffffffffffffffffffff82168203610d0257565b600080fd5b81810292918115918404141715610d1a57565b634e487b7160e01b600052601160045260246000fd5b8115610d3a570490565b634e487b7160e01b600052601260045260246000fdfea164736f6c6343000811000a0000000000000000000000008412ebf45bac1b340bbe8f318b928c466c4e39ca0000000000000000000000000000000000000000000000000c7d713b49da0000
Deployed Bytecode
0x608060409080825260048036101561001657600080fd5b600091823560e01c90816306d6d98014610bb85750806306fdde0314610ac3578063090f3f5014610a9057806316f0115b14610a61578063313ce56714610a4557806345014095146109b85780634bc66f32146109835780634f8b4ae7146108cf57806354fd4d50146108b35780635ebaf1db146108845780637284e416146107825780637dbdf1f514610753578063843099d11461071857806396a76e60146106c35780639a6fc8f51461063f578063de6f60fe1461061c578063dfe76afd146105de578063f18589b2146105a3578063f6ccaad4146105175763feaf968c1461010057600080fd5b3461047057816003193601126104705782517ffeaf968c00000000000000000000000000000000000000000000000000000000815260a0818381735f4ec3df9cbd43714fe2740f5e3616155c5b84195afa90811561050d57839284908591869387956104ad575b50868112610485578751967f86fc88d30000000000000000000000000000000000000000000000000000000088526020978881858173a1f8a6807c402e4a15ef4eba36528a3fed24e5775afa90811561047b57829161044a575b507f0000000000000000000000000000000000000000000000000de0b6b3a7640000908181111561044357505b600254908181101561043c57505b8951907f99530b060000000000000000000000000000000000000000000000000000000082528982868173ac3e018457b222d93114458476f3e3416abbe38f5afa9182156104325783926103ff575b50670de0b6b3a764000093848102908082048614901517156103ec5760ff7f000000000000000000000000000000000000000000000000000000000000000816604d81116103d957916102a96102af926102b49594600a0a90610d30565b92610d07565b610d07565b907f0000000000000000000000000000000000000000000000000de0b6b3a76400008381029381850414901517156103c65750906102f191610d30565b907f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821161034457509560a09681519669ffffffffffffffffffff80971688528701528501526060840152166080820152f35b608490878951917f08c379a0000000000000000000000000000000000000000000000000000000008352820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e206160448201527f6e20696e743235360000000000000000000000000000000000000000000000006064820152fd5b80601185634e487b7160e01b6024945252fd5b602485601189634e487b7160e01b835252fd5b602484601188634e487b7160e01b835252fd5b9091508981813d831161042b575b6104178183610bd4565b810103126104275751903861024b565b8280fd5b503d61040d565b8b513d85823e3d90fd5b90506101fc565b90506101ee565b90508881813d8311610474575b6104618183610bd4565b810103126104705751386101c1565b5080fd5b503d610457565b8a513d84823e3d90fd5b5086517f46f938e4000000000000000000000000000000000000000000000000000000008152fd5b9550509250505060a0823d8211610505575b816104cc60a09383610bd4565b81010312610427576104dd82610ceb565b60208301519285810151926104f9608060608401519301610ceb565b92949391929338610167565b3d91506104bf565b84513d85823e3d90fd5b82346105a057806003193601126105a057610530610ca0565b7fffffffffffffffffffffffff0000000000000000000000000000000000000000808254168255600154903373ffffffffffffffffffffffffffffffffffffffff83167f31b6c5a04b069b6ec1b3cef44c4e7c1eadd721349cda9823d0b1877b3551cdc68580a316331760015580f35b80fd5b828434610470578160031936011261047057602090517f0000000000000000000000000000000000000000000000000de0b6b3a76400008152f35b8284346104705781600319360112610470576020905160ff7f0000000000000000000000000000000000000000000000000000000000000008168152f35b82843461047057816003193601126104705760209051670de0b6b3a76400008152f35b5090346105a05760206003193601126105a057813569ffffffffffffffffffff8116036105a05750602060649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601c60248201527f676574526f756e6444617461206e6f7420696d706c656d656e746564000000006044820152fd5b50829034610427576020600319360112610427577f4787a87c19444cb6f1498cf1ecc607e9ada6b1b83d09a18cfa397b5b817957ca903591610703610c55565b6002548151908152836020820152a160025580f35b828434610470578160031936011261047057602090517f0000000000000000000000000000000000000000000000000de0b6b3a76400008152f35b82843461047057816003193601126104705760209051735f4ec3df9cbd43714fe2740f5e3616155c5b84198152f35b508234610427578260031936011261042757805191836003549060019082821c92828116801561087a575b6020958686108214610867575084885290811561084557506001146107ec575b6107e886866107de828b0383610bd4565b5191829182610c0d565b0390f35b929550600383527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b82841061083257505050826107e8946107de9282010194866107cd565b8054868501880152928601928101610815565b60ff191687860152505050151560051b83010192506107de826107e8866107cd565b836022602492634e487b7160e01b835252fd5b93607f16936107ad565b8284346104705781600319360112610470576020905173ac3e018457b222d93114458476f3e3416abbe38f8152f35b5082346104275782600319360112610427576020925051908152f35b82346105a057806003193601126105a0576108e8610c55565b6108f0610ca0565b7fffffffffffffffffffffffff00000000000000000000000000000000000000008082541682556001548273ffffffffffffffffffffffffffffffffffffffff821681817f162998b90abc2507f3953aa797827b03a14c42dbd9a35f09feaf02e0d592773a8280a37f31b6c5a04b069b6ec1b3cef44c4e7c1eadd721349cda9823d0b1877b3551cdc68280a31660015580f35b82843461047057816003193601126104705760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b5034610470576020600319360112610470573573ffffffffffffffffffffffffffffffffffffffff808216809203610427576109f2610c55565b817fffffffffffffffffffffffff0000000000000000000000000000000000000000845416178355600154167f162998b90abc2507f3953aa797827b03a14c42dbd9a35f09feaf02e0d592773a8380a380f35b8284346104705781600319360112610470576020905160128152f35b8284346104705781600319360112610470576020905173a1f8a6807c402e4a15ef4eba36528a3fed24e5778152f35b82843461047057816003193601126104705773ffffffffffffffffffffffffffffffffffffffff60209254169051908152f35b509134610470578160031936011261047057805191809380549160019083821c92828516948515610bae575b6020958686108114610b9b57858952908115610b775750600114610b1f575b6107e887876107de828c0383610bd4565b81529295507f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b5b828410610b6457505050826107e8946107de92820101943880610b0e565b8054868501880152928601928101610b46565b60ff19168887015250505050151560051b83010192506107de826107e83880610b0e565b602484602285634e487b7160e01b835252fd5b93607f1693610aef565b8390346104705781600319360112610470576020906002548152f35b90601f601f19910116810190811067ffffffffffffffff821117610bf757604052565b634e487b7160e01b600052604160045260246000fd5b60208082528251818301819052939260005b858110610c4157505050601f19601f8460006040809697860101520116010190565b818101830151848201604001528201610c1f565b73ffffffffffffffffffffffffffffffffffffffff600154163303610c7657565b60046040517f1c0be90a000000000000000000000000000000000000000000000000000000008152fd5b73ffffffffffffffffffffffffffffffffffffffff600054163303610cc157565b60046040517ff5c49e64000000000000000000000000000000000000000000000000000000008152fd5b519069ffffffffffffffffffff82168203610d0257565b600080fd5b81810292918115918404141715610d1a57565b634e487b7160e01b600052601160045260246000fd5b8115610d3a570490565b634e487b7160e01b600052601260045260246000fdfea164736f6c6343000811000a
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000008412ebf45bac1b340bbe8f318b928c466c4e39ca0000000000000000000000000000000000000000000000000c7d713b49da0000
-----Decoded View---------------
Arg [0] : _timelockAddress (address): 0x8412ebf45bAC1B340BbE8F318b928C466c4E39CA
Arg [1] : _emaMin (uint256): 900000000000000000
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000008412ebf45bac1b340bbe8f318b928c466c4e39ca
Arg [1] : 0000000000000000000000000000000000000000000000000c7d713b49da0000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 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.