Contract 0x2Fa1255383364F6e17Be6A6aC7A56C9aCD6850a3 4

 

Contract Overview

Angle Protocol: agEUR - wBTC Oracle
Balance:
0 ETH

ETH Value:
$0.00
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x7cbd2e08acadde1df970e77536a6bba546d48e1335f47d14cea42eddce03ca420x60806040197213572022-08-08 13:45:08650 days 9 hrs agoAngle Protocol: Deployer IN  Create: OracleBTCEURChainlinkArbitrum0 ETH0.001083601322 ETH0.110994782
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xc37c6b65b83b84b27384c23613b29460938eeae2039505284410cca6742d97c9695593112023-03-13 22:16:57433 days 1 hr ago Angle Protocol: agEUR - wBTC Oracle 0xa14d53bc1f1c0f31b4aa3bd109344e5009051a840 ETH
0xc37c6b65b83b84b27384c23613b29460938eeae2039505284410cca6742d97c9695593112023-03-13 22:16:57433 days 1 hr ago Angle Protocol: agEUR - wBTC Oracle 0x6ce185860a4963106506c203335a2910413708e90 ETH
0xc37c6b65b83b84b27384c23613b29460938eeae2039505284410cca6742d97c9695593112023-03-13 22:16:57433 days 1 hr ago Angle Protocol: agEUR - wBTC Manager Angle Protocol: agEUR - wBTC Oracle0 ETH
0xd5b896a1c871605468adae86e945912a236c2e338c36703567bc966a4ba9745c695468532023-03-13 21:11:22433 days 2 hrs ago Angle Protocol: agEUR - wBTC Oracle 0xa14d53bc1f1c0f31b4aa3bd109344e5009051a840 ETH
0xd5b896a1c871605468adae86e945912a236c2e338c36703567bc966a4ba9745c695468532023-03-13 21:11:22433 days 2 hrs ago Angle Protocol: agEUR - wBTC Oracle 0x6ce185860a4963106506c203335a2910413708e90 ETH
0xd5b896a1c871605468adae86e945912a236c2e338c36703567bc966a4ba9745c695468532023-03-13 21:11:22433 days 2 hrs ago Angle Protocol: agEUR - wBTC Manager Angle Protocol: agEUR - wBTC Oracle0 ETH
0xe4eecfb6fc4a19c9707e23b5e7ce2a9047948bfe9a76b07ba43fe22044b9c2d8694889592023-03-13 16:25:05433 days 6 hrs ago Angle Protocol: agEUR - wBTC Oracle 0xa14d53bc1f1c0f31b4aa3bd109344e5009051a840 ETH
0xe4eecfb6fc4a19c9707e23b5e7ce2a9047948bfe9a76b07ba43fe22044b9c2d8694889592023-03-13 16:25:05433 days 6 hrs ago Angle Protocol: agEUR - wBTC Oracle 0x6ce185860a4963106506c203335a2910413708e90 ETH
0xe4eecfb6fc4a19c9707e23b5e7ce2a9047948bfe9a76b07ba43fe22044b9c2d8694889592023-03-13 16:25:05433 days 6 hrs ago Angle Protocol: agEUR - wBTC Manager Angle Protocol: agEUR - wBTC Oracle0 ETH
0xba98f0546925e8bbd124ddb557d52981efd46d0b3f2fccf6e78d2e8ad6e5eb2c693879802023-03-13 8:46:43433 days 14 hrs ago Angle Protocol: agEUR - wBTC Oracle 0xa14d53bc1f1c0f31b4aa3bd109344e5009051a840 ETH
0xba98f0546925e8bbd124ddb557d52981efd46d0b3f2fccf6e78d2e8ad6e5eb2c693879802023-03-13 8:46:43433 days 14 hrs ago Angle Protocol: agEUR - wBTC Oracle 0x6ce185860a4963106506c203335a2910413708e90 ETH
0xba98f0546925e8bbd124ddb557d52981efd46d0b3f2fccf6e78d2e8ad6e5eb2c693879802023-03-13 8:46:43433 days 14 hrs ago Angle Protocol: agEUR - wBTC Manager Angle Protocol: agEUR - wBTC Oracle0 ETH
0x155f008fbb3c8155560355069964d97dceccbc89bd55f626a696362c1fd07d07689497132023-03-11 21:08:38435 days 2 hrs ago Angle Protocol: agEUR - wBTC Oracle 0xa14d53bc1f1c0f31b4aa3bd109344e5009051a840 ETH
0x155f008fbb3c8155560355069964d97dceccbc89bd55f626a696362c1fd07d07689497132023-03-11 21:08:38435 days 2 hrs ago Angle Protocol: agEUR - wBTC Oracle 0x6ce185860a4963106506c203335a2910413708e90 ETH
0x155f008fbb3c8155560355069964d97dceccbc89bd55f626a696362c1fd07d07689497132023-03-11 21:08:38435 days 2 hrs ago Angle Protocol: agEUR - wBTC Manager Angle Protocol: agEUR - wBTC Oracle0 ETH
0x92f5fbe5d0eb6503127448d69cf8033da78f281304a531655cbd40df5d0584f8688679522023-03-11 14:20:22435 days 9 hrs ago Angle Protocol: agEUR - wBTC Oracle 0xa14d53bc1f1c0f31b4aa3bd109344e5009051a840 ETH
0x92f5fbe5d0eb6503127448d69cf8033da78f281304a531655cbd40df5d0584f8688679522023-03-11 14:20:22435 days 9 hrs ago Angle Protocol: agEUR - wBTC Oracle 0x6ce185860a4963106506c203335a2910413708e90 ETH
0x92f5fbe5d0eb6503127448d69cf8033da78f281304a531655cbd40df5d0584f8688679522023-03-11 14:20:22435 days 9 hrs ago Angle Protocol: agEUR - wBTC Manager Angle Protocol: agEUR - wBTC Oracle0 ETH
0x92766cd5a147bd3556c199ebede0b43798f3da9a6cbbc7ba2d6c216caa7d8ebe688324792023-03-11 11:34:29435 days 11 hrs ago Angle Protocol: agEUR - wBTC Oracle 0xa14d53bc1f1c0f31b4aa3bd109344e5009051a840 ETH
0x92766cd5a147bd3556c199ebede0b43798f3da9a6cbbc7ba2d6c216caa7d8ebe688324792023-03-11 11:34:29435 days 11 hrs ago Angle Protocol: agEUR - wBTC Oracle 0x6ce185860a4963106506c203335a2910413708e90 ETH
0x92766cd5a147bd3556c199ebede0b43798f3da9a6cbbc7ba2d6c216caa7d8ebe688324792023-03-11 11:34:29435 days 11 hrs ago Angle Protocol: agEUR - wBTC Manager Angle Protocol: agEUR - wBTC Oracle0 ETH
0xd033101ed29612ea648ab33fafc15e639b732e4cec359d1d033eb8943674976d681594542023-03-09 8:51:02437 days 14 hrs ago Angle Protocol: agEUR - wBTC Oracle 0xa14d53bc1f1c0f31b4aa3bd109344e5009051a840 ETH
0xd033101ed29612ea648ab33fafc15e639b732e4cec359d1d033eb8943674976d681594542023-03-09 8:51:02437 days 14 hrs ago Angle Protocol: agEUR - wBTC Oracle 0x6ce185860a4963106506c203335a2910413708e90 ETH
0xd033101ed29612ea648ab33fafc15e639b732e4cec359d1d033eb8943674976d681594542023-03-09 8:51:02437 days 14 hrs ago Angle Protocol: agEUR - wBTC Manager Angle Protocol: agEUR - wBTC Oracle0 ETH
0x4367c5659b992083533dd265a79deb7434a6a65a0e95591c862d5d2175c49a34655919842023-03-01 2:07:05445 days 21 hrs ago Angle Protocol: agEUR - wBTC Oracle 0xa14d53bc1f1c0f31b4aa3bd109344e5009051a840 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
OracleBTCEURChainlinkArbitrum

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 1000000 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan.io on 2022-08-08
*/

// Sources flattened with hardhat v2.10.0 https://hardhat.org

// File @chainlink/contracts/src/v0.8/interfaces/[email protected]
// SPDX-License-Identifier: GPL-3.0
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
    );

}


// File @openzeppelin/contracts-upgradeable/token/ERC20/[email protected]

// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20Upgradeable {
    /**
     * @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 `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, 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 `sender` to `recipient` 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 sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @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);
}


// File contracts/interfaces/IAgToken.sol



pragma solidity 0.8.12;

/// @title IAgToken
/// @author Angle Core Team
/// @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);
}


// File contracts/interfaces/ICoreBorrow.sol



pragma solidity 0.8.12;

/// @title ICoreBorrow
/// @author Angle Core Team
/// @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);
}


// File contracts/interfaces/IFlashAngle.sol



pragma solidity 0.8.12;


/// @title IFlashAngle
/// @author Angle Core Team
/// @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;
}


// File contracts/interfaces/ITreasury.sol



pragma solidity 0.8.12;



/// @title ITreasury
/// @author Angle Core Team
/// @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;
}


// File contracts/interfaces/IOracle.sol



pragma solidity 0.8.12;

/// @title IOracle
/// @author Angle Core Team
/// @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);
}


// File contracts/oracle/BaseOracleChainlinkMulti.sol



pragma solidity 0.8.12;


/// @title BaseOracleChainlinkMulti
/// @author Angle Core Team
/// @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);

    /// @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);
    }
}


// File contracts/oracle/implementations/arbitrum/OracleBTCEURChainlinkArbitrum.sol



pragma solidity 0.8.12;

/// @title OracleBTCEURChainlinkArbitrum
/// @author Angle Core Team
/// @notice Gives the price of BTC in Euro in base 18
/// @dev This contract is built to be deployed on Arbitrum
contract OracleBTCEURChainlinkArbitrum is BaseOracleChainlinkMulti {
    uint256 public constant OUTBASE = 10**18;
    string public constant DESCRIPTION = "BTC/EUR Oracle";

    /// @notice Constructor of the contract
    /// @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) BaseOracleChainlinkMulti(_stalePeriod, _treasury) {}

    /// @inheritdoc IOracle
    function read() external view override returns (uint256 quoteAmount) {
        quoteAmount = OUTBASE;
        AggregatorV3Interface[2] memory circuitChainlink = [
            // Oracle BTC/USD
            AggregatorV3Interface(0x6ce185860a4963106506C203335A2910413708e9),
            // Oracle EUR/USD
            AggregatorV3Interface(0xA14d53bC1F1c0F31B4aA3BD109344E5009051a84)
        ];
        uint8[2] memory circuitChainIsMultiplied = [1, 0];
        uint8[2] memory chainlinkDecimals = [8, 8];
        for (uint256 i = 0; i < circuitChainlink.length; i++) {
            quoteAmount = _readChainlinkFeed(
                quoteAmount,
                circuitChainlink[i],
                circuitChainIsMultiplied[i],
                chainlinkDecimals[i]
            );
        }
    }
}

Contract ABI

[{"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":[],"name":"OUTBASE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"_stalePeriod","type":"uint32"}],"name":"changeStalePeriod","outputs":[],"stateMutability":"nonpayable","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"}]

608060405234801561001057600080fd5b50604051610ba4380380610ba483398101604081905261002f91610071565b600080546001600160c01b031916600160a01b63ffffffff94909416939093026001600160a01b031916929092176001600160a01b03919091161790556100c0565b6000806040838503121561008457600080fd5b825163ffffffff8116811461009857600080fd5b60208401519092506001600160a01b03811681146100b557600080fd5b809150509250929050565b610ad5806100cf6000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80636c47d3311161005b5780636c47d331146100f7578063a5b36a3614610106578063f0f4426014610143578063f1ae88561461015657600080fd5b806357de26a41461008257806361d027b31461009d578063630914d1146100e2575b600080fd5b61008a61019f565b6040519081526020015b60405180910390f35b6000546100bd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610094565b6100f56100f03660046106e4565b610286565b005b61008a670de0b6b3a764000081565b60005461012e9074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610094565b6100f5610151366004610711565b6103d1565b6101926040518060400160405280600e81526020017f4254432f455552204f7261636c6500000000000000000000000000000000000081525081565b6040516100949190610747565b604080518082018252736ce185860a4963106506c203335a2910413708e9815273a14d53bc1f1c0f31b4aa3bd109344e5009051a84602080830191909152825180840184526001815260008183018190528451808601909552600880865292850192909252670de0b6b3a76400009390915b600281101561027f5761026b85858360028110610230576102306107ba565b6020020151858460028110610247576102476107ba565b602002015185856002811061025e5761025e6107ba565b602002015160ff1661057d565b94508061027781610818565b915050610211565b5050505090565b6000546040517f521d4de900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063521d4de990602401602060405180830381865afa1580156102f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190610851565b61034e576040517f99e120bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000063ffffffff8416908102919091179091556040519081527f4040b15332969bfd8b2035c1a701c8e13f2b5d62ce89b311684a601b2eb44e019060200160405180910390a150565b6000546040517f676a553e00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063676a553e90602401602060405180830381865afa15801561043f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104639190610851565b1580156104ff57506000546040517fe43581b800000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e43581b890602401602060405180830381865afa1580156104d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fd9190610851565b155b15610536576040517fb05b9b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60008060008060008773ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156105d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f49190610892565b94509450509350935060008313158061062457508069ffffffffffffffffffff168469ffffffffffffffffffff16115b80610657575060005474010000000000000000000000000000000000000000900463ffffffff1661065583426108e2565b115b1561068e576040517fae19356300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600160ff891614156106c6576106a687600a610a1b565b6106b0828c610a27565b6106ba9190610a64565b955050505050506106dc565b806106d288600a610a1b565b6106b0908c610a27565b949350505050565b6000602082840312156106f657600080fd5b813563ffffffff8116811461070a57600080fd5b9392505050565b60006020828403121561072357600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461070a57600080fd5b600060208083528351808285015260005b8181101561077457858101830151858201604001528201610758565b81811115610786576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561084a5761084a6107e9565b5060010190565b60006020828403121561086357600080fd5b8151801515811461070a57600080fd5b805169ffffffffffffffffffff8116811461088d57600080fd5b919050565b600080600080600060a086880312156108aa57600080fd5b6108b386610873565b94506020860151935060408601519250606086015191506108d660808701610873565b90509295509295909350565b6000828210156108f4576108f46107e9565b500390565b600181815b8085111561095257817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610938576109386107e9565b8085161561094557918102915b93841c93908002906108fe565b509250929050565b60008261096957506001610a15565b8161097657506000610a15565b816001811461098c5760028114610996576109b2565b6001915050610a15565b60ff8411156109a7576109a76107e9565b50506001821b610a15565b5060208310610133831016604e8410600b84101617156109d5575081810a610a15565b6109df83836108f9565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610a1157610a116107e9565b0290505b92915050565b600061070a838361095a565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610a5f57610a5f6107e9565b500290565b600082610a9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220a473e05fd5904e50f3cfcb869c7275dc5a74cc78dafc32daa099b16a7c221d9b64736f6c634300080c0033000000000000000000000000000000000000000000000000000000000002a3000000000000000000000000000d710512e100c171139d2cf5708f22c680eccf52

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80636c47d3311161005b5780636c47d331146100f7578063a5b36a3614610106578063f0f4426014610143578063f1ae88561461015657600080fd5b806357de26a41461008257806361d027b31461009d578063630914d1146100e2575b600080fd5b61008a61019f565b6040519081526020015b60405180910390f35b6000546100bd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610094565b6100f56100f03660046106e4565b610286565b005b61008a670de0b6b3a764000081565b60005461012e9074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610094565b6100f5610151366004610711565b6103d1565b6101926040518060400160405280600e81526020017f4254432f455552204f7261636c6500000000000000000000000000000000000081525081565b6040516100949190610747565b604080518082018252736ce185860a4963106506c203335a2910413708e9815273a14d53bc1f1c0f31b4aa3bd109344e5009051a84602080830191909152825180840184526001815260008183018190528451808601909552600880865292850192909252670de0b6b3a76400009390915b600281101561027f5761026b85858360028110610230576102306107ba565b6020020151858460028110610247576102476107ba565b602002015185856002811061025e5761025e6107ba565b602002015160ff1661057d565b94508061027781610818565b915050610211565b5050505090565b6000546040517f521d4de900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063521d4de990602401602060405180830381865afa1580156102f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190610851565b61034e576040517f99e120bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000063ffffffff8416908102919091179091556040519081527f4040b15332969bfd8b2035c1a701c8e13f2b5d62ce89b311684a601b2eb44e019060200160405180910390a150565b6000546040517f676a553e00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063676a553e90602401602060405180830381865afa15801561043f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104639190610851565b1580156104ff57506000546040517fe43581b800000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e43581b890602401602060405180830381865afa1580156104d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fd9190610851565b155b15610536576040517fb05b9b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60008060008060008773ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156105d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f49190610892565b94509450509350935060008313158061062457508069ffffffffffffffffffff168469ffffffffffffffffffff16115b80610657575060005474010000000000000000000000000000000000000000900463ffffffff1661065583426108e2565b115b1561068e576040517fae19356300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600160ff891614156106c6576106a687600a610a1b565b6106b0828c610a27565b6106ba9190610a64565b955050505050506106dc565b806106d288600a610a1b565b6106b0908c610a27565b949350505050565b6000602082840312156106f657600080fd5b813563ffffffff8116811461070a57600080fd5b9392505050565b60006020828403121561072357600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461070a57600080fd5b600060208083528351808285015260005b8181101561077457858101830151858201604001528201610758565b81811115610786576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561084a5761084a6107e9565b5060010190565b60006020828403121561086357600080fd5b8151801515811461070a57600080fd5b805169ffffffffffffffffffff8116811461088d57600080fd5b919050565b600080600080600060a086880312156108aa57600080fd5b6108b386610873565b94506020860151935060408601519250606086015191506108d660808701610873565b90509295509295909350565b6000828210156108f4576108f46107e9565b500390565b600181815b8085111561095257817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610938576109386107e9565b8085161561094557918102915b93841c93908002906108fe565b509250929050565b60008261096957506001610a15565b8161097657506000610a15565b816001811461098c5760028114610996576109b2565b6001915050610a15565b60ff8411156109a7576109a76107e9565b50506001821b610a15565b5060208310610133831016604e8410600b84101617156109d5575081810a610a15565b6109df83836108f9565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610a1157610a116107e9565b0290505b92915050565b600061070a838361095a565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610a5f57610a5f6107e9565b500290565b600082610a9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220a473e05fd5904e50f3cfcb869c7275dc5a74cc78dafc32daa099b16a7c221d9b64736f6c634300080c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000002a3000000000000000000000000000d710512e100c171139d2cf5708f22c680eccf52

-----Decoded View---------------
Arg [0] : _stalePeriod (uint32): 172800
Arg [1] : _treasury (address): 0x0D710512E100C171139D2Cf5708f22C680eccF52

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000000002a300
Arg [1] : 0000000000000000000000000d710512e100c171139d2cf5708f22c680eccf52


Deployed ByteCode Sourcemap

17682:1363:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18234:808;;;:::i;:::-;;;160:25:1;;;148:2;133:18;18234:808:0;;;;;;;;14202:34;;;;;;;;;;;;389:42:1;377:55;;;359:74;;347:2;332:18;14202:34:0;196:243:1;16849:239:0;;;;;;:::i;:::-;;:::i;:::-;;17756:40;;17790:6;17756:40;;14391:25;;;;;;;;;;;;;;;899:10:1;887:23;;;869:42;;857:2;842:18;14391:25:0;725:192:1;17125:244:0;;;;;;:::i;:::-;;:::i;17803:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18234:808::-;18346:284;;;;;;;;18465:42;18346:284;;18576:42;18346:284;;;;;;;;18641:49;;;;;;;18685:1;18641:49;;18282:19;18641:49;;;;;;18701:42;;;;;;;;18738:1;18701:42;;;;;;;;;;17790:6;;18641:49;;18754:281;18778:23;18774:1;:27;18754:281;;;18837:186;18874:11;18904:16;18921:1;18904:19;;;;;;;:::i;:::-;;;;;18942:24;18967:1;18942:27;;;;;;;:::i;:::-;;;;;18988:17;19006:1;18988:20;;;;;;;:::i;:::-;;;;;18837:186;;:18;:186::i;:::-;18823:200;-1:-1:-1;18803:3:0;;;;:::i;:::-;;;;18754:281;;;;18303:739;;;18234:808;:::o;16849:239::-;16922:8;;:41;;;;;16952:10;16922:41;;;359:74:1;16922:8:0;;;;;:29;;332:18:1;;16922:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16917:78;;16972:23;;;;;;;;;;;;;;16917:78;17006:11;:26;;;;;;;;;;;;;;;;;;17048:32;;869:42:1;;;17048:32:0;;857:2:1;842:18;17048:32:0;;;;;;;16849:239;:::o;17125:244::-;17199:8;;:35;;;;;17223:10;17199:35;;;359:74:1;17199:8:0;;;;;:23;;332:18:1;;17199:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17198:36;:72;;;;-1:-1:-1;17239:8:0;;:31;;;;;17259:10;17239:31;;;359:74:1;17239:8:0;;;;;:19;;332:18:1;;17239:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17238:32;17198:72;17194:125;;;17292:27;;;;;;;;;;;;;;17194:125;17330:8;:31;;;;;;;;;;;;;;;17125:244::o;15925:727::-;16104:7;16125:14;16141:12;16157:17;16176:22;16202:4;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16124:100;;;;;;;;;16248:1;16239:5;:10;;:39;;;;16263:15;16253:25;;:7;:25;;;16239:39;:84;;;-1:-1:-1;16312:11:0;;;;;;;16282:27;16300:9;16282:15;:27;:::i;:::-;:41;16239:84;16235:132;;;16345:22;;;;;;;;;;;;;;16235:132;16408:5;16523:1;16509:15;;;;16505:139;;;16564:12;16568:8;16564:2;:12;:::i;:::-;16534:25;16548:11;16534;:25;:::i;:::-;16533:44;;;;:::i;:::-;16526:51;;;;;;;;;16505:139;16633:11;16616:12;16620:8;16616:2;:12;:::i;:::-;16601:28;;:11;:28;:::i;15925:727::-;;;;;;;:::o;444:276:1:-;502:6;555:2;543:9;534:7;530:23;526:32;523:52;;;571:1;568;561:12;523:52;610:9;597:23;660:10;653:5;649:22;642:5;639:33;629:61;;686:1;683;676:12;629:61;709:5;444:276;-1:-1:-1;;;444:276:1:o;922:309::-;981:6;1034:2;1022:9;1013:7;1009:23;1005:32;1002:52;;;1050:1;1047;1040:12;1002:52;1089:9;1076:23;1139:42;1132:5;1128:54;1121:5;1118:65;1108:93;;1197:1;1194;1187:12;1236:656;1348:4;1377:2;1406;1395:9;1388:21;1438:6;1432:13;1481:6;1476:2;1465:9;1461:18;1454:34;1506:1;1516:140;1530:6;1527:1;1524:13;1516:140;;;1625:14;;;1621:23;;1615:30;1591:17;;;1610:2;1587:26;1580:66;1545:10;;1516:140;;;1674:6;1671:1;1668:13;1665:91;;;1744:1;1739:2;1730:6;1719:9;1715:22;1711:31;1704:42;1665:91;-1:-1:-1;1808:2:1;1796:15;1813:66;1792:88;1777:104;;;;1883:2;1773:113;;1236:656;-1:-1:-1;;;1236:656:1:o;1897:184::-;1949:77;1946:1;1939:88;2046:4;2043:1;2036:15;2070:4;2067:1;2060:15;2086:184;2138:77;2135:1;2128:88;2235:4;2232:1;2225:15;2259:4;2256:1;2249:15;2275:195;2314:3;2345:66;2338:5;2335:77;2332:103;;;2415:18;;:::i;:::-;-1:-1:-1;2462:1:1;2451:13;;2275:195::o;2706:277::-;2773:6;2826:2;2814:9;2805:7;2801:23;2797:32;2794:52;;;2842:1;2839;2832:12;2794:52;2874:9;2868:16;2927:5;2920:13;2913:21;2906:5;2903:32;2893:60;;2949:1;2946;2939:12;2988:179;3066:13;;3119:22;3108:34;;3098:45;;3088:73;;3157:1;3154;3147:12;3088:73;2988:179;;;:::o;3172:473::-;3275:6;3283;3291;3299;3307;3360:3;3348:9;3339:7;3335:23;3331:33;3328:53;;;3377:1;3374;3367:12;3328:53;3400:39;3429:9;3400:39;:::i;:::-;3390:49;;3479:2;3468:9;3464:18;3458:25;3448:35;;3523:2;3512:9;3508:18;3502:25;3492:35;;3567:2;3556:9;3552:18;3546:25;3536:35;;3590:49;3634:3;3623:9;3619:19;3590:49;:::i;:::-;3580:59;;3172:473;;;;;;;;:::o;3650:125::-;3690:4;3718:1;3715;3712:8;3709:34;;;3723:18;;:::i;:::-;-1:-1:-1;3760:9:1;;3650:125::o;3780:482::-;3869:1;3912:5;3869:1;3926:330;3947:7;3937:8;3934:21;3926:330;;;4066:4;3998:66;3994:77;3988:4;3985:87;3982:113;;;4075:18;;:::i;:::-;4125:7;4115:8;4111:22;4108:55;;;4145:16;;;;4108:55;4224:22;;;;4184:15;;;;3926:330;;;3930:3;3780:482;;;;;:::o;4267:866::-;4316:5;4346:8;4336:80;;-1:-1:-1;4387:1:1;4401:5;;4336:80;4435:4;4425:76;;-1:-1:-1;4472:1:1;4486:5;;4425:76;4517:4;4535:1;4530:59;;;;4603:1;4598:130;;;;4510:218;;4530:59;4560:1;4551:10;;4574:5;;;4598:130;4635:3;4625:8;4622:17;4619:43;;;4642:18;;:::i;:::-;-1:-1:-1;;4698:1:1;4684:16;;4713:5;;4510:218;;4812:2;4802:8;4799:16;4793:3;4787:4;4784:13;4780:36;4774:2;4764:8;4761:16;4756:2;4750:4;4747:12;4743:35;4740:77;4737:159;;;-1:-1:-1;4849:19:1;;;4881:5;;4737:159;4928:34;4953:8;4947:4;4928:34;:::i;:::-;5058:6;4990:66;4986:79;4977:7;4974:92;4971:118;;;5069:18;;:::i;:::-;5107:20;;-1:-1:-1;4267:866:1;;;;;:::o;5138:131::-;5198:5;5227:36;5254:8;5248:4;5227:36;:::i;5274:228::-;5314:7;5440:1;5372:66;5368:74;5365:1;5362:81;5357:1;5350:9;5343:17;5339:105;5336:131;;;5447:18;;:::i;:::-;-1:-1:-1;5487:9:1;;5274:228::o;5507:274::-;5547:1;5573;5563:189;;5608:77;5605:1;5598:88;5709:4;5706:1;5699:15;5737:4;5734:1;5727:15;5563:189;-1:-1:-1;5766:9:1;;5507:274::o

Metadata Hash

a473e05fd5904e50f3cfcb869c7275dc5a74cc78dafc32daa099b16a7c221d9b
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.