Source Code
Overview
APE Balance
APE Value
$0.00Multichain Info
N/A
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Cross-Chain Transactions
Loading...
Loading
Contract Name:
PythAggregatorV3
Compiler Version
v0.8.23+commit.f704f362
Optimization Enabled:
Yes with 800 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.8.23;
import {PythStructs} from "@pythnetwork/pyth-sdk-solidity/PythStructs.sol";
import {IPyth} from "@pythnetwork/pyth-sdk-solidity/IPyth.sol";
// This interface is forked from the Zerolend Adapter found here:
// https://github.com/zerolend/pyth-oracles/blob/master/contracts/PythAggregatorV3.sol
// Original license found under licenses/zerolend-pyth-oracles.md
/**
* @title A port of the ChainlinkAggregatorV3 interface that supports Pyth price feeds
* @notice This does not store any roundId information on-chain. Please review the code before using this implementation.
* Users should deploy an instance of this contract to wrap every price feed id that they need to use.
* @dev Forked from https://github.com/zerolend/pyth-oracles/blob/master/contracts/PythAggregatorV3.sol with minor gas improvements
*/
contract PythAggregatorV3 {
bytes32 public immutable priceId;
IPyth public immutable pyth;
constructor(address _pyth, bytes32 _priceId) {
priceId = _priceId;
pyth = IPyth(_pyth);
}
// Wrapper function to update the underlying Pyth price feeds. Not part of the AggregatorV3 interface but useful.
function updateFeeds(bytes[] calldata priceUpdateData) external payable returns (bool success) {
// Update the prices to the latest available values and pay the required fee for it. The `priceUpdateData` data
// should be retrieved from our off-chain Price Service API using the `pyth-evm-js` package.
// See section "How Pyth Works on EVM Chains" below for more information.
uint fee = pyth.getUpdateFee(priceUpdateData);
pyth.updatePriceFeeds{value: fee}(priceUpdateData);
// refund remaining eth
(success, ) = payable(msg.sender).call{value: address(this).balance}("");
}
function decimals() external view virtual returns (uint8) {
PythStructs.Price memory price = pyth.getPriceUnsafe(priceId);
return uint8(-1 * int8(price.expo));
}
function description() external pure returns (string memory) {
return "A port of a chainlink aggregator powered by pyth network feeds";
}
function version() external pure returns (uint256) {
return 1;
}
function latestAnswer() public view virtual returns (int256) {
PythStructs.Price memory price = pyth.getPriceUnsafe(priceId);
return int256(price.price);
}
function latestTimestamp() public view returns (uint256) {
PythStructs.Price memory price = pyth.getPriceUnsafe(priceId);
return price.publishTime;
}
function latestRound() external view returns (uint256) {
// use timestamp as the round id
return latestTimestamp();
}
function getAnswer(uint256) external view returns (int256) {
return latestAnswer();
}
function getTimestamp(uint256) external view returns (uint256) {
return latestTimestamp();
}
function getRoundData(
uint80 _roundId
)
external
view
returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)
{
PythStructs.Price memory price = pyth.getPriceUnsafe(priceId);
return (_roundId, int256(price.price), price.publishTime, price.publishTime, _roundId);
}
function latestRoundData()
external
view
returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound)
{
PythStructs.Price memory price = pyth.getPriceUnsafe(priceId);
roundId = uint80(price.publishTime);
return (roundId, int256(price.price), price.publishTime, price.publishTime, roundId);
}
}// 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/documentation/pythnet-price-feeds/best-practices for how to consume prices safely.
/// @author Pyth Data Association
interface IPyth is IPythEvents {
/// @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 `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 may store the price updates on-chain, if they
/// are more recent than the current stored prices.
///
/// 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);
/// @notice Similar to `parsePriceFeedUpdates` but ensures the updates returned are
/// the first updates published in minPublishTime. That is, if there are multiple updates for a given timestamp,
/// this method will return the first update. This method may store the price updates on-chain, if they
/// are more recent than the current stored prices.
///
///
/// @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 and uniqueness condition.
/// @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 parsePriceFeedUpdatesUnique(
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;
/// @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
);
}// 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/documentation/pythnet-price-feeds/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;
}
}{
"optimizer": {
"enabled": true,
"runs": 800
},
"evmVersion": "paris",
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_pyth","type":"address"},{"internalType":"bytes32","name":"_priceId","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"description","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getAnswer","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint80","name":"_roundId","type":"uint80"}],"name":"getRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestAnswer","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRound","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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"},{"inputs":[{"internalType":"bytes[]","name":"priceUpdateData","type":"bytes[]"}],"name":"updateFeeds","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"version","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"}]Contract Creation Code
60c060405234801561001057600080fd5b50604051610cb2380380610cb283398101604081905261002f91610043565b6080526001600160a01b031660a05261007d565b6000806040838503121561005657600080fd5b82516001600160a01b038116811461006d57600080fd5b6020939093015192949293505050565b60805160a051610bbd6100f56000396000818161028601528181610317015281816103de015281816104c4015281816105440152818161062f015281816106c0015261079b01526000818160e9015281816102e4015281816103ab015281816104910152818161057301526107ca0152610bbd6000f3fe6080604052600436106100d25760003560e01c80638205bf6a1161007f578063b633620c11610059578063b633620c14610231578063bc36c0a914610251578063f98d06f014610274578063feaf968c146102c057600080fd5b80638205bf6a146101a55780639a6fc8f5146101ba578063b5ab58dc1461021157600080fd5b806354fd4d50116100b057806354fd4d501461015a578063668a0f021461016e5780637284e4161461018357600080fd5b806331189334146100d7578063313ce5671461011e57806350d25bcd14610145575b600080fd5b3480156100e357600080fd5b5061010b7f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b34801561012a57600080fd5b506101336102d5565b60405160ff9091168152602001610115565b34801561015157600080fd5b5061010b61039c565b34801561016657600080fd5b50600161010b565b34801561017a57600080fd5b5061010b610453565b34801561018f57600080fd5b50610198610462565b6040516101159190610867565b3480156101b157600080fd5b5061010b610482565b3480156101c657600080fd5b506101da6101d53660046108b6565b610539565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610115565b34801561021d57600080fd5b5061010b61022c3660046108e9565b610610565b34801561023d57600080fd5b5061010b61024c3660046108e9565b610620565b61026461025f366004610902565b61062a565b6040519015158152602001610115565b34801561028057600080fd5b506102a87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610115565b3480156102cc57600080fd5b506101da610790565b6040516396834ad360e01b81527f0000000000000000000000000000000000000000000000000000000000000000600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906396834ad390602401608060405180830381865afa15801561035e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038291906109a6565b905080604001516000196103969190610a36565b91505090565b6040516396834ad360e01b81527f0000000000000000000000000000000000000000000000000000000000000000600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906396834ad390602401608060405180830381865afa158015610425573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044991906109a6565b5160070b92915050565b600061045d610482565b905090565b60606040518060600160405280603e8152602001610b4a603e9139905090565b6040516396834ad360e01b81527f0000000000000000000000000000000000000000000000000000000000000000600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906396834ad390602401608060405180830381865afa15801561050b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052f91906109a6565b6060015192915050565b6000806000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166396834ad37f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016105b091815260200190565b608060405180830381865afa1580156105cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f191906109a6565b8051606090910151979860079190910b97965086955088945092505050565b600061061a61039c565b92915050565b600061061a610482565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d47eed4585856040518363ffffffff1660e01b815260040161067b929190610a94565b602060405180830381865afa158015610698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106bc9190610b30565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ef9e5e288286866040518463ffffffff1660e01b815260040161070d929190610a94565b6000604051808303818588803b15801561072657600080fd5b505af115801561073a573d6000803e3d6000fd5b50506040513393504792509050600081818185875af1925050503d8060008114610780576040519150601f19603f3d011682016040523d82523d6000602084013e610785565b606091505b509095945050505050565b6000806000806000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166396834ad37f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161080791815260200190565b608060405180830381865afa158015610824573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084891906109a6565b60608101519051909760079190910b9650879550859450849350915050565b60006020808352835180602085015260005b8181101561089557858101830151858201604001528201610879565b506000604082860101526040601f19601f8301168501019250505092915050565b6000602082840312156108c857600080fd5b813569ffffffffffffffffffff811681146108e257600080fd5b9392505050565b6000602082840312156108fb57600080fd5b5035919050565b6000806020838503121561091557600080fd5b823567ffffffffffffffff8082111561092d57600080fd5b818501915085601f83011261094157600080fd5b81358181111561095057600080fd5b8660208260051b850101111561096557600080fd5b60209290920196919550909350505050565b805167ffffffffffffffff8116811461098f57600080fd5b919050565b8051600381900b811461098f57600080fd5b6000608082840312156109b857600080fd5b6040516080810181811067ffffffffffffffff821117156109e957634e487b7160e01b600052604160045260246000fd5b6040528251600781900b81146109fe57600080fd5b8152610a0c60208401610977565b6020820152610a1d60408401610994565b6040820152606083015160608201528091505092915050565b60008260000b8260000b028060000b9150808214610a6457634e487b7160e01b600052601160045260246000fd5b5092915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208082528181018390526000906040600585901b8401810190840186845b87811015610b2357868403603f190183528135368a9003601e19018112610ad957600080fd5b8901858101903567ffffffffffffffff811115610af557600080fd5b803603821315610b0457600080fd5b610b0f868284610a6b565b955050509184019190840190600101610ab3565b5091979650505050505050565b600060208284031215610b4257600080fd5b505191905056fe4120706f7274206f66206120636861696e6c696e6b2061676772656761746f7220706f77657265642062792070797468206e6574776f726b206665656473a2646970667358221220d14945c33062d71a97a5d2d97e6c4bb8ff337a759189cdd0997956c000fd55f964736f6c634300081700330000000000000000000000002880ab155794e7179c9ee2e38200202908c17b4315add95022ae13563a11992e727c91bdb6b55bc183d9d747436c80a483d8c864
Deployed Bytecode
0x6080604052600436106100d25760003560e01c80638205bf6a1161007f578063b633620c11610059578063b633620c14610231578063bc36c0a914610251578063f98d06f014610274578063feaf968c146102c057600080fd5b80638205bf6a146101a55780639a6fc8f5146101ba578063b5ab58dc1461021157600080fd5b806354fd4d50116100b057806354fd4d501461015a578063668a0f021461016e5780637284e4161461018357600080fd5b806331189334146100d7578063313ce5671461011e57806350d25bcd14610145575b600080fd5b3480156100e357600080fd5b5061010b7f15add95022ae13563a11992e727c91bdb6b55bc183d9d747436c80a483d8c86481565b6040519081526020015b60405180910390f35b34801561012a57600080fd5b506101336102d5565b60405160ff9091168152602001610115565b34801561015157600080fd5b5061010b61039c565b34801561016657600080fd5b50600161010b565b34801561017a57600080fd5b5061010b610453565b34801561018f57600080fd5b50610198610462565b6040516101159190610867565b3480156101b157600080fd5b5061010b610482565b3480156101c657600080fd5b506101da6101d53660046108b6565b610539565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610115565b34801561021d57600080fd5b5061010b61022c3660046108e9565b610610565b34801561023d57600080fd5b5061010b61024c3660046108e9565b610620565b61026461025f366004610902565b61062a565b6040519015158152602001610115565b34801561028057600080fd5b506102a87f0000000000000000000000002880ab155794e7179c9ee2e38200202908c17b4381565b6040516001600160a01b039091168152602001610115565b3480156102cc57600080fd5b506101da610790565b6040516396834ad360e01b81527f15add95022ae13563a11992e727c91bdb6b55bc183d9d747436c80a483d8c864600482015260009081906001600160a01b037f0000000000000000000000002880ab155794e7179c9ee2e38200202908c17b4316906396834ad390602401608060405180830381865afa15801561035e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038291906109a6565b905080604001516000196103969190610a36565b91505090565b6040516396834ad360e01b81527f15add95022ae13563a11992e727c91bdb6b55bc183d9d747436c80a483d8c864600482015260009081906001600160a01b037f0000000000000000000000002880ab155794e7179c9ee2e38200202908c17b4316906396834ad390602401608060405180830381865afa158015610425573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044991906109a6565b5160070b92915050565b600061045d610482565b905090565b60606040518060600160405280603e8152602001610b4a603e9139905090565b6040516396834ad360e01b81527f15add95022ae13563a11992e727c91bdb6b55bc183d9d747436c80a483d8c864600482015260009081906001600160a01b037f0000000000000000000000002880ab155794e7179c9ee2e38200202908c17b4316906396834ad390602401608060405180830381865afa15801561050b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052f91906109a6565b6060015192915050565b6000806000806000807f0000000000000000000000002880ab155794e7179c9ee2e38200202908c17b436001600160a01b03166396834ad37f15add95022ae13563a11992e727c91bdb6b55bc183d9d747436c80a483d8c8646040518263ffffffff1660e01b81526004016105b091815260200190565b608060405180830381865afa1580156105cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f191906109a6565b8051606090910151979860079190910b97965086955088945092505050565b600061061a61039c565b92915050565b600061061a610482565b6000807f0000000000000000000000002880ab155794e7179c9ee2e38200202908c17b436001600160a01b031663d47eed4585856040518363ffffffff1660e01b815260040161067b929190610a94565b602060405180830381865afa158015610698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106bc9190610b30565b90507f0000000000000000000000002880ab155794e7179c9ee2e38200202908c17b436001600160a01b031663ef9e5e288286866040518463ffffffff1660e01b815260040161070d929190610a94565b6000604051808303818588803b15801561072657600080fd5b505af115801561073a573d6000803e3d6000fd5b50506040513393504792509050600081818185875af1925050503d8060008114610780576040519150601f19603f3d011682016040523d82523d6000602084013e610785565b606091505b509095945050505050565b6000806000806000807f0000000000000000000000002880ab155794e7179c9ee2e38200202908c17b436001600160a01b03166396834ad37f15add95022ae13563a11992e727c91bdb6b55bc183d9d747436c80a483d8c8646040518263ffffffff1660e01b815260040161080791815260200190565b608060405180830381865afa158015610824573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061084891906109a6565b60608101519051909760079190910b9650879550859450849350915050565b60006020808352835180602085015260005b8181101561089557858101830151858201604001528201610879565b506000604082860101526040601f19601f8301168501019250505092915050565b6000602082840312156108c857600080fd5b813569ffffffffffffffffffff811681146108e257600080fd5b9392505050565b6000602082840312156108fb57600080fd5b5035919050565b6000806020838503121561091557600080fd5b823567ffffffffffffffff8082111561092d57600080fd5b818501915085601f83011261094157600080fd5b81358181111561095057600080fd5b8660208260051b850101111561096557600080fd5b60209290920196919550909350505050565b805167ffffffffffffffff8116811461098f57600080fd5b919050565b8051600381900b811461098f57600080fd5b6000608082840312156109b857600080fd5b6040516080810181811067ffffffffffffffff821117156109e957634e487b7160e01b600052604160045260246000fd5b6040528251600781900b81146109fe57600080fd5b8152610a0c60208401610977565b6020820152610a1d60408401610994565b6040820152606083015160608201528091505092915050565b60008260000b8260000b028060000b9150808214610a6457634e487b7160e01b600052601160045260246000fd5b5092915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208082528181018390526000906040600585901b8401810190840186845b87811015610b2357868403603f190183528135368a9003601e19018112610ad957600080fd5b8901858101903567ffffffffffffffff811115610af557600080fd5b803603821315610b0457600080fd5b610b0f868284610a6b565b955050509184019190840190600101610ab3565b5091979650505050505050565b600060208284031215610b4257600080fd5b505191905056fe4120706f7274206f66206120636861696e6c696e6b2061676772656761746f7220706f77657265642062792070797468206e6574776f726b206665656473a2646970667358221220d14945c33062d71a97a5d2d97e6c4bb8ff337a759189cdd0997956c000fd55f964736f6c63430008170033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000002880ab155794e7179c9ee2e38200202908c17b4315add95022ae13563a11992e727c91bdb6b55bc183d9d747436c80a483d8c864
-----Decoded View---------------
Arg [0] : _pyth (address): 0x2880aB155794e7179c9eE2e38200202908C17B43
Arg [1] : _priceId (bytes32): 0x15add95022ae13563a11992e727c91bdb6b55bc183d9d747436c80a483d8c864
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000002880ab155794e7179c9ee2e38200202908c17b43
Arg [1] : 15add95022ae13563a11992e727c91bdb6b55bc183d9d747436c80a483d8c864
Loading...
Loading
Loading...
Loading
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.