Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
There are no matching entriesUpdate your filters to view other transactions | |||||||||
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
EnvelopOracle
Compiler Version
v0.8.30+commit.73712a01
Optimization Enabled:
Yes with 200 runs
Other Settings:
prague EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
/// forge-lint: disable-next-line(unaliased-plain-import)
import "../interfaces/IEnvelopOracle.sol";
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
// ---- Chainlink Feed Registry minimal interface ----
interface FeedRegistryInterface {
function latestRoundData(address base, address quote)
external
view
returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);
function decimals(address base, address quote) external view returns (uint8);
}
contract EnvelopOracle is IEnvelopOracle, Ownable {
// =========================================================
// Price Oracle part
// =========================================================
/// @notice Chainlink Feed Registry
FeedRegistryInterface public immutable FEED_REGISTRY;
/// @notice USD denomination address for Feed Registry (not an ERC20)
/// @dev Chainlink uses a special pseudo-address for USD denomination.
address public constant DENOMINATION_USD = 0x0000000000000000000000000000000000000348;
/// @notice Maximum allowed staleness for a price feed, in seconds
uint256 public immutable MAX_STALE;
// =========================================================
// Events
// =========================================================
mapping(address object => uint256 overrided) public overridedPrices;
/// @notice Emitted when price is successfully read from Feed Registry.
event PriceRead(address indexed base, uint256 priceUsd, uint80 roundId, uint256 updatedAt);
// =========================================================
// Constructor
// =========================================================
/**
* @param _feedRegistry Address of Chainlink Feed Registry (or adapter).
* @param _maxStale Maximum allowed staleness for a price (seconds).
*/
constructor(address _feedRegistry, uint256 _maxStale) Ownable(msg.sender) {
FEED_REGISTRY = FeedRegistryInterface(_feedRegistry);
MAX_STALE = _maxStale;
}
// =========================================================
// Public price helpers
// =========================================================
/**
* @notice Get latest price for a base asset in USD, normalized to 1e18.
* @param base Asset address (e.g., token address) to query.
* @return priceUsd Latest price in 1e8 decimals.
*/
function getPriceInUSD(address base) public view returns (uint256 priceUsd) {
(priceUsd,,,) = _getLatestPriceInUSD(base);
}
/**
* @notice Get latest price + metadata for a base asset in USD.
* @param base Asset address to query.
* @return priceUsd Latest price in 1e18 decimals.
* @return roundId Feed round ID used.
* @return updatedAt Timestamp when the feed was updated.
*/
function getPriceInUSDWithMeta(address base)
external
view
returns (uint256 priceUsd, uint80 roundId, uint256 updatedAt, uint8 decimals)
{
return _getLatestPriceInUSD(base);
}
function getIndexPrice(address _v2Index) external view returns (uint256) {
return overridedPrices[_v2Index];
}
function getIndexPrice(CompactAsset[] calldata _assets) external view returns (uint256 total) {
for (uint256 i = 0; i < _assets.length; i++) {
total += _assets[i].amount * getPriceInUSD(_assets[i].token);
}
}
function overrideIndexPrice(address _v2Index, uint256 _price) external onlyOwner {
require(_price > 0, "Price <= 0");
overridedPrices[_v2Index] = _price;
}
// =========================================================
// Internal price helper
// =========================================================
/**
* @dev Internal helper to fetch and normalize USD price from Feed Registry.
* @param base Asset address to query.
* @return priceUsd Price
* @return roundId Chainlink feed round ID used.
* @return updatedAt Timestamp when feed was updated.
* @return dec decimals
*/
function _getLatestPriceInUSD(address base)
internal
view
returns (uint256 priceUsd, uint80 roundId, uint256 updatedAt, uint8 dec)
{
(uint80 _roundId, int256 answer,, uint256 _updatedAt, uint80 answeredInRound) =
FEED_REGISTRY.latestRoundData(base, DENOMINATION_USD);
require(answer > 0, "Price <= 0");
require(answeredInRound >= _roundId, "Stale answer");
//require(_updatedAt + MAX_STALE >= block.timestamp, "Price is stale");
dec = FEED_REGISTRY.decimals(base, DENOMINATION_USD);
// Normalize to 1e8
priceUsd = uint256(answer);
roundId = _roundId;
updatedAt = _updatedAt;
}
}// SPDX-License-Identifier: MIT
// ENVELOP(NIFTSY) protocol V2 for NFT. Onchain Oracle
pragma solidity ^0.8.28;
/// @dev Compact representation of an ERC20 asset + amount.
/// Used both for strike configuration and as portfolio items for the oracle.
struct CompactAsset {
address token; // ERC20 token address (20 bytes)
uint96 amount; // Amount with token decimals (12 bytes)
}
struct OracleData {
address oracle; //Data Provider address
uint96 amount; // Amount with token decimals (12 bytes)
}
/// @dev Oracle interface for retrieving index prices.
/// Supports:
/// - price by index address
/// - price by custom portfolio composition
interface IEnvelopOracle {
function getIndexPrice(address _v2Index) external view returns (uint256);
function getIndexPrice(CompactAsset[] calldata _assets) external view returns (uint256);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)
pragma solidity ^0.8.20;
import {Context} from "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* The initial owner is set to the address provided by the deployer. This can
* later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
/**
* @dev The caller account is not authorized to perform an operation.
*/
error OwnableUnauthorizedAccount(address account);
/**
* @dev The owner is not a valid owner account. (eg. `address(0)`)
*/
error OwnableInvalidOwner(address owner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the address provided by the deployer as the initial owner.
*/
constructor(address initialOwner) {
if (initialOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(initialOwner);
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
if (owner() != _msgSender()) {
revert OwnableUnauthorizedAccount(_msgSender());
}
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
if (newOwner == address(0)) {
revert OwnableInvalidOwner(address(0));
}
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}{
"remappings": [
"@openzeppelin/=lib/openzeppelin-contracts/",
"@Uopenzeppelin/=lib/openzeppelin-contracts-upgradeable/",
"erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
"forge-std/=lib/forge-std/src/",
"halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/",
"openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/",
"openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "prague",
"viaIR": false
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_feedRegistry","type":"address"},{"internalType":"uint256","name":"_maxStale","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"base","type":"address"},{"indexed":false,"internalType":"uint256","name":"priceUsd","type":"uint256"},{"indexed":false,"internalType":"uint80","name":"roundId","type":"uint80"},{"indexed":false,"internalType":"uint256","name":"updatedAt","type":"uint256"}],"name":"PriceRead","type":"event"},{"inputs":[],"name":"DENOMINATION_USD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEED_REGISTRY","outputs":[{"internalType":"contract FeedRegistryInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_STALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint96","name":"amount","type":"uint96"}],"internalType":"struct CompactAsset[]","name":"_assets","type":"tuple[]"}],"name":"getIndexPrice","outputs":[{"internalType":"uint256","name":"total","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_v2Index","type":"address"}],"name":"getIndexPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"}],"name":"getPriceInUSD","outputs":[{"internalType":"uint256","name":"priceUsd","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"base","type":"address"}],"name":"getPriceInUSDWithMeta","outputs":[{"internalType":"uint256","name":"priceUsd","type":"uint256"},{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint8","name":"decimals","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_v2Index","type":"address"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"overrideIndexPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"object","type":"address"}],"name":"overridedPrices","outputs":[{"internalType":"uint256","name":"overrided","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60c060405234801561000f575f5ffd5b5060405161093138038061093183398101604081905261002e916100c2565b338061005357604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b61005c81610073565b506001600160a01b0390911660805260a0526100f9565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f5f604083850312156100d3575f5ffd5b82516001600160a01b03811681146100e9575f5ffd5b6020939093015192949293505050565b60805160a0516108096101285f395f61012901525f8181610203015281816103d301526104ff01526108095ff3fe608060405234801561000f575f5ffd5b50600436106100b1575f3560e01c80638da5cb5b1161006e5780638da5cb5b14610153578063b263e01014610163578063bc71c2421461018b578063d293bb40146101aa578063f2fde38b146101eb578063f8c099e9146101fe575f5ffd5b806302266147146100b55780631f9a6ad2146100db578063325d335f146100ee5780635319476d14610103578063562b40a014610124578063715018a61461014b575b5f5ffd5b6100c86100c3366004610610565b610225565b6040519081526020015b60405180910390f35b6100c86100e9366004610630565b610239565b6101016100fc3660046106a1565b6102cc565b005b61010c61034881565b6040516001600160a01b0390911681526020016100d2565b6100c87f000000000000000000000000000000000000000000000000000000000000000081565b610101610330565b5f546001600160a01b031661010c565b6100c8610171366004610610565b6001600160a01b03165f9081526001602052604090205490565b6100c8610199366004610610565b60016020525f908152604090205481565b6101bd6101b8366004610610565b610343565b6040805194855269ffffffffffffffffffff90931660208501529183015260ff1660608201526080016100d2565b6101016101f9366004610610565b61035f565b61010c7f000000000000000000000000000000000000000000000000000000000000000081565b5f61022f8261039c565b5091949350505050565b5f805b828110156102c55761026f848483818110610259576102596106c9565b6100c39260206040909202019081019150610610565b848483818110610281576102816106c9565b905060400201602001602081019061029991906106dd565b6bffffffffffffffffffffffff166102b1919061071c565b6102bb9083610739565b915060010161023c565b5092915050565b6102d461057a565b5f81116103155760405162461bcd60e51b815260206004820152600a60248201526905072696365203c3d20360b41b60448201526064015b60405180910390fd5b6001600160a01b039091165f90815260016020526040902055565b61033861057a565b6103415f6105a6565b565b5f5f5f5f6103508561039c565b93509350935093509193509193565b61036761057a565b6001600160a01b03811661039057604051631e4fbdf760e01b81525f600482015260240161030c565b610399816105a6565b50565b60405163bcfd032d60e01b81526001600160a01b03828116600483015261034860248301525f9182918291829182918291829182917f0000000000000000000000000000000000000000000000000000000000000000169063bcfd032d9060440160a060405180830381865afa158015610418573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061043c9190610765565b9450945050935093505f83136104815760405162461bcd60e51b815260206004820152600a60248201526905072696365203c3d20360b41b604482015260640161030c565b8369ffffffffffffffffffff168169ffffffffffffffffffff1610156104d85760405162461bcd60e51b815260206004820152600c60248201526b29ba30b6329030b739bbb2b960a11b604482015260640161030c565b604051630b1c5a7560e31b81526001600160a01b038a8116600483015261034860248301527f000000000000000000000000000000000000000000000000000000000000000016906358e2d3a890604401602060405180830381865afa158015610544573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061056891906107b3565b92999398509096509094509092505050565b5f546001600160a01b031633146103415760405163118cdaa760e01b815233600482015260240161030c565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461060b575f5ffd5b919050565b5f60208284031215610620575f5ffd5b610629826105f5565b9392505050565b5f5f60208385031215610641575f5ffd5b823567ffffffffffffffff811115610657575f5ffd5b8301601f81018513610667575f5ffd5b803567ffffffffffffffff81111561067d575f5ffd5b8560208260061b8401011115610691575f5ffd5b6020919091019590945092505050565b5f5f604083850312156106b2575f5ffd5b6106bb836105f5565b946020939093013593505050565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156106ed575f5ffd5b81356bffffffffffffffffffffffff81168114610629575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761073357610733610708565b92915050565b8082018082111561073357610733610708565b805169ffffffffffffffffffff8116811461060b575f5ffd5b5f5f5f5f5f60a08688031215610779575f5ffd5b6107828661074c565b602087015160408801516060890151929750909550935091506107a76080870161074c565b90509295509295909350565b5f602082840312156107c3575f5ffd5b815160ff81168114610629575f5ffdfea2646970667358221220476fa85596958f246d0227723017f267a2f23eb0d09e6633087e65530919f11564736f6c634300081e003300000000000000000000000047fb2585d2c56fe188d0e6ec628a38b74fceeedf0000000000000000000000000000000000000000000000000000000000000e10
Deployed Bytecode
0x608060405234801561000f575f5ffd5b50600436106100b1575f3560e01c80638da5cb5b1161006e5780638da5cb5b14610153578063b263e01014610163578063bc71c2421461018b578063d293bb40146101aa578063f2fde38b146101eb578063f8c099e9146101fe575f5ffd5b806302266147146100b55780631f9a6ad2146100db578063325d335f146100ee5780635319476d14610103578063562b40a014610124578063715018a61461014b575b5f5ffd5b6100c86100c3366004610610565b610225565b6040519081526020015b60405180910390f35b6100c86100e9366004610630565b610239565b6101016100fc3660046106a1565b6102cc565b005b61010c61034881565b6040516001600160a01b0390911681526020016100d2565b6100c87f0000000000000000000000000000000000000000000000000000000000000e1081565b610101610330565b5f546001600160a01b031661010c565b6100c8610171366004610610565b6001600160a01b03165f9081526001602052604090205490565b6100c8610199366004610610565b60016020525f908152604090205481565b6101bd6101b8366004610610565b610343565b6040805194855269ffffffffffffffffffff90931660208501529183015260ff1660608201526080016100d2565b6101016101f9366004610610565b61035f565b61010c7f00000000000000000000000047fb2585d2c56fe188d0e6ec628a38b74fceeedf81565b5f61022f8261039c565b5091949350505050565b5f805b828110156102c55761026f848483818110610259576102596106c9565b6100c39260206040909202019081019150610610565b848483818110610281576102816106c9565b905060400201602001602081019061029991906106dd565b6bffffffffffffffffffffffff166102b1919061071c565b6102bb9083610739565b915060010161023c565b5092915050565b6102d461057a565b5f81116103155760405162461bcd60e51b815260206004820152600a60248201526905072696365203c3d20360b41b60448201526064015b60405180910390fd5b6001600160a01b039091165f90815260016020526040902055565b61033861057a565b6103415f6105a6565b565b5f5f5f5f6103508561039c565b93509350935093509193509193565b61036761057a565b6001600160a01b03811661039057604051631e4fbdf760e01b81525f600482015260240161030c565b610399816105a6565b50565b60405163bcfd032d60e01b81526001600160a01b03828116600483015261034860248301525f9182918291829182918291829182917f00000000000000000000000047fb2585d2c56fe188d0e6ec628a38b74fceeedf169063bcfd032d9060440160a060405180830381865afa158015610418573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061043c9190610765565b9450945050935093505f83136104815760405162461bcd60e51b815260206004820152600a60248201526905072696365203c3d20360b41b604482015260640161030c565b8369ffffffffffffffffffff168169ffffffffffffffffffff1610156104d85760405162461bcd60e51b815260206004820152600c60248201526b29ba30b6329030b739bbb2b960a11b604482015260640161030c565b604051630b1c5a7560e31b81526001600160a01b038a8116600483015261034860248301527f00000000000000000000000047fb2585d2c56fe188d0e6ec628a38b74fceeedf16906358e2d3a890604401602060405180830381865afa158015610544573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061056891906107b3565b92999398509096509094509092505050565b5f546001600160a01b031633146103415760405163118cdaa760e01b815233600482015260240161030c565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461060b575f5ffd5b919050565b5f60208284031215610620575f5ffd5b610629826105f5565b9392505050565b5f5f60208385031215610641575f5ffd5b823567ffffffffffffffff811115610657575f5ffd5b8301601f81018513610667575f5ffd5b803567ffffffffffffffff81111561067d575f5ffd5b8560208260061b8401011115610691575f5ffd5b6020919091019590945092505050565b5f5f604083850312156106b2575f5ffd5b6106bb836105f5565b946020939093013593505050565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156106ed575f5ffd5b81356bffffffffffffffffffffffff81168114610629575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761073357610733610708565b92915050565b8082018082111561073357610733610708565b805169ffffffffffffffffffff8116811461060b575f5ffd5b5f5f5f5f5f60a08688031215610779575f5ffd5b6107828661074c565b602087015160408801516060890151929750909550935091506107a76080870161074c565b90509295509295909350565b5f602082840312156107c3575f5ffd5b815160ff81168114610629575f5ffdfea2646970667358221220476fa85596958f246d0227723017f267a2f23eb0d09e6633087e65530919f11564736f6c634300081e0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000047fb2585d2c56fe188d0e6ec628a38b74fceeedf0000000000000000000000000000000000000000000000000000000000000e10
-----Decoded View---------------
Arg [0] : _feedRegistry (address): 0x47Fb2585D2C56Fe188D0E6ec628a38b74fCeeeDf
Arg [1] : _maxStale (uint256): 3600
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000047fb2585d2c56fe188d0e6ec628a38b74fceeedf
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000e10
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 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.