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 | ||||
|---|---|---|---|---|---|---|---|
| 25573371 | 3 hrs ago | 0 HYPE | |||||
| 25573371 | 3 hrs ago | 0 HYPE | |||||
| 25573371 | 3 hrs ago | 0 HYPE | |||||
| 25573289 | 3 hrs ago | 0 HYPE | |||||
| 25573289 | 3 hrs ago | 0 HYPE | |||||
| 25573289 | 3 hrs ago | 0 HYPE | |||||
| 25573174 | 3 hrs ago | 0 HYPE | |||||
| 25573174 | 3 hrs ago | 0 HYPE | |||||
| 25573174 | 3 hrs ago | 0 HYPE | |||||
| 25573132 | 3 hrs ago | 0 HYPE | |||||
| 25573132 | 3 hrs ago | 0 HYPE | |||||
| 25573132 | 3 hrs ago | 0 HYPE | |||||
| 25573064 | 3 hrs ago | 0 HYPE | |||||
| 25573064 | 3 hrs ago | 0 HYPE | |||||
| 25573064 | 3 hrs ago | 0 HYPE | |||||
| 25573030 | 3 hrs ago | 0 HYPE | |||||
| 25573030 | 3 hrs ago | 0 HYPE | |||||
| 25573030 | 3 hrs ago | 0 HYPE | |||||
| 25572955 | 3 hrs ago | 0 HYPE | |||||
| 25572955 | 3 hrs ago | 0 HYPE | |||||
| 25572955 | 3 hrs ago | 0 HYPE | |||||
| 25572921 | 3 hrs ago | 0 HYPE | |||||
| 25572921 | 3 hrs ago | 0 HYPE | |||||
| 25572921 | 3 hrs ago | 0 HYPE | |||||
| 25572859 | 3 hrs ago | 0 HYPE |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
AggV3Oracle
Compiler Version
v0.8.24+commit.e11b9ed9
Optimization Enabled:
Yes with 1024 runs
Other Settings:
shanghai EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import { IOracle } from "../interfaces/IOracle.sol";
import { Math } from "@openzeppelin/contracts/utils/math/Math.sol";
interface IAggregatorV3 {
function latestRoundData()
external
view
returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);
}
// @notice Latest price update for `asset` was older than the accepted threshold
error AggV3Oracle_StalePrice(address asset);
// @title AggV3Oracle
// @notice General purpose AggregatorV3-compliant price oracle
contract AggV3Oracle is IOracle {
using Math for uint256;
address public immutable ASSET;
address public immutable ASSET_FEED;
uint256 public immutable ASSET_DECIMALS; // Decimals for ASSET
uint256 public immutable ASSET_FEED_DECIMALS; // Decimals for ASSET_FEED
bool public immutable ASSET_FEED_CHECK_TIMESTAMP; // True if ASSET_FEED prices must be checked for staleness
uint256 public immutable ASSET_STALE_PRICE_THRESHOLD; // In seconds
bool public immutable IS_USD_FEED; // True if ASSET_FEED is USD-denominated
// If IS_USD_FEED is false, the following variables will not be set or used
address public immutable ETH;
address public immutable ETH_FEED;
uint256 public immutable ETH_FEED_DECIMALS; // Decimals for ETH_FEED
bool public immutable ETH_FEED_CHECK_TIMESTAMP; // True if ETH_FEED prices must be checked for staleness
uint256 public immutable ETH_STALE_PRICE_THRESHOLD; // In seconds
constructor(
address asset,
address assetFeed,
uint256 assetDecimals,
uint256 assetFeedDecimals,
bool assetFeedCheckTimestamp,
uint256 assetStalePriceThreshold,
bool isUsdFeed,
address eth,
address ethFeed,
uint256 ethFeedDecimals,
bool ethFeedCheckTimestamp,
uint256 ethStalePriceThreshold
) {
ASSET = asset;
ASSET_FEED = assetFeed;
ASSET_DECIMALS = assetDecimals;
ASSET_FEED_DECIMALS = assetFeedDecimals;
ASSET_FEED_CHECK_TIMESTAMP = assetFeedCheckTimestamp;
ASSET_STALE_PRICE_THRESHOLD = assetStalePriceThreshold;
IS_USD_FEED = isUsdFeed; // If false, the feed is assumed to be ETH-denominated
if (isUsdFeed) {
ETH = eth;
ETH_FEED = ethFeed;
ETH_FEED_DECIMALS = ethFeedDecimals;
ETH_FEED_CHECK_TIMESTAMP = ethFeedCheckTimestamp;
ETH_STALE_PRICE_THRESHOLD = ethStalePriceThreshold;
}
}
function getValueInEth(address, uint256 amt) external view returns (uint256 value) {
uint256 assetPrice =
_getPrice(ASSET_FEED, ASSET_FEED_CHECK_TIMESTAMP, ASSET_STALE_PRICE_THRESHOLD, ASSET_FEED_DECIMALS, ASSET);
uint256 ethPrice = 1e18; // Default value when ASSET_FEED is ETH-denominated
if (IS_USD_FEED) {
ethPrice = _getPrice(ETH_FEED, ETH_FEED_CHECK_TIMESTAMP, ETH_STALE_PRICE_THRESHOLD, ETH_FEED_DECIMALS, ETH);
}
// Scale amt to 18 decimals
uint256 scaledAmt = amt;
if (ASSET_DECIMALS < 18) scaledAmt = amt * (10 ** (18 - ASSET_DECIMALS));
if (ASSET_DECIMALS > 18) scaledAmt = amt / (10 ** (ASSET_DECIMALS - 18));
return scaledAmt.mulDiv(assetPrice, ethPrice);
}
function _getPrice(
address feed,
bool checkTimestamp,
uint256 stalePriceThreshold,
uint256 feedDecimals,
address asset
)
internal
view
returns (uint256 scaledPrice)
{
(, int256 answer,, uint256 updatedAt,) = IAggregatorV3(feed).latestRoundData();
if (checkTimestamp) if (updatedAt < block.timestamp - stalePriceThreshold) revert AggV3Oracle_StalePrice(asset);
scaledPrice = uint256(answer);
if (feedDecimals < 18) scaledPrice = scaledPrice * (10 ** (18 - feedDecimals));
if (feedDecimals > 18) scaledPrice = scaledPrice / (10 ** (feedDecimals - 18));
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)
pragma solidity ^0.8.0;
/**
* @dev Standard math utilities missing in the Solidity language.
*/
library Math {
enum Rounding {
Down, // Toward negative infinity
Up, // Toward infinity
Zero // Toward zero
}
/**
* @dev Returns the largest of two numbers.
*/
function max(uint256 a, uint256 b) internal pure returns (uint256) {
return a > b ? a : b;
}
/**
* @dev Returns the smallest of two numbers.
*/
function min(uint256 a, uint256 b) internal pure returns (uint256) {
return a < b ? a : b;
}
/**
* @dev Returns the average of two numbers. The result is rounded towards
* zero.
*/
function average(uint256 a, uint256 b) internal pure returns (uint256) {
// (a + b) / 2 can overflow.
return (a & b) + (a ^ b) / 2;
}
/**
* @dev Returns the ceiling of the division of two numbers.
*
* This differs from standard division with `/` in that it rounds up instead
* of rounding down.
*/
function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
// (a + b - 1) / b can overflow on addition, so we distribute.
return a == 0 ? 0 : (a - 1) / b + 1;
}
/**
* @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0
* @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)
* with further edits by Uniswap Labs also under MIT license.
*/
function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {
unchecked {
// 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use
// use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256
// variables such that product = prod1 * 2^256 + prod0.
uint256 prod0; // Least significant 256 bits of the product
uint256 prod1; // Most significant 256 bits of the product
assembly {
let mm := mulmod(x, y, not(0))
prod0 := mul(x, y)
prod1 := sub(sub(mm, prod0), lt(mm, prod0))
}
// Handle non-overflow cases, 256 by 256 division.
if (prod1 == 0) {
// Solidity will revert if denominator == 0, unlike the div opcode on its own.
// The surrounding unchecked block does not change this fact.
// See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic.
return prod0 / denominator;
}
// Make sure the result is less than 2^256. Also prevents denominator == 0.
require(denominator > prod1, "Math: mulDiv overflow");
///////////////////////////////////////////////
// 512 by 256 division.
///////////////////////////////////////////////
// Make division exact by subtracting the remainder from [prod1 prod0].
uint256 remainder;
assembly {
// Compute remainder using mulmod.
remainder := mulmod(x, y, denominator)
// Subtract 256 bit number from 512 bit number.
prod1 := sub(prod1, gt(remainder, prod0))
prod0 := sub(prod0, remainder)
}
// Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.
// See https://cs.stackexchange.com/q/138556/92363.
// Does not overflow because the denominator cannot be zero at this stage in the function.
uint256 twos = denominator & (~denominator + 1);
assembly {
// Divide denominator by twos.
denominator := div(denominator, twos)
// Divide [prod1 prod0] by twos.
prod0 := div(prod0, twos)
// Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.
twos := add(div(sub(0, twos), twos), 1)
}
// Shift in bits from prod1 into prod0.
prod0 |= prod1 * twos;
// Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such
// that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for
// four bits. That is, denominator * inv = 1 mod 2^4.
uint256 inverse = (3 * denominator) ^ 2;
// Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works
// in modular arithmetic, doubling the correct bits in each step.
inverse *= 2 - denominator * inverse; // inverse mod 2^8
inverse *= 2 - denominator * inverse; // inverse mod 2^16
inverse *= 2 - denominator * inverse; // inverse mod 2^32
inverse *= 2 - denominator * inverse; // inverse mod 2^64
inverse *= 2 - denominator * inverse; // inverse mod 2^128
inverse *= 2 - denominator * inverse; // inverse mod 2^256
// Because the division is now exact we can divide by multiplying with the modular inverse of denominator.
// This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is
// less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1
// is no longer required.
result = prod0 * inverse;
return result;
}
}
/**
* @notice Calculates x * y / denominator with full precision, following the selected rounding direction.
*/
function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {
uint256 result = mulDiv(x, y, denominator);
if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {
result += 1;
}
return result;
}
/**
* @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.
*
* Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11).
*/
function sqrt(uint256 a) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
// For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.
//
// We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have
// `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.
//
// This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`
// → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`
// → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`
//
// Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.
uint256 result = 1 << (log2(a) >> 1);
// At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,
// since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at
// every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision
// into the expected uint128 result.
unchecked {
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
return min(result, a / result);
}
}
/**
* @notice Calculates sqrt(a), following the selected rounding direction.
*/
function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = sqrt(a);
return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);
}
}
/**
* @dev Return the log in base 2, rounded down, of a positive value.
* Returns 0 if given 0.
*/
function log2(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >> 128 > 0) {
value >>= 128;
result += 128;
}
if (value >> 64 > 0) {
value >>= 64;
result += 64;
}
if (value >> 32 > 0) {
value >>= 32;
result += 32;
}
if (value >> 16 > 0) {
value >>= 16;
result += 16;
}
if (value >> 8 > 0) {
value >>= 8;
result += 8;
}
if (value >> 4 > 0) {
value >>= 4;
result += 4;
}
if (value >> 2 > 0) {
value >>= 2;
result += 2;
}
if (value >> 1 > 0) {
result += 1;
}
}
return result;
}
/**
* @dev Return the log in base 2, following the selected rounding direction, of a positive value.
* Returns 0 if given 0.
*/
function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log2(value);
return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);
}
}
/**
* @dev Return the log in base 10, rounded down, of a positive value.
* Returns 0 if given 0.
*/
function log10(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >= 10 ** 64) {
value /= 10 ** 64;
result += 64;
}
if (value >= 10 ** 32) {
value /= 10 ** 32;
result += 32;
}
if (value >= 10 ** 16) {
value /= 10 ** 16;
result += 16;
}
if (value >= 10 ** 8) {
value /= 10 ** 8;
result += 8;
}
if (value >= 10 ** 4) {
value /= 10 ** 4;
result += 4;
}
if (value >= 10 ** 2) {
value /= 10 ** 2;
result += 2;
}
if (value >= 10 ** 1) {
result += 1;
}
}
return result;
}
/**
* @dev Return the log in base 10, following the selected rounding direction, of a positive value.
* Returns 0 if given 0.
*/
function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log10(value);
return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);
}
}
/**
* @dev Return the log in base 256, rounded down, of a positive value.
* Returns 0 if given 0.
*
* Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.
*/
function log256(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >> 128 > 0) {
value >>= 128;
result += 16;
}
if (value >> 64 > 0) {
value >>= 64;
result += 8;
}
if (value >> 32 > 0) {
value >>= 32;
result += 4;
}
if (value >> 16 > 0) {
value >>= 16;
result += 2;
}
if (value >> 8 > 0) {
result += 1;
}
}
return result;
}
/**
* @dev Return the log in base 256, following the selected rounding direction, of a positive value.
* Returns 0 if given 0.
*/
function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log256(value);
return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);
}
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
/*//////////////////////////////////////////////////////////////
IOracle
//////////////////////////////////////////////////////////////*/
/// @title IOracle
/// @notice Common interface for all oracle implementations
interface IOracle {
/// @notice Compute the equivalent ETH value for a given amount of a particular asset
/// @param asset Address of the asset to be priced
/// @param amt Amount of the given asset to be priced
/// @return valueInEth Equivalent ETH value for the given asset and amount, scaled by 18 decimals
function getValueInEth(address asset, uint256 amt) external view returns (uint256 valueInEth);
}{
"evmVersion": "shanghai",
"libraries": {},
"metadata": {
"appendCBOR": false,
"bytecodeHash": "none",
"useLiteralContent": false
},
"optimizer": {
"details": {
"constantOptimizer": true,
"yul": true,
"yulDetails": {
"stackAllocation": true
}
},
"enabled": true,
"runs": 1024
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"remappings": [
"forge-std/=lib/forge-std/src/",
"@redstone-oracles-monorepo/=lib/redstone-oracles-monorepo/",
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
"ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/",
"@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
"openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/",
"openzeppelin/=lib/openzeppelin-contracts-upgradeable/contracts/",
"redstone-oracles-monorepo/=lib/redstone-oracles-monorepo/"
],
"viaIR": false
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"asset","type":"address"},{"internalType":"address","name":"assetFeed","type":"address"},{"internalType":"uint256","name":"assetDecimals","type":"uint256"},{"internalType":"uint256","name":"assetFeedDecimals","type":"uint256"},{"internalType":"bool","name":"assetFeedCheckTimestamp","type":"bool"},{"internalType":"uint256","name":"assetStalePriceThreshold","type":"uint256"},{"internalType":"bool","name":"isUsdFeed","type":"bool"},{"internalType":"address","name":"eth","type":"address"},{"internalType":"address","name":"ethFeed","type":"address"},{"internalType":"uint256","name":"ethFeedDecimals","type":"uint256"},{"internalType":"bool","name":"ethFeedCheckTimestamp","type":"bool"},{"internalType":"uint256","name":"ethStalePriceThreshold","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"AggV3Oracle_StalePrice","type":"error"},{"inputs":[],"name":"ASSET","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ASSET_DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ASSET_FEED","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ASSET_FEED_CHECK_TIMESTAMP","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ASSET_FEED_DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ASSET_STALE_PRICE_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ETH_FEED","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ETH_FEED_CHECK_TIMESTAMP","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ETH_FEED_DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ETH_STALE_PRICE_THRESHOLD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"IS_USD_FEED","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"getValueInEth","outputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"view","type":"function"}]Contract Creation Code
610200604052348015610010575f80fd5b50604051610c4b380380610c4b83398101604081905261002f916100c9565b6001600160a01b03808d166080528b1660a05260c08a905260e089905287151561010052610120879052851580156101405261008e576001600160a01b03808616610160528416610180526101a08390528115156101c0526101e08190525b50505050505050505050505061017b565b80516001600160a01b03811681146100b5575f80fd5b919050565b805180151581146100b5575f80fd5b5f805f805f805f805f805f806101808d8f0312156100e5575f80fd5b6100ee8d61009f565b9b506100fc60208e0161009f565b9a5060408d0151995060608d0151985061011860808e016100ba565b975060a08d0151965061012d60c08e016100ba565b955061013b60e08e0161009f565b945061014a6101008e0161009f565b93506101208d015192506101616101408e016100ba565b91506101608d015190509295989b509295989b509295989b565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e0516109e56102665f395f818161011d015261043401525f81816101ee015261041301525f818161029d015261045501525f818161014401526103f201525f818161024f015261047601525f818161027601526103c901525f818160e3015261035601525f8181610190015261033501525f81816102c4015261037701525f81816102eb015281816104a2015281816104cc0152818161050e015261053a01525f8181610215015261031401525f81816101c7015261039801526109e55ff3fe608060405234801561000f575f80fd5b50600436106100da575f3560e01c80635917d26611610088578063e24727e711610063578063e24727e714610271578063e3677c0314610298578063f3353c3d146102bf578063f4db8984146102e6575f80fd5b80635917d2661461021057806375123700146102375780638322fff21461024a575f80fd5b80633847799f116100b85780633847799f1461018b5780634800d97f146101c257806350c8d27b146101e9575f80fd5b806301d22ef6146100de5780630778e44914610118578063246099061461013f575b5f80fd5b6101057f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6101057f000000000000000000000000000000000000000000000000000000000000000081565b6101667f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b6101b27f000000000000000000000000000000000000000000000000000000000000000081565b604051901515815260200161010f565b6101667f000000000000000000000000000000000000000000000000000000000000000081565b6101b27f000000000000000000000000000000000000000000000000000000000000000081565b6101667f000000000000000000000000000000000000000000000000000000000000000081565b6101056102453660046107dd565b61030d565b6101667f000000000000000000000000000000000000000000000000000000000000000081565b6101b27f000000000000000000000000000000000000000000000000000000000000000081565b6101057f000000000000000000000000000000000000000000000000000000000000000081565b6101057f000000000000000000000000000000000000000000000000000000000000000081565b6101057f000000000000000000000000000000000000000000000000000000000000000081565b5f806103bc7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061058d565b9050670de0b6b3a76400007f00000000000000000000000000000000000000000000000000000000000000001561049d5761049a7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061058d565b90505b8360127f0000000000000000000000000000000000000000000000000000000000000000101561050a576104f27f00000000000000000000000000000000000000000000000000000000000000006012610833565b6104fd90600a610926565b6105079086610931565b90505b60127f000000000000000000000000000000000000000000000000000000000000000011156105765761055e60127f0000000000000000000000000000000000000000000000000000000000000000610833565b61056990600a610926565b610573908661095c565b90505b6105818184846106d0565b93505050505b92915050565b5f805f8773ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156105d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105fd9190610999565b50935050925050861561066a576106148642610833565b81101561066a576040517f6e14178400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024015b60405180910390fd5b819250601285101561069957610681856012610833565b61068c90600a610926565b6106969084610931565b92505b60128511156106c5576106ad601286610833565b6106b890600a610926565b6106c2908461095c565b92505b505095945050505050565b5f80805f19858709858702925082811083820303915050805f03610707578382816106fd576106fd610948565b04925050506107d6565b808411610770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d6174683a206d756c446976206f766572666c6f7700000000000000000000006044820152606401610661565b5f848688098519600190810187169687900496828603819004959092119093035f82900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b5f80604083850312156107ee575f80fd5b823573ffffffffffffffffffffffffffffffffffffffff81168114610811575f80fd5b946020939093013593505050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156105875761058761081f565b600181815b8085111561088057815f19048211156108665761086661081f565b8085161561087357918102915b93841c939080029061084b565b509250929050565b5f8261089657506001610587565b816108a257505f610587565b81600181146108b857600281146108c2576108de565b6001915050610587565b60ff8411156108d3576108d361081f565b50506001821b610587565b5060208310610133831016604e8410600b8410161715610901575081810a610587565b61090b8383610846565b805f190482111561091e5761091e61081f565b029392505050565b5f6107d68383610888565b80820281158282048414176105875761058761081f565b634e487b7160e01b5f52601260045260245ffd5b5f8261097657634e487b7160e01b5f52601260045260245ffd5b500490565b805169ffffffffffffffffffff81168114610994575f80fd5b919050565b5f805f805f60a086880312156109ad575f80fd5b6109b68661097b565b94506020860151935060408601519250606086015191506109d96080870161097b565b90509295509295909350560000000000000000000000005555555555555555555555555555555555555555000000000000000000000000a8a94da411425634e3ed6c331a32ab4fd774aa4300000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000054600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000004bad96dd1c7d541270a0c92e1d4e5f12eeea7a57000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000005460
Deployed Bytecode
0x608060405234801561000f575f80fd5b50600436106100da575f3560e01c80635917d26611610088578063e24727e711610063578063e24727e714610271578063e3677c0314610298578063f3353c3d146102bf578063f4db8984146102e6575f80fd5b80635917d2661461021057806375123700146102375780638322fff21461024a575f80fd5b80633847799f116100b85780633847799f1461018b5780634800d97f146101c257806350c8d27b146101e9575f80fd5b806301d22ef6146100de5780630778e44914610118578063246099061461013f575b5f80fd5b6101057f000000000000000000000000000000000000000000000000000000000000546081565b6040519081526020015b60405180910390f35b6101057f000000000000000000000000000000000000000000000000000000000000546081565b6101667f0000000000000000000000004bad96dd1c7d541270a0c92e1d4e5f12eeea7a5781565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161010f565b6101b27f000000000000000000000000000000000000000000000000000000000000000181565b604051901515815260200161010f565b6101667f000000000000000000000000555555555555555555555555555555555555555581565b6101b27f000000000000000000000000000000000000000000000000000000000000000181565b6101667f000000000000000000000000a8a94da411425634e3ed6c331a32ab4fd774aa4381565b6101056102453660046107dd565b61030d565b6101667f000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b6101b27f000000000000000000000000000000000000000000000000000000000000000181565b6101057f000000000000000000000000000000000000000000000000000000000000000881565b6101057f000000000000000000000000000000000000000000000000000000000000000881565b6101057f000000000000000000000000000000000000000000000000000000000000001281565b5f806103bc7f000000000000000000000000a8a94da411425634e3ed6c331a32ab4fd774aa437f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000054607f00000000000000000000000000000000000000000000000000000000000000087f000000000000000000000000555555555555555555555555555555555555555561058d565b9050670de0b6b3a76400007f00000000000000000000000000000000000000000000000000000000000000011561049d5761049a7f0000000000000000000000004bad96dd1c7d541270a0c92e1d4e5f12eeea7a577f00000000000000000000000000000000000000000000000000000000000000017f00000000000000000000000000000000000000000000000000000000000054607f00000000000000000000000000000000000000000000000000000000000000087f000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee61058d565b90505b8360127f0000000000000000000000000000000000000000000000000000000000000012101561050a576104f27f00000000000000000000000000000000000000000000000000000000000000126012610833565b6104fd90600a610926565b6105079086610931565b90505b60127f000000000000000000000000000000000000000000000000000000000000001211156105765761055e60127f0000000000000000000000000000000000000000000000000000000000000012610833565b61056990600a610926565b610573908661095c565b90505b6105818184846106d0565b93505050505b92915050565b5f805f8773ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156105d9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105fd9190610999565b50935050925050861561066a576106148642610833565b81101561066a576040517f6e14178400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024015b60405180910390fd5b819250601285101561069957610681856012610833565b61068c90600a610926565b6106969084610931565b92505b60128511156106c5576106ad601286610833565b6106b890600a610926565b6106c2908461095c565b92505b505095945050505050565b5f80805f19858709858702925082811083820303915050805f03610707578382816106fd576106fd610948565b04925050506107d6565b808411610770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d6174683a206d756c446976206f766572666c6f7700000000000000000000006044820152606401610661565b5f848688098519600190810187169687900496828603819004959092119093035f82900391909104909201919091029190911760038402600290811880860282030280860282030280860282030280860282030280860282030280860290910302029150505b9392505050565b5f80604083850312156107ee575f80fd5b823573ffffffffffffffffffffffffffffffffffffffff81168114610811575f80fd5b946020939093013593505050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156105875761058761081f565b600181815b8085111561088057815f19048211156108665761086661081f565b8085161561087357918102915b93841c939080029061084b565b509250929050565b5f8261089657506001610587565b816108a257505f610587565b81600181146108b857600281146108c2576108de565b6001915050610587565b60ff8411156108d3576108d361081f565b50506001821b610587565b5060208310610133831016604e8410600b8410161715610901575081810a610587565b61090b8383610846565b805f190482111561091e5761091e61081f565b029392505050565b5f6107d68383610888565b80820281158282048414176105875761058761081f565b634e487b7160e01b5f52601260045260245ffd5b5f8261097657634e487b7160e01b5f52601260045260245ffd5b500490565b805169ffffffffffffffffffff81168114610994575f80fd5b919050565b5f805f805f60a086880312156109ad575f80fd5b6109b68661097b565b94506020860151935060408601519250606086015191506109d96080870161097b565b9050929550929590935056
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005555555555555555555555555555555555555555000000000000000000000000a8a94da411425634e3ed6c331a32ab4fd774aa4300000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000054600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee0000000000000000000000004bad96dd1c7d541270a0c92e1d4e5f12eeea7a57000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000005460
-----Decoded View---------------
Arg [0] : asset (address): 0x5555555555555555555555555555555555555555
Arg [1] : assetFeed (address): 0xa8a94Da411425634e3Ed6C331a32ab4fd774aa43
Arg [2] : assetDecimals (uint256): 18
Arg [3] : assetFeedDecimals (uint256): 8
Arg [4] : assetFeedCheckTimestamp (bool): True
Arg [5] : assetStalePriceThreshold (uint256): 21600
Arg [6] : isUsdFeed (bool): True
Arg [7] : eth (address): 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE
Arg [8] : ethFeed (address): 0x4BAD96DD1C7D541270a0C92e1D4e5f12EEEA7a57
Arg [9] : ethFeedDecimals (uint256): 8
Arg [10] : ethFeedCheckTimestamp (bool): True
Arg [11] : ethStalePriceThreshold (uint256): 21600
-----Encoded View---------------
12 Constructor Arguments found :
Arg [0] : 0000000000000000000000005555555555555555555555555555555555555555
Arg [1] : 000000000000000000000000a8a94da411425634e3ed6c331a32ab4fd774aa43
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [5] : 0000000000000000000000000000000000000000000000000000000000005460
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [7] : 000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
Arg [8] : 0000000000000000000000004bad96dd1c7d541270a0c92e1d4e5f12eeea7a57
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000008
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [11] : 0000000000000000000000000000000000000000000000000000000000005460
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.