Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
KingdomlyFeeContract
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2025-08-05 */ // Sources flattened with hardhat v2.22.19 https://hardhat.org // SPDX-License-Identifier: Apache-2.0 AND MIT AND UNLICENSED // File @openzeppelin/contracts/utils/[email protected] // Original license: 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; } } // File @openzeppelin/contracts/access/[email protected] // Original license: SPDX_License_Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; /** * @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); } } // File @pythnetwork/pyth-sdk-solidity/[email protected] // Original license: 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 ); } // File @pythnetwork/pyth-sdk-solidity/[email protected] // Original license: 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; } } // File @pythnetwork/pyth-sdk-solidity/[email protected] // Original license: SPDX_License_Identifier: Apache-2.0 pragma solidity ^0.8.0; /// @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); } // File contracts/main-contracts/KingdomlyFeeContract.sol // Original license: SPDX_License_Identifier: UNLICENSED pragma solidity ^0.8.24; error InsufficientUpdateFee(uint256 requiredFee); error ContractNotVerified(address contractAddress); contract KingdomlyFeeContract is Ownable { uint256 private cachedOneDollarInWei; uint256 private maxPriceAgeInSeconds; IPyth pyth; bytes32 ethUsdPriceId; constructor(address _pyth, bytes32 _ethUsdPriceId) Ownable(msg.sender) { pyth = IPyth(_pyth); ethUsdPriceId = _ethUsdPriceId; maxPriceAgeInSeconds = 60 * 60 * 24; } function getOneDollarInWei() public view returns (uint256) { try pyth.getPriceNoOlderThan(ethUsdPriceId, maxPriceAgeInSeconds) returns (PythStructs.Price memory price) { uint256 ethPrice18Decimals = (uint256(uint64(price.price)) * (10 ** 18)) / (10 ** uint8(uint32(-1 * price.expo))); uint256 oneDollarInWei = ((10 ** 18) * (10 ** 18)) / ethPrice18Decimals; return oneDollarInWei; } catch { return cachedOneDollarInWei; } } function updateOracleAndGetOneDollarInWei(bytes[] calldata pythPriceUpdate) public payable returns (uint256) { uint256 updateFee = pyth.getUpdateFee(pythPriceUpdate); if (msg.value != updateFee) { revert InsufficientUpdateFee(updateFee); } pyth.updatePriceFeeds{value: msg.value}(pythPriceUpdate); cachedOneDollarInWei = getOneDollarInWei(); return cachedOneDollarInWei; } function updateMaxPriceAgeInSeconds(uint256 _maxPriceAgeInSeconds) public onlyOwner { maxPriceAgeInSeconds = _maxPriceAgeInSeconds; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_pyth","type":"address"},{"internalType":"bytes32","name":"_ethUsdPriceId","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"requiredFee","type":"uint256"}],"name":"InsufficientUpdateFee","type":"error"},{"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"},{"inputs":[],"name":"getOneDollarInWei","outputs":[{"internalType":"uint256","name":"","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"},{"inputs":[{"internalType":"uint256","name":"_maxPriceAgeInSeconds","type":"uint256"}],"name":"updateMaxPriceAgeInSeconds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"pythPriceUpdate","type":"bytes[]"}],"name":"updateOracleAndGetOneDollarInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b5060405161091938038061091983398101604081905261002f916100df565b338061005557604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61005e8161008f565b50600380546001600160a01b0319166001600160a01b03939093169290921790915560045562015180600255610119565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080604083850312156100f257600080fd5b82516001600160a01b038116811461010957600080fd5b6020939093015192949293505050565b6107f1806101286000396000f3fe6080604052600436106100555760003560e01c8063715018a61461005a5780637ee41895146100715780638da5cb5b14610097578063b4088686146100bf578063bb1d0e57146100d4578063f2fde38b146100f4575b600080fd5b34801561006657600080fd5b5061006f610114565b005b61008461007f3660046103f7565b610128565b6040519081526020015b60405180910390f35b3480156100a357600080fd5b506000546040516001600160a01b03909116815260200161008e565b3480156100cb57600080fd5b50610084610246565b3480156100e057600080fd5b5061006f6100ef36600461046c565b61032f565b34801561010057600080fd5b5061006f61010f366004610485565b61033c565b61011c61037a565b61012660006103a7565b565b60035460405163d47eed4560e01b815260009182916001600160a01b039091169063d47eed459061015f90879087906004016104de565b602060405180830381865afa15801561017c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a0919061057a565b90508034146101c95760405162d83eb360e81b8152600481018290526024015b60405180910390fd5b600354604051631df3cbc560e31b81526001600160a01b039091169063ef9e5e289034906101fd90889088906004016104de565b6000604051808303818588803b15801561021657600080fd5b505af115801561022a573d6000803e3d6000fd5b5050505050610237610246565b60018190559150505b92915050565b6003546004805460025460405163052571af60e51b81529283019190915260248201526000916001600160a01b03169063a4ae35e090604401608060405180830381865afa9250505080156102b8575060408051601f3d908101601f191682019092526102b5918101906105c2565b60015b6102c3575060015490565b600081604001516000196102d79190610668565b6102e290600a610773565b82516103009067ffffffffffffffff16670de0b6b3a7640000610782565b61030a9190610799565b90506000610327826ec097ce7bc90715b34b9f1000000000610799565b949350505050565b61033761037a565b600255565b61034461037a565b6001600160a01b03811661036e57604051631e4fbdf760e01b8152600060048201526024016101c0565b610377816103a7565b50565b6000546001600160a01b031633146101265760405163118cdaa760e01b81523360048201526024016101c0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806020838503121561040a57600080fd5b823567ffffffffffffffff8082111561042257600080fd5b818501915085601f83011261043657600080fd5b81358181111561044557600080fd5b8660208260051b850101111561045a57600080fd5b60209290920196919550909350505050565b60006020828403121561047e57600080fd5b5035919050565b60006020828403121561049757600080fd5b81356001600160a01b03811681146104ae57600080fd5b9392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208082528181018390526000906040600585901b8401810190840186845b8781101561056d57868403603f190183528135368a9003601e1901811261052357600080fd5b8901858101903567ffffffffffffffff81111561053f57600080fd5b80360382131561054e57600080fd5b6105598682846104b5565b9550505091840191908401906001016104fd565b5091979650505050505050565b60006020828403121561058c57600080fd5b5051919050565b805167ffffffffffffffff811681146105ab57600080fd5b919050565b8051600381900b81146105ab57600080fd5b6000608082840312156105d457600080fd5b6040516080810181811067ffffffffffffffff8211171561060557634e487b7160e01b600052604160045260246000fd5b6040528251600781900b811461061a57600080fd5b815261062860208401610593565b6020820152610639604084016105b0565b6040820152606083015160608201528091505092915050565b634e487b7160e01b600052601160045260246000fd5b60008260030b8260030b028060030b915080821461068857610688610652565b5092915050565b600181815b808511156106ca5781600019048211156106b0576106b0610652565b808516156106bd57918102915b93841c9390800290610694565b509250929050565b6000826106e157506001610240565b816106ee57506000610240565b8160018114610704576002811461070e5761072a565b6001915050610240565b60ff84111561071f5761071f610652565b50506001821b610240565b5060208310610133831016604e8410600b841016171561074d575081810a610240565b610757838361068f565b806000190482111561076b5761076b610652565b029392505050565b60006104ae60ff8416836106d2565b808202811582820484141761024057610240610652565b6000826107b657634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220378876b4f57254a1714ce0cc676ea2b1990eae42ee3b5aa60a48fe39253da44a64736f6c634300081800330000000000000000000000004305fb66699c3b2702d4d05cf36551390a4c69c6ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace
Deployed Bytecode
0x6080604052600436106100555760003560e01c8063715018a61461005a5780637ee41895146100715780638da5cb5b14610097578063b4088686146100bf578063bb1d0e57146100d4578063f2fde38b146100f4575b600080fd5b34801561006657600080fd5b5061006f610114565b005b61008461007f3660046103f7565b610128565b6040519081526020015b60405180910390f35b3480156100a357600080fd5b506000546040516001600160a01b03909116815260200161008e565b3480156100cb57600080fd5b50610084610246565b3480156100e057600080fd5b5061006f6100ef36600461046c565b61032f565b34801561010057600080fd5b5061006f61010f366004610485565b61033c565b61011c61037a565b61012660006103a7565b565b60035460405163d47eed4560e01b815260009182916001600160a01b039091169063d47eed459061015f90879087906004016104de565b602060405180830381865afa15801561017c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a0919061057a565b90508034146101c95760405162d83eb360e81b8152600481018290526024015b60405180910390fd5b600354604051631df3cbc560e31b81526001600160a01b039091169063ef9e5e289034906101fd90889088906004016104de565b6000604051808303818588803b15801561021657600080fd5b505af115801561022a573d6000803e3d6000fd5b5050505050610237610246565b60018190559150505b92915050565b6003546004805460025460405163052571af60e51b81529283019190915260248201526000916001600160a01b03169063a4ae35e090604401608060405180830381865afa9250505080156102b8575060408051601f3d908101601f191682019092526102b5918101906105c2565b60015b6102c3575060015490565b600081604001516000196102d79190610668565b6102e290600a610773565b82516103009067ffffffffffffffff16670de0b6b3a7640000610782565b61030a9190610799565b90506000610327826ec097ce7bc90715b34b9f1000000000610799565b949350505050565b61033761037a565b600255565b61034461037a565b6001600160a01b03811661036e57604051631e4fbdf760e01b8152600060048201526024016101c0565b610377816103a7565b50565b6000546001600160a01b031633146101265760405163118cdaa760e01b81523360048201526024016101c0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806020838503121561040a57600080fd5b823567ffffffffffffffff8082111561042257600080fd5b818501915085601f83011261043657600080fd5b81358181111561044557600080fd5b8660208260051b850101111561045a57600080fd5b60209290920196919550909350505050565b60006020828403121561047e57600080fd5b5035919050565b60006020828403121561049757600080fd5b81356001600160a01b03811681146104ae57600080fd5b9392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208082528181018390526000906040600585901b8401810190840186845b8781101561056d57868403603f190183528135368a9003601e1901811261052357600080fd5b8901858101903567ffffffffffffffff81111561053f57600080fd5b80360382131561054e57600080fd5b6105598682846104b5565b9550505091840191908401906001016104fd565b5091979650505050505050565b60006020828403121561058c57600080fd5b5051919050565b805167ffffffffffffffff811681146105ab57600080fd5b919050565b8051600381900b81146105ab57600080fd5b6000608082840312156105d457600080fd5b6040516080810181811067ffffffffffffffff8211171561060557634e487b7160e01b600052604160045260246000fd5b6040528251600781900b811461061a57600080fd5b815261062860208401610593565b6020820152610639604084016105b0565b6040820152606083015160608201528091505092915050565b634e487b7160e01b600052601160045260246000fd5b60008260030b8260030b028060030b915080821461068857610688610652565b5092915050565b600181815b808511156106ca5781600019048211156106b0576106b0610652565b808516156106bd57918102915b93841c9390800290610694565b509250929050565b6000826106e157506001610240565b816106ee57506000610240565b8160018114610704576002811461070e5761072a565b6001915050610240565b60ff84111561071f5761071f610652565b50506001821b610240565b5060208310610133831016604e8410600b841016171561074d575081810a610240565b610757838361068f565b806000190482111561076b5761076b610652565b029392505050565b60006104ae60ff8416836106d2565b808202811582820484141761024057610240610652565b6000826107b657634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220378876b4f57254a1714ce0cc676ea2b1990eae42ee3b5aa60a48fe39253da44a64736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000004305fb66699c3b2702d4d05cf36551390a4c69c6ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace
-----Decoded View---------------
Arg [0] : _pyth (address): 0x4305FB66699C3B2702D4d05CF36551390A4c69C6
Arg [1] : _ethUsdPriceId (bytes32): 0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000004305fb66699c3b2702d4d05cf36551390a4c69c6
Arg [1] : ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace
Deployed Bytecode Sourcemap
15470:1531:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3602:103;;;;;;;;;;;;;:::i;:::-;;16391:452;;;;;;:::i;:::-;;:::i;:::-;;;791:25:1;;;779:2;764:18;16391:452:0;;;;;;;;2927:87;;;;;;;;;;-1:-1:-1;2973:7:0;3000:6;2927:87;;-1:-1:-1;;;;;3000:6:0;;;973:51:1;;961:2;946:18;2927:87:0;827:203:1;15857:526:0;;;;;;;;;;;;;:::i;16851:147::-;;;;;;;;;;-1:-1:-1;16851:147:0;;;;;:::i;:::-;;:::i;3860:220::-;;;;;;;;;;-1:-1:-1;3860:220:0;;;;;:::i;:::-;;:::i;3602:103::-;2813:13;:11;:13::i;:::-;3667:30:::1;3694:1;3667:18;:30::i;:::-;3602:103::o:0;16391:452::-;16531:4;;:34;;-1:-1:-1;;;16531:34:0;;16491:7;;;;-1:-1:-1;;;;;16531:4:0;;;;:17;;:34;;16549:15;;;;16531:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16511:54;;16595:9;16582;:22;16578:94;;16628:32;;-1:-1:-1;;;16628:32:0;;;;;791:25:1;;;764:18;;16628:32:0;;;;;;;;16578:94;16684:4;;:56;;-1:-1:-1;;;16684:56:0;;-1:-1:-1;;;;;16684:4:0;;;;:21;;16713:9;;16684:56;;16724:15;;;;16684:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16776:19;:17;:19::i;:::-;16753:20;:42;;;;-1:-1:-1;;16391:452:0;;;;;:::o;15857:526::-;15931:4;;15956:13;;;15971:20;;15931:61;;-1:-1:-1;;;15931:61:0;;;;;3376:25:1;;;;3417:18;;;3410:34;15907:7:0;;-1:-1:-1;;;;;15931:4:0;;:24;;3349:18:1;;15931:61:0;;;;;;;;;;;;;;;;;;-1:-1:-1;15931:61:0;;;;;;;;-1:-1:-1;;15931:61:0;;;;;;;;;;;;:::i;:::-;;;15927:449;;-1:-1:-1;16344:20:0;;;15857:526::o;15927:449::-;16049:26;16166:5;:10;;;-1:-1:-1;;16161:15:0;;;;:::i;:::-;16142:36;;:2;:36;:::i;:::-;16111:11;;16096:41;;:28;;16128:8;16096:41;:::i;:::-;16095:84;;;;:::i;:::-;16049:130;-1:-1:-1;16194:22:0;16219:46;16049:130;16220:23;16219:46;:::i;:::-;16194:71;15857:526;-1:-1:-1;;;;15857:526:0:o;16851:147::-;2813:13;:11;:13::i;:::-;16946:20:::1;:44:::0;16851:147::o;3860:220::-;2813:13;:11;:13::i;:::-;-1:-1:-1;;;;;3945:22:0;::::1;3941:93;;3991:31;::::0;-1:-1:-1;;;3991:31:0;;4019:1:::1;3991:31;::::0;::::1;973:51:1::0;946:18;;3991:31:0::1;827:203:1::0;3941:93:0::1;4044:28;4063:8;4044:18;:28::i;:::-;3860:220:::0;:::o;3092:166::-;2973:7;3000:6;-1:-1:-1;;;;;3000:6:0;961:10;3152:23;3148:103;;3199:40;;-1:-1:-1;;;3199:40:0;;961:10;3199:40;;;973:51:1;946:18;;3199:40:0;827:203:1;4240:191:0;4314:16;4333:6;;-1:-1:-1;;;;;4350:17:0;;;-1:-1:-1;;;;;;4350:17:0;;;;;;4383:40;;4333:6;;;;;;;4383:40;;4314:16;4383:40;4303:128;4240:191;:::o;14:626:1:-;111:6;119;172:2;160:9;151:7;147:23;143:32;140:52;;;188:1;185;178:12;140:52;228:9;215:23;257:18;298:2;290:6;287:14;284:34;;;314:1;311;304:12;284:34;352:6;341:9;337:22;327:32;;397:7;390:4;386:2;382:13;378:27;368:55;;419:1;416;409:12;368:55;459:2;446:16;485:2;477:6;474:14;471:34;;;501:1;498;491:12;471:34;554:7;549:2;539:6;536:1;532:14;528:2;524:23;520:32;517:45;514:65;;;575:1;572;565:12;514:65;606:2;598:11;;;;;628:6;;-1:-1:-1;14:626:1;;-1:-1:-1;;;;14:626:1:o;1035:180::-;1094:6;1147:2;1135:9;1126:7;1122:23;1118:32;1115:52;;;1163:1;1160;1153:12;1115:52;-1:-1:-1;1186:23:1;;1035:180;-1:-1:-1;1035:180:1:o;1220:286::-;1279:6;1332:2;1320:9;1311:7;1307:23;1303:32;1300:52;;;1348:1;1345;1338:12;1300:52;1374:23;;-1:-1:-1;;;;;1426:31:1;;1416:42;;1406:70;;1472:1;1469;1462:12;1406:70;1495:5;1220:286;-1:-1:-1;;;1220:286:1:o;1511:266::-;1599:6;1594:3;1587:19;1651:6;1644:5;1637:4;1632:3;1628:14;1615:43;-1:-1:-1;1703:1:1;1678:16;;;1696:4;1674:27;;;1667:38;;;;1759:2;1738:15;;;-1:-1:-1;;1734:29:1;1725:39;;;1721:50;;1511:266::o;1782:1226::-;1983:2;2035:21;;;2008:18;;;2091:22;;;-1:-1:-1;;2144:2:1;2193:1;2189:14;;;2174:30;;2170:39;;;2129:18;;2232:6;-1:-1:-1;2266:713:1;2280:6;2277:1;2274:13;2266:713;;;2345:22;;;-1:-1:-1;;2341:36:1;2329:49;;2417:20;;2492:14;2488:27;;;-1:-1:-1;;2484:41:1;2460:66;;2450:94;;2540:1;2537;2530:12;2450:94;2570:31;;2675:14;;;;2628:19;2716:18;2705:30;;2702:50;;;2748:1;2745;2738:12;2702:50;2801:6;2785:14;2781:27;2772:7;2768:41;2765:61;;;2822:1;2819;2812:12;2765:61;2849:50;2892:6;2884;2875:7;2849:50;:::i;:::-;2839:60;-1:-1:-1;;;2957:12:1;;;;2922:15;;;;2302:1;2295:9;2266:713;;;-1:-1:-1;2996:6:1;;1782:1226;-1:-1:-1;;;;;;;1782:1226:1:o;3013:184::-;3083:6;3136:2;3124:9;3115:7;3111:23;3107:32;3104:52;;;3152:1;3149;3142:12;3104:52;-1:-1:-1;3175:16:1;;3013:184;-1:-1:-1;3013:184:1:o;3455:175::-;3533:13;;3586:18;3575:30;;3565:41;;3555:69;;3620:1;3617;3610:12;3555:69;3455:175;;;:::o;3635:164::-;3712:13;;3765:1;3754:20;;;3744:31;;3734:59;;3789:1;3786;3779:12;3804:855;3896:6;3949:3;3937:9;3928:7;3924:23;3920:33;3917:53;;;3966:1;3963;3956:12;3917:53;3999:2;3993:9;4041:3;4033:6;4029:16;4111:6;4099:10;4096:22;4075:18;4063:10;4060:34;4057:62;4054:185;;;4161:10;4156:3;4152:20;4149:1;4142:31;4196:4;4193:1;4186:15;4224:4;4221:1;4214:15;4054:185;4255:2;4248:22;4292:16;;4348:1;4337:20;;;4327:31;;4317:59;;4372:1;4369;4362:12;4317:59;4385:21;;4439:48;4483:2;4468:18;;4439:48;:::i;:::-;4434:2;4426:6;4422:15;4415:73;4521:47;4564:2;4553:9;4549:18;4521:47;:::i;:::-;4516:2;4508:6;4504:15;4497:72;4623:2;4612:9;4608:18;4602:25;4597:2;4589:6;4585:15;4578:50;4647:6;4637:16;;;3804:855;;;;:::o;4664:127::-;4725:10;4720:3;4716:20;4713:1;4706:31;4756:4;4753:1;4746:15;4780:4;4777:1;4770:15;4796:237;4834:7;4911:1;4908;4897:16;4893:1;4890;4879:16;4875:39;4948:11;4945:1;4934:26;4923:37;;4991:11;4982:7;4979:24;4969:58;;5007:18;;:::i;:::-;4969:58;4796:237;;;;:::o;5038:416::-;5127:1;5164:5;5127:1;5178:270;5199:7;5189:8;5186:21;5178:270;;;5258:4;5254:1;5250:6;5246:17;5240:4;5237:27;5234:53;;;5267:18;;:::i;:::-;5317:7;5307:8;5303:22;5300:55;;;5337:16;;;;5300:55;5416:22;;;;5376:15;;;;5178:270;;;5182:3;5038:416;;;;;:::o;5459:806::-;5508:5;5538:8;5528:80;;-1:-1:-1;5579:1:1;5593:5;;5528:80;5627:4;5617:76;;-1:-1:-1;5664:1:1;5678:5;;5617:76;5709:4;5727:1;5722:59;;;;5795:1;5790:130;;;;5702:218;;5722:59;5752:1;5743:10;;5766:5;;;5790:130;5827:3;5817:8;5814:17;5811:43;;;5834:18;;:::i;:::-;-1:-1:-1;;5890:1:1;5876:16;;5905:5;;5702:218;;6004:2;5994:8;5991:16;5985:3;5979:4;5976:13;5972:36;5966:2;5956:8;5953:16;5948:2;5942:4;5939:12;5935:35;5932:77;5929:159;;;-1:-1:-1;6041:19:1;;;6073:5;;5929:159;6120:34;6145:8;6139:4;6120:34;:::i;:::-;6190:6;6186:1;6182:6;6178:19;6169:7;6166:32;6163:58;;;6201:18;;:::i;:::-;6239:20;;5459:806;-1:-1:-1;;;5459:806:1:o;6270:140::-;6328:5;6357:47;6398:4;6388:8;6384:19;6378:4;6357:47;:::i;6415:168::-;6488:9;;;6519;;6536:15;;;6530:22;;6516:37;6506:71;;6557:18;;:::i;6588:217::-;6628:1;6654;6644:132;;6698:10;6693:3;6689:20;6686:1;6679:31;6733:4;6730:1;6723:15;6761:4;6758:1;6751:15;6644:132;-1:-1:-1;6790:9:1;;6588:217::o
Swarm Source
ipfs://378876b4f57254a1714ce0cc676ea2b1990eae42ee3b5aa60a48fe39253da44a
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.