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