Overview
ETH Balance
0 ETH
Eth Value
$0.00View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
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
Contract ABI
API[{"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
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.