Overview
S Balance
S Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 13 from a total of 13 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Price Feed I... | 885496 | 102 days ago | IN | 0 S | 0.00005103 | ||||
Set Price Feed I... | 885492 | 102 days ago | IN | 0 S | 0.00005103 | ||||
Set Price Feed I... | 885487 | 102 days ago | IN | 0 S | 0.00005103 | ||||
Set Price Feed I... | 885482 | 102 days ago | IN | 0 S | 0.00005103 | ||||
Set Price Feed I... | 885476 | 102 days ago | IN | 0 S | 0.00005101 | ||||
Set Price Feed I... | 885471 | 102 days ago | IN | 0 S | 0.00005103 | ||||
Set Price Feed I... | 885468 | 102 days ago | IN | 0 S | 0.00005103 | ||||
Set Price Feed I... | 885464 | 102 days ago | IN | 0 S | 0.00005103 | ||||
Set Price Feed I... | 885460 | 102 days ago | IN | 0 S | 0.00005101 | ||||
Set Price Feed I... | 885456 | 102 days ago | IN | 0 S | 0.00005101 | ||||
Set Price Feed I... | 885453 | 102 days ago | IN | 0 S | 0.00005101 | ||||
Set Price Feed I... | 885449 | 102 days ago | IN | 0 S | 0.00005101 | ||||
Set Price Feed I... | 885445 | 102 days ago | IN | 0 S | 0.00005101 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
3726952 | 78 days ago | 1 wei | ||||
3726952 | 78 days ago | 1 wei | ||||
3726537 | 78 days ago | 1 wei | ||||
3726537 | 78 days ago | 1 wei | ||||
3726330 | 78 days ago | 1 wei | ||||
3726330 | 78 days ago | 1 wei | ||||
3725964 | 78 days ago | 1 wei | ||||
3725964 | 78 days ago | 1 wei | ||||
3725963 | 78 days ago | 1 wei | ||||
3725963 | 78 days ago | 1 wei | ||||
3725501 | 78 days ago | 1 wei | ||||
3725501 | 78 days ago | 1 wei | ||||
3725477 | 78 days ago | 1 wei | ||||
3725477 | 78 days ago | 1 wei | ||||
3725470 | 78 days ago | 1 wei | ||||
3725470 | 78 days ago | 1 wei | ||||
3725319 | 78 days ago | 1 wei | ||||
3725319 | 78 days ago | 1 wei | ||||
3725299 | 78 days ago | 1 wei | ||||
3725299 | 78 days ago | 1 wei | ||||
3724726 | 78 days ago | 1 wei | ||||
3724726 | 78 days ago | 1 wei | ||||
3724676 | 78 days ago | 1 wei | ||||
3724676 | 78 days ago | 1 wei | ||||
3724496 | 78 days ago | 1 wei |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
PythPriceValidator
Compiler Version
v0.8.24+commit.e11b9ed9
Optimization Enabled:
Yes with 200 runs
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.24; import "@openzeppelin/contracts/utils/math/SafeCast.sol"; import "./IPyth.sol"; import "../../AdministrationContracts/ClaimableAdmin.sol"; import "../../Lynx/interfaces/IPriceValidatorV1.sol"; /** * @title PythPriceValidator * @dev Price validator contract using Pyth price payloads */ contract PythPriceValidator is ClaimableAdmin, IPriceValidatorV1 { using SafeCast for uint256; uint constant PRICE_SCALE = 1e8; IPyth public pythContract; mapping(uint256 => bytes32) public priceFeedIdsForPairs; // pair id to PairInfo struct uint public maxPublicationPeriodInPast = 5 * 60; // in seconds constructor(IPyth _pythContract) { pythContract = _pythContract; } function isPriceValidator() external pure returns (bool) { return true; } // ***** Admin Functions ***** function setPriceFeedIdForPair( uint pairId, bytes32 priceFeedId ) external onlyAdmin { require(priceFeedIdsForPairs[pairId] == bytes32(0), "ALREADY_EXISTS"); priceFeedIdsForPairs[pairId] = priceFeedId; } function setMaxPublicationPeriodInPast( uint _maxPublicationPeriodInPast ) external onlyAdmin { // Sanity of max 5 hours in the past require(_maxPublicationPeriodInPast <= 5 * 60 * 60); maxPublicationPeriodInPast = _maxPublicationPeriodInPast; } // ***** Views ***** function getPriceForPair( uint pairId ) external view returns (PythStructs.Price memory price) { return pythContract.getPrice(priceFeedIdsForPairs[pairId]); } function getPrice( bytes32 priceFeedId ) external view returns (PythStructs.Price memory price) { return pythContract.getPrice(priceFeedId); } function getPriceUnsafe( bytes32 priceFeedId ) external view returns (PythStructs.Price memory price) { return pythContract.getPriceUnsafe(priceFeedId); } function getUpdateFee( bytes[] calldata updateData ) external view returns (uint256 feeAmount) { return pythContract.getUpdateFee(updateData); } // ***** Pyth Interaction ***** function updatePrice( bytes32 feedId, bytes[] calldata updateData ) external payable returns (PythStructs.Price memory price) { uint256 feeAmount = pythContract.getUpdateFee(updateData); pythContract.updatePriceFeeds{value: feeAmount}(updateData); return pythContract.getPrice(feedId); } // ***** Price Validator Interface ***** function validatePrice( uint256 pairIndex, bytes[] calldata updateData ) external payable override returns (ValidatedPrice memory validatedPrice) { bytes32 priceFeedId = priceFeedIdsForPairs[pairIndex]; uint64 minTimestamp = uint64(block.timestamp - maxPublicationPeriodInPast); uint64 maxTimestamp = uint64(block.timestamp); bytes32[] memory priceIdsArr = new bytes32[](1); priceIdsArr[0] = priceFeedId; PythStructs.PriceFeed[] memory priceFeeds = pythContract .parsePriceFeedUpdates{value: msg.value}( updateData, priceIdsArr, minTimestamp, maxTimestamp ); PythStructs.PriceFeed memory priceFeed = priceFeeds[0]; validatedPrice = generateValidatedDataFromPyth(priceFeed.price); } // ***** Internal Utils ***** function generateValidatedDataFromPyth( PythStructs.Price memory priceInfo ) internal pure returns (ValidatedPrice memory validatedPrice) { validatedPrice.timestamp = priceInfo.publishTime; uint64 price = uint64(priceInfo.price); uint64 confidence = uint64(priceInfo.conf); if (0 > priceInfo.expo) { uint256 exponent = uint256(uint32(-priceInfo.expo)); validatedPrice.price = ((uint256(price) * PRICE_SCALE) / (10 ** exponent)) .toUint64(); validatedPrice.confidence = ((uint256(confidence) * PRICE_SCALE) / (10 ** exponent)).toUint64(); } else { uint256 exponent = uint256(uint32(priceInfo.expo)); validatedPrice.price = (uint256(price) * PRICE_SCALE * (10 ** exponent)) .toUint64(); validatedPrice.confidence = (uint256(confidence) * PRICE_SCALE * (10 ** exponent)).toUint64(); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SafeCast.sol) // This file was procedurally generated from scripts/generate/templates/SafeCast.js. pragma solidity ^0.8.20; /** * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow * checks. * * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can * easily result in undesired exploitation or bugs, since developers usually * assume that overflows raise errors. `SafeCast` restores this intuition by * reverting the transaction when such an operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeCast { /** * @dev Value doesn't fit in an uint of `bits` size. */ error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value); /** * @dev An int value doesn't fit in an uint of `bits` size. */ error SafeCastOverflowedIntToUint(int256 value); /** * @dev Value doesn't fit in an int of `bits` size. */ error SafeCastOverflowedIntDowncast(uint8 bits, int256 value); /** * @dev An uint value doesn't fit in an int of `bits` size. */ error SafeCastOverflowedUintToInt(uint256 value); /** * @dev Returns the downcasted uint248 from uint256, reverting on * overflow (when the input is greater than largest uint248). * * Counterpart to Solidity's `uint248` operator. * * Requirements: * * - input must fit into 248 bits */ function toUint248(uint256 value) internal pure returns (uint248) { if (value > type(uint248).max) { revert SafeCastOverflowedUintDowncast(248, value); } return uint248(value); } /** * @dev Returns the downcasted uint240 from uint256, reverting on * overflow (when the input is greater than largest uint240). * * Counterpart to Solidity's `uint240` operator. * * Requirements: * * - input must fit into 240 bits */ function toUint240(uint256 value) internal pure returns (uint240) { if (value > type(uint240).max) { revert SafeCastOverflowedUintDowncast(240, value); } return uint240(value); } /** * @dev Returns the downcasted uint232 from uint256, reverting on * overflow (when the input is greater than largest uint232). * * Counterpart to Solidity's `uint232` operator. * * Requirements: * * - input must fit into 232 bits */ function toUint232(uint256 value) internal pure returns (uint232) { if (value > type(uint232).max) { revert SafeCastOverflowedUintDowncast(232, value); } return uint232(value); } /** * @dev Returns the downcasted uint224 from uint256, reverting on * overflow (when the input is greater than largest uint224). * * Counterpart to Solidity's `uint224` operator. * * Requirements: * * - input must fit into 224 bits */ function toUint224(uint256 value) internal pure returns (uint224) { if (value > type(uint224).max) { revert SafeCastOverflowedUintDowncast(224, value); } return uint224(value); } /** * @dev Returns the downcasted uint216 from uint256, reverting on * overflow (when the input is greater than largest uint216). * * Counterpart to Solidity's `uint216` operator. * * Requirements: * * - input must fit into 216 bits */ function toUint216(uint256 value) internal pure returns (uint216) { if (value > type(uint216).max) { revert SafeCastOverflowedUintDowncast(216, value); } return uint216(value); } /** * @dev Returns the downcasted uint208 from uint256, reverting on * overflow (when the input is greater than largest uint208). * * Counterpart to Solidity's `uint208` operator. * * Requirements: * * - input must fit into 208 bits */ function toUint208(uint256 value) internal pure returns (uint208) { if (value > type(uint208).max) { revert SafeCastOverflowedUintDowncast(208, value); } return uint208(value); } /** * @dev Returns the downcasted uint200 from uint256, reverting on * overflow (when the input is greater than largest uint200). * * Counterpart to Solidity's `uint200` operator. * * Requirements: * * - input must fit into 200 bits */ function toUint200(uint256 value) internal pure returns (uint200) { if (value > type(uint200).max) { revert SafeCastOverflowedUintDowncast(200, value); } return uint200(value); } /** * @dev Returns the downcasted uint192 from uint256, reverting on * overflow (when the input is greater than largest uint192). * * Counterpart to Solidity's `uint192` operator. * * Requirements: * * - input must fit into 192 bits */ function toUint192(uint256 value) internal pure returns (uint192) { if (value > type(uint192).max) { revert SafeCastOverflowedUintDowncast(192, value); } return uint192(value); } /** * @dev Returns the downcasted uint184 from uint256, reverting on * overflow (when the input is greater than largest uint184). * * Counterpart to Solidity's `uint184` operator. * * Requirements: * * - input must fit into 184 bits */ function toUint184(uint256 value) internal pure returns (uint184) { if (value > type(uint184).max) { revert SafeCastOverflowedUintDowncast(184, value); } return uint184(value); } /** * @dev Returns the downcasted uint176 from uint256, reverting on * overflow (when the input is greater than largest uint176). * * Counterpart to Solidity's `uint176` operator. * * Requirements: * * - input must fit into 176 bits */ function toUint176(uint256 value) internal pure returns (uint176) { if (value > type(uint176).max) { revert SafeCastOverflowedUintDowncast(176, value); } return uint176(value); } /** * @dev Returns the downcasted uint168 from uint256, reverting on * overflow (when the input is greater than largest uint168). * * Counterpart to Solidity's `uint168` operator. * * Requirements: * * - input must fit into 168 bits */ function toUint168(uint256 value) internal pure returns (uint168) { if (value > type(uint168).max) { revert SafeCastOverflowedUintDowncast(168, value); } return uint168(value); } /** * @dev Returns the downcasted uint160 from uint256, reverting on * overflow (when the input is greater than largest uint160). * * Counterpart to Solidity's `uint160` operator. * * Requirements: * * - input must fit into 160 bits */ function toUint160(uint256 value) internal pure returns (uint160) { if (value > type(uint160).max) { revert SafeCastOverflowedUintDowncast(160, value); } return uint160(value); } /** * @dev Returns the downcasted uint152 from uint256, reverting on * overflow (when the input is greater than largest uint152). * * Counterpart to Solidity's `uint152` operator. * * Requirements: * * - input must fit into 152 bits */ function toUint152(uint256 value) internal pure returns (uint152) { if (value > type(uint152).max) { revert SafeCastOverflowedUintDowncast(152, value); } return uint152(value); } /** * @dev Returns the downcasted uint144 from uint256, reverting on * overflow (when the input is greater than largest uint144). * * Counterpart to Solidity's `uint144` operator. * * Requirements: * * - input must fit into 144 bits */ function toUint144(uint256 value) internal pure returns (uint144) { if (value > type(uint144).max) { revert SafeCastOverflowedUintDowncast(144, value); } return uint144(value); } /** * @dev Returns the downcasted uint136 from uint256, reverting on * overflow (when the input is greater than largest uint136). * * Counterpart to Solidity's `uint136` operator. * * Requirements: * * - input must fit into 136 bits */ function toUint136(uint256 value) internal pure returns (uint136) { if (value > type(uint136).max) { revert SafeCastOverflowedUintDowncast(136, value); } return uint136(value); } /** * @dev Returns the downcasted uint128 from uint256, reverting on * overflow (when the input is greater than largest uint128). * * Counterpart to Solidity's `uint128` operator. * * Requirements: * * - input must fit into 128 bits */ function toUint128(uint256 value) internal pure returns (uint128) { if (value > type(uint128).max) { revert SafeCastOverflowedUintDowncast(128, value); } return uint128(value); } /** * @dev Returns the downcasted uint120 from uint256, reverting on * overflow (when the input is greater than largest uint120). * * Counterpart to Solidity's `uint120` operator. * * Requirements: * * - input must fit into 120 bits */ function toUint120(uint256 value) internal pure returns (uint120) { if (value > type(uint120).max) { revert SafeCastOverflowedUintDowncast(120, value); } return uint120(value); } /** * @dev Returns the downcasted uint112 from uint256, reverting on * overflow (when the input is greater than largest uint112). * * Counterpart to Solidity's `uint112` operator. * * Requirements: * * - input must fit into 112 bits */ function toUint112(uint256 value) internal pure returns (uint112) { if (value > type(uint112).max) { revert SafeCastOverflowedUintDowncast(112, value); } return uint112(value); } /** * @dev Returns the downcasted uint104 from uint256, reverting on * overflow (when the input is greater than largest uint104). * * Counterpart to Solidity's `uint104` operator. * * Requirements: * * - input must fit into 104 bits */ function toUint104(uint256 value) internal pure returns (uint104) { if (value > type(uint104).max) { revert SafeCastOverflowedUintDowncast(104, value); } return uint104(value); } /** * @dev Returns the downcasted uint96 from uint256, reverting on * overflow (when the input is greater than largest uint96). * * Counterpart to Solidity's `uint96` operator. * * Requirements: * * - input must fit into 96 bits */ function toUint96(uint256 value) internal pure returns (uint96) { if (value > type(uint96).max) { revert SafeCastOverflowedUintDowncast(96, value); } return uint96(value); } /** * @dev Returns the downcasted uint88 from uint256, reverting on * overflow (when the input is greater than largest uint88). * * Counterpart to Solidity's `uint88` operator. * * Requirements: * * - input must fit into 88 bits */ function toUint88(uint256 value) internal pure returns (uint88) { if (value > type(uint88).max) { revert SafeCastOverflowedUintDowncast(88, value); } return uint88(value); } /** * @dev Returns the downcasted uint80 from uint256, reverting on * overflow (when the input is greater than largest uint80). * * Counterpart to Solidity's `uint80` operator. * * Requirements: * * - input must fit into 80 bits */ function toUint80(uint256 value) internal pure returns (uint80) { if (value > type(uint80).max) { revert SafeCastOverflowedUintDowncast(80, value); } return uint80(value); } /** * @dev Returns the downcasted uint72 from uint256, reverting on * overflow (when the input is greater than largest uint72). * * Counterpart to Solidity's `uint72` operator. * * Requirements: * * - input must fit into 72 bits */ function toUint72(uint256 value) internal pure returns (uint72) { if (value > type(uint72).max) { revert SafeCastOverflowedUintDowncast(72, value); } return uint72(value); } /** * @dev Returns the downcasted uint64 from uint256, reverting on * overflow (when the input is greater than largest uint64). * * Counterpart to Solidity's `uint64` operator. * * Requirements: * * - input must fit into 64 bits */ function toUint64(uint256 value) internal pure returns (uint64) { if (value > type(uint64).max) { revert SafeCastOverflowedUintDowncast(64, value); } return uint64(value); } /** * @dev Returns the downcasted uint56 from uint256, reverting on * overflow (when the input is greater than largest uint56). * * Counterpart to Solidity's `uint56` operator. * * Requirements: * * - input must fit into 56 bits */ function toUint56(uint256 value) internal pure returns (uint56) { if (value > type(uint56).max) { revert SafeCastOverflowedUintDowncast(56, value); } return uint56(value); } /** * @dev Returns the downcasted uint48 from uint256, reverting on * overflow (when the input is greater than largest uint48). * * Counterpart to Solidity's `uint48` operator. * * Requirements: * * - input must fit into 48 bits */ function toUint48(uint256 value) internal pure returns (uint48) { if (value > type(uint48).max) { revert SafeCastOverflowedUintDowncast(48, value); } return uint48(value); } /** * @dev Returns the downcasted uint40 from uint256, reverting on * overflow (when the input is greater than largest uint40). * * Counterpart to Solidity's `uint40` operator. * * Requirements: * * - input must fit into 40 bits */ function toUint40(uint256 value) internal pure returns (uint40) { if (value > type(uint40).max) { revert SafeCastOverflowedUintDowncast(40, value); } return uint40(value); } /** * @dev Returns the downcasted uint32 from uint256, reverting on * overflow (when the input is greater than largest uint32). * * Counterpart to Solidity's `uint32` operator. * * Requirements: * * - input must fit into 32 bits */ function toUint32(uint256 value) internal pure returns (uint32) { if (value > type(uint32).max) { revert SafeCastOverflowedUintDowncast(32, value); } return uint32(value); } /** * @dev Returns the downcasted uint24 from uint256, reverting on * overflow (when the input is greater than largest uint24). * * Counterpart to Solidity's `uint24` operator. * * Requirements: * * - input must fit into 24 bits */ function toUint24(uint256 value) internal pure returns (uint24) { if (value > type(uint24).max) { revert SafeCastOverflowedUintDowncast(24, value); } return uint24(value); } /** * @dev Returns the downcasted uint16 from uint256, reverting on * overflow (when the input is greater than largest uint16). * * Counterpart to Solidity's `uint16` operator. * * Requirements: * * - input must fit into 16 bits */ function toUint16(uint256 value) internal pure returns (uint16) { if (value > type(uint16).max) { revert SafeCastOverflowedUintDowncast(16, value); } return uint16(value); } /** * @dev Returns the downcasted uint8 from uint256, reverting on * overflow (when the input is greater than largest uint8). * * Counterpart to Solidity's `uint8` operator. * * Requirements: * * - input must fit into 8 bits */ function toUint8(uint256 value) internal pure returns (uint8) { if (value > type(uint8).max) { revert SafeCastOverflowedUintDowncast(8, value); } return uint8(value); } /** * @dev Converts a signed int256 into an unsigned uint256. * * Requirements: * * - input must be greater than or equal to 0. */ function toUint256(int256 value) internal pure returns (uint256) { if (value < 0) { revert SafeCastOverflowedIntToUint(value); } return uint256(value); } /** * @dev Returns the downcasted int248 from int256, reverting on * overflow (when the input is less than smallest int248 or * greater than largest int248). * * Counterpart to Solidity's `int248` operator. * * Requirements: * * - input must fit into 248 bits */ function toInt248(int256 value) internal pure returns (int248 downcasted) { downcasted = int248(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(248, value); } } /** * @dev Returns the downcasted int240 from int256, reverting on * overflow (when the input is less than smallest int240 or * greater than largest int240). * * Counterpart to Solidity's `int240` operator. * * Requirements: * * - input must fit into 240 bits */ function toInt240(int256 value) internal pure returns (int240 downcasted) { downcasted = int240(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(240, value); } } /** * @dev Returns the downcasted int232 from int256, reverting on * overflow (when the input is less than smallest int232 or * greater than largest int232). * * Counterpart to Solidity's `int232` operator. * * Requirements: * * - input must fit into 232 bits */ function toInt232(int256 value) internal pure returns (int232 downcasted) { downcasted = int232(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(232, value); } } /** * @dev Returns the downcasted int224 from int256, reverting on * overflow (when the input is less than smallest int224 or * greater than largest int224). * * Counterpart to Solidity's `int224` operator. * * Requirements: * * - input must fit into 224 bits */ function toInt224(int256 value) internal pure returns (int224 downcasted) { downcasted = int224(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(224, value); } } /** * @dev Returns the downcasted int216 from int256, reverting on * overflow (when the input is less than smallest int216 or * greater than largest int216). * * Counterpart to Solidity's `int216` operator. * * Requirements: * * - input must fit into 216 bits */ function toInt216(int256 value) internal pure returns (int216 downcasted) { downcasted = int216(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(216, value); } } /** * @dev Returns the downcasted int208 from int256, reverting on * overflow (when the input is less than smallest int208 or * greater than largest int208). * * Counterpart to Solidity's `int208` operator. * * Requirements: * * - input must fit into 208 bits */ function toInt208(int256 value) internal pure returns (int208 downcasted) { downcasted = int208(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(208, value); } } /** * @dev Returns the downcasted int200 from int256, reverting on * overflow (when the input is less than smallest int200 or * greater than largest int200). * * Counterpart to Solidity's `int200` operator. * * Requirements: * * - input must fit into 200 bits */ function toInt200(int256 value) internal pure returns (int200 downcasted) { downcasted = int200(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(200, value); } } /** * @dev Returns the downcasted int192 from int256, reverting on * overflow (when the input is less than smallest int192 or * greater than largest int192). * * Counterpart to Solidity's `int192` operator. * * Requirements: * * - input must fit into 192 bits */ function toInt192(int256 value) internal pure returns (int192 downcasted) { downcasted = int192(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(192, value); } } /** * @dev Returns the downcasted int184 from int256, reverting on * overflow (when the input is less than smallest int184 or * greater than largest int184). * * Counterpart to Solidity's `int184` operator. * * Requirements: * * - input must fit into 184 bits */ function toInt184(int256 value) internal pure returns (int184 downcasted) { downcasted = int184(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(184, value); } } /** * @dev Returns the downcasted int176 from int256, reverting on * overflow (when the input is less than smallest int176 or * greater than largest int176). * * Counterpart to Solidity's `int176` operator. * * Requirements: * * - input must fit into 176 bits */ function toInt176(int256 value) internal pure returns (int176 downcasted) { downcasted = int176(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(176, value); } } /** * @dev Returns the downcasted int168 from int256, reverting on * overflow (when the input is less than smallest int168 or * greater than largest int168). * * Counterpart to Solidity's `int168` operator. * * Requirements: * * - input must fit into 168 bits */ function toInt168(int256 value) internal pure returns (int168 downcasted) { downcasted = int168(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(168, value); } } /** * @dev Returns the downcasted int160 from int256, reverting on * overflow (when the input is less than smallest int160 or * greater than largest int160). * * Counterpart to Solidity's `int160` operator. * * Requirements: * * - input must fit into 160 bits */ function toInt160(int256 value) internal pure returns (int160 downcasted) { downcasted = int160(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(160, value); } } /** * @dev Returns the downcasted int152 from int256, reverting on * overflow (when the input is less than smallest int152 or * greater than largest int152). * * Counterpart to Solidity's `int152` operator. * * Requirements: * * - input must fit into 152 bits */ function toInt152(int256 value) internal pure returns (int152 downcasted) { downcasted = int152(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(152, value); } } /** * @dev Returns the downcasted int144 from int256, reverting on * overflow (when the input is less than smallest int144 or * greater than largest int144). * * Counterpart to Solidity's `int144` operator. * * Requirements: * * - input must fit into 144 bits */ function toInt144(int256 value) internal pure returns (int144 downcasted) { downcasted = int144(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(144, value); } } /** * @dev Returns the downcasted int136 from int256, reverting on * overflow (when the input is less than smallest int136 or * greater than largest int136). * * Counterpart to Solidity's `int136` operator. * * Requirements: * * - input must fit into 136 bits */ function toInt136(int256 value) internal pure returns (int136 downcasted) { downcasted = int136(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(136, value); } } /** * @dev Returns the downcasted int128 from int256, reverting on * overflow (when the input is less than smallest int128 or * greater than largest int128). * * Counterpart to Solidity's `int128` operator. * * Requirements: * * - input must fit into 128 bits */ function toInt128(int256 value) internal pure returns (int128 downcasted) { downcasted = int128(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(128, value); } } /** * @dev Returns the downcasted int120 from int256, reverting on * overflow (when the input is less than smallest int120 or * greater than largest int120). * * Counterpart to Solidity's `int120` operator. * * Requirements: * * - input must fit into 120 bits */ function toInt120(int256 value) internal pure returns (int120 downcasted) { downcasted = int120(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(120, value); } } /** * @dev Returns the downcasted int112 from int256, reverting on * overflow (when the input is less than smallest int112 or * greater than largest int112). * * Counterpart to Solidity's `int112` operator. * * Requirements: * * - input must fit into 112 bits */ function toInt112(int256 value) internal pure returns (int112 downcasted) { downcasted = int112(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(112, value); } } /** * @dev Returns the downcasted int104 from int256, reverting on * overflow (when the input is less than smallest int104 or * greater than largest int104). * * Counterpart to Solidity's `int104` operator. * * Requirements: * * - input must fit into 104 bits */ function toInt104(int256 value) internal pure returns (int104 downcasted) { downcasted = int104(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(104, value); } } /** * @dev Returns the downcasted int96 from int256, reverting on * overflow (when the input is less than smallest int96 or * greater than largest int96). * * Counterpart to Solidity's `int96` operator. * * Requirements: * * - input must fit into 96 bits */ function toInt96(int256 value) internal pure returns (int96 downcasted) { downcasted = int96(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(96, value); } } /** * @dev Returns the downcasted int88 from int256, reverting on * overflow (when the input is less than smallest int88 or * greater than largest int88). * * Counterpart to Solidity's `int88` operator. * * Requirements: * * - input must fit into 88 bits */ function toInt88(int256 value) internal pure returns (int88 downcasted) { downcasted = int88(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(88, value); } } /** * @dev Returns the downcasted int80 from int256, reverting on * overflow (when the input is less than smallest int80 or * greater than largest int80). * * Counterpart to Solidity's `int80` operator. * * Requirements: * * - input must fit into 80 bits */ function toInt80(int256 value) internal pure returns (int80 downcasted) { downcasted = int80(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(80, value); } } /** * @dev Returns the downcasted int72 from int256, reverting on * overflow (when the input is less than smallest int72 or * greater than largest int72). * * Counterpart to Solidity's `int72` operator. * * Requirements: * * - input must fit into 72 bits */ function toInt72(int256 value) internal pure returns (int72 downcasted) { downcasted = int72(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(72, value); } } /** * @dev Returns the downcasted int64 from int256, reverting on * overflow (when the input is less than smallest int64 or * greater than largest int64). * * Counterpart to Solidity's `int64` operator. * * Requirements: * * - input must fit into 64 bits */ function toInt64(int256 value) internal pure returns (int64 downcasted) { downcasted = int64(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(64, value); } } /** * @dev Returns the downcasted int56 from int256, reverting on * overflow (when the input is less than smallest int56 or * greater than largest int56). * * Counterpart to Solidity's `int56` operator. * * Requirements: * * - input must fit into 56 bits */ function toInt56(int256 value) internal pure returns (int56 downcasted) { downcasted = int56(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(56, value); } } /** * @dev Returns the downcasted int48 from int256, reverting on * overflow (when the input is less than smallest int48 or * greater than largest int48). * * Counterpart to Solidity's `int48` operator. * * Requirements: * * - input must fit into 48 bits */ function toInt48(int256 value) internal pure returns (int48 downcasted) { downcasted = int48(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(48, value); } } /** * @dev Returns the downcasted int40 from int256, reverting on * overflow (when the input is less than smallest int40 or * greater than largest int40). * * Counterpart to Solidity's `int40` operator. * * Requirements: * * - input must fit into 40 bits */ function toInt40(int256 value) internal pure returns (int40 downcasted) { downcasted = int40(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(40, value); } } /** * @dev Returns the downcasted int32 from int256, reverting on * overflow (when the input is less than smallest int32 or * greater than largest int32). * * Counterpart to Solidity's `int32` operator. * * Requirements: * * - input must fit into 32 bits */ function toInt32(int256 value) internal pure returns (int32 downcasted) { downcasted = int32(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(32, value); } } /** * @dev Returns the downcasted int24 from int256, reverting on * overflow (when the input is less than smallest int24 or * greater than largest int24). * * Counterpart to Solidity's `int24` operator. * * Requirements: * * - input must fit into 24 bits */ function toInt24(int256 value) internal pure returns (int24 downcasted) { downcasted = int24(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(24, value); } } /** * @dev Returns the downcasted int16 from int256, reverting on * overflow (when the input is less than smallest int16 or * greater than largest int16). * * Counterpart to Solidity's `int16` operator. * * Requirements: * * - input must fit into 16 bits */ function toInt16(int256 value) internal pure returns (int16 downcasted) { downcasted = int16(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(16, value); } } /** * @dev Returns the downcasted int8 from int256, reverting on * overflow (when the input is less than smallest int8 or * greater than largest int8). * * Counterpart to Solidity's `int8` operator. * * Requirements: * * - input must fit into 8 bits */ function toInt8(int256 value) internal pure returns (int8 downcasted) { downcasted = int8(value); if (downcasted != value) { revert SafeCastOverflowedIntDowncast(8, value); } } /** * @dev Converts an unsigned uint256 into a signed int256. * * Requirements: * * - input must be less than or equal to maxInt256. */ function toInt256(uint256 value) internal pure returns (int256) { // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive if (value > uint256(type(int256).max)) { revert SafeCastOverflowedUintToInt(value); } return int256(value); } }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.24; contract ClaimableAdminStorage { /** * @notice Administrator for this contract */ address public admin; /** * @notice Pending administrator for this contract */ address public pendingAdmin; /*** Modifiers ***/ modifier onlyAdmin() { require(msg.sender == admin, "ONLY_ADMIN"); _; } /*** Constructor ***/ constructor() { // Set admin to caller admin = msg.sender; } } contract AcceptableImplementationClaimableAdminStorage is ClaimableAdminStorage { /** * @notice Active logic */ address public implementation; /** * @notice Pending logic */ address public pendingImplementation; } contract AcceptableRegistryImplementationClaimableAdminStorage is AcceptableImplementationClaimableAdminStorage { /** * @notice System Registry */ address public registry; }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.24; import "./AcceptableImplementationClaimableAdminStorage.sol"; /** * @title Claimable Admin */ contract ClaimableAdmin is ClaimableAdminStorage { /** * @notice Emitted when pendingAdmin is changed */ event NewPendingAdmin(address oldPendingAdmin, address newPendingAdmin); /** * @notice Emitted when pendingAdmin is accepted, which means admin is updated */ event NewAdmin(address oldAdmin, address newAdmin); /*** Admin Functions ***/ /** * @notice Begins transfer of admin rights. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer. * @dev Admin function to begin change of admin. The newPendingAdmin must call `_acceptAdmin` to finalize the transfer. * @param newPendingAdmin New pending admin. */ function _setPendingAdmin(address newPendingAdmin) public { // Check caller = admin require(msg.sender == admin, "Not Admin"); // Save current value, if any, for inclusion in log address oldPendingAdmin = pendingAdmin; // Store pendingAdmin with value newPendingAdmin pendingAdmin = newPendingAdmin; // Emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin) emit NewPendingAdmin(oldPendingAdmin, newPendingAdmin); } /** * @notice Accepts transfer of admin rights. msg.sender must be pendingAdmin * @dev Admin function for pending admin to accept role and update admin */ function _acceptAdmin() public { // Check caller is pendingAdmin and pendingAdmin ≠ address(0) require( msg.sender == pendingAdmin && pendingAdmin != address(0), "Not the EXISTING pending admin" ); // Save current values for inclusion in log address oldAdmin = admin; address oldPendingAdmin = pendingAdmin; // Store admin with value pendingAdmin admin = pendingAdmin; // Clear the pending value pendingAdmin = address(0); emit NewAdmin(oldAdmin, admin); emit NewPendingAdmin(oldPendingAdmin, pendingAdmin); } }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.24; interface IPriceValidatorV1 { // uint constant PRICE_SCALE = 1e8; struct ValidatedPrice { uint256 timestamp; uint64 price; // Scaled to PRICE_SCALE uint64 confidence; // Scaled to PRICE_SCALE } function isPriceValidator() external view returns (bool); function getUpdateFee( bytes[] calldata updateData ) external view returns (uint256 feeAmount); function validatePrice( uint256 pairIndex, bytes[] calldata updateData ) external payable returns (ValidatedPrice memory validatedPrice); }
// SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.24; interface PythErrors { // Function arguments are invalid (e.g., the arguments lengths mismatch) error InvalidArgument(); // Update data is coming from an invalid data source. error InvalidUpdateDataSource(); // Update data is invalid (e.g., deserialization error) error InvalidUpdateData(); // Insufficient fee is paid to the method. error InsufficientFee(); // There is no fresh update, whereas expected fresh updates. error NoFreshUpdate(); // There is no price feed found within the given range or it does not exists. error PriceFeedNotFoundWithinRange(); // Price feed not found or it is not pushed on-chain yet. error PriceFeedNotFound(); // Requested price is stale. error StalePrice(); // Given message is not a valid Wormhole VAA. error InvalidWormholeVaa(); // Governance message is invalid (e.g., deserialization error). error InvalidGovernanceMessage(); // Governance message is not for this contract. error InvalidGovernanceTarget(); // Governance message is coming from an invalid data source. error InvalidGovernanceDataSource(); // Governance message is old. error OldGovernanceMessage(); } interface PythStructs { // A price with a degree of uncertainty, represented as a price +- a confidence interval. // // The confidence interval roughly corresponds to the standard error of a normal distribution. // Both the price and confidence are stored in a fixed-point numeric representation, // `x * (10^expo)`, where `expo` is the exponent. // // Please refer to the documentation at https://docs.pyth.network/consumers/best-practices for how // to how this price safely. struct Price { // Price int64 price; // Confidence interval around the price uint64 conf; // Price exponent int32 expo; // Unix timestamp describing when the price was published uint256 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; } } interface IPyth is PythErrors { function chainId() external view returns (uint256 chainId); function getPrice( bytes32 id ) external view returns (PythStructs.Price memory price); function getPriceUnsafe( bytes32 id ) external view returns (PythStructs.Price memory price); function getUpdateFee( bytes[] calldata updateData ) external view returns (uint256 feeAmount); function updatePriceFeeds(bytes[] calldata updateData) external payable; function parsePriceFeedUpdates( bytes[] calldata updateData, bytes32[] calldata priceIds, uint64 minPublishTime, uint64 maxPublishTime ) external payable returns (PythStructs.PriceFeed[] memory priceFeeds); }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "evmVersion": "paris", "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IPyth","name":"_pythContract","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint8","name":"bits","type":"uint8"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"SafeCastOverflowedUintDowncast","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newAdmin","type":"address"}],"name":"NewAdmin","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldPendingAdmin","type":"address"},{"indexed":false,"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"NewPendingAdmin","type":"event"},{"inputs":[],"name":"_acceptAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"_setPendingAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"priceFeedId","type":"bytes32"}],"name":"getPrice","outputs":[{"components":[{"internalType":"int64","name":"price","type":"int64"},{"internalType":"uint64","name":"conf","type":"uint64"},{"internalType":"int32","name":"expo","type":"int32"},{"internalType":"uint256","name":"publishTime","type":"uint256"}],"internalType":"struct PythStructs.Price","name":"price","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pairId","type":"uint256"}],"name":"getPriceForPair","outputs":[{"components":[{"internalType":"int64","name":"price","type":"int64"},{"internalType":"uint64","name":"conf","type":"uint64"},{"internalType":"int32","name":"expo","type":"int32"},{"internalType":"uint256","name":"publishTime","type":"uint256"}],"internalType":"struct PythStructs.Price","name":"price","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"priceFeedId","type":"bytes32"}],"name":"getPriceUnsafe","outputs":[{"components":[{"internalType":"int64","name":"price","type":"int64"},{"internalType":"uint64","name":"conf","type":"uint64"},{"internalType":"int32","name":"expo","type":"int32"},{"internalType":"uint256","name":"publishTime","type":"uint256"}],"internalType":"struct PythStructs.Price","name":"price","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"updateData","type":"bytes[]"}],"name":"getUpdateFee","outputs":[{"internalType":"uint256","name":"feeAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPriceValidator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"maxPublicationPeriodInPast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"priceFeedIdsForPairs","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pythContract","outputs":[{"internalType":"contract IPyth","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPublicationPeriodInPast","type":"uint256"}],"name":"setMaxPublicationPeriodInPast","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pairId","type":"uint256"},{"internalType":"bytes32","name":"priceFeedId","type":"bytes32"}],"name":"setPriceFeedIdForPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"feedId","type":"bytes32"},{"internalType":"bytes[]","name":"updateData","type":"bytes[]"}],"name":"updatePrice","outputs":[{"components":[{"internalType":"int64","name":"price","type":"int64"},{"internalType":"uint64","name":"conf","type":"uint64"},{"internalType":"int32","name":"expo","type":"int32"},{"internalType":"uint256","name":"publishTime","type":"uint256"}],"internalType":"struct PythStructs.Price","name":"price","type":"tuple"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pairIndex","type":"uint256"},{"internalType":"bytes[]","name":"updateData","type":"bytes[]"}],"name":"validatePrice","outputs":[{"components":[{"internalType":"uint256","name":"timestamp","type":"uint256"},{"internalType":"uint64","name":"price","type":"uint64"},{"internalType":"uint64","name":"confidence","type":"uint64"}],"internalType":"struct IPriceValidatorV1.ValidatedPrice","name":"validatedPrice","type":"tuple"}],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405261012c60045534801561001657600080fd5b5060405161135938038061135983398101604081905261003591610068565b60008054336001600160a01b031991821617909155600280549091166001600160a01b0392909216919091179055610098565b60006020828403121561007a57600080fd5b81516001600160a01b038116811461009157600080fd5b9392505050565b6112b2806100a76000396000f3fe6080604052600436106100f35760003560e01c806396834ad31161008a578063dc612dd411610059578063dc612dd4146102d9578063e9c714f2146102f9578063f4a6a0931461030e578063f851a4401461035457600080fd5b806396834ad31461024c578063b6bee03c1461026c578063b71d1a0c14610299578063d47eed45146102b957600080fd5b806357e97e20116100c657806357e97e20146101c65780638926dc1d146101e85780638a32ada01461020c57806390e837571461022c57600080fd5b806326782247146100f857806331d98b3f146101355780634535dc4c146101975780635774cb96146101b3575b600080fd5b34801561010457600080fd5b50600154610118906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561014157600080fd5b50610155610150366004610c48565b610374565b60405161012c9190815160070b81526020808301516001600160401b03169082015260408083015160030b908201526060918201519181019190915260800190565b3480156101a357600080fd5b506040516001815260200161012c565b6101556101c1366004610cac565b610408565b3480156101d257600080fd5b506101e66101e1366004610c48565b61057e565b005b3480156101f457600080fd5b506101fe60045481565b60405190815260200161012c565b34801561021857600080fd5b50600254610118906001600160a01b031681565b34801561023857600080fd5b50610155610247366004610c48565b6105de565b34801561025857600080fd5b50610155610267366004610c48565b610644565b34801561027857600080fd5b506101fe610287366004610c48565b60036020526000908152604090205481565b3480156102a557600080fd5b506101e66102b4366004610cf7565b610695565b3480156102c557600080fd5b506101fe6102d4366004610d20565b61073d565b3480156102e557600080fd5b506101e66102f4366004610d61565b6107b8565b34801561030557600080fd5b506101e661085e565b61032161031c366004610cac565b61097c565b60408051825181526020808401516001600160401b0390811691830191909152928201519092169082015260600161012c565b34801561036057600080fd5b50600054610118906001600160a01b031681565b60408051608081018252600080825260208201819052818301819052606082015260025491516331d98b3f60e01b81526004810184905290916001600160a01b0316906331d98b3f906024015b608060405180830381865afa1580156103de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104029190610e88565b92915050565b60408051608081018252600080825260208201819052918101829052606081019190915260025460405163d47eed4560e01b81526000916001600160a01b03169063d47eed459061045f9087908790600401610f63565b602060405180830381865afa15801561047c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a09190610f7f565b600254604051631df3cbc560e31b81529192506001600160a01b03169063ef9e5e289083906104d59088908890600401610f63565b6000604051808303818588803b1580156104ee57600080fd5b505af1158015610502573d6000803e3d6000fd5b50506002546040516331d98b3f60e01b8152600481018a90526001600160a01b0390911693506331d98b3f92506024019050608060405180830381865afa158015610551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105759190610e88565b95945050505050565b6000546001600160a01b031633146105ca5760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa0a226a4a760b11b60448201526064015b60405180910390fd5b6146508111156105d957600080fd5b600455565b604080516080810182526000808252602082018190529181018290526060810191909152600254600083815260036020526040908190205490516331d98b3f60e01b81526001600160a01b03909216916331d98b3f916103c19160040190815260200190565b60408051608081018252600080825260208201819052818301819052606082015260025491516396834ad360e01b81526004810184905290916001600160a01b0316906396834ad3906024016103c1565b6000546001600160a01b031633146106db5760405162461bcd60e51b81526020600482015260096024820152682737ba1020b236b4b760b91b60448201526064016105c1565b600180546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a991015b60405180910390a15050565b60025460405163d47eed4560e01b81526000916001600160a01b03169063d47eed45906107709086908690600401610f63565b602060405180830381865afa15801561078d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b19190610f7f565b9392505050565b6000546001600160a01b031633146107ff5760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa0a226a4a760b11b60448201526064016105c1565b6000828152600360205260409020541561084c5760405162461bcd60e51b815260206004820152600e60248201526d414c52454144595f45584953545360901b60448201526064016105c1565b60009182526003602052604090912055565b6001546001600160a01b03163314801561088257506001546001600160a01b031615155b6108ce5760405162461bcd60e51b815260206004820152601e60248201527f4e6f7420746865204558495354494e472070656e64696e672061646d696e000060448201526064016105c1565b60008054600180546001600160a01b038082166001600160a01b031980861682179096559490911690915560408051919092168082526020820184905292917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc910160405180910390a1600154604080516001600160a01b03808516825290921660208301527fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a99101610731565b60408051606081018252600080825260208201819052918101919091526000848152600360205260408120546004549091906109b89042610fae565b60408051600180825281830190925291925042916000916020808301908036833701905050905083816000815181106109f3576109f3610fc1565b6020908102919091010152600254604051634716e9c560e01b81526000916001600160a01b031690634716e9c5903490610a39908c908c9088908b908b90600401610fd7565b60006040518083038185885af1158015610a57573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052610a80919081019061104c565b9050600081600081518110610a9757610a97610fc1565b60200260200101519050610aae8160200151610abc565b9a9950505050505050505050565b60408051606081018252600080825260208201819052918101919091526060820151815281516020830151604084015160030b60001315610b8a5760008460400151610b0790611130565b63ffffffff169050610b43610b1d82600a611237565b610b346305f5e1006001600160401b038716611243565b610b3e919061125a565b610c0e565b6001600160401b03166020850152610b76610b5f82600a611237565b610b346305f5e1006001600160401b038616611243565b6001600160401b0316604085015250610c07565b604084015163ffffffff16610bc4610ba382600a611237565b610bba6305f5e1006001600160401b038716611243565b610b3e9190611243565b6001600160401b03166020850152610bf7610be082600a611237565b610bba6305f5e1006001600160401b038616611243565b6001600160401b03166040850152505b5050919050565b60006001600160401b03821115610c4457604080516306dfcc6560e41b81526004810191909152602481018390526044016105c1565b5090565b600060208284031215610c5a57600080fd5b5035919050565b60008083601f840112610c7357600080fd5b5081356001600160401b03811115610c8a57600080fd5b6020830191508360208260051b8501011115610ca557600080fd5b9250929050565b600080600060408486031215610cc157600080fd5b8335925060208401356001600160401b03811115610cde57600080fd5b610cea86828701610c61565b9497909650939450505050565b600060208284031215610d0957600080fd5b81356001600160a01b03811681146107b157600080fd5b60008060208385031215610d3357600080fd5b82356001600160401b03811115610d4957600080fd5b610d5585828601610c61565b90969095509350505050565b60008060408385031215610d7457600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715610dbb57610dbb610d83565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610de957610de9610d83565b604052919050565b600060808284031215610e0357600080fd5b604051608081016001600160401b038282108183111715610e2657610e26610d83565b81604052829350845191508160070b8214610e4057600080fd5b9082526020840151908082168214610e5757600080fd5b5060208201526040830151600381900b8114610e7257600080fd5b6040820152606092830151920191909152919050565b600060808284031215610e9a57600080fd5b6107b18383610df1565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000838385526020808601955060208560051b8301018460005b87811015610f5657848303601f19018952813536889003601e19018112610f0d57600080fd5b870184810190356001600160401b03811115610f2857600080fd5b803603821315610f3757600080fd5b610f42858284610ea4565b9a86019a9450505090830190600101610ee7565b5090979650505050505050565b602081526000610f77602083018486610ecd565b949350505050565b600060208284031215610f9157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561040257610402610f98565b634e487b7160e01b600052603260045260246000fd5b608081526000610feb608083018789610ecd565b82810360208481019190915286518083528782019282019060005b8181101561102257845183529383019391830191600101611006565b50506001600160401b03968716604086015294909516606090930192909252509095945050505050565b6000602080838503121561105f57600080fd5b82516001600160401b038082111561107657600080fd5b818501915085601f83011261108a57600080fd5b81518181111561109c5761109c610d83565b6110aa848260051b01610dc1565b81815284810192506101209182028401850191888311156110ca57600080fd5b938501935b828510156111245780858a0312156110e75760008081fd5b6110ef610d99565b855181526110ff8a888801610df1565b878201526111108a60a08801610df1565b6040820152845293840193928501926110cf565b50979650505050505050565b60008160030b637fffffff19810361114a5761114a610f98565b60000392915050565b600181815b8085111561118e57816000190482111561117457611174610f98565b8085161561118157918102915b93841c9390800290611158565b509250929050565b6000826111a557506001610402565b816111b257506000610402565b81600181146111c857600281146111d2576111ee565b6001915050610402565b60ff8411156111e3576111e3610f98565b50506001821b610402565b5060208310610133831016604e8410600b8410161715611211575081810a610402565b61121b8383611153565b806000190482111561122f5761122f610f98565b029392505050565b60006107b18383611196565b808202811582820484141761040257610402610f98565b60008261127757634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122093c58887476a454c8a7a770cb9f95a01748a0e5929989be7cf43198a247474ed64736f6c634300081800330000000000000000000000002880ab155794e7179c9ee2e38200202908c17b43
Deployed Bytecode
0x6080604052600436106100f35760003560e01c806396834ad31161008a578063dc612dd411610059578063dc612dd4146102d9578063e9c714f2146102f9578063f4a6a0931461030e578063f851a4401461035457600080fd5b806396834ad31461024c578063b6bee03c1461026c578063b71d1a0c14610299578063d47eed45146102b957600080fd5b806357e97e20116100c657806357e97e20146101c65780638926dc1d146101e85780638a32ada01461020c57806390e837571461022c57600080fd5b806326782247146100f857806331d98b3f146101355780634535dc4c146101975780635774cb96146101b3575b600080fd5b34801561010457600080fd5b50600154610118906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561014157600080fd5b50610155610150366004610c48565b610374565b60405161012c9190815160070b81526020808301516001600160401b03169082015260408083015160030b908201526060918201519181019190915260800190565b3480156101a357600080fd5b506040516001815260200161012c565b6101556101c1366004610cac565b610408565b3480156101d257600080fd5b506101e66101e1366004610c48565b61057e565b005b3480156101f457600080fd5b506101fe60045481565b60405190815260200161012c565b34801561021857600080fd5b50600254610118906001600160a01b031681565b34801561023857600080fd5b50610155610247366004610c48565b6105de565b34801561025857600080fd5b50610155610267366004610c48565b610644565b34801561027857600080fd5b506101fe610287366004610c48565b60036020526000908152604090205481565b3480156102a557600080fd5b506101e66102b4366004610cf7565b610695565b3480156102c557600080fd5b506101fe6102d4366004610d20565b61073d565b3480156102e557600080fd5b506101e66102f4366004610d61565b6107b8565b34801561030557600080fd5b506101e661085e565b61032161031c366004610cac565b61097c565b60408051825181526020808401516001600160401b0390811691830191909152928201519092169082015260600161012c565b34801561036057600080fd5b50600054610118906001600160a01b031681565b60408051608081018252600080825260208201819052818301819052606082015260025491516331d98b3f60e01b81526004810184905290916001600160a01b0316906331d98b3f906024015b608060405180830381865afa1580156103de573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104029190610e88565b92915050565b60408051608081018252600080825260208201819052918101829052606081019190915260025460405163d47eed4560e01b81526000916001600160a01b03169063d47eed459061045f9087908790600401610f63565b602060405180830381865afa15801561047c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a09190610f7f565b600254604051631df3cbc560e31b81529192506001600160a01b03169063ef9e5e289083906104d59088908890600401610f63565b6000604051808303818588803b1580156104ee57600080fd5b505af1158015610502573d6000803e3d6000fd5b50506002546040516331d98b3f60e01b8152600481018a90526001600160a01b0390911693506331d98b3f92506024019050608060405180830381865afa158015610551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105759190610e88565b95945050505050565b6000546001600160a01b031633146105ca5760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa0a226a4a760b11b60448201526064015b60405180910390fd5b6146508111156105d957600080fd5b600455565b604080516080810182526000808252602082018190529181018290526060810191909152600254600083815260036020526040908190205490516331d98b3f60e01b81526001600160a01b03909216916331d98b3f916103c19160040190815260200190565b60408051608081018252600080825260208201819052818301819052606082015260025491516396834ad360e01b81526004810184905290916001600160a01b0316906396834ad3906024016103c1565b6000546001600160a01b031633146106db5760405162461bcd60e51b81526020600482015260096024820152682737ba1020b236b4b760b91b60448201526064016105c1565b600180546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a991015b60405180910390a15050565b60025460405163d47eed4560e01b81526000916001600160a01b03169063d47eed45906107709086908690600401610f63565b602060405180830381865afa15801561078d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107b19190610f7f565b9392505050565b6000546001600160a01b031633146107ff5760405162461bcd60e51b815260206004820152600a60248201526927a7262cafa0a226a4a760b11b60448201526064016105c1565b6000828152600360205260409020541561084c5760405162461bcd60e51b815260206004820152600e60248201526d414c52454144595f45584953545360901b60448201526064016105c1565b60009182526003602052604090912055565b6001546001600160a01b03163314801561088257506001546001600160a01b031615155b6108ce5760405162461bcd60e51b815260206004820152601e60248201527f4e6f7420746865204558495354494e472070656e64696e672061646d696e000060448201526064016105c1565b60008054600180546001600160a01b038082166001600160a01b031980861682179096559490911690915560408051919092168082526020820184905292917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc910160405180910390a1600154604080516001600160a01b03808516825290921660208301527fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a99101610731565b60408051606081018252600080825260208201819052918101919091526000848152600360205260408120546004549091906109b89042610fae565b60408051600180825281830190925291925042916000916020808301908036833701905050905083816000815181106109f3576109f3610fc1565b6020908102919091010152600254604051634716e9c560e01b81526000916001600160a01b031690634716e9c5903490610a39908c908c9088908b908b90600401610fd7565b60006040518083038185885af1158015610a57573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f19168201604052610a80919081019061104c565b9050600081600081518110610a9757610a97610fc1565b60200260200101519050610aae8160200151610abc565b9a9950505050505050505050565b60408051606081018252600080825260208201819052918101919091526060820151815281516020830151604084015160030b60001315610b8a5760008460400151610b0790611130565b63ffffffff169050610b43610b1d82600a611237565b610b346305f5e1006001600160401b038716611243565b610b3e919061125a565b610c0e565b6001600160401b03166020850152610b76610b5f82600a611237565b610b346305f5e1006001600160401b038616611243565b6001600160401b0316604085015250610c07565b604084015163ffffffff16610bc4610ba382600a611237565b610bba6305f5e1006001600160401b038716611243565b610b3e9190611243565b6001600160401b03166020850152610bf7610be082600a611237565b610bba6305f5e1006001600160401b038616611243565b6001600160401b03166040850152505b5050919050565b60006001600160401b03821115610c4457604080516306dfcc6560e41b81526004810191909152602481018390526044016105c1565b5090565b600060208284031215610c5a57600080fd5b5035919050565b60008083601f840112610c7357600080fd5b5081356001600160401b03811115610c8a57600080fd5b6020830191508360208260051b8501011115610ca557600080fd5b9250929050565b600080600060408486031215610cc157600080fd5b8335925060208401356001600160401b03811115610cde57600080fd5b610cea86828701610c61565b9497909650939450505050565b600060208284031215610d0957600080fd5b81356001600160a01b03811681146107b157600080fd5b60008060208385031215610d3357600080fd5b82356001600160401b03811115610d4957600080fd5b610d5585828601610c61565b90969095509350505050565b60008060408385031215610d7457600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051606081016001600160401b0381118282101715610dbb57610dbb610d83565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610de957610de9610d83565b604052919050565b600060808284031215610e0357600080fd5b604051608081016001600160401b038282108183111715610e2657610e26610d83565b81604052829350845191508160070b8214610e4057600080fd5b9082526020840151908082168214610e5757600080fd5b5060208201526040830151600381900b8114610e7257600080fd5b6040820152606092830151920191909152919050565b600060808284031215610e9a57600080fd5b6107b18383610df1565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000838385526020808601955060208560051b8301018460005b87811015610f5657848303601f19018952813536889003601e19018112610f0d57600080fd5b870184810190356001600160401b03811115610f2857600080fd5b803603821315610f3757600080fd5b610f42858284610ea4565b9a86019a9450505090830190600101610ee7565b5090979650505050505050565b602081526000610f77602083018486610ecd565b949350505050565b600060208284031215610f9157600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561040257610402610f98565b634e487b7160e01b600052603260045260246000fd5b608081526000610feb608083018789610ecd565b82810360208481019190915286518083528782019282019060005b8181101561102257845183529383019391830191600101611006565b50506001600160401b03968716604086015294909516606090930192909252509095945050505050565b6000602080838503121561105f57600080fd5b82516001600160401b038082111561107657600080fd5b818501915085601f83011261108a57600080fd5b81518181111561109c5761109c610d83565b6110aa848260051b01610dc1565b81815284810192506101209182028401850191888311156110ca57600080fd5b938501935b828510156111245780858a0312156110e75760008081fd5b6110ef610d99565b855181526110ff8a888801610df1565b878201526111108a60a08801610df1565b6040820152845293840193928501926110cf565b50979650505050505050565b60008160030b637fffffff19810361114a5761114a610f98565b60000392915050565b600181815b8085111561118e57816000190482111561117457611174610f98565b8085161561118157918102915b93841c9390800290611158565b509250929050565b6000826111a557506001610402565b816111b257506000610402565b81600181146111c857600281146111d2576111ee565b6001915050610402565b60ff8411156111e3576111e3610f98565b50506001821b610402565b5060208310610133831016604e8410600b8410161715611211575081810a610402565b61121b8383611153565b806000190482111561122f5761122f610f98565b029392505050565b60006107b18383611196565b808202811582820484141761040257610402610f98565b60008261127757634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122093c58887476a454c8a7a770cb9f95a01748a0e5929989be7cf43198a247474ed64736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000002880ab155794e7179c9ee2e38200202908c17b43
-----Decoded View---------------
Arg [0] : _pythContract (address): 0x2880aB155794e7179c9eE2e38200202908C17B43
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000002880ab155794e7179c9ee2e38200202908c17b43
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.