Overview
ETH Balance
0 ETH
Eth Value
$0.00View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
OracleBTCEURChainlink
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 "../BaseOracleChainlinkMulti.sol";
/// @title OracleBTCEURChainlink
/// @author Angle Core Team
/// @notice Gives the price of BTC in Euro in base 18
contract OracleBTCEURChainlink 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(0xF4030086522a5bEEa4988F8cA5B36dbC97BeE88c),
// Oracle EUR/USD
AggregatorV3Interface(0xb49f677943BC038e9857d61E7d053CaA2C1734C1)
];
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]
);
}
}
}// 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 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);
}// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.12;
import "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol";
/// @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);
}// SPDX-License-Identifier: GPL-3.0
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);
}// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.12;
import "./IAgToken.sol";
import "./ICoreBorrow.sol";
/// @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;
}// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.12;
import "./ITreasury.sol";
/// @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);
}// SPDX-License-Identifier: GPL-3.0
pragma solidity 0.8.12;
import "./IAgToken.sol";
import "./ICoreBorrow.sol";
import "./IFlashAngle.sol";
/// @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;
}// 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 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);
}
}{
"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":[],"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"}]Contract Creation Code
608060405234801561001057600080fd5b50604051610ba4380380610ba483398101604081905261002f91610071565b600080546001600160c01b031916600160a01b63ffffffff94909416939093026001600160a01b031916929092176001600160a01b03919091161790556100c0565b6000806040838503121561008457600080fd5b825163ffffffff8116811461009857600080fd5b60208401519092506001600160a01b03811681146100b557600080fd5b809150509250929050565b610ad5806100cf6000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80636c47d3311161005b5780636c47d331146100f7578063a5b36a3614610106578063f0f4426014610143578063f1ae88561461015657600080fd5b806357de26a41461008257806361d027b31461009d578063630914d1146100e2575b600080fd5b61008a61019f565b6040519081526020015b60405180910390f35b6000546100bd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610094565b6100f56100f03660046106e4565b610286565b005b61008a670de0b6b3a764000081565b60005461012e9074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610094565b6100f5610151366004610711565b6103d1565b6101926040518060400160405280600e81526020017f4254432f455552204f7261636c6500000000000000000000000000000000000081525081565b6040516100949190610747565b60408051808201825273f4030086522a5beea4988f8ca5b36dbc97bee88c815273b49f677943bc038e9857d61e7d053caa2c1734c1602080830191909152825180840184526001815260008183018190528451808601909552600880865292850192909252670de0b6b3a76400009390915b600281101561027f5761026b85858360028110610230576102306107ba565b6020020151858460028110610247576102476107ba565b602002015185856002811061025e5761025e6107ba565b602002015160ff1661057d565b94508061027781610818565b915050610211565b5050505090565b6000546040517f521d4de900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063521d4de990602401602060405180830381865afa1580156102f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190610851565b61034e576040517f99e120bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000063ffffffff8416908102919091179091556040519081527f4040b15332969bfd8b2035c1a701c8e13f2b5d62ce89b311684a601b2eb44e019060200160405180910390a150565b6000546040517f676a553e00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063676a553e90602401602060405180830381865afa15801561043f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104639190610851565b1580156104ff57506000546040517fe43581b800000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e43581b890602401602060405180830381865afa1580156104d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fd9190610851565b155b15610536576040517fb05b9b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60008060008060008773ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156105d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f49190610892565b94509450509350935060008313158061062457508069ffffffffffffffffffff168469ffffffffffffffffffff16115b80610657575060005474010000000000000000000000000000000000000000900463ffffffff1661065583426108e2565b115b1561068e576040517fae19356300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600160ff891614156106c6576106a687600a610a1b565b6106b0828c610a27565b6106ba9190610a64565b955050505050506106dc565b806106d288600a610a1b565b6106b0908c610a27565b949350505050565b6000602082840312156106f657600080fd5b813563ffffffff8116811461070a57600080fd5b9392505050565b60006020828403121561072357600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461070a57600080fd5b600060208083528351808285015260005b8181101561077457858101830151858201604001528201610758565b81811115610786576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561084a5761084a6107e9565b5060010190565b60006020828403121561086357600080fd5b8151801515811461070a57600080fd5b805169ffffffffffffffffffff8116811461088d57600080fd5b919050565b600080600080600060a086880312156108aa57600080fd5b6108b386610873565b94506020860151935060408601519250606086015191506108d660808701610873565b90509295509295909350565b6000828210156108f4576108f46107e9565b500390565b600181815b8085111561095257817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610938576109386107e9565b8085161561094557918102915b93841c93908002906108fe565b509250929050565b60008261096957506001610a15565b8161097657506000610a15565b816001811461098c5760028114610996576109b2565b6001915050610a15565b60ff8411156109a7576109a76107e9565b50506001821b610a15565b5060208310610133831016604e8410600b84101617156109d5575081810a610a15565b6109df83836108f9565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610a1157610a116107e9565b0290505b92915050565b600061070a838361095a565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610a5f57610a5f6107e9565b500290565b600082610a9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220ba5ff489625f448f4b5eb35da0e18c5116096f6db6c3e167b92b386dbe4e947a64736f6c634300080c0033000000000000000000000000000000000000000000000000000000000002a3000000000000000000000000008667dbebf68b0bfa6db54f550f41be16c4067d60
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061007d5760003560e01c80636c47d3311161005b5780636c47d331146100f7578063a5b36a3614610106578063f0f4426014610143578063f1ae88561461015657600080fd5b806357de26a41461008257806361d027b31461009d578063630914d1146100e2575b600080fd5b61008a61019f565b6040519081526020015b60405180910390f35b6000546100bd9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610094565b6100f56100f03660046106e4565b610286565b005b61008a670de0b6b3a764000081565b60005461012e9074010000000000000000000000000000000000000000900463ffffffff1681565b60405163ffffffff9091168152602001610094565b6100f5610151366004610711565b6103d1565b6101926040518060400160405280600e81526020017f4254432f455552204f7261636c6500000000000000000000000000000000000081525081565b6040516100949190610747565b60408051808201825273f4030086522a5beea4988f8ca5b36dbc97bee88c815273b49f677943bc038e9857d61e7d053caa2c1734c1602080830191909152825180840184526001815260008183018190528451808601909552600880865292850192909252670de0b6b3a76400009390915b600281101561027f5761026b85858360028110610230576102306107ba565b6020020151858460028110610247576102476107ba565b602002015185856002811061025e5761025e6107ba565b602002015160ff1661057d565b94508061027781610818565b915050610211565b5050505090565b6000546040517f521d4de900000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063521d4de990602401602060405180830381865afa1580156102f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103189190610851565b61034e576040517f99e120bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000063ffffffff8416908102919091179091556040519081527f4040b15332969bfd8b2035c1a701c8e13f2b5d62ce89b311684a601b2eb44e019060200160405180910390a150565b6000546040517f676a553e00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063676a553e90602401602060405180830381865afa15801561043f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104639190610851565b1580156104ff57506000546040517fe43581b800000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff9091169063e43581b890602401602060405180830381865afa1580156104d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fd9190610851565b155b15610536576040517fb05b9b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60008060008060008773ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156105d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f49190610892565b94509450509350935060008313158061062457508069ffffffffffffffffffff168469ffffffffffffffffffff16115b80610657575060005474010000000000000000000000000000000000000000900463ffffffff1661065583426108e2565b115b1561068e576040517fae19356300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600160ff891614156106c6576106a687600a610a1b565b6106b0828c610a27565b6106ba9190610a64565b955050505050506106dc565b806106d288600a610a1b565b6106b0908c610a27565b949350505050565b6000602082840312156106f657600080fd5b813563ffffffff8116811461070a57600080fd5b9392505050565b60006020828403121561072357600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461070a57600080fd5b600060208083528351808285015260005b8181101561077457858101830151858201604001528201610758565b81811115610786576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561084a5761084a6107e9565b5060010190565b60006020828403121561086357600080fd5b8151801515811461070a57600080fd5b805169ffffffffffffffffffff8116811461088d57600080fd5b919050565b600080600080600060a086880312156108aa57600080fd5b6108b386610873565b94506020860151935060408601519250606086015191506108d660808701610873565b90509295509295909350565b6000828210156108f4576108f46107e9565b500390565b600181815b8085111561095257817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610938576109386107e9565b8085161561094557918102915b93841c93908002906108fe565b509250929050565b60008261096957506001610a15565b8161097657506000610a15565b816001811461098c5760028114610996576109b2565b6001915050610a15565b60ff8411156109a7576109a76107e9565b50506001821b610a15565b5060208310610133831016604e8410600b84101617156109d5575081810a610a15565b6109df83836108f9565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610a1157610a116107e9565b0290505b92915050565b600061070a838361095a565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610a5f57610a5f6107e9565b500290565b600082610a9a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220ba5ff489625f448f4b5eb35da0e18c5116096f6db6c3e167b92b386dbe4e947a64736f6c634300080c0033
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 | 35 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.