Source Code
Overview
MON Balance
MON Value
$0.00| Transaction Hash |
Method
|
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 | ||||
|---|---|---|---|---|---|---|---|
| 51299308 | 49 secs ago | 0 MON | |||||
| 51299308 | 49 secs ago | 0 MON | |||||
| 51299308 | 49 secs ago | 0 MON | |||||
| 51297494 | 12 mins ago | 0 MON | |||||
| 51297494 | 12 mins ago | 0 MON | |||||
| 51297494 | 12 mins ago | 0 MON | |||||
| 51296537 | 19 mins ago | 0 MON | |||||
| 51296537 | 19 mins ago | 0 MON | |||||
| 51296537 | 19 mins ago | 0 MON | |||||
| 51294876 | 30 mins ago | 0 MON | |||||
| 51294876 | 30 mins ago | 0 MON | |||||
| 51294876 | 30 mins ago | 0 MON | |||||
| 51294589 | 32 mins ago | 0 MON | |||||
| 51294589 | 32 mins ago | 0 MON | |||||
| 51294589 | 32 mins ago | 0 MON | |||||
| 51294134 | 35 mins ago | 0 MON | |||||
| 51294134 | 35 mins ago | 0 MON | |||||
| 51294134 | 35 mins ago | 0 MON | |||||
| 51293284 | 40 mins ago | 0 MON | |||||
| 51293284 | 40 mins ago | 0 MON | |||||
| 51293284 | 40 mins ago | 0 MON | |||||
| 51293212 | 41 mins ago | 0 MON | |||||
| 51293212 | 41 mins ago | 0 MON | |||||
| 51293212 | 41 mins ago | 0 MON | |||||
| 51292582 | 45 mins ago | 0 MON |
Loading...
Loading
Contract Name:
ChainlinkRatioOracleAggregator
Compiler Version
v0.8.10+commit.fc410830
Optimization Enabled:
Yes with 100000 runs
Other Settings:
berlin EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.8.10;
import {AggregatorInterface} from "@aave/core-v3/contracts/dependencies/chainlink/AggregatorInterface.sol";
import {AggregatorV3Interface} from "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol";
/// @notice Thrown when ratio aggregator address is zero
error RatioAggregatorZeroAddress();
/// @notice Thrown when base aggregator address is zero
error BaseAggregatorZeroAddress();
/// @notice Thrown when ratio price is less than or equal to zero
error InvalidRatio();
/// @notice Thrown when base price is less than or equal to zero
error InvalidBasePrice();
/// @notice Thrown when oracle data is too old based on maxDelay
/// @param currentTime Current block timestamp
/// @param updatedAt Timestamp when the price was last updated
/// @param maxTime Maximum allowed timestamp (updatedAt + maxDelay)
error PriceTooOld(uint256 currentTime, uint256 updatedAt, uint256 maxTime);
/// @notice Thrown when oracle round is stale or incomplete (answeredInRound < roundId or updatedAt == 0)
error StaleRound();
/// @notice Thrown when oracle decimals exceed maximum allowed value (18)
error InvalidDecimals();
/**
* @title ChainlinkRatioOracleAggregator
* @author Neverland
* @notice Combines two Chainlink price feeds to create a derived price feed
* @dev Example: earnAUSD/AUSD (ratio) × AUSD/USD (base) = earnAUSD/USD
*/
contract ChainlinkRatioOracleAggregator is AggregatorInterface, AggregatorV3Interface {
/// @notice The ratio aggregator (e.g., earnAUSD/AUSD exchange rate)
AggregatorV3Interface public immutable ratioAggregator;
/// @notice The base price aggregator (e.g., AUSD/USD price feed)
AggregatorV3Interface public immutable baseAggregator;
/// @notice Maximum allowed staleness in seconds (0 = disabled)
uint256 public immutable maxDelay;
/// @notice Number of decimals for the ratio aggregator
uint8 public immutable ratioDecimals;
/// @notice Number of decimals for the base aggregator
uint8 public immutable baseDecimals;
/// @dev Target output decimals (Aave standard)
uint256 private constant TARGET_DECIMALS = 8;
/**
* @param _ratioAggregator Address of the ratio aggregator (e.g., earnAUSD/AUSD)
* @param _baseAggregator Address of the base USD aggregator (e.g., AUSD/USD)
* @param _maxDelay Maximum allowed staleness in seconds (0 = disabled, not recommended)
* @dev WARNING: Setting maxDelay=0 disables ALL staleness checks. Use with caution.
*/
constructor(address _ratioAggregator, address _baseAggregator, uint256 _maxDelay) {
if (_ratioAggregator == address(0)) revert RatioAggregatorZeroAddress();
if (_baseAggregator == address(0)) revert BaseAggregatorZeroAddress();
ratioAggregator = AggregatorV3Interface(_ratioAggregator);
baseAggregator = AggregatorV3Interface(_baseAggregator);
maxDelay = _maxDelay;
ratioDecimals = ratioAggregator.decimals();
baseDecimals = baseAggregator.decimals();
// Bound decimals to prevent DoS via excessive exponentiation
if (ratioDecimals > 18 || baseDecimals > 18) revert InvalidDecimals();
}
/**
* @notice Returns the current derived price (ratio × base)
* @dev Validates completeness and freshness of both feeds before computation
* @return The derived price scaled to 8 decimals
*/
function latestAnswer() external view override returns (int256) {
(uint80 roundId, int256 ratio,, uint256 ratioUpdatedAt, uint80 answeredInRound) =
ratioAggregator.latestRoundData();
if (ratio <= 0) revert InvalidRatio();
_ensureComplete(ratioUpdatedAt, roundId, answeredInRound);
(uint80 baseRoundId, int256 basePrice,, uint256 baseUpdatedAt, uint80 baseAnsweredInRound) =
baseAggregator.latestRoundData();
if (basePrice <= 0) revert InvalidBasePrice();
_ensureComplete(baseUpdatedAt, baseRoundId, baseAnsweredInRound);
return _computePrice(ratio, basePrice);
}
/**
* @notice Returns the most recent update timestamp
* @dev Returns the older of the two feed timestamps for conservative accuracy
* @return The timestamp of the oldest recent update
*/
function latestTimestamp() external view override returns (uint256) {
(uint80 roundId,,, uint256 ratioUpdatedAt, uint80 answeredInRound) = ratioAggregator.latestRoundData();
_ensureComplete(ratioUpdatedAt, roundId, answeredInRound);
(uint80 baseRoundId,,, uint256 baseUpdatedAt, uint80 baseAnsweredInRound) = baseAggregator.latestRoundData();
_ensureComplete(baseUpdatedAt, baseRoundId, baseAnsweredInRound);
// Return the older of the two timestamps (most conservative)
return ratioUpdatedAt < baseUpdatedAt ? ratioUpdatedAt : baseUpdatedAt;
}
/**
* @notice Returns the latest round ID from the ratio feed
* @return The most recent round ID from the ratio aggregator
*/
function latestRound() external view override returns (uint256) {
(uint80 roundId,,,,) = ratioAggregator.latestRoundData();
return uint256(roundId);
}
/**
* @notice Legacy compatibility function - ONLY supports latest round
* @dev DEPRECATED: Only works for the current latest round to prevent time-misaligned data.
* Historical queries would mix old ratio × current base, producing incorrect results.
* For current data: use latestAnswer() instead.
* For historical data: this aggregator cannot provide time-accurate historical prices.
* @param roundId The round ID (must be latest round from ratio aggregator, else returns 0)
* @return Latest derived price if roundId matches current round, 0 otherwise
*/
function getAnswer(uint256 roundId) external view override returns (int256) {
// Only support latest round to prevent historical time-misalignment
(uint80 latestRoundId,,,,) = ratioAggregator.latestRoundData();
// Return 0 for any historical round query to prevent misuse
if (roundId != uint256(latestRoundId)) return 0;
// For latest round, delegate to latestAnswer with full validation
try this.latestAnswer() returns (int256 answer) {
return answer;
} catch {
return 0;
}
}
/**
* @notice Legacy compatibility function - ONLY supports latest round
* @dev DEPRECATED: Only works for the current latest round to prevent time-misaligned data.
* Historical queries would return timestamp from old ratio round but current base state.
* For current data: use latestTimestamp() instead.
* For historical data: this aggregator cannot provide time-accurate historical timestamps.
* @param roundId The round ID (must be latest round from ratio aggregator, else returns 0)
* @return Latest timestamp if roundId matches current round, 0 otherwise
*/
function getTimestamp(uint256 roundId) external view override returns (uint256) {
// Only support latest round to prevent historical time-misalignment
(uint80 latestRoundId,,,,) = ratioAggregator.latestRoundData();
// Return 0 for any historical round query to prevent misuse
if (roundId != uint256(latestRoundId)) return 0;
// For latest round, delegate to latestTimestamp with full validation
try this.latestTimestamp() returns (uint256 timestamp) {
return timestamp;
} catch {
return 0;
}
}
/**
* @notice Returns the number of decimals in the derived price
* @return Always returns 8 (Aave oracle standard)
*/
function decimals() external pure override returns (uint8) {
return uint8(TARGET_DECIMALS);
}
/**
* @notice Returns a human-readable description of this aggregator
* @return Concatenated description: "[ratio description] * [base description]"
*/
function description() external view override returns (string memory) {
return string(abi.encodePacked(ratioAggregator.description(), " * ", baseAggregator.description()));
}
/**
* @notice Returns the aggregator version
* @return Always returns 1
*/
function version() external pure override returns (uint256) {
return 1;
}
/**
* @notice Returns the latest round data with derived price
* @dev Validates completeness and freshness of both feeds
* @return roundId The round ID from the ratio aggregator
* @return answer The derived price (ratio × base) scaled to 8 decimals
* @return startedAt The timestamp when the ratio round started
* @return updatedAt The conservative timestamp (older of ratio/base updates)
* @return answeredInRound The round in which the ratio answer was computed
*/
function latestRoundData()
external
view
override
returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)
{
// Get ratio data
(roundId, answer, startedAt, updatedAt, answeredInRound) = ratioAggregator.latestRoundData();
if (answer <= 0) revert InvalidRatio();
_ensureComplete(updatedAt, roundId, answeredInRound);
// Get base price data
(uint80 baseRoundId, int256 basePrice,, uint256 baseUpdatedAt, uint80 baseAnsweredInRound) =
baseAggregator.latestRoundData();
if (basePrice <= 0) revert InvalidBasePrice();
_ensureComplete(baseUpdatedAt, baseRoundId, baseAnsweredInRound);
// Use the older timestamp (most conservative)
if (baseUpdatedAt < updatedAt) {
updatedAt = baseUpdatedAt;
}
// Compute final price
answer = _computePrice(answer, basePrice);
}
/**
* @notice Returns round data - ONLY supports latest round
* @dev CRITICAL: Only works for the current latest round to prevent time-misaligned data.
* Historical queries would produce:
* - answer: ratio[old] × basePrice[current] ← INCORRECT time alignment
* - updatedAt: mixed timestamp that doesn't represent either feed's state
*
* This would break:
* - Time-weighted average price (TWAP) calculations
* - Historical price audits and proofs
* - Any system requiring time-consistent data
*
* For current data: use latestRoundData() instead.
* For historical data: this aggregator CANNOT provide time-accurate historical prices.
*
* @param requestedRoundId The round ID (must be latest, else reverts)
* @return roundId The latest round ID from ratio aggregator
* @return answer The latest derived price scaled to 8 decimals
* @return startedAt The timestamp when the latest ratio round started
* @return updatedAt The conservative timestamp (older of latest ratio/base updates)
* @return answeredInRound The latest answered in round from ratio aggregator
*/
function getRoundData(uint80 requestedRoundId)
external
view
override
returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)
{
// Only support latest round to prevent historical time-misalignment
(uint80 latestRoundId,,,,) = ratioAggregator.latestRoundData();
// Revert on historical queries to prevent dangerous misuse
if (requestedRoundId != latestRoundId) revert StaleRound();
// Delegate to latestRoundData for full validation
return this.latestRoundData();
}
/**
* @notice Validates round completeness and freshness per Chainlink best practices (reverts on failure)
* @param updatedAt The timestamp when the round was updated
* @param roundId The round ID
* @param answeredInRound The round in which the answer was computed
*/
function _ensureComplete(uint256 updatedAt, uint80 roundId, uint80 answeredInRound) internal view {
// Check round is complete: answeredInRound should be >= roundId
if (answeredInRound < roundId) revert StaleRound();
// Check round was actually updated (not uninitialized)
if (updatedAt == 0) revert StaleRound();
// Check freshness if maxDelay is configured
if (maxDelay > 0 && updatedAt + maxDelay < block.timestamp) {
revert PriceTooOld(block.timestamp, updatedAt, updatedAt + maxDelay);
}
}
/**
* @notice Checks round completeness and freshness (returns false instead of reverting)
* @dev Used in try-catch compatibility helpers that return 0 on invalid data
* @param updatedAt The timestamp when the round was updated
* @param roundId The round ID
* @param answeredInRound The round in which the answer was computed
* @return true if round is complete and fresh, false otherwise
*/
function _isComplete(uint256 updatedAt, uint80 roundId, uint80 answeredInRound) internal view returns (bool) {
// Check round is complete: answeredInRound should be >= roundId
if (answeredInRound < roundId) return false;
// Check round was actually updated (not uninitialized)
if (updatedAt == 0) return false;
// Check freshness if maxDelay is configured
if (maxDelay > 0 && updatedAt + maxDelay < block.timestamp) return false;
return true;
}
/**
* @notice Computes the final price by multiplying ratio * basePrice
* @dev Formula: (ratio * basePrice) / 10^ratioDecimals, then scale to TARGET_DECIMALS
* @param ratio The ratio value (e.g., earnAUSD/AUSD)
* @param basePrice The base price in USD (e.g., AUSD/USD)
* @return The final price scaled to TARGET_DECIMALS
*/
function _computePrice(int256 ratio, int256 basePrice) internal view returns (int256) {
// Multiply ratio * basePrice, then divide by ratio decimals to get proper scaling
int256 scaled = (ratio * basePrice) / int256(10 ** ratioDecimals);
// Adjust to TARGET_DECIMALS based on baseDecimals
if (baseDecimals > TARGET_DECIMALS) {
uint256 diff = baseDecimals - TARGET_DECIMALS;
scaled /= int256(10 ** diff);
} else if (baseDecimals < TARGET_DECIMALS) {
uint256 diff = TARGET_DECIMALS - baseDecimals;
scaled *= int256(10 ** diff);
}
return scaled;
}
}// SPDX-License-Identifier: MIT
// Chainlink Contracts v0.8
pragma solidity ^0.8.0;
interface AggregatorInterface {
function latestAnswer() external view returns (int256);
function latestTimestamp() external view returns (uint256);
function latestRound() external view returns (uint256);
function getAnswer(uint256 roundId) external view returns (int256);
function getTimestamp(uint256 roundId) external view returns (uint256);
event AnswerUpdated(int256 indexed current, uint256 indexed roundId, uint256 updatedAt);
event NewRound(uint256 indexed roundId, address indexed startedBy, uint256 startedAt);
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
// solhint-disable-next-line interface-starts-with-i
interface AggregatorV3Interface {
function decimals() external view returns (uint8);
function description() external view returns (string memory);
function version() external view returns (uint256);
function getRoundData(
uint80 _roundId
) external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);
function latestRoundData()
external
view
returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);
}{
"optimizer": {
"enabled": true,
"runs": 100000
},
"evmVersion": "berlin",
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"metadata": {
"useLiteralContent": true
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_ratioAggregator","type":"address"},{"internalType":"address","name":"_baseAggregator","type":"address"},{"internalType":"uint256","name":"_maxDelay","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"BaseAggregatorZeroAddress","type":"error"},{"inputs":[],"name":"InvalidBasePrice","type":"error"},{"inputs":[],"name":"InvalidDecimals","type":"error"},{"inputs":[],"name":"InvalidRatio","type":"error"},{"inputs":[{"internalType":"uint256","name":"currentTime","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint256","name":"maxTime","type":"uint256"}],"name":"PriceTooOld","type":"error"},{"inputs":[],"name":"RatioAggregatorZeroAddress","type":"error"},{"inputs":[],"name":"StaleRound","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"int256","name":"current","type":"int256"},{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"updatedAt","type":"uint256"}],"name":"AnswerUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"roundId","type":"uint256"},{"indexed":true,"internalType":"address","name":"startedBy","type":"address"},{"indexed":false,"internalType":"uint256","name":"startedAt","type":"uint256"}],"name":"NewRound","type":"event"},{"inputs":[],"name":"baseAggregator","outputs":[{"internalType":"contract AggregatorV3Interface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseDecimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"roundId","type":"uint256"}],"name":"getAnswer","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint80","name":"requestedRoundId","type":"uint80"}],"name":"getRoundData","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":"uint256","name":"roundId","type":"uint256"}],"name":"getTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestAnswer","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"latestTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ratioAggregator","outputs":[{"internalType":"contract AggregatorV3Interface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ratioDecimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"}]Contract Creation Code
6101206040523480156200001257600080fd5b506040516200197e3803806200197e8339810160408190526200003591620001de565b6001600160a01b0383166200005d57604051630ce76f1160e11b815260040160405180910390fd5b6001600160a01b038216620000855760405163bf1c16e960e01b815260040160405180910390fd5b6001600160a01b03808416608081905290831660a05260c08290526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa158015620000dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010291906200021f565b60ff1660e08160ff168152505060a0516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000150573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017691906200021f565b60ff9081166101005260e05160129116118062000199575060126101005160ff16115b15620001b857604051630692acc560e51b815260040160405180910390fd5b5050506200024b565b80516001600160a01b0381168114620001d957600080fd5b919050565b600080600060608486031215620001f457600080fd5b620001ff84620001c1565b92506200020f60208501620001c1565b9150604084015190509250925092565b6000602082840312156200023257600080fd5b815160ff811681146200024457600080fd5b9392505050565b60805160a05160c05160e051610100516116636200031b6000396000818161014401528181610fbd01528181610ff001528181611038015261106901526000818160ff0152610f7d01526000818161029001528181610ea401528181610ed10152610f04015260008181610269015281816103a7015281816105f80152818161077b0152610d190152600081816101ad015281816102c40152818161049e01528181610547015281816106d401528181610840015281816109ab01528181610af80152610c3301526116636000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80638205bf6a11610097578063b633620c11610066578063b633620c14610251578063b9692bd214610264578063ed49d2f81461028b578063feaf968c146102b257600080fd5b80638205bf6a146101a0578063958ee0e4146101a85780639a6fc8f5146101f4578063b5ab58dc1461023e57600080fd5b806350d25bcd116100d357806350d25bcd1461016657806354fd4d501461017c578063668a0f02146101835780637284e4161461018b57600080fd5b80631518af76146100fa578063313ce5671461013857806333f761781461013f575b600080fd5b6101217f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff90911681526020015b60405180910390f35b6008610121565b6101217f000000000000000000000000000000000000000000000000000000000000000081565b61016e6102ba565b60405190815260200161012f565b600161016e565b61016e610499565b610193610543565b60405161012f91906110e4565b61016e6106cc565b6101cf7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161012f565b610207610202366004611150565b610835565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a00161012f565b61016e61024c36600461116d565b6109a6565b61016e61025f36600461116d565b610af3565b6101cf7f000000000000000000000000000000000000000000000000000000000000000081565b61016e7f000000000000000000000000000000000000000000000000000000000000000081565b610207610c29565b60008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561032d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103519190611186565b94509450509350935060008313610394576040517f648564d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61039f828583610e17565b6000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610410573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104349190611186565b94509450509350935060008313610477576040517fb2c4287100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610482828583610e17565b61048c8784610f75565b9850505050505050505090565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610507573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052b9190611186565b505069ffffffffffffffffffff909216949350505050565b60607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637284e4166040518163ffffffff1660e01b8152600401600060405180830381865afa1580156105b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105f6919081019061120d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637284e4166040518163ffffffff1660e01b8152600401600060405180830381865afa158015610661573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526106a7919081019061120d565b6040516020016106b89291906112d8565b604051602081830303815290604052905090565b6000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561073d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107619190611186565b9450945050509250610774828483610e17565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108089190611186565b945094505050925061081b828483610e17565b818510610828578161082a565b845b965050505050505090565b6000806000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156108a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108cd9190611186565b5050505090508069ffffffffffffffffffff168769ffffffffffffffffffff1614610924576040517f04d2887100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561096f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109939190611186565b939b929a50909850965090945092505050565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610a14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a389190611186565b5050505090508069ffffffffffffffffffff168314610a5a5750600092915050565b3073ffffffffffffffffffffffffffffffffffffffff166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610adf575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610adc91810190611330565b60015b610aec5750600092915050565b9392505050565b6000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610b61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b859190611186565b5050505090508069ffffffffffffffffffff168314610ba75750600092915050565b3073ffffffffffffffffffffffffffffffffffffffff16638205bf6a6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610adf575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610adc91810190611330565b60008060008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610c9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc09190611186565b93985091965094509250905060008413610d06576040517f648564d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d11828683610e17565b6000806000807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610d82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da69190611186565b94509450509350935060008313610de9576040517fb2c4287100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610df4828583610e17565b85821015610e00578195505b610e0a8884610f75565b9750505050509091929394565b8169ffffffffffffffffffff168169ffffffffffffffffffff161015610e69576040517f04d2887100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82610ea0576040517f04d2887100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000000118015610ef8575042610ef67f000000000000000000000000000000000000000000000000000000000000000085611378565b105b15610f70574283610f297f000000000000000000000000000000000000000000000000000000000000000082611378565b6040517f4253334a00000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152604482015260640160405180910390fd5b505050565b600080610fa37f0000000000000000000000000000000000000000000000000000000000000000600a6114b0565b610fad84866114bf565b610fb7919061157b565b905060087f000000000000000000000000000000000000000000000000000000000000000060ff161115611034576000611015600860ff7f00000000000000000000000000000000000000000000000000000000000000001661160a565b905061102281600a611621565b61102c908361157b565b9150506110ab565b60087f000000000000000000000000000000000000000000000000000000000000000060ff1610156110ab57600061109060ff7f000000000000000000000000000000000000000000000000000000000000000016600861160a565b905061109d81600a611621565b6110a790836114bf565b9150505b90505b92915050565b60005b838110156110cf5781810151838201526020016110b7565b838111156110de576000848401525b50505050565b60208152600082518060208401526111038160408501602087016110b4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b69ffffffffffffffffffff8116811461114d57600080fd5b50565b60006020828403121561116257600080fd5b81356110ab81611135565b60006020828403121561117f57600080fd5b5035919050565b600080600080600060a0868803121561119e57600080fd5b85516111a981611135565b8095505060208601519350604086015192506060860151915060808601516111d081611135565b809150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561121f57600080fd5b815167ffffffffffffffff8082111561123757600080fd5b818401915084601f83011261124b57600080fd5b81518181111561125d5761125d6111de565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156112a3576112a36111de565b816040528281528760208487010111156112bc57600080fd5b6112cd8360208301602088016110b4565b979650505050505050565b600083516112ea8184602088016110b4565b7f202a20000000000000000000000000000000000000000000000000000000000090830190815283516113248160038401602088016110b4565b01600301949350505050565b60006020828403121561134257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561138b5761138b611349565b500190565b600181815b808511156113e957817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156113cf576113cf611349565b808516156113dc57918102915b93841c9390800290611395565b509250929050565b600082611400575060016110ae565b8161140d575060006110ae565b8160018114611423576002811461142d57611449565b60019150506110ae565b60ff84111561143e5761143e611349565b50506001821b6110ae565b5060208310610133831016604e8410600b841016171561146c575081810a6110ae565b6114768383611390565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156114a8576114a8611349565b029392505050565b6000610aec60ff8416836113f1565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561150057611500611349565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561153b5761153b611349565b6000871292508782058712848416161561155757611557611349565b8785058712818416161561156d5761156d611349565b505050929093029392505050565b6000826115b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561160557611605611349565b500590565b60008282101561161c5761161c611349565b500390565b6000610aec83836113f156fea26469706673582212209fb89eae542da540533806733b804a7e480f570da4bd884086ddaf1dbaacc26d64736f6c634300080a003300000000000000000000000066608681545aaa50d9ebdbd9542feea4e49b85da000000000000000000000000e20751c7b5867bcbef815ffc1b284c3f412a9e130000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80638205bf6a11610097578063b633620c11610066578063b633620c14610251578063b9692bd214610264578063ed49d2f81461028b578063feaf968c146102b257600080fd5b80638205bf6a146101a0578063958ee0e4146101a85780639a6fc8f5146101f4578063b5ab58dc1461023e57600080fd5b806350d25bcd116100d357806350d25bcd1461016657806354fd4d501461017c578063668a0f02146101835780637284e4161461018b57600080fd5b80631518af76146100fa578063313ce5671461013857806333f761781461013f575b600080fd5b6101217f000000000000000000000000000000000000000000000000000000000000001281565b60405160ff90911681526020015b60405180910390f35b6008610121565b6101217f000000000000000000000000000000000000000000000000000000000000000881565b61016e6102ba565b60405190815260200161012f565b600161016e565b61016e610499565b610193610543565b60405161012f91906110e4565b61016e6106cc565b6101cf7f00000000000000000000000066608681545aaa50d9ebdbd9542feea4e49b85da81565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161012f565b610207610202366004611150565b610835565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a00161012f565b61016e61024c36600461116d565b6109a6565b61016e61025f36600461116d565b610af3565b6101cf7f000000000000000000000000e20751c7b5867bcbef815ffc1b284c3f412a9e1381565b61016e7f000000000000000000000000000000000000000000000000000000000000000081565b610207610c29565b60008060008060007f00000000000000000000000066608681545aaa50d9ebdbd9542feea4e49b85da73ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561032d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103519190611186565b94509450509350935060008313610394576040517f648564d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61039f828583610e17565b6000806000807f000000000000000000000000e20751c7b5867bcbef815ffc1b284c3f412a9e1373ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610410573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104349190611186565b94509450509350935060008313610477576040517fb2c4287100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610482828583610e17565b61048c8784610f75565b9850505050505050505090565b6000807f00000000000000000000000066608681545aaa50d9ebdbd9542feea4e49b85da73ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610507573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052b9190611186565b505069ffffffffffffffffffff909216949350505050565b60607f00000000000000000000000066608681545aaa50d9ebdbd9542feea4e49b85da73ffffffffffffffffffffffffffffffffffffffff16637284e4166040518163ffffffff1660e01b8152600401600060405180830381865afa1580156105b0573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526105f6919081019061120d565b7f000000000000000000000000e20751c7b5867bcbef815ffc1b284c3f412a9e1373ffffffffffffffffffffffffffffffffffffffff16637284e4166040518163ffffffff1660e01b8152600401600060405180830381865afa158015610661573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526106a7919081019061120d565b6040516020016106b89291906112d8565b604051602081830303815290604052905090565b6000806000807f00000000000000000000000066608681545aaa50d9ebdbd9542feea4e49b85da73ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561073d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107619190611186565b9450945050509250610774828483610e17565b60008060007f000000000000000000000000e20751c7b5867bcbef815ffc1b284c3f412a9e1373ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108089190611186565b945094505050925061081b828483610e17565b818510610828578161082a565b845b965050505050505090565b6000806000806000807f00000000000000000000000066608681545aaa50d9ebdbd9542feea4e49b85da73ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156108a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108cd9190611186565b5050505090508069ffffffffffffffffffff168769ffffffffffffffffffff1614610924576040517f04d2887100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa15801561096f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109939190611186565b939b929a50909850965090945092505050565b6000807f00000000000000000000000066608681545aaa50d9ebdbd9542feea4e49b85da73ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610a14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a389190611186565b5050505090508069ffffffffffffffffffff168314610a5a5750600092915050565b3073ffffffffffffffffffffffffffffffffffffffff166350d25bcd6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610adf575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610adc91810190611330565b60015b610aec5750600092915050565b9392505050565b6000807f00000000000000000000000066608681545aaa50d9ebdbd9542feea4e49b85da73ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610b61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b859190611186565b5050505090508069ffffffffffffffffffff168314610ba75750600092915050565b3073ffffffffffffffffffffffffffffffffffffffff16638205bf6a6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610adf575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252610adc91810190611330565b60008060008060007f00000000000000000000000066608681545aaa50d9ebdbd9542feea4e49b85da73ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610c9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc09190611186565b93985091965094509250905060008413610d06576040517f648564d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d11828683610e17565b6000806000807f000000000000000000000000e20751c7b5867bcbef815ffc1b284c3f412a9e1373ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610d82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da69190611186565b94509450509350935060008313610de9576040517fb2c4287100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610df4828583610e17565b85821015610e00578195505b610e0a8884610f75565b9750505050509091929394565b8169ffffffffffffffffffff168169ffffffffffffffffffff161015610e69576040517f04d2887100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82610ea0576040517f04d2887100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000000118015610ef8575042610ef67f000000000000000000000000000000000000000000000000000000000000000085611378565b105b15610f70574283610f297f000000000000000000000000000000000000000000000000000000000000000082611378565b6040517f4253334a00000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152604482015260640160405180910390fd5b505050565b600080610fa37f0000000000000000000000000000000000000000000000000000000000000012600a6114b0565b610fad84866114bf565b610fb7919061157b565b905060087f000000000000000000000000000000000000000000000000000000000000000860ff161115611034576000611015600860ff7f00000000000000000000000000000000000000000000000000000000000000081661160a565b905061102281600a611621565b61102c908361157b565b9150506110ab565b60087f000000000000000000000000000000000000000000000000000000000000000860ff1610156110ab57600061109060ff7f000000000000000000000000000000000000000000000000000000000000000816600861160a565b905061109d81600a611621565b6110a790836114bf565b9150505b90505b92915050565b60005b838110156110cf5781810151838201526020016110b7565b838111156110de576000848401525b50505050565b60208152600082518060208401526111038160408501602087016110b4565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b69ffffffffffffffffffff8116811461114d57600080fd5b50565b60006020828403121561116257600080fd5b81356110ab81611135565b60006020828403121561117f57600080fd5b5035919050565b600080600080600060a0868803121561119e57600080fd5b85516111a981611135565b8095505060208601519350604086015192506060860151915060808601516111d081611135565b809150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60006020828403121561121f57600080fd5b815167ffffffffffffffff8082111561123757600080fd5b818401915084601f83011261124b57600080fd5b81518181111561125d5761125d6111de565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156112a3576112a36111de565b816040528281528760208487010111156112bc57600080fd5b6112cd8360208301602088016110b4565b979650505050505050565b600083516112ea8184602088016110b4565b7f202a20000000000000000000000000000000000000000000000000000000000090830190815283516113248160038401602088016110b4565b01600301949350505050565b60006020828403121561134257600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000821982111561138b5761138b611349565b500190565b600181815b808511156113e957817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156113cf576113cf611349565b808516156113dc57918102915b93841c9390800290611395565b509250929050565b600082611400575060016110ae565b8161140d575060006110ae565b8160018114611423576002811461142d57611449565b60019150506110ae565b60ff84111561143e5761143e611349565b50506001821b6110ae565b5060208310610133831016604e8410600b841016171561146c575081810a6110ae565b6114768383611390565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156114a8576114a8611349565b029392505050565b6000610aec60ff8416836113f1565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561150057611500611349565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561153b5761153b611349565b6000871292508782058712848416161561155757611557611349565b8785058712818416161561156d5761156d611349565b505050929093029392505050565b6000826115b1577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561160557611605611349565b500590565b60008282101561161c5761161c611349565b500390565b6000610aec83836113f156fea26469706673582212209fb89eae542da540533806733b804a7e480f570da4bd884086ddaf1dbaacc26d64736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000066608681545aaa50d9ebdbd9542feea4e49b85da000000000000000000000000e20751c7b5867bcbef815ffc1b284c3f412a9e130000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _ratioAggregator (address): 0x66608681545aaa50D9ebdBd9542fEeA4e49B85da
Arg [1] : _baseAggregator (address): 0xE20751C7B5867bCBef815ffc1b284c3f412a9e13
Arg [2] : _maxDelay (uint256): 0
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000066608681545aaa50d9ebdbd9542feea4e49b85da
Arg [1] : 000000000000000000000000e20751c7b5867bcbef815ffc1b284c3f412a9e13
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in MON
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.