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:
OracleHIGHEURChainlink
Compiler Version
v0.8.17+commit.8df45f5f
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 OracleHIGHEURChainlink /// @author Angle Labs, Inc. /// @notice Gives the price of HIGH in Euro in base 18 contract OracleHIGHEURChainlink is BaseOracleChainlinkMultiTwoFeeds { string public constant DESCRIPTION = "HIGH/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[](1); // Oracle HIGH/EUR _circuitChainlink[0] = AggregatorV3Interface(0x9E8E794ad6Ecdb6d5c7eaBE059D30E907F58859b); return _circuitChainlink; } /// @inheritdoc BaseOracleChainlinkMultiTwoFeeds function read() external view override returns (uint256 quoteAmount) { quoteAmount = _readChainlinkFeed(_getQuoteAmount(), circuitChainlink()[0], 1, 8); } }
// 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); /// @notice Get the associated treasury function treasury() external view returns (address); }
// 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
608060405234801561001057600080fd5b50604051610b70380380610b7083398101604081905261002f91610071565b600080546001600160c01b031916600160a01b63ffffffff94909416939093026001600160a01b031916929092176001600160a01b03919091161790556100c0565b6000806040838503121561008457600080fd5b825163ffffffff8116811461009857600080fd5b60208401519092506001600160a01b03811681146100b557600080fd5b809150509250929050565b610aa1806100cf6000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c8063630914d11161005b578063630914d1146100fb578063a5b36a3614610110578063f0f442601461014d578063f1ae88561461016057600080fd5b80634994cc671461008257806357de26a4146100a057806361d027b3146100b6575b600080fd5b61008a6101a9565b60405161009791906106bc565b60405180910390f35b6100a8610221565b604051908152602001610097565b6000546100d69073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610097565b61010e610109366004610716565b61025f565b005b6000546101389074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610097565b61010e61015b366004610743565b6103aa565b61019c6040518060400160405280600f81526020017f484947482f455552204f7261636c65000000000000000000000000000000000081525081565b6040516100979190610779565b6040805160018082528183019092526060916000919060208083019080368337019050509050739e8e794ad6ecdb6d5c7eabe059d30e907f58859b816000815181106101f7576101f76107e5565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152919050565b600061025a670de0b6b3a76400006102376101a9565b600081518110610249576102496107e5565b602002602001015160016008610556565b905090565b6000546040517f521d4de900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063521d4de990602401602060405180830381865afa1580156102cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f19190610814565b610327576040517f99e120bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000063ffffffff8416908102919091179091556040519081527f4040b15332969bfd8b2035c1a701c8e13f2b5d62ce89b311684a601b2eb44e019060200160405180910390a150565b6000546040517f676a553e00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063676a553e90602401602060405180830381865afa158015610418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061043c9190610814565b1580156104d857506000546040517fe43581b800000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e43581b890602401602060405180830381865afa1580156104b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d69190610814565b155b1561050f576040517fb05b9b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60008060008060008773ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156105a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105cd9190610855565b9450945050935093506000831315806105fd57508069ffffffffffffffffffff168469ffffffffffffffffffff16115b80610630575060005474010000000000000000000000000000000000000000900463ffffffff1661062e83426108d4565b115b15610667576040517fae19356300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260ff881660010361069e5761067e87600a610a0d565b610688828c610a19565b6106929190610a30565b955050505050506106b4565b806106aa88600a610a0d565b610688908c610a19565b949350505050565b6020808252825182820181905260009190848201906040850190845b8181101561070a57835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016106d8565b50909695505050505050565b60006020828403121561072857600080fd5b813563ffffffff8116811461073c57600080fd5b9392505050565b60006020828403121561075557600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461073c57600080fd5b600060208083528351808285015260005b818110156107a65785810183015185820160400152820161078a565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561082657600080fd5b8151801515811461073c57600080fd5b805169ffffffffffffffffffff8116811461085057600080fd5b919050565b600080600080600060a0868803121561086d57600080fd5b61087686610836565b945060208601519350604086015192506060860151915061089960808701610836565b90509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156108e7576108e76108a5565b92915050565b600181815b8085111561094657817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561092c5761092c6108a5565b8085161561093957918102915b93841c93908002906108f2565b509250929050565b60008261095d575060016108e7565b8161096a575060006108e7565b8160018114610980576002811461098a576109a6565b60019150506108e7565b60ff84111561099b5761099b6108a5565b50506001821b6108e7565b5060208310610133831016604e8410600b84101617156109c9575081810a6108e7565b6109d383836108ed565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610a0557610a056108a5565b029392505050565b600061073c838361094e565b80820281158282048414176108e7576108e76108a5565b600082610a66577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea26469706673582212203c4ebe7f64d6ef11ac6af899de605782f2a7461272f81a2e542c09ff27ea47e464736f6c63430008110033000000000000000000000000000000000000000000000000000000000003f4800000000000000000000000008667dbebf68b0bfa6db54f550f41be16c4067d60
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061007d5760003560e01c8063630914d11161005b578063630914d1146100fb578063a5b36a3614610110578063f0f442601461014d578063f1ae88561461016057600080fd5b80634994cc671461008257806357de26a4146100a057806361d027b3146100b6575b600080fd5b61008a6101a9565b60405161009791906106bc565b60405180910390f35b6100a8610221565b604051908152602001610097565b6000546100d69073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610097565b61010e610109366004610716565b61025f565b005b6000546101389074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610097565b61010e61015b366004610743565b6103aa565b61019c6040518060400160405280600f81526020017f484947482f455552204f7261636c65000000000000000000000000000000000081525081565b6040516100979190610779565b6040805160018082528183019092526060916000919060208083019080368337019050509050739e8e794ad6ecdb6d5c7eabe059d30e907f58859b816000815181106101f7576101f76107e5565b73ffffffffffffffffffffffffffffffffffffffff90921660209283029190910190910152919050565b600061025a670de0b6b3a76400006102376101a9565b600081518110610249576102496107e5565b602002602001015160016008610556565b905090565b6000546040517f521d4de900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063521d4de990602401602060405180830381865afa1580156102cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102f19190610814565b610327576040517f99e120bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000063ffffffff8416908102919091179091556040519081527f4040b15332969bfd8b2035c1a701c8e13f2b5d62ce89b311684a601b2eb44e019060200160405180910390a150565b6000546040517f676a553e00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063676a553e90602401602060405180830381865afa158015610418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061043c9190610814565b1580156104d857506000546040517fe43581b800000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e43581b890602401602060405180830381865afa1580156104b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d69190610814565b155b1561050f576040517fb05b9b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60008060008060008773ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156105a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105cd9190610855565b9450945050935093506000831315806105fd57508069ffffffffffffffffffff168469ffffffffffffffffffff16115b80610630575060005474010000000000000000000000000000000000000000900463ffffffff1661062e83426108d4565b115b15610667576040517fae19356300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260ff881660010361069e5761067e87600a610a0d565b610688828c610a19565b6106929190610a30565b955050505050506106b4565b806106aa88600a610a0d565b610688908c610a19565b949350505050565b6020808252825182820181905260009190848201906040850190845b8181101561070a57835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016106d8565b50909695505050505050565b60006020828403121561072857600080fd5b813563ffffffff8116811461073c57600080fd5b9392505050565b60006020828403121561075557600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461073c57600080fd5b600060208083528351808285015260005b818110156107a65785810183015185820160400152820161078a565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561082657600080fd5b8151801515811461073c57600080fd5b805169ffffffffffffffffffff8116811461085057600080fd5b919050565b600080600080600060a0868803121561086d57600080fd5b61087686610836565b945060208601519350604086015192506060860151915061089960808701610836565b90509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156108e7576108e76108a5565b92915050565b600181815b8085111561094657817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561092c5761092c6108a5565b8085161561093957918102915b93841c93908002906108f2565b509250929050565b60008261095d575060016108e7565b8161096a575060006108e7565b8160018114610980576002811461098a576109a6565b60019150506108e7565b60ff84111561099b5761099b6108a5565b50506001821b6108e7565b5060208310610133831016604e8410600b84101617156109c9575081810a6108e7565b6109d383836108ed565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610a0557610a056108a5565b029392505050565b600061073c838361094e565b80820281158282048414176108e7576108e76108a5565b600082610a66577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea26469706673582212203c4ebe7f64d6ef11ac6af899de605782f2a7461272f81a2e542c09ff27ea47e464736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000003f4800000000000000000000000008667dbebf68b0bfa6db54f550f41be16c4067d60
-----Decoded View---------------
Arg [0] : _stalePeriod (uint32): 259200
Arg [1] : _treasury (address): 0x8667DBEBf68B0BFa6Db54f550f41Be16c4067d60
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000000003f480
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.