Source Code
Overview
HYPE Balance
HYPE Value
$0.00| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
Advanced mode: Intended for advanced users or developers and will display all Internal Transactions including zero value transfers.
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | ||||
|---|---|---|---|---|---|---|---|
| 25584469 | 28 mins ago | 0 HYPE | |||||
| 25584469 | 28 mins ago | 0 HYPE | |||||
| 25583722 | 41 mins ago | 0 HYPE | |||||
| 25583722 | 41 mins ago | 0 HYPE | |||||
| 25583626 | 42 mins ago | 0 HYPE | |||||
| 25583626 | 42 mins ago | 0 HYPE | |||||
| 25583427 | 45 mins ago | 0 HYPE | |||||
| 25583427 | 45 mins ago | 0 HYPE | |||||
| 25583396 | 46 mins ago | 0 HYPE | |||||
| 25583396 | 46 mins ago | 0 HYPE | |||||
| 25582597 | 1 hr ago | 0 HYPE | |||||
| 25582597 | 1 hr ago | 0 HYPE | |||||
| 25582550 | 1 hr ago | 0 HYPE | |||||
| 25582550 | 1 hr ago | 0 HYPE | |||||
| 25582293 | 1 hr ago | 0 HYPE | |||||
| 25582293 | 1 hr ago | 0 HYPE | |||||
| 25582198 | 1 hr ago | 0 HYPE | |||||
| 25582198 | 1 hr ago | 0 HYPE | |||||
| 25581831 | 1 hr ago | 0 HYPE | |||||
| 25581831 | 1 hr ago | 0 HYPE | |||||
| 25581728 | 1 hr ago | 0 HYPE | |||||
| 25581728 | 1 hr ago | 0 HYPE | |||||
| 25581602 | 1 hr ago | 0 HYPE | |||||
| 25581602 | 1 hr ago | 0 HYPE | |||||
| 25581570 | 1 hr ago | 0 HYPE |
Cross-Chain Transactions
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0x6dcFA746...A589C3875 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
DualFallbackOracle
Compiler Version
v0.8.20+commit.a1b79de6
Optimization Enabled:
No with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import { IAggregator } from "../interfaces/IAggregator.sol";
import { IAdapter } from "../interfaces/IAdapter.sol";
import { IOracle } from "../interfaces/IOracle.sol";
import { IERC4626 } from "../interfaces/IERC4626.sol";
import { IERC20 } from "../interfaces/IERC20.sol";
import { IACLManager } from "../interfaces/IACLManager.sol";
///@title DualFallbackOracle
///@author HyperLend
///@notice An dual-oracle system with fallback in case of main oracle outage
/* Contract has 3 possible oracles:
- primary: used most of the time
- fallback: used if primary is unhealthy
- emergency: used when manually toggled by HyperLend poolAdmin / emergencyAdmin / riskAdmin
If primary is healthy (price > 0 && data age < MAX_INTERVAL), return primary prices.
Otherwise, check if fallback is healthy:
- if it is, return fallback prices
- if it's not, return primary prices (even if they are also unhealthy)
Example:
- primary: kHYPE-market-redstone
- secondary: kHYPE-market-chainlink
- emergency: kHYPE-fundamental-redstone (if we think kHYPE might depeg on secondary markets but there are no underlying issues (like 10/10 crash), we can switch using emergency multisig without having to go through 3h timelock))
*/
contract DualFallbackOracle is IAdapter {
/// @notice HyperLend ACL Manager contract
IACLManager public aclManager;
/// @notice main price source, used most of the time
IOracle public PRIMARY_SOURCE;
/// @notice fallback price source, used if main is not available
IOracle public FALLBACK_SOURCE;
/// @notice price source which can be toggled by poolAdmin / emergencyAdmin / riskAdmin
IOracle public EMERGENCY_SOURCE;
/// @notice maximum allowed time since the last price update for primary oracle
/// @dev if price update is older, fallback oracle will be used (if price there is not stale either)
uint256 public MAX_HEARTBEAT_INTERVAL_PRIMARY;
/// @notice maximum allowed time since the last price update for fallback oracle
uint256 public MAX_HEARTBEAT_INTERVAL_FALLBACK;
/// @notice the description of the price source
string public description;
/// @notice the number of decimals the aggregator responses represent
uint8 public decimals;
/// @notice idicates if emergency oracle is being used
bool public isEmergencyOracleEnabled;
/// @notice thrown if caller is not poolAdmin / emergencyAdmin / riskAdmin on HyperLend ACLManager
error NotAdmin();
/// @notice thrown when address(0) is used
error InvalidAddress();
/// @notice thrown when there decimals are missmatched between oracles
error InvalidDecimals();
/// @notice thrown if emergency oracle price is invalid
error InvalidEmergencyOracleData();
/// @notice emitted when emergency oracle use is toggled
event SetEnableEmergencyOracle(bool isEnabled);
/// @param _primarySource chainlink-compatible price oracle, used most of the time
/// @param _fallbackSource chainlink-compatible price oracle, used when main is not available
/// @param _emergencySource chainlink-compatible price oracle which can be toggled by risk admin
/// @param _aclManager HyperLend ACL Manager contract
/// @param _description the description of the price source
/// @param _maxIntervalPrimary maximum allowed time since the last price update for primary oracle
/// @param _maxIntervalFallback maximum allowed time since the last price update for fallback oracle
constructor(
address _primarySource,
address _fallbackSource,
address _emergencySource,
address _aclManager,
string memory _description,
uint256 _maxIntervalPrimary,
uint256 _maxIntervalFallback
) {
if (_primarySource == address(0)) revert InvalidAddress();
if (_fallbackSource == address(0)) revert InvalidAddress();
if (_aclManager == address(0)) revert InvalidAddress();
PRIMARY_SOURCE = IOracle(_primarySource);
FALLBACK_SOURCE = IOracle(_fallbackSource);
EMERGENCY_SOURCE = IOracle(_emergencySource);
MAX_HEARTBEAT_INTERVAL_PRIMARY = _maxIntervalPrimary;
MAX_HEARTBEAT_INTERVAL_FALLBACK = _maxIntervalFallback;
aclManager = IACLManager(_aclManager);
description = _description;
if (PRIMARY_SOURCE.decimals() != FALLBACK_SOURCE.decimals()) revert InvalidDecimals();
if (address(EMERGENCY_SOURCE) != address(0) && PRIMARY_SOURCE.decimals() != EMERGENCY_SOURCE.decimals()) revert InvalidDecimals();
decimals = PRIMARY_SOURCE.decimals();
}
/// @notice updates the emergency oracle use
function setEnableEmergencyOracle(bool _isEnabled) external {
if (!aclManager.isPoolAdmin(msg.sender) && !aclManager.isEmergencyAdmin(msg.sender) && !aclManager.isRiskAdmin(msg.sender)) revert NotAdmin();
isEmergencyOracleEnabled = _isEnabled;
emit SetEnableEmergencyOracle(_isEnabled);
}
/// @notice returns the latest price
function latestAnswer() external view returns (int256) {
( , int256 answer , , , ) = getData();
return answer;
}
/// @notice returns the latest price in chainlink-compatible format
function latestRoundData() external view returns (
uint80 roundId,
int256 answer,
uint256 startedAt,
uint256 updatedAt,
uint80 answeredInRound
){
return getData();
}
function getData() internal view returns (
uint80 roundId,
int256 answer,
uint256 startedAt,
uint256 updatedAt,
uint80 answeredInRound
) {
if (isEmergencyOracleEnabled && address(EMERGENCY_SOURCE) != address(0)){
//if emergency latestRoundData, we want the tx to revert
(
uint80 _roundIdEmergency,
int256 _answerEmergency,
uint256 _startedAtEmergency,
uint256 _updatedAtEmergency,
uint80 _answeredInRoundEmergency
) = EMERGENCY_SOURCE.latestRoundData();
if (_answerEmergency <= 0) revert InvalidEmergencyOracleData();
return (_roundIdEmergency, _answerEmergency, _startedAtEmergency, _updatedAtEmergency, _answeredInRoundEmergency);
}
(
bool _success,
uint80 _roundId,
int256 _answer,
uint256 _startedAt,
uint256 _updatedAt,
uint80 _answeredInRound
) = _safeLatestRoundData(PRIMARY_SOURCE);
//if primary isn't healthy, we first check if the fallback is also unhealthy
//if both are unhealthy, we return primary prices
//otherwise, we return fallback
if (!_isPrimaryHealthy(_success, _answer, _updatedAt)){
//we don't use _safeLatestRoundData here, since we want the tx to revert if both oracles revert
(
uint80 _roundIdFallback,
int256 _answerFallback,
uint256 _startedAtFallback,
uint256 _updatedAtFallback,
uint80 _answeredInRoundFallback
) = FALLBACK_SOURCE.latestRoundData();
//if fallback is also unhealthy, but data is less stale than primary, return fallback data
if (_isFallbackHealthy(_answerFallback, _updatedAtFallback) || _updatedAtFallback > _updatedAt){
return (_roundIdFallback, _answerFallback, _startedAtFallback, _updatedAtFallback, _answeredInRoundFallback);
}
}
//return round data from the main source
roundId = _roundId;
answer = _answer;
startedAt = _startedAt;
updatedAt = _updatedAt;
answeredInRound = _answeredInRound;
}
/// @notice calls latestRoundData on source contract, without reverting the whole tx if the call reverts
function _safeLatestRoundData(IOracle source) internal view returns (
bool success,
uint80 r,
int256 a,
uint256 s,
uint256 u,
uint80 ar
){
try source.latestRoundData() returns (
uint80 _r,
int256 _a,
uint256 _s,
uint256 _u,
uint80 _ar
) {
return (true, _r, _a, _s, _u, _ar);
} catch {
return (false, 0, 0, 0, 0, 0);
}
}
function _isPrimaryHealthy(bool _success, int256 _answer, uint256 _updatedAt) internal view returns (bool){
if (!_success) return false;
if (_answer <= 0){
return false;
}
if (block.timestamp > _updatedAt + MAX_HEARTBEAT_INTERVAL_PRIMARY) {
return false;
}
return true;
}
function _isFallbackHealthy(int256 _answer, uint256 _updatedAt) internal view returns (bool) {
if (_answer <= 0){
return false;
}
if (block.timestamp > _updatedAt + MAX_HEARTBEAT_INTERVAL_FALLBACK) {
return false;
}
return true;
}
}// SPDX-License-Identifier: AGPL-3.0
pragma solidity ^0.8.0;
import {IPoolAddressesProvider} from './IPoolAddressesProvider.sol';
/**
* @title IACLManager
* @author Aave
* @notice Defines the basic interface for the ACL Manager
*/
interface IACLManager {
/**
* @notice Returns the contract address of the PoolAddressesProvider
* @return The address of the PoolAddressesProvider
*/
function ADDRESSES_PROVIDER() external view returns (IPoolAddressesProvider);
/**
* @notice Returns the identifier of the PoolAdmin role
* @return The id of the PoolAdmin role
*/
function POOL_ADMIN_ROLE() external view returns (bytes32);
/**
* @notice Returns the identifier of the EmergencyAdmin role
* @return The id of the EmergencyAdmin role
*/
function EMERGENCY_ADMIN_ROLE() external view returns (bytes32);
/**
* @notice Returns the identifier of the RiskAdmin role
* @return The id of the RiskAdmin role
*/
function RISK_ADMIN_ROLE() external view returns (bytes32);
/**
* @notice Returns the identifier of the FlashBorrower role
* @return The id of the FlashBorrower role
*/
function FLASH_BORROWER_ROLE() external view returns (bytes32);
/**
* @notice Returns the identifier of the Bridge role
* @return The id of the Bridge role
*/
function BRIDGE_ROLE() external view returns (bytes32);
/**
* @notice Returns the identifier of the AssetListingAdmin role
* @return The id of the AssetListingAdmin role
*/
function ASSET_LISTING_ADMIN_ROLE() external view returns (bytes32);
/**
* @notice Set the role as admin of a specific role.
* @dev By default the admin role for all roles is `DEFAULT_ADMIN_ROLE`.
* @param role The role to be managed by the admin role
* @param adminRole The admin role
*/
function setRoleAdmin(bytes32 role, bytes32 adminRole) external;
/**
* @notice Adds a new admin as PoolAdmin
* @param admin The address of the new admin
*/
function addPoolAdmin(address admin) external;
/**
* @notice Removes an admin as PoolAdmin
* @param admin The address of the admin to remove
*/
function removePoolAdmin(address admin) external;
/**
* @notice Returns true if the address is PoolAdmin, false otherwise
* @param admin The address to check
* @return True if the given address is PoolAdmin, false otherwise
*/
function isPoolAdmin(address admin) external view returns (bool);
/**
* @notice Adds a new admin as EmergencyAdmin
* @param admin The address of the new admin
*/
function addEmergencyAdmin(address admin) external;
/**
* @notice Removes an admin as EmergencyAdmin
* @param admin The address of the admin to remove
*/
function removeEmergencyAdmin(address admin) external;
/**
* @notice Returns true if the address is EmergencyAdmin, false otherwise
* @param admin The address to check
* @return True if the given address is EmergencyAdmin, false otherwise
*/
function isEmergencyAdmin(address admin) external view returns (bool);
/**
* @notice Adds a new admin as RiskAdmin
* @param admin The address of the new admin
*/
function addRiskAdmin(address admin) external;
/**
* @notice Removes an admin as RiskAdmin
* @param admin The address of the admin to remove
*/
function removeRiskAdmin(address admin) external;
/**
* @notice Returns true if the address is RiskAdmin, false otherwise
* @param admin The address to check
* @return True if the given address is RiskAdmin, false otherwise
*/
function isRiskAdmin(address admin) external view returns (bool);
/**
* @notice Adds a new address as FlashBorrower
* @param borrower The address of the new FlashBorrower
*/
function addFlashBorrower(address borrower) external;
/**
* @notice Removes an address as FlashBorrower
* @param borrower The address of the FlashBorrower to remove
*/
function removeFlashBorrower(address borrower) external;
/**
* @notice Returns true if the address is FlashBorrower, false otherwise
* @param borrower The address to check
* @return True if the given address is FlashBorrower, false otherwise
*/
function isFlashBorrower(address borrower) external view returns (bool);
/**
* @notice Adds a new address as Bridge
* @param bridge The address of the new Bridge
*/
function addBridge(address bridge) external;
/**
* @notice Removes an address as Bridge
* @param bridge The address of the bridge to remove
*/
function removeBridge(address bridge) external;
/**
* @notice Returns true if the address is Bridge, false otherwise
* @param bridge The address to check
* @return True if the given address is Bridge, false otherwise
*/
function isBridge(address bridge) external view returns (bool);
/**
* @notice Adds a new admin as AssetListingAdmin
* @param admin The address of the new admin
*/
function addAssetListingAdmin(address admin) external;
/**
* @notice Removes an admin as AssetListingAdmin
* @param admin The address of the admin to remove
*/
function removeAssetListingAdmin(address admin) external;
/**
* @notice Returns true if the address is AssetListingAdmin, false otherwise
* @param admin The address to check
* @return True if the given address is AssetListingAdmin, false otherwise
*/
function isAssetListingAdmin(address admin) external view returns (bool);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
interface IAdapter {
function latestAnswer() external view returns (int256);
function decimals() external view returns (uint8);
function description() external view returns (string memory);
function latestRoundData() external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
interface IAggregator {
function getPrice(address asset) external view returns (uint256);
function getUpdateTimestamp(address asset) external view returns (uint256);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.20;
interface IERC20 {
/**
* @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 value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` 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 value) external returns (bool);
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import { IERC20 } from "./IERC20.sol";
/// @title ERC4626 interface
/// See: https://eips.ethereum.org/EIPS/eip-4626
interface IERC4626 is IERC20 {
/*////////////////////////////////////////////////////////
Events
////////////////////////////////////////////////////////*/
/// @notice `sender` has exchanged `assets` for `shares`,
/// and transferred those `shares` to `receiver`.
event Deposit(address indexed sender, address indexed receiver, uint256 assets, uint256 shares);
/// @notice `sender` has exchanged `shares` for `assets`,
/// and transferred those `assets` to `receiver`.
event Withdraw(address indexed sender, address indexed receiver, uint256 assets, uint256 shares);
/*////////////////////////////////////////////////////////
Vault properties
////////////////////////////////////////////////////////*/
/// @notice The address of the underlying ERC20 token used for
/// the Vault for accounting, depositing, and withdrawing.
function asset() external view returns (address asset);
/// @notice Total amount of the underlying asset that
/// is "managed" by Vault.
function totalAssets() external view returns (uint256 totalAssets);
/*////////////////////////////////////////////////////////
Deposit/Withdrawal Logic
////////////////////////////////////////////////////////*/
/// @notice Mints `shares` Vault shares to `receiver` by
/// depositing exactly `assets` of underlying tokens.
function deposit(uint256 assets, address receiver) external returns (uint256 shares);
/// @notice Mints exactly `shares` Vault shares to `receiver`
/// by depositing `assets` of underlying tokens.
function mint(uint256 shares, address receiver) external returns (uint256 assets);
/// @notice Redeems `shares` from `owner` and sends `assets`
/// of underlying tokens to `receiver`.
function withdraw(
uint256 assets,
address receiver,
address owner
) external returns (uint256 shares);
/// @notice Redeems `shares` from `owner` and sends `assets`
/// of underlying tokens to `receiver`.
function redeem(
uint256 shares,
address receiver,
address owner
) external returns (uint256 assets);
/*////////////////////////////////////////////////////////
Vault Accounting Logic
////////////////////////////////////////////////////////*/
/// @notice The amount of shares that the vault would
/// exchange for the amount of assets provided, in an
/// ideal scenario where all the conditions are met.
function convertToShares(uint256 assets) external view returns (uint256 shares);
/// @notice The amount of assets that the vault would
/// exchange for the amount of shares provided, in an
/// ideal scenario where all the conditions are met.
function convertToAssets(uint256 shares) external view returns (uint256 assets);
/// @notice Total number of underlying assets that can
/// be deposited by `owner` into the Vault, where `owner`
/// corresponds to the input parameter `receiver` of a
/// `deposit` call.
function maxDeposit(address owner) external view returns (uint256 maxAssets);
/// @notice Allows an on-chain or off-chain user to simulate
/// the effects of their deposit at the current block, given
/// current on-chain conditions.
function previewDeposit(uint256 assets) external view returns (uint256 shares);
/// @notice Total number of underlying shares that can be minted
/// for `owner`, where `owner` corresponds to the input
/// parameter `receiver` of a `mint` call.
function maxMint(address owner) external view returns (uint256 maxShares);
/// @notice Allows an on-chain or off-chain user to simulate
/// the effects of their mint at the current block, given
/// current on-chain conditions.
function previewMint(uint256 shares) external view returns (uint256 assets);
/// @notice Total number of underlying assets that can be
/// withdrawn from the Vault by `owner`, where `owner`
/// corresponds to the input parameter of a `withdraw` call.
function maxWithdraw(address owner) external view returns (uint256 maxAssets);
/// @notice Allows an on-chain or off-chain user to simulate
/// the effects of their withdrawal at the current block,
/// given current on-chain conditions.
function previewWithdraw(uint256 assets) external view returns (uint256 shares);
/// @notice Total number of underlying shares that can be
/// redeemed from the Vault by `owner`, where `owner` corresponds
/// to the input parameter of a `redeem` call.
function maxRedeem(address owner) external view returns (uint256 maxShares);
/// @notice Allows an on-chain or off-chain user to simulate
/// the effects of their redeemption at the current block,
/// given current on-chain conditions.
function previewRedeem(uint256 shares) external view returns (uint256 assets);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
interface IOracle {
function latestAnswer() external view returns (uint256);
function latestRoundData() external view returns (
uint80 roundId,
int256 answer,
uint256 startedAt,
uint256 updatedAt,
uint80 answeredInRound
);
function decimals() external view returns (uint8);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @title IPoolAddressesProvider
* @author Aave
* @notice Defines the basic interface for a Pool Addresses Provider.
*/
interface IPoolAddressesProvider {
/**
* @dev Emitted when the market identifier is updated.
* @param oldMarketId The old id of the market
* @param newMarketId The new id of the market
*/
event MarketIdSet(string indexed oldMarketId, string indexed newMarketId);
/**
* @dev Emitted when the pool is updated.
* @param oldAddress The old address of the Pool
* @param newAddress The new address of the Pool
*/
event PoolUpdated(address indexed oldAddress, address indexed newAddress);
/**
* @dev Emitted when the pool configurator is updated.
* @param oldAddress The old address of the PoolConfigurator
* @param newAddress The new address of the PoolConfigurator
*/
event PoolConfiguratorUpdated(address indexed oldAddress, address indexed newAddress);
/**
* @dev Emitted when the price oracle is updated.
* @param oldAddress The old address of the PriceOracle
* @param newAddress The new address of the PriceOracle
*/
event PriceOracleUpdated(address indexed oldAddress, address indexed newAddress);
/**
* @dev Emitted when the ACL manager is updated.
* @param oldAddress The old address of the ACLManager
* @param newAddress The new address of the ACLManager
*/
event ACLManagerUpdated(address indexed oldAddress, address indexed newAddress);
/**
* @dev Emitted when the ACL admin is updated.
* @param oldAddress The old address of the ACLAdmin
* @param newAddress The new address of the ACLAdmin
*/
event ACLAdminUpdated(address indexed oldAddress, address indexed newAddress);
/**
* @dev Emitted when the price oracle sentinel is updated.
* @param oldAddress The old address of the PriceOracleSentinel
* @param newAddress The new address of the PriceOracleSentinel
*/
event PriceOracleSentinelUpdated(address indexed oldAddress, address indexed newAddress);
/**
* @dev Emitted when the pool data provider is updated.
* @param oldAddress The old address of the PoolDataProvider
* @param newAddress The new address of the PoolDataProvider
*/
event PoolDataProviderUpdated(address indexed oldAddress, address indexed newAddress);
/**
* @dev Emitted when a new proxy is created.
* @param id The identifier of the proxy
* @param proxyAddress The address of the created proxy contract
* @param implementationAddress The address of the implementation contract
*/
event ProxyCreated(
bytes32 indexed id,
address indexed proxyAddress,
address indexed implementationAddress
);
/**
* @dev Emitted when a new non-proxied contract address is registered.
* @param id The identifier of the contract
* @param oldAddress The address of the old contract
* @param newAddress The address of the new contract
*/
event AddressSet(bytes32 indexed id, address indexed oldAddress, address indexed newAddress);
/**
* @dev Emitted when the implementation of the proxy registered with id is updated
* @param id The identifier of the contract
* @param proxyAddress The address of the proxy contract
* @param oldImplementationAddress The address of the old implementation contract
* @param newImplementationAddress The address of the new implementation contract
*/
event AddressSetAsProxy(
bytes32 indexed id,
address indexed proxyAddress,
address oldImplementationAddress,
address indexed newImplementationAddress
);
/**
* @notice Returns the id of the Aave market to which this contract points to.
* @return The market id
*/
function getMarketId() external view returns (string memory);
/**
* @notice Associates an id with a specific PoolAddressesProvider.
* @dev This can be used to create an onchain registry of PoolAddressesProviders to
* identify and validate multiple Aave markets.
* @param newMarketId The market id
*/
function setMarketId(string calldata newMarketId) external;
/**
* @notice Returns an address by its identifier.
* @dev The returned address might be an EOA or a contract, potentially proxied
* @dev It returns ZERO if there is no registered address with the given id
* @param id The id
* @return The address of the registered for the specified id
*/
function getAddress(bytes32 id) external view returns (address);
/**
* @notice General function to update the implementation of a proxy registered with
* certain `id`. If there is no proxy registered, it will instantiate one and
* set as implementation the `newImplementationAddress`.
* @dev IMPORTANT Use this function carefully, only for ids that don't have an explicit
* setter function, in order to avoid unexpected consequences
* @param id The id
* @param newImplementationAddress The address of the new implementation
*/
function setAddressAsProxy(bytes32 id, address newImplementationAddress) external;
/**
* @notice Sets an address for an id replacing the address saved in the addresses map.
* @dev IMPORTANT Use this function carefully, as it will do a hard replacement
* @param id The id
* @param newAddress The address to set
*/
function setAddress(bytes32 id, address newAddress) external;
/**
* @notice Returns the address of the Pool proxy.
* @return The Pool proxy address
*/
function getPool() external view returns (address);
/**
* @notice Updates the implementation of the Pool, or creates a proxy
* setting the new `pool` implementation when the function is called for the first time.
* @param newPoolImpl The new Pool implementation
*/
function setPoolImpl(address newPoolImpl) external;
/**
* @notice Returns the address of the PoolConfigurator proxy.
* @return The PoolConfigurator proxy address
*/
function getPoolConfigurator() external view returns (address);
/**
* @notice Updates the implementation of the PoolConfigurator, or creates a proxy
* setting the new `PoolConfigurator` implementation when the function is called for the first time.
* @param newPoolConfiguratorImpl The new PoolConfigurator implementation
*/
function setPoolConfiguratorImpl(address newPoolConfiguratorImpl) external;
/**
* @notice Returns the address of the price oracle.
* @return The address of the PriceOracle
*/
function getPriceOracle() external view returns (address);
/**
* @notice Updates the address of the price oracle.
* @param newPriceOracle The address of the new PriceOracle
*/
function setPriceOracle(address newPriceOracle) external;
/**
* @notice Returns the address of the ACL manager.
* @return The address of the ACLManager
*/
function getACLManager() external view returns (address);
/**
* @notice Updates the address of the ACL manager.
* @param newAclManager The address of the new ACLManager
*/
function setACLManager(address newAclManager) external;
/**
* @notice Returns the address of the ACL admin.
* @return The address of the ACL admin
*/
function getACLAdmin() external view returns (address);
/**
* @notice Updates the address of the ACL admin.
* @param newAclAdmin The address of the new ACL admin
*/
function setACLAdmin(address newAclAdmin) external;
/**
* @notice Returns the address of the price oracle sentinel.
* @return The address of the PriceOracleSentinel
*/
function getPriceOracleSentinel() external view returns (address);
/**
* @notice Updates the address of the price oracle sentinel.
* @param newPriceOracleSentinel The address of the new PriceOracleSentinel
*/
function setPriceOracleSentinel(address newPriceOracleSentinel) external;
/**
* @notice Returns the address of the data provider.
* @return The address of the DataProvider
*/
function getPoolDataProvider() external view returns (address);
/**
* @notice Updates the address of the data provider.
* @param newDataProvider The address of the new DataProvider
*/
function setPoolDataProvider(address newDataProvider) external;
}{
"evmVersion": "paris",
"optimizer": {
"enabled": false,
"runs": 200
},
"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":"address","name":"_primarySource","type":"address"},{"internalType":"address","name":"_fallbackSource","type":"address"},{"internalType":"address","name":"_emergencySource","type":"address"},{"internalType":"address","name":"_aclManager","type":"address"},{"internalType":"string","name":"_description","type":"string"},{"internalType":"uint256","name":"_maxIntervalPrimary","type":"uint256"},{"internalType":"uint256","name":"_maxIntervalFallback","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidAddress","type":"error"},{"inputs":[],"name":"InvalidDecimals","type":"error"},{"inputs":[],"name":"InvalidEmergencyOracleData","type":"error"},{"inputs":[],"name":"NotAdmin","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isEnabled","type":"bool"}],"name":"SetEnableEmergencyOracle","type":"event"},{"inputs":[],"name":"EMERGENCY_SOURCE","outputs":[{"internalType":"contract IOracle","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FALLBACK_SOURCE","outputs":[{"internalType":"contract IOracle","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_HEARTBEAT_INTERVAL_FALLBACK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_HEARTBEAT_INTERVAL_PRIMARY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRIMARY_SOURCE","outputs":[{"internalType":"contract IOracle","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"aclManager","outputs":[{"internalType":"contract IACLManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isEmergencyOracleEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestAnswer","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_isEnabled","type":"bool"}],"name":"setEnableEmergencyOracle","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
0x60806040523480156200001157600080fd5b5060405162001cda38038062001cda8339818101604052810190620000379190620008a7565b600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16036200009e576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160362000105576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036200016c576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160048190555080600581905550836000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600690816200028e919062000bba565b50600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000323919062000cdf565b60ff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000394573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ba919062000cdf565b60ff1614620003f5576040517fd25598a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015620005815750600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004e4919062000cdf565b60ff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000555573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200057b919062000cdf565b60ff1614155b15620005b9576040517fd25598a000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000627573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200064d919062000cdf565b600760006101000a81548160ff021916908360ff1602179055505050505050505062000d11565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620006b58262000688565b9050919050565b620006c781620006a8565b8114620006d357600080fd5b50565b600081519050620006e781620006bc565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200074282620006f7565b810181811067ffffffffffffffff8211171562000764576200076362000708565b5b80604052505050565b60006200077962000674565b905062000787828262000737565b919050565b600067ffffffffffffffff821115620007aa57620007a962000708565b5b620007b582620006f7565b9050602081019050919050565b60005b83811015620007e2578082015181840152602081019050620007c5565b60008484015250505050565b600062000805620007ff846200078c565b6200076d565b905082815260208101848484011115620008245762000823620006f2565b5b62000831848285620007c2565b509392505050565b600082601f830112620008515762000850620006ed565b5b815162000863848260208601620007ee565b91505092915050565b6000819050919050565b62000881816200086c565b81146200088d57600080fd5b50565b600081519050620008a18162000876565b92915050565b600080600080600080600060e0888a031215620008c957620008c86200067e565b5b6000620008d98a828b01620006d6565b9750506020620008ec8a828b01620006d6565b9650506040620008ff8a828b01620006d6565b9550506060620009128a828b01620006d6565b945050608088015167ffffffffffffffff81111562000936576200093562000683565b5b620009448a828b0162000839565b93505060a0620009578a828b0162000890565b92505060c06200096a8a828b0162000890565b91505092959891949750929550565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620009cc57607f821691505b602082108103620009e257620009e162000984565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000a4c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a0d565b62000a58868362000a0d565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000a9b62000a9562000a8f846200086c565b62000a70565b6200086c565b9050919050565b6000819050919050565b62000ab78362000a7a565b62000acf62000ac68262000aa2565b84845462000a1a565b825550505050565b600090565b62000ae662000ad7565b62000af381848462000aac565b505050565b5b8181101562000b1b5762000b0f60008262000adc565b60018101905062000af9565b5050565b601f82111562000b6a5762000b3481620009e8565b62000b3f84620009fd565b8101602085101562000b4f578190505b62000b6762000b5e85620009fd565b83018262000af8565b50505b505050565b600082821c905092915050565b600062000b8f6000198460080262000b6f565b1980831691505092915050565b600062000baa838362000b7c565b9150826002028217905092915050565b62000bc58262000979565b67ffffffffffffffff81111562000be15762000be062000708565b5b62000bed8254620009b3565b62000bfa82828562000b1f565b600060209050601f83116001811462000c32576000841562000c1d578287015190505b62000c29858262000b9c565b86555062000c99565b601f19841662000c4286620009e8565b60005b8281101562000c6c5784890151825560018201915060208501945060208101905062000c45565b8683101562000c8c578489015162000c88601f89168262000b7c565b8355505b6001600288020188555050505b505050505050565b600060ff82169050919050565b62000cb98162000ca1565b811462000cc557600080fd5b50565b60008151905062000cd98162000cae565b92915050565b60006020828403121562000cf85762000cf76200067e565b5b600062000d088482850162000cc8565b91505092915050565b610fb98062000d216000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80637284e416116100715780637284e4161461016b57806379caa7b914610189578063a41772ae146101a7578063b5139bd2146101c5578063dffadd10146101e3578063feaf968c14610201576100b4565b8063313ce567146100b95780633872fab3146100d757806340298ed7146100f3578063505b68371461011157806350d25bcd1461012f57806355b1ccea1461014d575b600080fd5b6100c1610223565b6040516100ce9190610a2c565b60405180910390f35b6100f160048036038101906100ec9190610a84565b610236565b005b6100fb6104a2565b6040516101089190610b30565b60405180910390f35b6101196104c6565b6040516101269190610b6c565b60405180910390f35b6101376104ec565b6040516101449190610ba0565b60405180910390f35b610155610504565b6040516101629190610bd4565b60405180910390f35b61017361050a565b6040516101809190610c7f565b60405180910390f35b610191610598565b60405161019e9190610b6c565b60405180910390f35b6101af6105be565b6040516101bc9190610b6c565b60405180910390f35b6101cd6105e4565b6040516101da9190610cb0565b60405180910390f35b6101eb6105f7565b6040516101f89190610bd4565b60405180910390f35b6102096105fd565b60405161021a959493929190610cf0565b60405180910390f35b600760009054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637be53ca1336040518263ffffffff1660e01b815260040161028f9190610d64565b602060405180830381865afa1580156102ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d09190610d94565b158015610374575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632500f2b6336040518263ffffffff1660e01b81526004016103319190610d64565b602060405180830381865afa15801561034e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103729190610d94565b155b8015610417575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663674b5e4d336040518263ffffffff1660e01b81526004016103d49190610d64565b602060405180830381865afa1580156103f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104159190610d94565b155b1561044e576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760016101000a81548160ff0219169083151502179055507fb1222b7fbb7679813923b731cf22a38ef56e697bf68f26519b12322192f23f70816040516104979190610cb0565b60405180910390a150565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806104f761061e565b5050509150508091505090565b60045481565b6006805461051790610df0565b80601f016020809104026020016040519081016040528092919081815260200182805461054390610df0565b80156105905780601f1061056557610100808354040283529160200191610590565b820191906000526020600020905b81548152906001019060200180831161057357829003601f168201915b505050505081565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760019054906101000a900460ff1681565b60055481565b600080600080600061060d61061e565b945094509450945094509091929394565b6000806000806000600760019054906101000a900460ff1680156106915750600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561078c576000806000806000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561070b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072f9190610ea5565b9450945094509450945060008413610773576040517f526641c200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84848484849950995099509950995050505050506108d2565b6000806000806000806107c0600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166108d9565b9550955095509550955095506107d786858461098a565b6108bc576000806000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610850573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108749190610ea5565b9450945094509450945061088884836109d5565b8061089257508682115b156108b65784848484849f509f509f509f509f5050505050505050505050506108d2565b50505050505b849a508399508298508197508096505050505050505b9091929394565b6000806000806000808673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa92505050801561094a57506040513d601f19601f820116820180604052508101906109479190610ea5565b60015b61096857600080600080600080955095509550955095509550610981565b600185858585859a509a509a509a509a509a5050505050505b91939550919395565b60008361099a57600090506109ce565b600083136109ab57600090506109ce565b600454826109b99190610f4f565b4211156109c957600090506109ce565b600190505b9392505050565b60008083136109e75760009050610a0a565b600554826109f59190610f4f565b421115610a055760009050610a0a565b600190505b92915050565b600060ff82169050919050565b610a2681610a10565b82525050565b6000602082019050610a416000830184610a1d565b92915050565b600080fd5b60008115159050919050565b610a6181610a4c565b8114610a6c57600080fd5b50565b600081359050610a7e81610a58565b92915050565b600060208284031215610a9a57610a99610a47565b5b6000610aa884828501610a6f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610af6610af1610aec84610ab1565b610ad1565b610ab1565b9050919050565b6000610b0882610adb565b9050919050565b6000610b1a82610afd565b9050919050565b610b2a81610b0f565b82525050565b6000602082019050610b456000830184610b21565b92915050565b6000610b5682610afd565b9050919050565b610b6681610b4b565b82525050565b6000602082019050610b816000830184610b5d565b92915050565b6000819050919050565b610b9a81610b87565b82525050565b6000602082019050610bb56000830184610b91565b92915050565b6000819050919050565b610bce81610bbb565b82525050565b6000602082019050610be96000830184610bc5565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610c29578082015181840152602081019050610c0e565b60008484015250505050565b6000601f19601f8301169050919050565b6000610c5182610bef565b610c5b8185610bfa565b9350610c6b818560208601610c0b565b610c7481610c35565b840191505092915050565b60006020820190508181036000830152610c998184610c46565b905092915050565b610caa81610a4c565b82525050565b6000602082019050610cc56000830184610ca1565b92915050565b600069ffffffffffffffffffff82169050919050565b610cea81610ccb565b82525050565b600060a082019050610d056000830188610ce1565b610d126020830187610b91565b610d1f6040830186610bc5565b610d2c6060830185610bc5565b610d396080830184610ce1565b9695505050505050565b6000610d4e82610ab1565b9050919050565b610d5e81610d43565b82525050565b6000602082019050610d796000830184610d55565b92915050565b600081519050610d8e81610a58565b92915050565b600060208284031215610daa57610da9610a47565b5b6000610db884828501610d7f565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610e0857607f821691505b602082108103610e1b57610e1a610dc1565b5b50919050565b610e2a81610ccb565b8114610e3557600080fd5b50565b600081519050610e4781610e21565b92915050565b610e5681610b87565b8114610e6157600080fd5b50565b600081519050610e7381610e4d565b92915050565b610e8281610bbb565b8114610e8d57600080fd5b50565b600081519050610e9f81610e79565b92915050565b600080600080600060a08688031215610ec157610ec0610a47565b5b6000610ecf88828901610e38565b9550506020610ee088828901610e64565b9450506040610ef188828901610e90565b9350506060610f0288828901610e90565b9250506080610f1388828901610e38565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610f5a82610bbb565b9150610f6583610bbb565b9250828201905080821115610f7d57610f7c610f20565b5b9291505056fea2646970667358221220c0b4b24de69e537a52604f0cb31c8f813c9a759d68a667ff4508b188263ed01a64736f6c63430008140033000000000000000000000000377280bb72e75e7af763b98c35a75e873bbe49b800000000000000000000000083721238b50dd9232e5b48eaf191001e3cb118dd0000000000000000000000004cec96a68cb9a979621b104f3c94884be1a66da000000000000000000000000010914ee2c2dd3f3def9effb75906ca067700a04a00000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000627000000000000000000000000000000000000000000000000000000000000062700000000000000000000000000000000000000000000000000000000000000047777374485950452d7072696d3a72656473746f6e652f66756e64616d2d7365633a636861696e6c696e6b2f66756e64616d2d656d6572673a72656473746f6e652f6d61726b657400000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100b45760003560e01c80637284e416116100715780637284e4161461016b57806379caa7b914610189578063a41772ae146101a7578063b5139bd2146101c5578063dffadd10146101e3578063feaf968c14610201576100b4565b8063313ce567146100b95780633872fab3146100d757806340298ed7146100f3578063505b68371461011157806350d25bcd1461012f57806355b1ccea1461014d575b600080fd5b6100c1610223565b6040516100ce9190610a2c565b60405180910390f35b6100f160048036038101906100ec9190610a84565b610236565b005b6100fb6104a2565b6040516101089190610b30565b60405180910390f35b6101196104c6565b6040516101269190610b6c565b60405180910390f35b6101376104ec565b6040516101449190610ba0565b60405180910390f35b610155610504565b6040516101629190610bd4565b60405180910390f35b61017361050a565b6040516101809190610c7f565b60405180910390f35b610191610598565b60405161019e9190610b6c565b60405180910390f35b6101af6105be565b6040516101bc9190610b6c565b60405180910390f35b6101cd6105e4565b6040516101da9190610cb0565b60405180910390f35b6101eb6105f7565b6040516101f89190610bd4565b60405180910390f35b6102096105fd565b60405161021a959493929190610cf0565b60405180910390f35b600760009054906101000a900460ff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637be53ca1336040518263ffffffff1660e01b815260040161028f9190610d64565b602060405180830381865afa1580156102ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d09190610d94565b158015610374575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632500f2b6336040518263ffffffff1660e01b81526004016103319190610d64565b602060405180830381865afa15801561034e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103729190610d94565b155b8015610417575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663674b5e4d336040518263ffffffff1660e01b81526004016103d49190610d64565b602060405180830381865afa1580156103f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104159190610d94565b155b1561044e576040517f7bfa4b9f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760016101000a81548160ff0219169083151502179055507fb1222b7fbb7679813923b731cf22a38ef56e697bf68f26519b12322192f23f70816040516104979190610cb0565b60405180910390a150565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806104f761061e565b5050509150508091505090565b60045481565b6006805461051790610df0565b80601f016020809104026020016040519081016040528092919081815260200182805461054390610df0565b80156105905780601f1061056557610100808354040283529160200191610590565b820191906000526020600020905b81548152906001019060200180831161057357829003601f168201915b505050505081565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760019054906101000a900460ff1681565b60055481565b600080600080600061060d61061e565b945094509450945094509091929394565b6000806000806000600760019054906101000a900460ff1680156106915750600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1561078c576000806000806000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561070b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061072f9190610ea5565b9450945094509450945060008413610773576040517f526641c200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84848484849950995099509950995050505050506108d2565b6000806000806000806107c0600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166108d9565b9550955095509550955095506107d786858461098a565b6108bc576000806000806000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610850573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108749190610ea5565b9450945094509450945061088884836109d5565b8061089257508682115b156108b65784848484849f509f509f509f509f5050505050505050505050506108d2565b50505050505b849a508399508298508197508096505050505050505b9091929394565b6000806000806000808673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa92505050801561094a57506040513d601f19601f820116820180604052508101906109479190610ea5565b60015b61096857600080600080600080955095509550955095509550610981565b600185858585859a509a509a509a509a509a5050505050505b91939550919395565b60008361099a57600090506109ce565b600083136109ab57600090506109ce565b600454826109b99190610f4f565b4211156109c957600090506109ce565b600190505b9392505050565b60008083136109e75760009050610a0a565b600554826109f59190610f4f565b421115610a055760009050610a0a565b600190505b92915050565b600060ff82169050919050565b610a2681610a10565b82525050565b6000602082019050610a416000830184610a1d565b92915050565b600080fd5b60008115159050919050565b610a6181610a4c565b8114610a6c57600080fd5b50565b600081359050610a7e81610a58565b92915050565b600060208284031215610a9a57610a99610a47565b5b6000610aa884828501610a6f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610af6610af1610aec84610ab1565b610ad1565b610ab1565b9050919050565b6000610b0882610adb565b9050919050565b6000610b1a82610afd565b9050919050565b610b2a81610b0f565b82525050565b6000602082019050610b456000830184610b21565b92915050565b6000610b5682610afd565b9050919050565b610b6681610b4b565b82525050565b6000602082019050610b816000830184610b5d565b92915050565b6000819050919050565b610b9a81610b87565b82525050565b6000602082019050610bb56000830184610b91565b92915050565b6000819050919050565b610bce81610bbb565b82525050565b6000602082019050610be96000830184610bc5565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610c29578082015181840152602081019050610c0e565b60008484015250505050565b6000601f19601f8301169050919050565b6000610c5182610bef565b610c5b8185610bfa565b9350610c6b818560208601610c0b565b610c7481610c35565b840191505092915050565b60006020820190508181036000830152610c998184610c46565b905092915050565b610caa81610a4c565b82525050565b6000602082019050610cc56000830184610ca1565b92915050565b600069ffffffffffffffffffff82169050919050565b610cea81610ccb565b82525050565b600060a082019050610d056000830188610ce1565b610d126020830187610b91565b610d1f6040830186610bc5565b610d2c6060830185610bc5565b610d396080830184610ce1565b9695505050505050565b6000610d4e82610ab1565b9050919050565b610d5e81610d43565b82525050565b6000602082019050610d796000830184610d55565b92915050565b600081519050610d8e81610a58565b92915050565b600060208284031215610daa57610da9610a47565b5b6000610db884828501610d7f565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680610e0857607f821691505b602082108103610e1b57610e1a610dc1565b5b50919050565b610e2a81610ccb565b8114610e3557600080fd5b50565b600081519050610e4781610e21565b92915050565b610e5681610b87565b8114610e6157600080fd5b50565b600081519050610e7381610e4d565b92915050565b610e8281610bbb565b8114610e8d57600080fd5b50565b600081519050610e9f81610e79565b92915050565b600080600080600060a08688031215610ec157610ec0610a47565b5b6000610ecf88828901610e38565b9550506020610ee088828901610e64565b9450506040610ef188828901610e90565b9350506060610f0288828901610e90565b9250506080610f1388828901610e38565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610f5a82610bbb565b9150610f6583610bbb565b9250828201905080821115610f7d57610f7c610f20565b5b9291505056fea2646970667358221220c0b4b24de69e537a52604f0cb31c8f813c9a759d68a667ff4508b188263ed01a64736f6c63430008140033
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in HYPE
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.