Overview
S Balance
0 S
S Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
PythAggregatorFactory
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: GPL-2.0-or-later pragma solidity 0.8.28; import {AggregatorV3Interface} from "chainlink/v0.8/interfaces/AggregatorV3Interface.sol"; import {IPythAggregatorFactory} from "silo-oracles/contracts/interfaces/IPythAggregatorFactory.sol"; import {PythAggregatorV3} from "pyth-sdk-solidity/PythAggregatorV3.sol"; /// @notice PythAggregatorFactory is a factory to deploy PythAggregatorV3 contracts. Function for the deployment is /// permissionless. Duplicates of aggregators are not allowed. contract PythAggregatorFactory is IPythAggregatorFactory { /// @inheritdoc IPythAggregatorFactory address public immutable override pyth; /// @inheritdoc IPythAggregatorFactory mapping (bytes32 priceId => AggregatorV3Interface aggregator) public override aggregators; constructor(address _pyth) { pyth = _pyth; } /// @inheritdoc IPythAggregatorFactory function deploy(bytes32 _priceId) external virtual override returns (AggregatorV3Interface newAggregator) { if (address(aggregators[_priceId]) != address(0)) { revert AggregatorAlreadyExists(); } newAggregator = AggregatorV3Interface(address(new PythAggregatorV3(pyth, _priceId))); aggregators[_priceId] = newAggregator; emit AggregatorDeployed(_priceId, newAggregator); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface AggregatorV3Interface { function decimals() external view returns (uint8); function description() external view returns (string memory); function version() external view returns (uint256); function getRoundData( uint80 _roundId ) external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound); function latestRoundData() external view returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound); }
// SPDX-License-Identifier: MIT pragma solidity >=0.8.0; import {AggregatorV3Interface} from "chainlink/v0.8/interfaces/AggregatorV3Interface.sol"; interface IPythAggregatorFactory { /// @dev Get Pyth address, which is used for aggregators deployment. function pyth() external view returns (address); /// @notice Get deployed aggregator address for a specific price id. /// @param _priceId Pyth feed price id. /// @return aggregator PythAggregatorV3 address deployed by this factory. function aggregators(bytes32 _priceId) external view returns (AggregatorV3Interface); /// @notice Deploy aggregator for a specific price id. Reverts if the aggregator is already deployed. This function /// is permissionless. /// @param _priceId Pyth feed price id. /// @return aggregator PythAggregatorV3 address deployed by this function call. function deploy(bytes32 _priceId) external returns (AggregatorV3Interface); /// @dev Emitted when the aggregator is deployed. /// @param priceId Pyth feed price id. /// @param aggregator New aggregator address. event AggregatorDeployed(bytes32 indexed priceId, AggregatorV3Interface indexed aggregator); /// @dev Revert if the aggregator is already deployed for price id. error AggregatorAlreadyExists(); }
// SPDX-License-Identifier: Apache 2 pragma solidity ^0.8.0; import {PythStructs} from "./PythStructs.sol"; import {IPyth} from "./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. */ contract PythAggregatorV3 { bytes32 public priceId; IPyth public 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) public payable { // 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 payable(msg.sender).call{value: address(this).balance}(""); } function decimals() public view virtual returns (uint8) { PythStructs.Price memory price = pyth.getPriceUnsafe(priceId); return uint8(-1 * int8(price.expo)); } function description() public pure returns (string memory) { return "A port of a chainlink aggregator powered by pyth network feeds"; } function version() public 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() public view returns (uint256) { // use timestamp as the round id return latestTimestamp(); } function getAnswer(uint256) public 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; 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; } }
// 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 ); }
{ "remappings": [ "forge-std/=gitmodules/forge-std/src/", "silo-foundry-utils/=gitmodules/silo-foundry-utils/contracts/", "properties/=gitmodules/crytic/properties/contracts/", "silo-core/=silo-core/", "silo-oracles/=silo-oracles/", "silo-vaults/=silo-vaults/", "ve-silo/=ve-silo/", "@openzeppelin/=gitmodules/openzeppelin-contracts-5/contracts/", "morpho-blue/=gitmodules/morpho-blue/src/", "openzeppelin5/=gitmodules/openzeppelin-contracts-5/contracts/", "openzeppelin5-upgradeable/=gitmodules/openzeppelin-contracts-upgradeable-5/contracts/", "chainlink/=gitmodules/chainlink/contracts/src/", "chainlink-ccip/=gitmodules/chainlink-ccip/contracts/src/", "uniswap/=gitmodules/uniswap/", "@uniswap/v3-core/=gitmodules/uniswap/v3-core/", "balancer-labs/v2-solidity-utils/=external/balancer-v2-monorepo/pkg/solidity-utils/contracts/", "balancer-labs/v2-interfaces/=external/balancer-v2-monorepo/pkg/interfaces/contracts/", "balancer-labs/v2-liquidity-mining/=external/balancer-v2-monorepo/pkg/liquidity-mining/contracts/", "pyth-sdk-solidity/=gitmodules/pyth-sdk-solidity/target_chains/ethereum/sdk/solidity/", "@balancer-labs/=node_modules/@balancer-labs/", "@openzeppelin/contracts-upgradeable/=gitmodules/openzeppelin-contracts-upgradeable-5/contracts/", "@openzeppelin/contracts/=gitmodules/openzeppelin-contracts-5/contracts/", "@pythnetwork/=node_modules/@pythnetwork/", "ERC4626/=gitmodules/crytic/properties/lib/ERC4626/contracts/", "createx/=gitmodules/pyth-sdk-solidity/lazer/contracts/evm/lib/createx/src/", "crytic/=gitmodules/crytic/", "ds-test/=gitmodules/openzeppelin-contracts-5/lib/forge-std/lib/ds-test/src/", "erc4626-tests/=gitmodules/openzeppelin-contracts-5/lib/erc4626-tests/", "halmos-cheatcodes/=gitmodules/morpho-blue/lib/halmos-cheatcodes/src/", "openzeppelin-contracts-5/=gitmodules/openzeppelin-contracts-5/", "openzeppelin-contracts-upgradeable-5/=gitmodules/openzeppelin-contracts-upgradeable-5/", "openzeppelin-contracts-upgradeable/=gitmodules/pyth-sdk-solidity/lazer/contracts/evm/lib/openzeppelin-contracts-upgradeable/", "openzeppelin-contracts/=gitmodules/openzeppelin-contracts-upgradeable-5/lib/openzeppelin-contracts/", "proposals/=node_modules/proposals/", "solady/=gitmodules/pyth-sdk-solidity/lazer/contracts/evm/lib/createx/lib/solady/", "solmate/=gitmodules/crytic/properties/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
[{"inputs":[{"internalType":"address","name":"_pyth","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AggregatorAlreadyExists","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"priceId","type":"bytes32"},{"indexed":true,"internalType":"contract AggregatorV3Interface","name":"aggregator","type":"address"}],"name":"AggregatorDeployed","type":"event"},{"inputs":[{"internalType":"bytes32","name":"priceId","type":"bytes32"}],"name":"aggregators","outputs":[{"internalType":"contract AggregatorV3Interface","name":"aggregator","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_priceId","type":"bytes32"}],"name":"deploy","outputs":[{"internalType":"contract AggregatorV3Interface","name":"newAggregator","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pyth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a0604052348015600e575f5ffd5b50604051610cd7380380610cd7833981016040819052602b91603b565b6001600160a01b03166080526066565b5f60208284031215604a575f5ffd5b81516001600160a01b0381168114605f575f5ffd5b9392505050565b608051610c546100835f395f8181609f015260f80152610c545ff3fe608060405234801561000f575f5ffd5b506004361061003f575f3560e01c80632b85ba38146100435780637103353e14610072578063f98d06f01461009a575b5f5ffd5b6100566100513660046101ba565b6100c1565b6040516001600160a01b03909116815260200160405180910390f35b6100566100803660046101ba565b5f602081905290815260409020546001600160a01b031681565b6100567f000000000000000000000000000000000000000000000000000000000000000081565b5f818152602081905260408120546001600160a01b0316156100f65760405163a8bc506b60e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000082604051610124906101ad565b6001600160a01b0390921682526020820152604001604051809103905ff080158015610152573d5f5f3e3d5ffd5b505f8381526020819052604080822080546001600160a01b0319166001600160a01b03851690811790915590519293509184917fadad75616dd59ba6aed2f1597ec5746e08ba81ad2b357d68db3cba56b683bee491a3919050565b610a4d806101d283390190565b5f602082840312156101ca575f5ffd5b503591905056fe6080604052348015600e575f5ffd5b50604051610a4d380380610a4d833981016040819052602b916051565b5f55600180546001600160a01b0319166001600160a01b03929092169190911790556086565b5f5f604083850312156061575f5ffd5b82516001600160a01b03811681146076575f5ffd5b6020939093015192949293505050565b6109ba806100935f395ff3fe6080604052600436106100bf575f3560e01c80638205bf6a1161007c578063b633620c11610057578063b633620c146101f5578063bc36c0a914610214578063f98d06f014610229578063feaf968c14610260575f5ffd5b80638205bf6a1461016c5780639a6fc8f514610180578063b5ab58dc146101d6575f5ffd5b806331189334146100c3578063313ce567146100ea57806350d25bcd1461011057806354fd4d5014610124578063668a0f02146101375780637284e4161461014b575b5f5ffd5b3480156100ce575f5ffd5b506100d75f5481565b6040519081526020015b60405180910390f35b3480156100f5575f5ffd5b506100fe610274565b60405160ff90911681526020016100e1565b34801561011b575f5ffd5b506100d7610300565b34801561012f575f5ffd5b5060016100d7565b348015610142575f5ffd5b506100d761037d565b348015610156575f5ffd5b5061015f61038b565b6040516100e19190610693565b348015610177575f5ffd5b506100d76103ab565b34801561018b575f5ffd5b5061019f61019a3660046106c8565b610428565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016100e1565b3480156101e1575f5ffd5b506100d76101f03660046106f8565b6104c2565b348015610200575f5ffd5b506100d761020f3660046106f8565b6104d1565b61022761022236600461070f565b6104da565b005b348015610234575f5ffd5b50600154610248906001600160a01b031681565b6040516001600160a01b0390911681526020016100e1565b34801561026b575f5ffd5b5061019f6105f9565b6001545f80546040516396834ad360e01b81526004810191909152909182916001600160a01b03909116906396834ad390602401608060405180830381865afa1580156102c3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102e791906107ad565b905080604001515f196102fa9190610839565b91505090565b6001545f80546040516396834ad360e01b81526004810191909152909182916001600160a01b03909116906396834ad390602401608060405180830381865afa15801561034f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061037391906107ad565b5160070b92915050565b5f6103866103ab565b905090565b60606040518060600160405280603e8152602001610947603e9139905090565b6001545f80546040516396834ad360e01b81526004810191909152909182916001600160a01b03909116906396834ad390602401608060405180830381865afa1580156103fa573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061041e91906107ad565b6060015192915050565b6001545f80546040516396834ad360e01b815260048101919091529091829182918291829182916001600160a01b03909116906396834ad390602401608060405180830381865afa15801561047f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104a391906107ad565b8051606090910151979860079190910b97965086955088945092505050565b5f6104cb610300565b92915050565b5f6104cb6103ab565b60015460405163d47eed4560e01b81525f916001600160a01b03169063d47eed459061050c9086908690600401610890565b602060405180830381865afa158015610527573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061054b919061092f565b600154604051631df3cbc560e31b81529192506001600160a01b03169063ef9e5e289083906105809087908790600401610890565b5f604051808303818588803b158015610597575f5ffd5b505af11580156105a9573d5f5f3e3d5ffd5b505060405133935047925090505f81818185875af1925050503d805f81146105ec576040519150601f19603f3d011682016040523d82523d5f602084013e6105f1565b606091505b505050505050565b6001545f80546040516396834ad360e01b815260048101919091529091829182918291829182916001600160a01b03909116906396834ad390602401608060405180830381865afa158015610650573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061067491906107ad565b60608101519051909760079190910b9650879550859450849350915050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f602082840312156106d8575f5ffd5b813569ffffffffffffffffffff811681146106f1575f5ffd5b9392505050565b5f60208284031215610708575f5ffd5b5035919050565b5f5f60208385031215610720575f5ffd5b823567ffffffffffffffff811115610736575f5ffd5b8301601f81018513610746575f5ffd5b803567ffffffffffffffff81111561075c575f5ffd5b8560208260051b8401011115610770575f5ffd5b6020919091019590945092505050565b805167ffffffffffffffff81168114610797575f5ffd5b919050565b8051600381900b8114610797575f5ffd5b5f60808284031280156107be575f5ffd5b506040516080810167ffffffffffffffff811182821017156107ee57634e487b7160e01b5f52604160045260245ffd5b6040528251600781900b8114610802575f5ffd5b815261081060208401610780565b60208201526108216040840161079c565b60408201526060928301519281019290925250919050565b5f825f0b825f0b02805f0b915080821461086157634e487b7160e01b5f52601160045260245ffd5b5092915050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602080825281018290525f6040600584901b830181019083018583601e1936839003015b8782101561092257868503603f1901845282358181126108d2575f5ffd5b890160208101903567ffffffffffffffff8111156108ee575f5ffd5b8036038213156108fc575f5ffd5b610907878284610868565b965050506020830192506020840193506001820191506108b4565b5092979650505050505050565b5f6020828403121561093f575f5ffd5b505191905056fe4120706f7274206f66206120636861696e6c696e6b2061676772656761746f7220706f77657265642062792070797468206e6574776f726b206665656473a264697066735822122097b1b39791def23335d93677a5509fae17c5a8decfcacf75f6c6f3507c2d09ee64736f6c634300081c0033a26469706673582212200156e6ed0376b17dd18cc3d77ec7416842b0e5b741b12ac4e2cef17f99ca4bc064736f6c634300081c00330000000000000000000000002880ab155794e7179c9ee2e38200202908c17b43
Deployed Bytecode
0x608060405234801561000f575f5ffd5b506004361061003f575f3560e01c80632b85ba38146100435780637103353e14610072578063f98d06f01461009a575b5f5ffd5b6100566100513660046101ba565b6100c1565b6040516001600160a01b03909116815260200160405180910390f35b6100566100803660046101ba565b5f602081905290815260409020546001600160a01b031681565b6100567f0000000000000000000000002880ab155794e7179c9ee2e38200202908c17b4381565b5f818152602081905260408120546001600160a01b0316156100f65760405163a8bc506b60e01b815260040160405180910390fd5b7f0000000000000000000000002880ab155794e7179c9ee2e38200202908c17b4382604051610124906101ad565b6001600160a01b0390921682526020820152604001604051809103905ff080158015610152573d5f5f3e3d5ffd5b505f8381526020819052604080822080546001600160a01b0319166001600160a01b03851690811790915590519293509184917fadad75616dd59ba6aed2f1597ec5746e08ba81ad2b357d68db3cba56b683bee491a3919050565b610a4d806101d283390190565b5f602082840312156101ca575f5ffd5b503591905056fe6080604052348015600e575f5ffd5b50604051610a4d380380610a4d833981016040819052602b916051565b5f55600180546001600160a01b0319166001600160a01b03929092169190911790556086565b5f5f604083850312156061575f5ffd5b82516001600160a01b03811681146076575f5ffd5b6020939093015192949293505050565b6109ba806100935f395ff3fe6080604052600436106100bf575f3560e01c80638205bf6a1161007c578063b633620c11610057578063b633620c146101f5578063bc36c0a914610214578063f98d06f014610229578063feaf968c14610260575f5ffd5b80638205bf6a1461016c5780639a6fc8f514610180578063b5ab58dc146101d6575f5ffd5b806331189334146100c3578063313ce567146100ea57806350d25bcd1461011057806354fd4d5014610124578063668a0f02146101375780637284e4161461014b575b5f5ffd5b3480156100ce575f5ffd5b506100d75f5481565b6040519081526020015b60405180910390f35b3480156100f5575f5ffd5b506100fe610274565b60405160ff90911681526020016100e1565b34801561011b575f5ffd5b506100d7610300565b34801561012f575f5ffd5b5060016100d7565b348015610142575f5ffd5b506100d761037d565b348015610156575f5ffd5b5061015f61038b565b6040516100e19190610693565b348015610177575f5ffd5b506100d76103ab565b34801561018b575f5ffd5b5061019f61019a3660046106c8565b610428565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016100e1565b3480156101e1575f5ffd5b506100d76101f03660046106f8565b6104c2565b348015610200575f5ffd5b506100d761020f3660046106f8565b6104d1565b61022761022236600461070f565b6104da565b005b348015610234575f5ffd5b50600154610248906001600160a01b031681565b6040516001600160a01b0390911681526020016100e1565b34801561026b575f5ffd5b5061019f6105f9565b6001545f80546040516396834ad360e01b81526004810191909152909182916001600160a01b03909116906396834ad390602401608060405180830381865afa1580156102c3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102e791906107ad565b905080604001515f196102fa9190610839565b91505090565b6001545f80546040516396834ad360e01b81526004810191909152909182916001600160a01b03909116906396834ad390602401608060405180830381865afa15801561034f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061037391906107ad565b5160070b92915050565b5f6103866103ab565b905090565b60606040518060600160405280603e8152602001610947603e9139905090565b6001545f80546040516396834ad360e01b81526004810191909152909182916001600160a01b03909116906396834ad390602401608060405180830381865afa1580156103fa573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061041e91906107ad565b6060015192915050565b6001545f80546040516396834ad360e01b815260048101919091529091829182918291829182916001600160a01b03909116906396834ad390602401608060405180830381865afa15801561047f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104a391906107ad565b8051606090910151979860079190910b97965086955088945092505050565b5f6104cb610300565b92915050565b5f6104cb6103ab565b60015460405163d47eed4560e01b81525f916001600160a01b03169063d47eed459061050c9086908690600401610890565b602060405180830381865afa158015610527573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061054b919061092f565b600154604051631df3cbc560e31b81529192506001600160a01b03169063ef9e5e289083906105809087908790600401610890565b5f604051808303818588803b158015610597575f5ffd5b505af11580156105a9573d5f5f3e3d5ffd5b505060405133935047925090505f81818185875af1925050503d805f81146105ec576040519150601f19603f3d011682016040523d82523d5f602084013e6105f1565b606091505b505050505050565b6001545f80546040516396834ad360e01b815260048101919091529091829182918291829182916001600160a01b03909116906396834ad390602401608060405180830381865afa158015610650573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061067491906107ad565b60608101519051909760079190910b9650879550859450849350915050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f602082840312156106d8575f5ffd5b813569ffffffffffffffffffff811681146106f1575f5ffd5b9392505050565b5f60208284031215610708575f5ffd5b5035919050565b5f5f60208385031215610720575f5ffd5b823567ffffffffffffffff811115610736575f5ffd5b8301601f81018513610746575f5ffd5b803567ffffffffffffffff81111561075c575f5ffd5b8560208260051b8401011115610770575f5ffd5b6020919091019590945092505050565b805167ffffffffffffffff81168114610797575f5ffd5b919050565b8051600381900b8114610797575f5ffd5b5f60808284031280156107be575f5ffd5b506040516080810167ffffffffffffffff811182821017156107ee57634e487b7160e01b5f52604160045260245ffd5b6040528251600781900b8114610802575f5ffd5b815261081060208401610780565b60208201526108216040840161079c565b60408201526060928301519281019290925250919050565b5f825f0b825f0b02805f0b915080821461086157634e487b7160e01b5f52601160045260245ffd5b5092915050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602080825281018290525f6040600584901b830181019083018583601e1936839003015b8782101561092257868503603f1901845282358181126108d2575f5ffd5b890160208101903567ffffffffffffffff8111156108ee575f5ffd5b8036038213156108fc575f5ffd5b610907878284610868565b965050506020830192506020840193506001820191506108b4565b5092979650505050505050565b5f6020828403121561093f575f5ffd5b505191905056fe4120706f7274206f66206120636861696e6c696e6b2061676772656761746f7220706f77657265642062792070797468206e6574776f726b206665656473a264697066735822122097b1b39791def23335d93677a5509fae17c5a8decfcacf75f6c6f3507c2d09ee64736f6c634300081c0033a26469706673582212200156e6ed0376b17dd18cc3d77ec7416842b0e5b741b12ac4e2cef17f99ca4bc064736f6c634300081c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000002880ab155794e7179c9ee2e38200202908c17b43
-----Decoded View---------------
Arg [0] : _pyth (address): 0x2880aB155794e7179c9eE2e38200202908C17B43
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000002880ab155794e7179c9ee2e38200202908c17b43
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.