Source Code
Overview
ETH Balance
0 ETH
ETH 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 | ||||
|---|---|---|---|---|---|---|---|
| 37637920 | 2 days ago | 0 ETH | |||||
| 37637920 | 2 days ago | 0 ETH | |||||
| 37637920 | 2 days ago | 0 ETH | |||||
| 37637920 | 2 days ago | 0 ETH | |||||
| 37637920 | 2 days ago | 0 ETH | |||||
| 37637920 | 2 days ago | 0 ETH | |||||
| 37637920 | 2 days ago | 0 ETH | |||||
| 37637867 | 2 days ago | 0 ETH | |||||
| 37637867 | 2 days ago | 0 ETH | |||||
| 37637867 | 2 days ago | 0 ETH | |||||
| 37637867 | 2 days ago | 0 ETH | |||||
| 37637867 | 2 days ago | 0 ETH | |||||
| 37637867 | 2 days ago | 0 ETH | |||||
| 37637867 | 2 days ago | 0 ETH | |||||
| 37130307 | 7 days ago | 0 ETH | |||||
| 37130307 | 7 days ago | 0 ETH | |||||
| 37130307 | 7 days ago | 0 ETH | |||||
| 37130307 | 7 days ago | 0 ETH | |||||
| 37130307 | 7 days ago | 0 ETH | |||||
| 37130307 | 7 days ago | 0 ETH | |||||
| 37130307 | 7 days ago | 0 ETH | |||||
| 37130307 | 7 days ago | 0 ETH | |||||
| 37130307 | 7 days ago | 0 ETH | |||||
| 37130307 | 7 days ago | 0 ETH | |||||
| 37130307 | 7 days ago | 0 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
OneJumpOracle
Compiler Version
v0.8.25+commit.b61c2a91
Optimization Enabled:
Yes with 200 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: BSD-3-Clause
pragma solidity 0.8.25;
import { CorrelatedTokenOracle } from "./common/CorrelatedTokenOracle.sol";
import { ensureNonzeroAddress } from "@venusprotocol/solidity-utilities/contracts/validators.sol";
import { OracleInterface } from "../interfaces/OracleInterface.sol";
import { IERC20Metadata } from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
/**
* @title OneJumpOracle
* @author Venus
* @notice This oracle fetches the price of an asset in through an intermediate asset
*/
contract OneJumpOracle is CorrelatedTokenOracle {
/// @notice Address of the intermediate oracle
OracleInterface public immutable INTERMEDIATE_ORACLE;
/// @notice Constructor for the implementation contract.
constructor(
address correlatedToken,
address underlyingToken,
address resilientOracle,
address intermediateOracle,
uint256 annualGrowthRate,
uint256 _snapshotInterval,
uint256 initialSnapshotMaxExchangeRate,
uint256 initialSnapshotTimestamp,
address accessControlManager,
uint256 _snapshotGap
)
CorrelatedTokenOracle(
correlatedToken,
underlyingToken,
resilientOracle,
annualGrowthRate,
_snapshotInterval,
initialSnapshotMaxExchangeRate,
initialSnapshotTimestamp,
accessControlManager,
_snapshotGap
)
{
ensureNonzeroAddress(intermediateOracle);
INTERMEDIATE_ORACLE = OracleInterface(intermediateOracle);
}
/**
* @notice Fetches the amount of the underlying token for 1 correlated token, using the intermediate oracle
* @return amount The amount of the underlying token for 1 correlated token scaled by the underlying token decimals
*/
function getUnderlyingAmount() public view override returns (uint256) {
uint256 underlyingDecimals = IERC20Metadata(UNDERLYING_TOKEN).decimals();
uint256 correlatedDecimals = IERC20Metadata(CORRELATED_TOKEN).decimals();
uint256 underlyingAmount = INTERMEDIATE_ORACLE.getPrice(CORRELATED_TOKEN);
return (underlyingAmount * (10 ** correlatedDecimals)) / (10 ** (36 - underlyingDecimals));
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)
pragma solidity ^0.8.0;
/**
* @dev External interface of AccessControl declared to support ERC165 detection.
*/
interface IAccessControl {
/**
* @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
*
* `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
* {RoleAdminChanged} not being emitted signaling this.
*
* _Available since v3.1._
*/
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
/**
* @dev Emitted when `account` is granted `role`.
*
* `sender` is the account that originated the contract call, an admin role
* bearer except when using {AccessControl-_setupRole}.
*/
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Emitted when `account` is revoked `role`.
*
* `sender` is the account that originated the contract call:
* - if using `revokeRole`, it is the admin role bearer
* - if using `renounceRole`, it is the role bearer (i.e. `account`)
*/
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Returns `true` if `account` has been granted `role`.
*/
function hasRole(bytes32 role, address account) external view returns (bool);
/**
* @dev Returns the admin role that controls `role`. See {grantRole} and
* {revokeRole}.
*
* To change a role's admin, use {AccessControl-_setRoleAdmin}.
*/
function getRoleAdmin(bytes32 role) external view returns (bytes32);
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function grantRole(bytes32 role, address account) external;
/**
* @dev Revokes `role` from `account`.
*
* If `account` had been granted `role`, emits a {RoleRevoked} event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function revokeRole(bytes32 role, address account) external;
/**
* @dev Revokes `role` from the calling account.
*
* Roles are often managed via {grantRole} and {revokeRole}: this function's
* purpose is to provide a mechanism for accounts to lose their privileges
* if they are compromised (such as when a trusted device is misplaced).
*
* If the calling account had been granted `role`, emits a {RoleRevoked}
* event.
*
* Requirements:
*
* - the caller must be `account`.
*/
function renounceRole(bytes32 role, address account) external;
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.0;
import "../IERC20.sol";
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @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
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
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 amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address from, address to, uint256 amount) external returns (bool);
}// SPDX-License-Identifier: BSD-3-Clause
pragma solidity ^0.8.25;
import "@openzeppelin/contracts/access/IAccessControl.sol";
/**
* @title IAccessControlManagerV8
* @author Venus
* @notice Interface implemented by the `AccessControlManagerV8` contract.
*/
interface IAccessControlManagerV8 is IAccessControl {
function giveCallPermission(address contractAddress, string calldata functionSig, address accountToPermit) external;
function revokeCallPermission(
address contractAddress,
string calldata functionSig,
address accountToRevoke
) external;
function isAllowedToCall(address account, string calldata functionSig) external view returns (bool);
function hasPermission(
address account,
address contractAddress,
string calldata functionSig
) external view returns (bool);
}// SPDX-License-Identifier: BSD-3-Clause pragma solidity ^0.8.25; /// @dev Base unit for computations, usually used in scaling (multiplications, divisions) uint256 constant EXP_SCALE = 1e18; /// @dev A unit (literal one) in EXP_SCALE, usually used in additions/subtractions uint256 constant MANTISSA_ONE = EXP_SCALE; /// @dev The approximate number of seconds per year uint256 constant SECONDS_PER_YEAR = 31_536_000;
// SPDX-License-Identifier: BSD-3-Clause
pragma solidity 0.8.25;
/// @notice Thrown if the supplied address is a zero address where it is not allowed
error ZeroAddressNotAllowed();
/// @notice Thrown if the supplied value is 0 where it is not allowed
error ZeroValueNotAllowed();
/// @notice Checks if the provided address is nonzero, reverts otherwise
/// @param address_ Address to check
/// @custom:error ZeroAddressNotAllowed is thrown if the provided address is a zero address
function ensureNonzeroAddress(address address_) pure {
if (address_ == address(0)) {
revert ZeroAddressNotAllowed();
}
}
/// @notice Checks if the provided value is nonzero, reverts otherwise
/// @param value_ Value to check
/// @custom:error ZeroValueNotAllowed is thrown if the provided value is 0
function ensureNonzeroValue(uint256 value_) pure {
if (value_ == 0) {
revert ZeroValueNotAllowed();
}
}// SPDX-License-Identifier: BSD-3-Clause
pragma solidity 0.8.25;
interface ICappedOracle {
function updateSnapshot() external;
}// SPDX-License-Identifier: BSD-3-Clause
pragma solidity ^0.8.25;
interface OracleInterface {
function getPrice(address asset) external view returns (uint256);
}
interface ResilientOracleInterface is OracleInterface {
function updatePrice(address vToken) external;
function updateAssetPrice(address asset) external;
function getUnderlyingPrice(address vToken) external view returns (uint256);
}
interface BoundValidatorInterface {
function validatePriceWithAnchorPrice(
address asset,
uint256 reporterPrice,
uint256 anchorPrice
) external view returns (bool);
}// SPDX-License-Identifier: BSD-3-Clause
pragma solidity 0.8.25;
import { OracleInterface, ResilientOracleInterface } from "../../interfaces/OracleInterface.sol";
import { ensureNonzeroAddress } from "@venusprotocol/solidity-utilities/contracts/validators.sol";
import { SECONDS_PER_YEAR } from "@venusprotocol/solidity-utilities/contracts/constants.sol";
import { IERC20Metadata } from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
import { ICappedOracle } from "../../interfaces/ICappedOracle.sol";
import { IAccessControlManagerV8 } from "@venusprotocol/governance-contracts/contracts/Governance/IAccessControlManagerV8.sol";
/**
* @title CorrelatedTokenOracle
* @notice This oracle fetches the price of a token that is correlated to another token.
*/
abstract contract CorrelatedTokenOracle is OracleInterface, ICappedOracle {
/// @notice Address of the correlated token
address public immutable CORRELATED_TOKEN;
/// @notice Address of the underlying token
address public immutable UNDERLYING_TOKEN;
/// @notice Address of Resilient Oracle
ResilientOracleInterface public immutable RESILIENT_ORACLE;
/// @notice Address of the AccessControlManager contract
IAccessControlManagerV8 public immutable ACCESS_CONTROL_MANAGER;
//// @notice Growth rate percentage in seconds. Ex: 1e18 is 100%
uint256 public growthRatePerSecond;
/// @notice Snapshot update interval
uint256 public snapshotInterval;
/// @notice Last stored snapshot maximum exchange rate
uint256 public snapshotMaxExchangeRate;
/// @notice Last stored snapshot timestamp
uint256 public snapshotTimestamp;
/// @notice Gap to add when updating the snapshot
uint256 public snapshotGap;
/// @notice Emitted when the snapshot is updated
event SnapshotUpdated(uint256 indexed maxExchangeRate, uint256 indexed timestamp);
/// @notice Emitted when the growth rate is updated
event GrowthRateUpdated(
uint256 indexed oldGrowthRatePerSecond,
uint256 indexed newGrowthRatePerSecond,
uint256 indexed oldSnapshotInterval,
uint256 newSnapshotInterval
);
/// @notice Emitted when the snapshot gap is updated
event SnapshotGapUpdated(uint256 indexed oldSnapshotGap, uint256 indexed newSnapshotGap);
/// @notice Thrown if the token address is invalid
error InvalidTokenAddress();
/// @notice Thrown if the growth rate is invalid
error InvalidGrowthRate();
/// @notice Thrown if the initial snapshot is invalid
error InvalidInitialSnapshot();
/// @notice Thrown if the max snapshot exchange rate is invalid
error InvalidSnapshotMaxExchangeRate();
/// @notice @notice Thrown when the action is prohibited by AccessControlManager
error Unauthorized(address sender, address calledContract, string methodSignature);
/**
* @notice Constructor for the implementation contract.
* @custom:error InvalidGrowthRate error is thrown if the growth rate is invalid
* @custom:error InvalidInitialSnapshot error is thrown if the initial snapshot values are invalid
*/
constructor(
address _correlatedToken,
address _underlyingToken,
address _resilientOracle,
uint256 _annualGrowthRate,
uint256 _snapshotInterval,
uint256 _initialSnapshotMaxExchangeRate,
uint256 _initialSnapshotTimestamp,
address _accessControlManager,
uint256 _snapshotGap
) {
growthRatePerSecond = _annualGrowthRate / SECONDS_PER_YEAR;
if ((growthRatePerSecond == 0 && _snapshotInterval > 0) || (growthRatePerSecond > 0 && _snapshotInterval == 0))
revert InvalidGrowthRate();
if ((_initialSnapshotMaxExchangeRate == 0 || _initialSnapshotTimestamp == 0) && _snapshotInterval > 0) {
revert InvalidInitialSnapshot();
}
ensureNonzeroAddress(_correlatedToken);
ensureNonzeroAddress(_underlyingToken);
ensureNonzeroAddress(_resilientOracle);
ensureNonzeroAddress(_accessControlManager);
CORRELATED_TOKEN = _correlatedToken;
UNDERLYING_TOKEN = _underlyingToken;
RESILIENT_ORACLE = ResilientOracleInterface(_resilientOracle);
snapshotInterval = _snapshotInterval;
snapshotMaxExchangeRate = _initialSnapshotMaxExchangeRate;
snapshotTimestamp = _initialSnapshotTimestamp;
snapshotGap = _snapshotGap;
ACCESS_CONTROL_MANAGER = IAccessControlManagerV8(_accessControlManager);
}
/**
* @notice Directly sets the snapshot exchange rate and timestamp
* @param _snapshotMaxExchangeRate The exchange rate to set
* @param _snapshotTimestamp The timestamp to set
* @custom:event Emits SnapshotUpdated event on successful update of the snapshot
*/
function setSnapshot(uint256 _snapshotMaxExchangeRate, uint256 _snapshotTimestamp) external {
_checkAccessAllowed("setSnapshot(uint256,uint256)");
snapshotMaxExchangeRate = _snapshotMaxExchangeRate;
snapshotTimestamp = _snapshotTimestamp;
emit SnapshotUpdated(snapshotMaxExchangeRate, snapshotTimestamp);
}
/**
* @notice Sets the growth rate and snapshot interval
* @param _annualGrowthRate The annual growth rate to set
* @param _snapshotInterval The snapshot interval to set
* @custom:error InvalidGrowthRate error is thrown if the growth rate is invalid
* @custom:event Emits GrowthRateUpdated event on successful update of the growth rate
*/
function setGrowthRate(uint256 _annualGrowthRate, uint256 _snapshotInterval) external {
_checkAccessAllowed("setGrowthRate(uint256,uint256)");
uint256 oldGrowthRatePerSecond = growthRatePerSecond;
growthRatePerSecond = _annualGrowthRate / SECONDS_PER_YEAR;
if ((growthRatePerSecond == 0 && _snapshotInterval > 0) || (growthRatePerSecond > 0 && _snapshotInterval == 0))
revert InvalidGrowthRate();
emit GrowthRateUpdated(oldGrowthRatePerSecond, growthRatePerSecond, snapshotInterval, _snapshotInterval);
snapshotInterval = _snapshotInterval;
}
/**
* @notice Sets the snapshot gap
* @param _snapshotGap The snapshot gap to set
* @custom:event Emits SnapshotGapUpdated event on successful update of the snapshot gap
*/
function setSnapshotGap(uint256 _snapshotGap) external {
_checkAccessAllowed("setSnapshotGap(uint256)");
emit SnapshotGapUpdated(snapshotGap, _snapshotGap);
snapshotGap = _snapshotGap;
}
/**
* @notice Returns if the price is capped
* @return isCapped Boolean indicating if the price is capped
*/
function isCapped() external view virtual returns (bool) {
if (snapshotInterval == 0) {
return false;
}
uint256 maxAllowedExchangeRate = getMaxAllowedExchangeRate();
if (maxAllowedExchangeRate == 0) {
return false;
}
uint256 exchangeRate = getUnderlyingAmount();
return exchangeRate > maxAllowedExchangeRate;
}
/**
* @notice Updates the snapshot price and timestamp
* @custom:event Emits SnapshotUpdated event on successful update of the snapshot
* @custom:error InvalidSnapshotMaxExchangeRate error is thrown if the max snapshot exchange rate is zero
*/
function updateSnapshot() public override {
if (block.timestamp - snapshotTimestamp < snapshotInterval || snapshotInterval == 0) return;
uint256 exchangeRate = getUnderlyingAmount();
uint256 maxAllowedExchangeRate = getMaxAllowedExchangeRate();
snapshotMaxExchangeRate =
(exchangeRate > maxAllowedExchangeRate ? maxAllowedExchangeRate : exchangeRate) +
snapshotGap;
snapshotTimestamp = block.timestamp;
if (snapshotMaxExchangeRate == 0) revert InvalidSnapshotMaxExchangeRate();
RESILIENT_ORACLE.updateAssetPrice(UNDERLYING_TOKEN);
emit SnapshotUpdated(snapshotMaxExchangeRate, snapshotTimestamp);
}
/**
* @notice Fetches the price of the token
* @param asset Address of the token
* @return price The price of the token in scaled decimal places. It can be capped
* to a maximum value taking into account the growth rate
* @custom:error InvalidTokenAddress error is thrown if the token address is invalid
*/
function getPrice(address asset) public view override returns (uint256) {
if (asset != CORRELATED_TOKEN) revert InvalidTokenAddress();
uint256 exchangeRate = getUnderlyingAmount();
if (snapshotInterval == 0) {
return _calculatePrice(exchangeRate);
}
uint256 maxAllowedExchangeRate = getMaxAllowedExchangeRate();
uint256 finalExchangeRate = (exchangeRate > maxAllowedExchangeRate && maxAllowedExchangeRate != 0)
? maxAllowedExchangeRate
: exchangeRate;
return _calculatePrice(finalExchangeRate);
}
/**
* @notice Gets the maximum allowed exchange rate for token
* @return maxExchangeRate Maximum allowed exchange rate
*/
function getMaxAllowedExchangeRate() public view returns (uint256) {
uint256 timeElapsed = block.timestamp - snapshotTimestamp;
uint256 maxExchangeRate = snapshotMaxExchangeRate +
(snapshotMaxExchangeRate * growthRatePerSecond * timeElapsed) /
1e18;
return maxExchangeRate;
}
/**
* @notice Gets the underlying amount for correlated token
* @return underlyingAmount Amount of underlying token
*/
function getUnderlyingAmount() public view virtual returns (uint256);
/**
* @notice Fetches price of the token based on an underlying exchange rate
* @param exchangeRate The underlying exchange rate to use
* @return price The price of the token in scaled decimal places
*/
function _calculatePrice(uint256 exchangeRate) internal view returns (uint256) {
uint256 underlyingUSDPrice = RESILIENT_ORACLE.getPrice(UNDERLYING_TOKEN);
IERC20Metadata token = IERC20Metadata(CORRELATED_TOKEN);
uint256 decimals = token.decimals();
return (exchangeRate * underlyingUSDPrice) / (10 ** decimals);
}
/**
* @notice Reverts if the call is not allowed by AccessControlManager
* @param signature Method signature
* @custom:error Unauthorized error is thrown if the call is not allowed
*/
function _checkAccessAllowed(string memory signature) internal view {
bool isAllowedToCall = ACCESS_CONTROL_MANAGER.isAllowedToCall(msg.sender, signature);
if (!isAllowedToCall) {
revert Unauthorized(msg.sender, address(this), signature);
}
}
}{
"optimizer": {
"enabled": true,
"runs": 200,
"details": {
"yul": true
}
},
"evmVersion": "cancun",
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"metadata": {
"useLiteralContent": true
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"correlatedToken","type":"address"},{"internalType":"address","name":"underlyingToken","type":"address"},{"internalType":"address","name":"resilientOracle","type":"address"},{"internalType":"address","name":"intermediateOracle","type":"address"},{"internalType":"uint256","name":"annualGrowthRate","type":"uint256"},{"internalType":"uint256","name":"_snapshotInterval","type":"uint256"},{"internalType":"uint256","name":"initialSnapshotMaxExchangeRate","type":"uint256"},{"internalType":"uint256","name":"initialSnapshotTimestamp","type":"uint256"},{"internalType":"address","name":"accessControlManager","type":"address"},{"internalType":"uint256","name":"_snapshotGap","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidGrowthRate","type":"error"},{"inputs":[],"name":"InvalidInitialSnapshot","type":"error"},{"inputs":[],"name":"InvalidSnapshotMaxExchangeRate","type":"error"},{"inputs":[],"name":"InvalidTokenAddress","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"calledContract","type":"address"},{"internalType":"string","name":"methodSignature","type":"string"}],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"ZeroAddressNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"oldGrowthRatePerSecond","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"newGrowthRatePerSecond","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldSnapshotInterval","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSnapshotInterval","type":"uint256"}],"name":"GrowthRateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"oldSnapshotGap","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"newSnapshotGap","type":"uint256"}],"name":"SnapshotGapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"maxExchangeRate","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SnapshotUpdated","type":"event"},{"inputs":[],"name":"ACCESS_CONTROL_MANAGER","outputs":[{"internalType":"contract IAccessControlManagerV8","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CORRELATED_TOKEN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INTERMEDIATE_ORACLE","outputs":[{"internalType":"contract OracleInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RESILIENT_ORACLE","outputs":[{"internalType":"contract ResilientOracleInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNDERLYING_TOKEN","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxAllowedExchangeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"asset","type":"address"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnderlyingAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"growthRatePerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isCapped","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_annualGrowthRate","type":"uint256"},{"internalType":"uint256","name":"_snapshotInterval","type":"uint256"}],"name":"setGrowthRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_snapshotMaxExchangeRate","type":"uint256"},{"internalType":"uint256","name":"_snapshotTimestamp","type":"uint256"}],"name":"setSnapshot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_snapshotGap","type":"uint256"}],"name":"setSnapshotGap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snapshotGap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"snapshotInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"snapshotMaxExchangeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"snapshotTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"updateSnapshot","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
610120604052348015610010575f80fd5b5060405161108538038061108583398101604081905261002f9161017d565b8989898888888888886100466301e133808761020e565b5f81905515801561005657505f85115b8061006a57505f805411801561006a575084155b15610088576040516353b7e64560e11b815260040160405180910390fd5b831580610093575082155b801561009e57505f85115b156100bc5760405163b8a5589b60e01b815260040160405180910390fd5b6100c589610138565b6100ce88610138565b6100d787610138565b6100e082610138565b6001600160a01b0398891660805296881660a05294871660c052600192909255600255600355506004919091551660e05261011a87610138565b5050506001600160a01b03909316610100525061022d945050505050565b6001600160a01b03811661015f576040516342bcdf7f60e11b815260040160405180910390fd5b50565b80516001600160a01b0381168114610178575f80fd5b919050565b5f805f805f805f805f806101408b8d031215610197575f80fd5b6101a08b610162565b99506101ae60208c01610162565b98506101bc60408c01610162565b97506101ca60608c01610162565b965060808b0151955060a08b0151945060c08b0151935060e08b015192506101f56101008c01610162565b91506101208b015190509295989b9194979a5092959850565b5f8261022857634e487b7160e01b5f52601260045260245ffd5b500490565b60805160a05160c05160e05161010051610dce6102b75f395f818161028b01526107f201525f81816101910152610a5701525f818161024c0152818161059c015261092a01525f818161013601528181610574015281816106a501526108fe01525f8181610209015281816102b00152818161072b015281816107c001526109980152610dce5ff3fe608060405234801561000f575f80fd5b5060043610610111575f3560e01c8063692404261161009e578063a4edcd4c1161006e578063a4edcd4c14610247578063abb856131461026e578063ac5a693e14610276578063bdf13af21461027e578063ef4fa51b14610286575f80fd5b806369240426146101fc57806369818a35146102045780637fc4e4a01461022b5780639c43eb541461023e575f80fd5b806345be2dc7116100e457806345be2dc71461018c5780635213f9c8146101b3578063596efe6f146101c8578063643d813d146101d1578063671528d4146101e4575f80fd5b806307d0413c1461011557806329db1be6146101315780634169d2451461017057806341976e0914610179575b5f80fd5b61011e60015481565b6040519081526020015b60405180910390f35b6101587f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610128565b61011e60045481565b61011e610187366004610b00565b6102ad565b6101587f000000000000000000000000000000000000000000000000000000000000000081565b6101c66101c1366004610b26565b61035e565b005b61011e60025481565b6101c66101df366004610b3d565b6103cf565b6101ec6104a5565b6040519015158152602001610128565b6101c66104e0565b6101587f000000000000000000000000000000000000000000000000000000000000000081565b6101c6610239366004610b3d565b610629565b61011e60035481565b6101587f000000000000000000000000000000000000000000000000000000000000000081565b61011e6106a1565b61011e5f5481565b61011e61089a565b6101587f000000000000000000000000000000000000000000000000000000000000000081565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161461030057604051630f58058360e11b815260040160405180910390fd5b5f6103096106a1565b90506001545f036103245761031d816108e7565b9392505050565b5f61032d61089a565b90505f818311801561033e57508115155b610348578261034a565b815b9050610355816108e7565b95945050505050565b61039c6040518060400160405280601781526020017f736574536e617073686f744761702875696e7432353629000000000000000000815250610a3e565b6004546040518291907feb3716d3f8388c182853c1dc98b18931f3a600bbab31f2ff48631f6412e4997f905f90a3600455565b61040d6040518060400160405280601e81526020017f73657447726f777468526174652875696e743235362c75696e74323536290000815250610a3e565b5f5461041d6301e1338084610b71565b5f81905515801561042d57505f82115b8061044157505f8054118015610441575081155b1561045f576040516353b7e64560e11b815260040160405180910390fd5b6001545f54827fa65cbeb0e28a8803a912daac67c472c160aa01e2c988755fa424f290321de6088560405161049691815260200190565b60405180910390a45060015550565b5f6001545f036104b457505f90565b5f6104bd61089a565b9050805f036104cd575f91505090565b5f6104d66106a1565b9190911192915050565b6001546003546104f09042610b90565b10806104fc5750600154155b1561050357565b5f61050c6106a1565b90505f61051761089a565b9050600454818311610529578261052b565b815b6105359190610ba9565b6002819055426003555f0361055d57604051635f18388760e01b815260040160405180910390fd5b60405163b62cad6960e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063b62cad69906024015f604051808303815f87803b1580156105dd575f80fd5b505af11580156105ef573d5f803e3d5ffd5b505050506003546002547f2c8c8fcb8c77a0ca21dcc3ab8fc0ade761557e76b1240cb40ebbef9fcee00f7d60405160405180910390a35050565b6106676040518060400160405280601c81526020017f736574536e617073686f742875696e743235362c75696e743235362900000000815250610a3e565b60028290556003819055604051819083907f2c8c8fcb8c77a0ca21dcc3ab8fc0ade761557e76b1240cb40ebbef9fcee00f7d905f90a35050565b5f807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ff573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107239190610bbc565b60ff1690505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610785573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a99190610bbc565b6040516341976e0960e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260ff9290921692505f917f000000000000000000000000000000000000000000000000000000000000000016906341976e0990602401602060405180830381865afa158015610837573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061085b9190610bdc565b9050610868836024610b90565b61087390600a610cd3565b61087e83600a610cd3565b6108889083610cde565b6108929190610b71565b935050505090565b5f80600354426108aa9190610b90565b90505f670de0b6b3a7640000825f546002546108c69190610cde565b6108d09190610cde565b6108da9190610b71565b60025461031d9190610ba9565b6040516341976e0960e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301525f9182917f000000000000000000000000000000000000000000000000000000000000000016906341976e0990602401602060405180830381865afa15801561096f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109939190610bdc565b90505f7f000000000000000000000000000000000000000000000000000000000000000090505f816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a1a9190610bbc565b60ff169050610a2a81600a610cd3565b610a348487610cde565b6103559190610b71565b6040516318c5e8ab60e01b81525f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906318c5e8ab90610a8e9033908690600401610d23565b602060405180830381865afa158015610aa9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610acd9190610d4e565b905080610afc57333083604051634a3fa29360e01b8152600401610af393929190610d6d565b60405180910390fd5b5050565b5f60208284031215610b10575f80fd5b81356001600160a01b038116811461031d575f80fd5b5f60208284031215610b36575f80fd5b5035919050565b5f8060408385031215610b4e575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52601160045260245ffd5b5f82610b8b57634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610ba357610ba3610b5d565b92915050565b80820180821115610ba357610ba3610b5d565b5f60208284031215610bcc575f80fd5b815160ff8116811461031d575f80fd5b5f60208284031215610bec575f80fd5b5051919050565b600181815b80851115610c2d57815f1904821115610c1357610c13610b5d565b80851615610c2057918102915b93841c9390800290610bf8565b509250929050565b5f82610c4357506001610ba3565b81610c4f57505f610ba3565b8160018114610c655760028114610c6f57610c8b565b6001915050610ba3565b60ff841115610c8057610c80610b5d565b50506001821b610ba3565b5060208310610133831016604e8410600b8410161715610cae575081810a610ba3565b610cb88383610bf3565b805f1904821115610ccb57610ccb610b5d565b029392505050565b5f61031d8383610c35565b8082028115828204841417610ba357610ba3610b5d565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03831681526040602082018190525f90610d4690830184610cf5565b949350505050565b5f60208284031215610d5e575f80fd5b8151801515811461031d575f80fd5b6001600160a01b038481168252831660208201526060604082018190525f9061035590830184610cf556fea264697066735822122057dc71c01a42ea6e734ad67ef8afa39d0d746c0cd6b90ea6f845bc4e46b319b764736f6c63430008190033000000000000000000000000c02fe7317d4eb8753a02c35fe019786854a92001000000000000000000000000420000000000000000000000000000000000000600000000000000000000000086d04d6fe928d888076851122dc6739551818f7e0000000000000000000000004d41a36d04d97785bcea57b057c412b278e6edcc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f12014c497a9d905155eb9bfdd9fac6885e61d00000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561000f575f80fd5b5060043610610111575f3560e01c8063692404261161009e578063a4edcd4c1161006e578063a4edcd4c14610247578063abb856131461026e578063ac5a693e14610276578063bdf13af21461027e578063ef4fa51b14610286575f80fd5b806369240426146101fc57806369818a35146102045780637fc4e4a01461022b5780639c43eb541461023e575f80fd5b806345be2dc7116100e457806345be2dc71461018c5780635213f9c8146101b3578063596efe6f146101c8578063643d813d146101d1578063671528d4146101e4575f80fd5b806307d0413c1461011557806329db1be6146101315780634169d2451461017057806341976e0914610179575b5f80fd5b61011e60015481565b6040519081526020015b60405180910390f35b6101587f000000000000000000000000420000000000000000000000000000000000000681565b6040516001600160a01b039091168152602001610128565b61011e60045481565b61011e610187366004610b00565b6102ad565b6101587f0000000000000000000000001f12014c497a9d905155eb9bfdd9fac6885e61d081565b6101c66101c1366004610b26565b61035e565b005b61011e60025481565b6101c66101df366004610b3d565b6103cf565b6101ec6104a5565b6040519015158152602001610128565b6101c66104e0565b6101587f000000000000000000000000c02fe7317d4eb8753a02c35fe019786854a9200181565b6101c6610239366004610b3d565b610629565b61011e60035481565b6101587f00000000000000000000000086d04d6fe928d888076851122dc6739551818f7e81565b61011e6106a1565b61011e5f5481565b61011e61089a565b6101587f0000000000000000000000004d41a36d04d97785bcea57b057c412b278e6edcc81565b5f7f000000000000000000000000c02fe7317d4eb8753a02c35fe019786854a920016001600160a01b0316826001600160a01b03161461030057604051630f58058360e11b815260040160405180910390fd5b5f6103096106a1565b90506001545f036103245761031d816108e7565b9392505050565b5f61032d61089a565b90505f818311801561033e57508115155b610348578261034a565b815b9050610355816108e7565b95945050505050565b61039c6040518060400160405280601781526020017f736574536e617073686f744761702875696e7432353629000000000000000000815250610a3e565b6004546040518291907feb3716d3f8388c182853c1dc98b18931f3a600bbab31f2ff48631f6412e4997f905f90a3600455565b61040d6040518060400160405280601e81526020017f73657447726f777468526174652875696e743235362c75696e74323536290000815250610a3e565b5f5461041d6301e1338084610b71565b5f81905515801561042d57505f82115b8061044157505f8054118015610441575081155b1561045f576040516353b7e64560e11b815260040160405180910390fd5b6001545f54827fa65cbeb0e28a8803a912daac67c472c160aa01e2c988755fa424f290321de6088560405161049691815260200190565b60405180910390a45060015550565b5f6001545f036104b457505f90565b5f6104bd61089a565b9050805f036104cd575f91505090565b5f6104d66106a1565b9190911192915050565b6001546003546104f09042610b90565b10806104fc5750600154155b1561050357565b5f61050c6106a1565b90505f61051761089a565b9050600454818311610529578261052b565b815b6105359190610ba9565b6002819055426003555f0361055d57604051635f18388760e01b815260040160405180910390fd5b60405163b62cad6960e01b81526001600160a01b037f0000000000000000000000004200000000000000000000000000000000000006811660048301527f00000000000000000000000086d04d6fe928d888076851122dc6739551818f7e169063b62cad69906024015f604051808303815f87803b1580156105dd575f80fd5b505af11580156105ef573d5f803e3d5ffd5b505050506003546002547f2c8c8fcb8c77a0ca21dcc3ab8fc0ade761557e76b1240cb40ebbef9fcee00f7d60405160405180910390a35050565b6106676040518060400160405280601c81526020017f736574536e617073686f742875696e743235362c75696e743235362900000000815250610a3e565b60028290556003819055604051819083907f2c8c8fcb8c77a0ca21dcc3ab8fc0ade761557e76b1240cb40ebbef9fcee00f7d905f90a35050565b5f807f00000000000000000000000042000000000000000000000000000000000000066001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106ff573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107239190610bbc565b60ff1690505f7f000000000000000000000000c02fe7317d4eb8753a02c35fe019786854a920016001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610785573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107a99190610bbc565b6040516341976e0960e01b81526001600160a01b037f000000000000000000000000c02fe7317d4eb8753a02c35fe019786854a920018116600483015260ff9290921692505f917f0000000000000000000000004d41a36d04d97785bcea57b057c412b278e6edcc16906341976e0990602401602060405180830381865afa158015610837573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061085b9190610bdc565b9050610868836024610b90565b61087390600a610cd3565b61087e83600a610cd3565b6108889083610cde565b6108929190610b71565b935050505090565b5f80600354426108aa9190610b90565b90505f670de0b6b3a7640000825f546002546108c69190610cde565b6108d09190610cde565b6108da9190610b71565b60025461031d9190610ba9565b6040516341976e0960e01b81526001600160a01b037f0000000000000000000000004200000000000000000000000000000000000006811660048301525f9182917f00000000000000000000000086d04d6fe928d888076851122dc6739551818f7e16906341976e0990602401602060405180830381865afa15801561096f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109939190610bdc565b90505f7f000000000000000000000000c02fe7317d4eb8753a02c35fe019786854a9200190505f816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a1a9190610bbc565b60ff169050610a2a81600a610cd3565b610a348487610cde565b6103559190610b71565b6040516318c5e8ab60e01b81525f906001600160a01b037f0000000000000000000000001f12014c497a9d905155eb9bfdd9fac6885e61d016906318c5e8ab90610a8e9033908690600401610d23565b602060405180830381865afa158015610aa9573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610acd9190610d4e565b905080610afc57333083604051634a3fa29360e01b8152600401610af393929190610d6d565b60405180910390fd5b5050565b5f60208284031215610b10575f80fd5b81356001600160a01b038116811461031d575f80fd5b5f60208284031215610b36575f80fd5b5035919050565b5f8060408385031215610b4e575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52601160045260245ffd5b5f82610b8b57634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610ba357610ba3610b5d565b92915050565b80820180821115610ba357610ba3610b5d565b5f60208284031215610bcc575f80fd5b815160ff8116811461031d575f80fd5b5f60208284031215610bec575f80fd5b5051919050565b600181815b80851115610c2d57815f1904821115610c1357610c13610b5d565b80851615610c2057918102915b93841c9390800290610bf8565b509250929050565b5f82610c4357506001610ba3565b81610c4f57505f610ba3565b8160018114610c655760028114610c6f57610c8b565b6001915050610ba3565b60ff841115610c8057610c80610b5d565b50506001821b610ba3565b5060208310610133831016604e8410600b8410161715610cae575081810a610ba3565b610cb88383610bf3565b805f1904821115610ccb57610ccb610b5d565b029392505050565b5f61031d8383610c35565b8082028115828204841417610ba357610ba3610b5d565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03831681526040602082018190525f90610d4690830184610cf5565b949350505050565b5f60208284031215610d5e575f80fd5b8151801515811461031d575f80fd5b6001600160a01b038481168252831660208201526060604082018190525f9061035590830184610cf556fea264697066735822122057dc71c01a42ea6e734ad67ef8afa39d0d746c0cd6b90ea6f845bc4e46b319b764736f6c63430008190033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c02fe7317d4eb8753a02c35fe019786854a92001000000000000000000000000420000000000000000000000000000000000000600000000000000000000000086d04d6fe928d888076851122dc6739551818f7e0000000000000000000000004d41a36d04d97785bcea57b057c412b278e6edcc00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f12014c497a9d905155eb9bfdd9fac6885e61d00000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : correlatedToken (address): 0xc02fE7317D4eb8753a02c35fe019786854A92001
Arg [1] : underlyingToken (address): 0x4200000000000000000000000000000000000006
Arg [2] : resilientOracle (address): 0x86D04d6FE928D888076851122dc6739551818f7E
Arg [3] : intermediateOracle (address): 0x4d41a36D04D97785bcEA57b057C412b278e6Edcc
Arg [4] : annualGrowthRate (uint256): 0
Arg [5] : _snapshotInterval (uint256): 0
Arg [6] : initialSnapshotMaxExchangeRate (uint256): 0
Arg [7] : initialSnapshotTimestamp (uint256): 0
Arg [8] : accessControlManager (address): 0x1f12014c497a9d905155eB9BfDD9FaC6885e61d0
Arg [9] : _snapshotGap (uint256): 0
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 000000000000000000000000c02fe7317d4eb8753a02c35fe019786854a92001
Arg [1] : 0000000000000000000000004200000000000000000000000000000000000006
Arg [2] : 00000000000000000000000086d04d6fe928d888076851122dc6739551818f7e
Arg [3] : 0000000000000000000000004d41a36d04d97785bcea57b057c412b278e6edcc
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000001f12014c497a9d905155eb9bfdd9fac6885e61d0
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.