Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
OracleCBETHEURChainlink
Compiler Version
v0.8.12+commit.f00d7308
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.12; import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; import "../../BaseOracleChainlinkMultiTwoFeeds.sol"; /// @title OracleCBETHEURChainlink /// @author Angle Labs, Inc. /// @notice Gives the price of cbETH in Euro in base 18 contract OracleCBETHEURChainlink is BaseOracleChainlinkMultiTwoFeeds { string public constant DESCRIPTION = "cbETH/EUR Oracle"; constructor(uint32 _stalePeriod, address _treasury) BaseOracleChainlinkMultiTwoFeeds(_stalePeriod, _treasury) {} /// @inheritdoc IOracle function circuitChainlink() public pure override returns (AggregatorV3Interface[] memory) { AggregatorV3Interface[] memory _circuitChainlink = new AggregatorV3Interface[](3); // Oracle cbETH/ETH _circuitChainlink[0] = AggregatorV3Interface(0xF017fcB346A1885194689bA23Eff2fE6fA5C483b); // Oracle ETH/USD _circuitChainlink[1] = AggregatorV3Interface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419); // Oracle EUR/USD _circuitChainlink[2] = AggregatorV3Interface(0xb49f677943BC038e9857d61E7d053CaA2C1734C1); return _circuitChainlink; } /// @inheritdoc BaseOracleChainlinkMultiTwoFeeds function read() external view virtual override returns (uint256 quoteAmount) { quoteAmount = _getQuoteAmount(); AggregatorV3Interface[] memory _circuitChainlink = circuitChainlink(); uint8[3] memory circuitChainIsMultiplied = [1, 1, 0]; uint8[3] memory chainlinkDecimals = [18, 8, 8]; uint256 circuitLength = _circuitChainlink.length; for (uint256 i; i < circuitLength; ++i) { quoteAmount = _readChainlinkFeed( quoteAmount, _circuitChainlink[i], circuitChainIsMultiplied[i], chainlinkDecimals[i] ); } } }
// 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 ); // getRoundData and latestRoundData should both raise "No data present" // if they do not have data to report, instead of returning unset values // which could be misinterpreted as actual reported values. function getRoundData( uint80 _roundId ) external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); function latestRoundData() external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20Upgradeable { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); }
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.12; import "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; /// @title IAgToken /// @author Angle Labs, Inc. /// @notice Interface for the stablecoins `AgToken` contracts /// @dev This interface only contains functions of the `AgToken` contract which are called by other contracts /// of this module or of the first module of the Angle Protocol interface IAgToken is IERC20Upgradeable { // ======================= Minter Role Only Functions =========================== /// @notice Lets the `StableMaster` contract or another whitelisted contract mint agTokens /// @param account Address to mint to /// @param amount Amount to mint /// @dev The contracts allowed to issue agTokens are the `StableMaster` contract, `VaultManager` contracts /// associated to this stablecoin as well as the flash loan module (if activated) and potentially contracts /// whitelisted by governance function mint(address account, uint256 amount) external; /// @notice Burns `amount` tokens from a `burner` address after being asked to by `sender` /// @param amount Amount of tokens to burn /// @param burner Address to burn from /// @param sender Address which requested the burn from `burner` /// @dev This method is to be called by a contract with the minter right after being requested /// to do so by a `sender` address willing to burn tokens from another `burner` address /// @dev The method checks the allowance between the `sender` and the `burner` function burnFrom( uint256 amount, address burner, address sender ) external; /// @notice Burns `amount` tokens from a `burner` address /// @param amount Amount of tokens to burn /// @param burner Address to burn from /// @dev This method is to be called by a contract with a minter right on the AgToken after being /// requested to do so by an address willing to burn tokens from its address function burnSelf(uint256 amount, address burner) external; // ========================= Treasury Only Functions =========================== /// @notice Adds a minter in the contract /// @param minter Minter address to add /// @dev Zero address checks are performed directly in the `Treasury` contract function addMinter(address minter) external; /// @notice Removes a minter from the contract /// @param minter Minter address to remove /// @dev This function can also be called by a minter wishing to revoke itself function removeMinter(address minter) external; /// @notice Sets a new treasury contract /// @param _treasury New treasury address function setTreasury(address _treasury) external; // ========================= External functions ================================ /// @notice Checks whether an address has the right to mint agTokens /// @param minter Address for which the minting right should be checked /// @return Whether the address has the right to mint agTokens or not function isMinter(address minter) external view returns (bool); }
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.12; /// @title ICoreBorrow /// @author Angle Labs, Inc. /// @notice Interface for the `CoreBorrow` contract /// @dev This interface only contains functions of the `CoreBorrow` contract which are called by other contracts /// of this module interface ICoreBorrow { /// @notice Checks if an address corresponds to a treasury of a stablecoin with a flash loan /// module initialized on it /// @param treasury Address to check /// @return Whether the address has the `FLASHLOANER_TREASURY_ROLE` or not function isFlashLoanerTreasury(address treasury) external view returns (bool); /// @notice Checks whether an address is governor of the Angle Protocol or not /// @param admin Address to check /// @return Whether the address has the `GOVERNOR_ROLE` or not function isGovernor(address admin) external view returns (bool); /// @notice Checks whether an address is governor or a guardian of the Angle Protocol or not /// @param admin Address to check /// @return Whether the address has the `GUARDIAN_ROLE` or not /// @dev Governance should make sure when adding a governor to also give this governor the guardian /// role by calling the `addGovernor` function function isGovernorOrGuardian(address admin) external view returns (bool); }
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.12; import "./IAgToken.sol"; import "./ICoreBorrow.sol"; /// @title IFlashAngle /// @author Angle Labs, Inc. /// @notice Interface for the `FlashAngle` contract /// @dev This interface only contains functions of the contract which are called by other contracts /// of this module interface IFlashAngle { /// @notice Reference to the `CoreBorrow` contract managing the FlashLoan module function core() external view returns (ICoreBorrow); /// @notice Sends the fees taken from flash loans to the treasury contract associated to the stablecoin /// @param stablecoin Stablecoin from which profits should be sent /// @return balance Amount of profits sent /// @dev This function can only be called by the treasury contract function accrueInterestToTreasury(IAgToken stablecoin) external returns (uint256 balance); /// @notice Adds support for a stablecoin /// @param _treasury Treasury associated to the stablecoin to add support for /// @dev This function can only be called by the `CoreBorrow` contract function addStablecoinSupport(address _treasury) external; /// @notice Removes support for a stablecoin /// @param _treasury Treasury associated to the stablecoin to remove support for /// @dev This function can only be called by the `CoreBorrow` contract function removeStablecoinSupport(address _treasury) external; /// @notice Sets a new core contract /// @param _core Core contract address to set /// @dev This function can only be called by the `CoreBorrow` contract function setCore(address _core) external; }
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.12; import "./ITreasury.sol"; import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; /// @title IOracle /// @author Angle Labs, Inc. /// @notice Interface for the `Oracle` contract /// @dev This interface only contains functions of the contract which are called by other contracts /// of this module interface IOracle { /// @notice Reads the rate from the Chainlink circuit and other data provided /// @return quoteAmount The current rate between the in-currency and out-currency in the base /// of the out currency /// @dev For instance if the out currency is EUR (and hence agEUR), then the base of the returned /// value is 10**18 function read() external view returns (uint256); /// @notice Changes the treasury contract /// @param _treasury Address of the new treasury contract /// @dev This function can be called by an approved `VaultManager` contract which can call /// this function after being requested to do so by a `treasury` contract /// @dev In some situations (like reactor contracts), the `VaultManager` may not directly be linked /// to the `oracle` contract and as such we may need governors to be able to call this function as well function setTreasury(address _treasury) external; /// @notice Reference to the `treasury` contract handling this `VaultManager` function treasury() external view returns (ITreasury treasury); /// @notice Array with the list of Chainlink feeds in the order in which they are read function circuitChainlink() external view returns (AggregatorV3Interface[] memory); }
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.12; import "./IAgToken.sol"; import "./ICoreBorrow.sol"; import "./IFlashAngle.sol"; /// @title ITreasury /// @author Angle Labs, Inc. /// @notice Interface for the `Treasury` contract /// @dev This interface only contains functions of the `Treasury` which are called by other contracts /// of this module interface ITreasury { /// @notice Stablecoin handled by this `treasury` contract function stablecoin() external view returns (IAgToken); /// @notice Checks whether a given address has the governor role /// @param admin Address to check /// @return Whether the address has the governor role /// @dev Access control is only kept in the `CoreBorrow` contract function isGovernor(address admin) external view returns (bool); /// @notice Checks whether a given address has the guardian or the governor role /// @param admin Address to check /// @return Whether the address has the guardian or the governor role /// @dev Access control is only kept in the `CoreBorrow` contract which means that this function /// queries the `CoreBorrow` contract function isGovernorOrGuardian(address admin) external view returns (bool); /// @notice Checks whether a given address has well been initialized in this contract /// as a `VaultManager` /// @param _vaultManager Address to check /// @return Whether the address has been initialized or not function isVaultManager(address _vaultManager) external view returns (bool); /// @notice Sets a new flash loan module for this stablecoin /// @param _flashLoanModule Reference to the new flash loan module /// @dev This function removes the minting right to the old flash loan module and grants /// it to the new module function setFlashLoanModule(address _flashLoanModule) external; }
// SPDX-License-Identifier: GPL-3.0 /* * █ ***** ▓▓▓ * ▓▓▓▓▓▓▓ * ///. ▓▓▓▓▓▓▓▓▓▓▓▓▓ ***** //////// ▓▓▓▓▓▓▓ * ///////////// ▓▓▓ ▓▓ ////////////////// █ ▓▓ ▓▓ ▓▓ /////////////////////// ▓▓ ▓▓ ▓▓ ▓▓ //////////////////////////// ▓▓ ▓▓ ▓▓ ▓▓ /////////▓▓▓///////▓▓▓///////// ▓▓ ▓▓ ▓▓ ,////////////////////////////////////// ▓▓ ▓▓ ▓▓ ////////////////////////////////////////// ▓▓ ▓▓ //////////////////////▓▓▓▓///////////////////// ,//////////////////////////////////////////////////// .////////////////////////////////////////////////////////// .//////////////////////////██.,//////////////////////////█ .//////////////////////████..,./////////////////////██ ...////////////////███████.....,.////////////////███ ,.,////////////████████ ........,///////////████ .,.,//////█████████ ,.......///////████ ,..//████████ ........./████ ..,██████ .....,███ .██ ,.,█ ▓▓ ▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓ ▓▓ ▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓ ▓▓▓ ▓▓▓ ▓▓▓ ▓▓ ▓▓ ▓▓▓▓ ▓▓▓ ▓▓▓ ▓▓▓ ▓▓▓ ▓▓▓ ▓▓▓ ▓▓ ▓▓▓▓▓ ▓▓▓ ▓▓ ▓▓▓ ▓▓▓ ▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓ */ pragma solidity ^0.8.12; import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; import "../interfaces/IOracle.sol"; import "../interfaces/ITreasury.sol"; /// @title BaseOracleChainlinkMulti /// @author Angle Labs, Inc. /// @notice Base Contract to be overriden by all contracts of the protocol /// @dev This base contract concerns an oracle that uses Chainlink with multiple pools to read from /// @dev All gas-efficient implementation of the `OracleChainlinkMulti` contract should inherit from this abstract contract BaseOracleChainlinkMulti is IOracle { // ========================= Parameters and References ========================= /// @inheritdoc IOracle ITreasury public override treasury; /// @notice Represent the maximum amount of time (in seconds) between each Chainlink update /// before the price feed is considered stale uint32 public stalePeriod; // =================================== Event =================================== event StalePeriodUpdated(uint32 _stalePeriod); // =================================== Errors =================================== error InvalidChainlinkRate(); error NotGovernorOrGuardian(); error NotVaultManagerOrGovernor(); /// @notice Constructor for an oracle using Chainlink with multiple pools to read from /// @param _stalePeriod Minimum feed update frequency for the oracle to not revert /// @param _treasury Treasury associated to the VaultManager which reads from this feed constructor(uint32 _stalePeriod, address _treasury) { stalePeriod = _stalePeriod; treasury = ITreasury(_treasury); } // ============================= Reading Oracles =============================== /// @inheritdoc IOracle function read() external view virtual override returns (uint256 quoteAmount); /// @inheritdoc IOracle function circuitChainlink() public view virtual returns (AggregatorV3Interface[] memory); /// @notice Reads a Chainlink feed using a quote amount and converts the quote amount to /// the out-currency /// @param quoteAmount The amount for which to compute the price expressed with base decimal /// @param feed Chainlink feed to query /// @param multiplied Whether the ratio outputted by Chainlink should be multiplied or divided /// to the `quoteAmount` /// @param decimals Number of decimals of the corresponding Chainlink pair /// @return The `quoteAmount` converted in out-currency function _readChainlinkFeed( uint256 quoteAmount, AggregatorV3Interface feed, uint8 multiplied, uint256 decimals ) internal view returns (uint256) { (uint80 roundId, int256 ratio, , uint256 updatedAt, uint80 answeredInRound) = feed.latestRoundData(); if (ratio <= 0 || roundId > answeredInRound || block.timestamp - updatedAt > stalePeriod) revert InvalidChainlinkRate(); uint256 castedRatio = uint256(ratio); // Checking whether we should multiply or divide by the ratio computed if (multiplied == 1) return (quoteAmount * castedRatio) / (10**decimals); else return (quoteAmount * (10**decimals)) / castedRatio; } // ======================= Governance Related Functions ======================== /// @notice Changes the stale period /// @param _stalePeriod New stale period (in seconds) function changeStalePeriod(uint32 _stalePeriod) external { if (!treasury.isGovernorOrGuardian(msg.sender)) revert NotGovernorOrGuardian(); stalePeriod = _stalePeriod; emit StalePeriodUpdated(_stalePeriod); } /// @inheritdoc IOracle function setTreasury(address _treasury) external override { if (!treasury.isVaultManager(msg.sender) && !treasury.isGovernor(msg.sender)) revert NotVaultManagerOrGovernor(); treasury = ITreasury(_treasury); } }
// SPDX-License-Identifier: GPL-3.0 pragma solidity ^0.8.12; import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; import "./BaseOracleChainlinkMulti.sol"; /// @title BaseOracleChainlinkMultiTwoFeeds /// @author Angle Labs, Inc. /// @notice Base contract for an oracle that reads into two Chainlink feeds (including an EUR/USD feed) which both have /// 8 decimals abstract contract BaseOracleChainlinkMultiTwoFeeds is BaseOracleChainlinkMulti { constructor(uint32 _stalePeriod, address _treasury) BaseOracleChainlinkMulti(_stalePeriod, _treasury) {} /// @notice Returns the quote amount of the oracle contract function _getQuoteAmount() internal view virtual returns (uint256) { return 10**18; } /// @inheritdoc IOracle function read() external view virtual override returns (uint256 quoteAmount) { quoteAmount = _getQuoteAmount(); AggregatorV3Interface[] memory _circuitChainlink = circuitChainlink(); uint8[2] memory circuitChainIsMultiplied = [1, 0]; uint8[2] memory chainlinkDecimals = [8, 8]; uint256 circuitLength = _circuitChainlink.length; for (uint256 i; i < circuitLength; ++i) { quoteAmount = _readChainlinkFeed( quoteAmount, _circuitChainlink[i], circuitChainIsMultiplied[i], chainlinkDecimals[i] ); } } }
{ "evmVersion": "london", "libraries": {}, "metadata": { "bytecodeHash": "ipfs", "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 1000000 }, "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint32","name":"_stalePeriod","type":"uint32"},{"internalType":"address","name":"_treasury","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidChainlinkRate","type":"error"},{"inputs":[],"name":"NotGovernorOrGuardian","type":"error"},{"inputs":[],"name":"NotVaultManagerOrGovernor","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"_stalePeriod","type":"uint32"}],"name":"StalePeriodUpdated","type":"event"},{"inputs":[],"name":"DESCRIPTION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_stalePeriod","type":"uint32"}],"name":"changeStalePeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"circuitChainlink","outputs":[{"internalType":"contract AggregatorV3Interface[]","name":"","type":"address[]"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"read","outputs":[{"internalType":"uint256","name":"quoteAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_treasury","type":"address"}],"name":"setTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stalePeriod","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasury","outputs":[{"internalType":"contract ITreasury","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50604051610d28380380610d2883398101604081905261002f91610071565b600080546001600160c01b031916600160a01b63ffffffff94909416939093026001600160a01b031916929092176001600160a01b03919091161790556100c0565b6000806040838503121561008457600080fd5b825163ffffffff8116811461009857600080fd5b60208401519092506001600160a01b03811681146100b557600080fd5b809150509250929050565b610c59806100cf6000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063630914d11161005b578063630914d1146100fb578063a5b36a3614610110578063f0f442601461014d578063f1ae88561461016057600080fd5b80634994cc671461008257806357de26a4146100a057806361d027b3146100b6575b600080fd5b61008a6101a9565b604051610097919061080e565b60405180910390f35b6100a86102e5565b604051908152602001610097565b6000546100d69073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610097565b61010e610109366004610868565b6103b0565b005b6000546101389074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610097565b61010e61015b366004610895565b6104fb565b61019c6040518060400160405280601081526020017f63624554482f455552204f7261636c650000000000000000000000000000000081525081565b60405161009791906108cb565b604080516003808252608082019092526060916000919060208201848036833701905050905073f017fcb346a1885194689ba23eff2fe6fa5c483b816000815181106101f7576101f761093e565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050735f4ec3df9cbd43714fe2740f5e3616155c5b8419816001815181106102595761025961093e565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073b49f677943bc038e9857d61e7d053caa2c1734c1816002815181106102bb576102bb61093e565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152919050565b670de0b6b3a764000060006102f86101a9565b60408051606080820183526001808352602080840191909152600083850181905284519283018552601283526008918301829052938201528351939450909290915b818110156103a857610396868683815181106103585761035861093e565b60200260200101518684600381106103725761037261093e565b60200201518685600381106103895761038961093e565b602002015160ff166106a7565b95506103a18161099c565b905061033a565b505050505090565b6000546040517f521d4de900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063521d4de990602401602060405180830381865afa15801561041e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044291906109d5565b610478576040517f99e120bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000063ffffffff8416908102919091179091556040519081527f4040b15332969bfd8b2035c1a701c8e13f2b5d62ce89b311684a601b2eb44e019060200160405180910390a150565b6000546040517f676a553e00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063676a553e90602401602060405180830381865afa158015610569573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058d91906109d5565b15801561062957506000546040517fe43581b800000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e43581b890602401602060405180830381865afa158015610603573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062791906109d5565b155b15610660576040517fb05b9b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60008060008060008773ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156106fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071e9190610a16565b94509450509350935060008313158061074e57508069ffffffffffffffffffff168469ffffffffffffffffffff16115b80610781575060005474010000000000000000000000000000000000000000900463ffffffff1661077f8342610a66565b115b156107b8576040517fae19356300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600160ff891614156107f0576107d087600a610b9f565b6107da828c610bab565b6107e49190610be8565b95505050505050610806565b806107fc88600a610b9f565b6107da908c610bab565b949350505050565b6020808252825182820181905260009190848201906040850190845b8181101561085c57835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010161082a565b50909695505050505050565b60006020828403121561087a57600080fd5b813563ffffffff8116811461088e57600080fd5b9392505050565b6000602082840312156108a757600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461088e57600080fd5b600060208083528351808285015260005b818110156108f8578581018301518582016040015282016108dc565b8181111561090a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156109ce576109ce61096d565b5060010190565b6000602082840312156109e757600080fd5b8151801515811461088e57600080fd5b805169ffffffffffffffffffff81168114610a1157600080fd5b919050565b600080600080600060a08688031215610a2e57600080fd5b610a37866109f7565b9450602086015193506040860151925060608601519150610a5a608087016109f7565b90509295509295909350565b600082821015610a7857610a7861096d565b500390565b600181815b80851115610ad657817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610abc57610abc61096d565b80851615610ac957918102915b93841c9390800290610a82565b509250929050565b600082610aed57506001610b99565b81610afa57506000610b99565b8160018114610b105760028114610b1a57610b36565b6001915050610b99565b60ff841115610b2b57610b2b61096d565b50506001821b610b99565b5060208310610133831016604e8410600b8410161715610b59575081810a610b99565b610b638383610a7d565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610b9557610b9561096d565b0290505b92915050565b600061088e8383610ade565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610be357610be361096d565b500290565b600082610c1e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220ff67ce7e99fc2c5d33a8a5940d82ac2cbd44b8ff4c2f60dcf74322571bbf605564736f6c634300080c0033000000000000000000000000000000000000000000000000000000000002a3000000000000000000000000008667dbebf68b0bfa6db54f550f41be16c4067d60
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063630914d11161005b578063630914d1146100fb578063a5b36a3614610110578063f0f442601461014d578063f1ae88561461016057600080fd5b80634994cc671461008257806357de26a4146100a057806361d027b3146100b6575b600080fd5b61008a6101a9565b604051610097919061080e565b60405180910390f35b6100a86102e5565b604051908152602001610097565b6000546100d69073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610097565b61010e610109366004610868565b6103b0565b005b6000546101389074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610097565b61010e61015b366004610895565b6104fb565b61019c6040518060400160405280601081526020017f63624554482f455552204f7261636c650000000000000000000000000000000081525081565b60405161009791906108cb565b604080516003808252608082019092526060916000919060208201848036833701905050905073f017fcb346a1885194689ba23eff2fe6fa5c483b816000815181106101f7576101f761093e565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050735f4ec3df9cbd43714fe2740f5e3616155c5b8419816001815181106102595761025961093e565b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073b49f677943bc038e9857d61e7d053caa2c1734c1816002815181106102bb576102bb61093e565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152919050565b670de0b6b3a764000060006102f86101a9565b60408051606080820183526001808352602080840191909152600083850181905284519283018552601283526008918301829052938201528351939450909290915b818110156103a857610396868683815181106103585761035861093e565b60200260200101518684600381106103725761037261093e565b60200201518685600381106103895761038961093e565b602002015160ff166106a7565b95506103a18161099c565b905061033a565b505050505090565b6000546040517f521d4de900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063521d4de990602401602060405180830381865afa15801561041e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044291906109d5565b610478576040517f99e120bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000063ffffffff8416908102919091179091556040519081527f4040b15332969bfd8b2035c1a701c8e13f2b5d62ce89b311684a601b2eb44e019060200160405180910390a150565b6000546040517f676a553e00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063676a553e90602401602060405180830381865afa158015610569573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061058d91906109d5565b15801561062957506000546040517fe43581b800000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e43581b890602401602060405180830381865afa158015610603573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062791906109d5565b155b15610660576040517fb05b9b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60008060008060008773ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156106fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071e9190610a16565b94509450509350935060008313158061074e57508069ffffffffffffffffffff168469ffffffffffffffffffff16115b80610781575060005474010000000000000000000000000000000000000000900463ffffffff1661077f8342610a66565b115b156107b8576040517fae19356300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600160ff891614156107f0576107d087600a610b9f565b6107da828c610bab565b6107e49190610be8565b95505050505050610806565b806107fc88600a610b9f565b6107da908c610bab565b949350505050565b6020808252825182820181905260009190848201906040850190845b8181101561085c57835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010161082a565b50909695505050505050565b60006020828403121561087a57600080fd5b813563ffffffff8116811461088e57600080fd5b9392505050565b6000602082840312156108a757600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461088e57600080fd5b600060208083528351808285015260005b818110156108f8578581018301518582016040015282016108dc565b8181111561090a576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156109ce576109ce61096d565b5060010190565b6000602082840312156109e757600080fd5b8151801515811461088e57600080fd5b805169ffffffffffffffffffff81168114610a1157600080fd5b919050565b600080600080600060a08688031215610a2e57600080fd5b610a37866109f7565b9450602086015193506040860151925060608601519150610a5a608087016109f7565b90509295509295909350565b600082821015610a7857610a7861096d565b500390565b600181815b80851115610ad657817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610abc57610abc61096d565b80851615610ac957918102915b93841c9390800290610a82565b509250929050565b600082610aed57506001610b99565b81610afa57506000610b99565b8160018114610b105760028114610b1a57610b36565b6001915050610b99565b60ff841115610b2b57610b2b61096d565b50506001821b610b99565b5060208310610133831016604e8410600b8410161715610b59575081810a610b99565b610b638383610a7d565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610b9557610b9561096d565b0290505b92915050565b600061088e8383610ade565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610be357610be361096d565b500290565b600082610c1e577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220ff67ce7e99fc2c5d33a8a5940d82ac2cbd44b8ff4c2f60dcf74322571bbf605564736f6c634300080c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000002a3000000000000000000000000008667dbebf68b0bfa6db54f550f41be16c4067d60
-----Decoded View---------------
Arg [0] : _stalePeriod (uint32): 172800
Arg [1] : _treasury (address): 0x8667DBEBf68B0BFa6Db54f550f41Be16c4067d60
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000000002a300
Arg [1] : 0000000000000000000000008667dbebf68b0bfa6db54f550f41be16c4067d60
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.