Source Code
Overview
S Balance
S Value
$0.00| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 16053627 | 292 days ago | Contract Creation | 0 S |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
PythAggregatorAdapter
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
Yes with 200 runs
Other Settings:
cancun EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import '@pythnetwork/IPyth.sol';
import '@pythnetwork/PythStructs.sol';
import '../moneyMarket/src/contracts/dependencies/chainlink/AggregatorInterface.sol';
import '../moneyMarketHelpers/IPythAggregatorFactory.sol';
contract PythAggregatorAdapter is AggregatorInterface {
IPyth public immutable pyth;
bytes32 public immutable priceId;
IPythAggregatorFactory public immutable factory;
constructor(address _pythAddress, bytes32 _priceId) {
pyth = IPyth(_pythAddress);
priceId = _priceId;
factory = IPythAggregatorFactory(msg.sender);
}
function latestAnswer() external view override returns (int256) {
PythStructs.Price memory price = pyth.getPriceNoOlderThan(priceId, factory.maxAge());
return _standardizePrice(price.price, price.expo);
}
function latestTimestamp() external view override returns (uint256) {
PythStructs.Price memory price = pyth.getPriceUnsafe(priceId);
return price.publishTime;
}
function latestRound() external pure override returns (uint256) {
revert('Historical data not supported');
}
function getAnswer(uint256 roundId) external pure override returns (int256) {
revert('Historical data not supported');
}
function getTimestamp(uint256 roundId) external pure override returns (uint256) {
revert('Historical data not supported');
}
// Helper function to convert Pyth price to 8 decimals (Chainlink standard)
function _standardizePrice(int64 price, int32 expo) internal pure returns (int256) {
int256 basePrice = int256(price);
int32 exponentDiff = -8 - expo; // Convert to 8 decimals
if (exponentDiff < 0) {
return basePrice * int256(10 ** uint32(-exponentDiff));
} else {
return basePrice / int256(10 ** uint32(exponentDiff));
}
}
}// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
import "./PythStructs.sol";
import "./IPythEvents.sol";
/// @title Consume prices from the Pyth Network (https://pyth.network/).
/// @dev Please refer to the guidance at https://docs.pyth.network/consumers/best-practices for how to consume prices safely.
/// @author Pyth Data Association
interface IPyth is IPythEvents {
/// @notice Returns the period (in seconds) that a price feed is considered valid since its publish time
function getValidTimePeriod() external view returns (uint validTimePeriod);
/// @notice Returns the price and confidence interval.
/// @dev Reverts if the price has not been updated within the last `getValidTimePeriod()` seconds.
/// @param id The Pyth Price Feed ID of which to fetch the price and confidence interval.
/// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.
function getPrice(
bytes32 id
) external view returns (PythStructs.Price memory price);
/// @notice Returns the exponentially-weighted moving average price and confidence interval.
/// @dev Reverts if the EMA price is not available.
/// @param id The Pyth Price Feed ID of which to fetch the EMA price and confidence interval.
/// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.
function getEmaPrice(
bytes32 id
) external view returns (PythStructs.Price memory price);
/// @notice Returns the price of a price feed without any sanity checks.
/// @dev This function returns the most recent price update in this contract without any recency checks.
/// This function is unsafe as the returned price update may be arbitrarily far in the past.
///
/// Users of this function should check the `publishTime` in the price to ensure that the returned price is
/// sufficiently recent for their application. If you are considering using this function, it may be
/// safer / easier to use either `getPrice` or `getPriceNoOlderThan`.
/// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.
function getPriceUnsafe(
bytes32 id
) external view returns (PythStructs.Price memory price);
/// @notice Returns the price that is no older than `age` seconds of the current time.
/// @dev This function is a sanity-checked version of `getPriceUnsafe` which is useful in
/// applications that require a sufficiently-recent price. Reverts if the price wasn't updated sufficiently
/// recently.
/// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.
function getPriceNoOlderThan(
bytes32 id,
uint age
) external view returns (PythStructs.Price memory price);
/// @notice Returns the exponentially-weighted moving average price of a price feed without any sanity checks.
/// @dev This function returns the same price as `getEmaPrice` in the case where the price is available.
/// However, if the price is not recent this function returns the latest available price.
///
/// The returned price can be from arbitrarily far in the past; this function makes no guarantees that
/// the returned price is recent or useful for any particular application.
///
/// Users of this function should check the `publishTime` in the price to ensure that the returned price is
/// sufficiently recent for their application. If you are considering using this function, it may be
/// safer / easier to use either `getEmaPrice` or `getEmaPriceNoOlderThan`.
/// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.
function getEmaPriceUnsafe(
bytes32 id
) external view returns (PythStructs.Price memory price);
/// @notice Returns the exponentially-weighted moving average price that is no older than `age` seconds
/// of the current time.
/// @dev This function is a sanity-checked version of `getEmaPriceUnsafe` which is useful in
/// applications that require a sufficiently-recent price. Reverts if the price wasn't updated sufficiently
/// recently.
/// @return price - please read the documentation of PythStructs.Price to understand how to use this safely.
function getEmaPriceNoOlderThan(
bytes32 id,
uint age
) external view returns (PythStructs.Price memory price);
/// @notice Update price feeds with given update messages.
/// This method requires the caller to pay a fee in wei; the required fee can be computed by calling
/// `getUpdateFee` with the length of the `updateData` array.
/// Prices will be updated if they are more recent than the current stored prices.
/// The call will succeed even if the update is not the most recent.
/// @dev Reverts if the transferred fee is not sufficient or the updateData is invalid.
/// @param updateData Array of price update data.
function updatePriceFeeds(bytes[] calldata updateData) external payable;
/// @notice Wrapper around updatePriceFeeds that rejects fast if a price update is not necessary. A price update is
/// necessary if the current on-chain publishTime is older than the given publishTime. It relies solely on the
/// given `publishTimes` for the price feeds and does not read the actual price update publish time within `updateData`.
///
/// This method requires the caller to pay a fee in wei; the required fee can be computed by calling
/// `getUpdateFee` with the length of the `updateData` array.
///
/// `priceIds` and `publishTimes` are two arrays with the same size that correspond to senders known publishTime
/// of each priceId when calling this method. If all of price feeds within `priceIds` have updated and have
/// a newer or equal publish time than the given publish time, it will reject the transaction to save gas.
/// Otherwise, it calls updatePriceFeeds method to update the prices.
///
/// @dev Reverts if update is not needed or the transferred fee is not sufficient or the updateData is invalid.
/// @param updateData Array of price update data.
/// @param priceIds Array of price ids.
/// @param publishTimes Array of publishTimes. `publishTimes[i]` corresponds to known `publishTime` of `priceIds[i]`
function updatePriceFeedsIfNecessary(
bytes[] calldata updateData,
bytes32[] calldata priceIds,
uint64[] calldata publishTimes
) external payable;
/// @notice Returns the required fee to update an array of price updates.
/// @param updateData Array of price update data.
/// @return feeAmount The required fee in Wei.
function getUpdateFee(
bytes[] calldata updateData
) external view returns (uint feeAmount);
/// @notice Parse `updateData` and return price feeds of the given `priceIds` if they are all published
/// within `minPublishTime` and `maxPublishTime`.
///
/// You can use this method if you want to use a Pyth price at a fixed time and not the most recent price;
/// otherwise, please consider using `updatePriceFeeds`. This method does not store the price updates on-chain.
///
/// This method requires the caller to pay a fee in wei; the required fee can be computed by calling
/// `getUpdateFee` with the length of the `updateData` array.
///
///
/// @dev Reverts if the transferred fee is not sufficient or the updateData is invalid or there is
/// no update for any of the given `priceIds` within the given time range.
/// @param updateData Array of price update data.
/// @param priceIds Array of price ids.
/// @param minPublishTime minimum acceptable publishTime for the given `priceIds`.
/// @param maxPublishTime maximum acceptable publishTime for the given `priceIds`.
/// @return priceFeeds Array of the price feeds corresponding to the given `priceIds` (with the same order).
function parsePriceFeedUpdates(
bytes[] calldata updateData,
bytes32[] calldata priceIds,
uint64 minPublishTime,
uint64 maxPublishTime
) external payable returns (PythStructs.PriceFeed[] memory priceFeeds);
}// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
contract PythStructs {
// A price with a degree of uncertainty, represented as a price +- a confidence interval.
//
// The confidence interval roughly corresponds to the standard error of a normal distribution.
// Both the price and confidence are stored in a fixed-point numeric representation,
// `x * (10^expo)`, where `expo` is the exponent.
//
// Please refer to the documentation at https://docs.pyth.network/consumers/best-practices for how
// to how this price safely.
struct Price {
// Price
int64 price;
// Confidence interval around the price
uint64 conf;
// Price exponent
int32 expo;
// Unix timestamp describing when the price was published
uint publishTime;
}
// PriceFeed represents a current aggregate price from pyth publisher feeds.
struct PriceFeed {
// The price ID.
bytes32 id;
// Latest available price
Price price;
// Latest available exponentially-weighted moving average price
Price emaPrice;
}
}// 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;
interface IPythAggregatorFactory {
function maxAge() external view returns (uint);
}// SPDX-License-Identifier: Apache-2.0
pragma solidity ^0.8.0;
/// @title IPythEvents contains the events that Pyth contract emits.
/// @dev This interface can be used for listening to the updates for off-chain and testing purposes.
interface IPythEvents {
/// @dev Emitted when the price feed with `id` has received a fresh update.
/// @param id The Pyth Price Feed ID.
/// @param publishTime Publish time of the given price update.
/// @param price Price of the given price update.
/// @param conf Confidence interval of the given price update.
event PriceFeedUpdate(
bytes32 indexed id,
uint64 publishTime,
int64 price,
uint64 conf
);
/// @dev Emitted when a batch price update is processed successfully.
/// @param chainId ID of the source chain that the batch price update comes from.
/// @param sequenceNumber Sequence number of the batch price update.
event BatchPriceFeedUpdate(uint16 chainId, uint64 sequenceNumber);
}{
"remappings": [
"@openzeppelin-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
"@openzeppelin/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/",
"@pythnetwork/=lib/pyth-sdk-solidity/",
"@money-market/=contracts/moneyMarket/src/",
"@money-market-scripts/=contracts/moneyMarket/scripts/",
"@money-market-tests/=contracts/moneyMarket/tests/",
"@contracts/=contracts/",
"solidity-utils/=lib/solidity-utils/src/",
"@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
"@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/",
"ds-test/=lib/solmate/lib/ds-test/src/",
"erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
"forge-std/=lib/forge-std/src/",
"halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/",
"openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
"openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/",
"pyth-sdk-solidity/=lib/pyth-sdk-solidity/",
"solmate/=lib/solmate/src/"
],
"optimizer": {
"enabled": true,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "cancun",
"viaIR": false,
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_pythAddress","type":"address"},{"internalType":"bytes32","name":"_priceId","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"factory","outputs":[{"internalType":"contract IPythAggregatorFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"roundId","type":"uint256"}],"name":"getAnswer","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"roundId","type":"uint256"}],"name":"getTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":"pure","type":"function"},{"inputs":[],"name":"latestTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pyth","outputs":[{"internalType":"contract IPyth","name":"","type":"address"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60e060405234801561000f575f5ffd5b506040516107ab3803806107ab83398101604081905261002e91610048565b6001600160a01b0390911660805260a0523360c05261007f565b5f5f60408385031215610059575f5ffd5b82516001600160a01b038116811461006f575f5ffd5b6020939093015192949293505050565b60805160a05160c0516106e16100ca5f395f818160f301526101a801525f8181608e0152818161018701526102ff01525f818161013201528181610158015261033101526106e15ff3fe608060405234801561000f575f5ffd5b5060043610610085575f3560e01c8063b5ab58dc11610058578063b5ab58dc146100db578063b633620c146100db578063c45a0155146100ee578063f98d06f01461012d575f5ffd5b8063311893341461008957806350d25bcd146100c3578063668a0f02146100cb5780638205bf6a146100d3575b5f5ffd5b6100b07f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6100b0610154565b6100b06102a2565b6100b06102f0565b6100b06100e9366004610406565b6102a2565b6101157f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100ba565b6101157f000000000000000000000000000000000000000000000000000000000000000081565b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a4ae35e07f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663687043c56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610202573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610226919061041d565b6040516001600160e01b031960e085901b16815260048101929092526024820152604401608060405180830381865afa158015610265573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102899190610461565b905061029c815f015182604001516103a4565b91505090565b60405162461bcd60e51b815260206004820152601d60248201527f486973746f726963616c2064617461206e6f7420737570706f7274656400000060448201525f9060640160405180910390fd5b6040516396834ad360e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201525f9081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906396834ad390602401608060405180830381865afa158015610376573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061039a9190610461565b6060015192915050565b5f600783900b816103b784600719610501565b90505f8160030b12156103eb576103cd81610528565b6103d890600a61062c565b6103e29083610644565b92505050610400565b6103f681600a61062c565b6103e29083610673565b92915050565b5f60208284031215610416575f5ffd5b5035919050565b5f6020828403121561042d575f5ffd5b5051919050565b805167ffffffffffffffff8116811461044b575f5ffd5b919050565b8051600381900b811461044b575f5ffd5b5f6080828403128015610472575f5ffd5b506040516080810167ffffffffffffffff811182821017156104a257634e487b7160e01b5f52604160045260245ffd5b6040528251600781900b81146104b6575f5ffd5b81526104c460208401610434565b60208201526104d560408401610450565b60408201526060928301519281019290925250919050565b634e487b7160e01b5f52601160045260245ffd5b600382810b9082900b03637fffffff198112637fffffff82131715610400576104006104ed565b5f8160030b637fffffff198103610541576105416104ed565b5f0392915050565b6001815b600184111561058457808504811115610568576105686104ed565b600184161561057657908102905b60019390931c92800261054d565b935093915050565b5f8261059a57506001610400565b816105a657505f610400565b81600181146105bc57600281146105c6576105e2565b6001915050610400565b60ff8411156105d7576105d76104ed565b50506001821b610400565b5060208310610133831016604e8410600b8410161715610605575081810a610400565b6106115f198484610549565b805f1904821115610624576106246104ed565b029392505050565b5f61063d63ffffffff84168361058c565b9392505050565b8082025f8212600160ff1b8414161561065f5761065f6104ed565b8181058314821517610400576104006104ed565b5f8261068d57634e487b7160e01b5f52601260045260245ffd5b600160ff1b82145f19841416156106a6576106a66104ed565b50059056fea2646970667358221220b391bd0cc46b24c0072e3a24153e33a7d3f3e4e7e86021d3a252d7c2a0c5f8bf64736f6c634300081c00330000000000000000000000002880ab155794e7179c9ee2e38200202908c17b43ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace
Deployed Bytecode
0x608060405234801561000f575f5ffd5b5060043610610085575f3560e01c8063b5ab58dc11610058578063b5ab58dc146100db578063b633620c146100db578063c45a0155146100ee578063f98d06f01461012d575f5ffd5b8063311893341461008957806350d25bcd146100c3578063668a0f02146100cb5780638205bf6a146100d3575b5f5ffd5b6100b07fff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace81565b6040519081526020015b60405180910390f35b6100b0610154565b6100b06102a2565b6100b06102f0565b6100b06100e9366004610406565b6102a2565b6101157f00000000000000000000000067f0848f787a30dd278dcf451ae47e79af026d5681565b6040516001600160a01b0390911681526020016100ba565b6101157f0000000000000000000000002880ab155794e7179c9ee2e38200202908c17b4381565b5f5f7f0000000000000000000000002880ab155794e7179c9ee2e38200202908c17b436001600160a01b031663a4ae35e07fff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace7f00000000000000000000000067f0848f787a30dd278dcf451ae47e79af026d566001600160a01b031663687043c56040518163ffffffff1660e01b8152600401602060405180830381865afa158015610202573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610226919061041d565b6040516001600160e01b031960e085901b16815260048101929092526024820152604401608060405180830381865afa158015610265573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102899190610461565b905061029c815f015182604001516103a4565b91505090565b60405162461bcd60e51b815260206004820152601d60248201527f486973746f726963616c2064617461206e6f7420737570706f7274656400000060448201525f9060640160405180910390fd5b6040516396834ad360e01b81527fff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace60048201525f9081906001600160a01b037f0000000000000000000000002880ab155794e7179c9ee2e38200202908c17b4316906396834ad390602401608060405180830381865afa158015610376573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061039a9190610461565b6060015192915050565b5f600783900b816103b784600719610501565b90505f8160030b12156103eb576103cd81610528565b6103d890600a61062c565b6103e29083610644565b92505050610400565b6103f681600a61062c565b6103e29083610673565b92915050565b5f60208284031215610416575f5ffd5b5035919050565b5f6020828403121561042d575f5ffd5b5051919050565b805167ffffffffffffffff8116811461044b575f5ffd5b919050565b8051600381900b811461044b575f5ffd5b5f6080828403128015610472575f5ffd5b506040516080810167ffffffffffffffff811182821017156104a257634e487b7160e01b5f52604160045260245ffd5b6040528251600781900b81146104b6575f5ffd5b81526104c460208401610434565b60208201526104d560408401610450565b60408201526060928301519281019290925250919050565b634e487b7160e01b5f52601160045260245ffd5b600382810b9082900b03637fffffff198112637fffffff82131715610400576104006104ed565b5f8160030b637fffffff198103610541576105416104ed565b5f0392915050565b6001815b600184111561058457808504811115610568576105686104ed565b600184161561057657908102905b60019390931c92800261054d565b935093915050565b5f8261059a57506001610400565b816105a657505f610400565b81600181146105bc57600281146105c6576105e2565b6001915050610400565b60ff8411156105d7576105d76104ed565b50506001821b610400565b5060208310610133831016604e8410600b8410161715610605575081810a610400565b6106115f198484610549565b805f1904821115610624576106246104ed565b029392505050565b5f61063d63ffffffff84168361058c565b9392505050565b8082025f8212600160ff1b8414161561065f5761065f6104ed565b8181058314821517610400576104006104ed565b5f8261068d57634e487b7160e01b5f52601260045260245ffd5b600160ff1b82145f19841416156106a6576106a66104ed565b50059056fea2646970667358221220b391bd0cc46b24c0072e3a24153e33a7d3f3e4e7e86021d3a252d7c2a0c5f8bf64736f6c634300081c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000002880ab155794e7179c9ee2e38200202908c17b43ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace
-----Decoded View---------------
Arg [0] : _pythAddress (address): 0x2880aB155794e7179c9eE2e38200202908C17B43
Arg [1] : _priceId (bytes32): 0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000002880ab155794e7179c9ee2e38200202908c17b43
Arg [1] : ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in S
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
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.