S Price: $0.500921 (+2.77%)
    /

    Contract

    0x9056114733A554680FC5a1Ab21947940051EA517

    Overview

    S Balance

    Sonic LogoSonic LogoSonic Logo0 S

    S Value

    $0.00

    Multichain Info

    No addresses found
    Age:180D
    Amount:Between 1-1M
    Reset Filter

    Transaction Hash
    Method
    Block
    Age
    From
    To
    Amount

    There are no matching entries

    Update your filters to view other transactions

    Parent Transaction Hash Block Age From To Amount
    View All Internal Transactions
    Loading...
    Loading

    Contract Source Code Verified (Exact Match)

    Contract Name:
    PythFeedAdapter

    Compiler Version
    v0.8.27+commit.40a35a09

    Optimization Enabled:
    Yes with 800 runs

    Other Settings:
    cancun EvmVersion
    File 1 of 21 : DeployPythFeedAdapter.s.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: UNLICENSED
    pragma solidity ^0.8.13;
    import {Script, console} from "forge-std/Script.sol";
    import {IOracle} from "contracts/interfaces/oracles/IOracle.sol";
    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;
    }
    interface IPythFeed {
    function getPriceUnsafe(bytes32 id) external view returns (Price memory price);
    }
    contract PythFeedAdapter is IOracle {
    IPythFeed public immutable pythFeed;
    bytes32 public immutable priceId;
    string public name;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 2 of 21 : Script.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity >=0.6.2 <0.9.0;
    // 💬 ABOUT
    // Forge Std's default Script.
    // 🧩 MODULES
    import {console} from "./console.sol";
    import {console2} from "./console2.sol";
    import {safeconsole} from "./safeconsole.sol";
    import {StdChains} from "./StdChains.sol";
    import {StdCheatsSafe} from "./StdCheats.sol";
    import {stdJson} from "./StdJson.sol";
    import {stdMath} from "./StdMath.sol";
    import {StdStorage, stdStorageSafe} from "./StdStorage.sol";
    import {StdStyle} from "./StdStyle.sol";
    import {StdUtils} from "./StdUtils.sol";
    import {VmSafe} from "./Vm.sol";
    // 📦 BOILERPLATE
    import {ScriptBase} from "./Base.sol";
    // ⭐️ SCRIPT
    abstract contract Script is ScriptBase, StdChains, StdCheatsSafe, StdUtils {
    // Note: IS_SCRIPT() must return true.
    bool public IS_SCRIPT = true;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 3 of 21 : IOracle.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // SPDX-License-Identifier: MIT
    pragma solidity ^0.8.27;
    interface IOracle {
    function decimals() external view returns (uint8);
    function latestRoundData()
    external
    view
    returns (uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound);
    function latestAnswer() external view returns (int256);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 4 of 21 : console.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity >=0.4.22 <0.9.0;
    library console {
    address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);
    function _castLogPayloadViewToPure(
    function(bytes memory) internal view fnIn
    ) internal pure returns (function(bytes memory) internal pure fnOut) {
    assembly {
    fnOut := fnIn
    }
    }
    function _sendLogPayload(bytes memory payload) internal pure {
    _castLogPayloadViewToPure(_sendLogPayloadView)(payload);
    }
    function _sendLogPayloadView(bytes memory payload) private view {
    uint256 payloadLength = payload.length;
    address consoleAddress = CONSOLE_ADDRESS;
    /// @solidity memory-safe-assembly
    assembly {
    let payloadStart := add(payload, 32)
    let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 0, 0)
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 5 of 21 : console2.sol
    1
    2
    3
    4
    // SPDX-License-Identifier: MIT
    pragma solidity >=0.4.22 <0.9.0;
    import {console as console2} from "./console.sol";
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 6 of 21 : safeconsole.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity >=0.6.2 <0.9.0;
    /// @author philogy <https://github.com/philogy>
    /// @dev Code generated automatically by script.
    library safeconsole {
    uint256 constant CONSOLE_ADDR = 0x000000000000000000000000000000000000000000636F6e736F6c652e6c6f67;
    // Credit to [0age](https://twitter.com/z0age/status/1654922202930888704) and [0xdapper](https://github.com/foundry-rs/forge-std/pull/374)
    // for the view-to-pure log trick.
    function _sendLogPayload(uint256 offset, uint256 size) private pure {
    function(uint256, uint256) internal view fnIn = _sendLogPayloadView;
    function(uint256, uint256) internal pure pureSendLogPayload;
    /// @solidity memory-safe-assembly
    assembly {
    pureSendLogPayload := fnIn
    }
    pureSendLogPayload(offset, size);
    }
    function _sendLogPayloadView(uint256 offset, uint256 size) private view {
    /// @solidity memory-safe-assembly
    assembly {
    pop(staticcall(gas(), CONSOLE_ADDR, offset, size, 0x0, 0x0))
    }
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 7 of 21 : StdChains.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity >=0.6.2 <0.9.0;
    import {VmSafe} from "./Vm.sol";
    /**
    * StdChains provides information about EVM compatible chains that can be used in scripts/tests.
    * For each chain, the chain's name, chain ID, and a default RPC URL are provided. Chains are
    * identified by their alias, which is the same as the alias in the `[rpc_endpoints]` section of
    * the `foundry.toml` file. For best UX, ensure the alias in the `foundry.toml` file match the
    * alias used in this contract, which can be found as the first argument to the
    * `setChainWithDefaultRpcUrl` call in the `initializeStdChains` function.
    *
    * There are two main ways to use this contract:
    * 1. Set a chain with `setChain(string memory chainAlias, ChainData memory chain)` or
    * `setChain(string memory chainAlias, Chain memory chain)`
    * 2. Get a chain with `getChain(string memory chainAlias)` or `getChain(uint256 chainId)`.
    *
    * The first time either of those are used, chains are initialized with the default set of RPC URLs.
    * This is done in `initializeStdChains`, which uses `setChainWithDefaultRpcUrl`. Defaults are recorded in
    * `defaultRpcUrls`.
    *
    * The `setChain` function is straightforward, and it simply saves off the given chain data.
    *
    * The `getChain` methods use `getChainWithUpdatedRpcUrl` to return a chain. For example, let's say
    * we want to retrieve the RPC URL for `mainnet`:
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 8 of 21 : StdCheats.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity >=0.6.2 <0.9.0;
    pragma experimental ABIEncoderV2;
    import {StdStorage, stdStorage} from "./StdStorage.sol";
    import {console2} from "./console2.sol";
    import {Vm} from "./Vm.sol";
    abstract contract StdCheatsSafe {
    Vm private constant vm = Vm(address(uint160(uint256(keccak256("hevm cheat code")))));
    uint256 private constant UINT256_MAX =
    115792089237316195423570985008687907853269984665640564039457584007913129639935;
    bool private gasMeteringOff;
    // Data structures to parse Transaction objects from the broadcast artifact
    // that conform to EIP1559. The Raw structs is what is parsed from the JSON
    // and then converted to the one that is used by the user for better UX.
    struct RawTx1559 {
    string[] arguments;
    address contractAddress;
    string contractName;
    // json value name = function
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 9 of 21 : StdJson.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity >=0.6.0 <0.9.0;
    pragma experimental ABIEncoderV2;
    import {VmSafe} from "./Vm.sol";
    // Helpers for parsing and writing JSON files
    // To parse:
    // ```
    // using stdJson for string;
    // string memory json = vm.readFile("<some_path>");
    // json.readUint("<json_path>");
    // ```
    // To write:
    // ```
    // using stdJson for string;
    // string memory json = "json";
    // json.serialize("a", uint256(123));
    // string memory semiFinal = json.serialize("b", string("test"));
    // string memory finalJson = json.serialize("c", semiFinal);
    // finalJson.write("<some_path>");
    // ```
    library stdJson {
    VmSafe private constant vm = VmSafe(address(uint160(uint256(keccak256("hevm cheat code")))));
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 10 of 21 : StdMath.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity >=0.6.2 <0.9.0;
    library stdMath {
    int256 private constant INT256_MIN = -57896044618658097711785492504343953926634992332820282019728792003956564819968;
    function abs(int256 a) internal pure returns (uint256) {
    // Required or it will fail when `a = type(int256).min`
    if (a == INT256_MIN) {
    return 57896044618658097711785492504343953926634992332820282019728792003956564819968;
    }
    return uint256(a > 0 ? a : -a);
    }
    function delta(uint256 a, uint256 b) internal pure returns (uint256) {
    return a > b ? a - b : b - a;
    }
    function delta(int256 a, int256 b) internal pure returns (uint256) {
    // a and b are of the same sign
    // this works thanks to two's complement, the left-most bit is the sign bit
    if ((a ^ b) > -1) {
    return delta(abs(a), abs(b));
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 11 of 21 : StdStorage.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity >=0.6.2 <0.9.0;
    import {Vm} from "./Vm.sol";
    struct FindData {
    uint256 slot;
    uint256 offsetLeft;
    uint256 offsetRight;
    bool found;
    }
    struct StdStorage {
    mapping(address => mapping(bytes4 => mapping(bytes32 => FindData))) finds;
    bytes32[] _keys;
    bytes4 _sig;
    uint256 _depth;
    address _target;
    bytes32 _set;
    bool _enable_packed_slots;
    bytes _calldata;
    }
    library stdStorageSafe {
    event SlotFound(address who, bytes4 fsig, bytes32 keysHash, uint256 slot);
    event WARNING_UninitedSlot(address who, uint256 slot);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 12 of 21 : StdStyle.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity >=0.4.22 <0.9.0;
    import {VmSafe} from "./Vm.sol";
    library StdStyle {
    VmSafe private constant vm = VmSafe(address(uint160(uint256(keccak256("hevm cheat code")))));
    string constant RED = "\u001b[91m";
    string constant GREEN = "\u001b[92m";
    string constant YELLOW = "\u001b[93m";
    string constant BLUE = "\u001b[94m";
    string constant MAGENTA = "\u001b[95m";
    string constant CYAN = "\u001b[96m";
    string constant BOLD = "\u001b[1m";
    string constant DIM = "\u001b[2m";
    string constant ITALIC = "\u001b[3m";
    string constant UNDERLINE = "\u001b[4m";
    string constant INVERSE = "\u001b[7m";
    string constant RESET = "\u001b[0m";
    function styleConcat(string memory style, string memory self) private pure returns (string memory) {
    return string(abi.encodePacked(style, self, RESET));
    }
    function red(string memory self) internal pure returns (string memory) {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 13 of 21 : StdUtils.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity >=0.6.2 <0.9.0;
    pragma experimental ABIEncoderV2;
    import {IMulticall3} from "./interfaces/IMulticall3.sol";
    import {MockERC20} from "./mocks/MockERC20.sol";
    import {MockERC721} from "./mocks/MockERC721.sol";
    import {VmSafe} from "./Vm.sol";
    abstract contract StdUtils {
    /*//////////////////////////////////////////////////////////////////////////
    CONSTANTS
    //////////////////////////////////////////////////////////////////////////*/
    IMulticall3 private constant multicall = IMulticall3(0xcA11bde05977b3631167028862bE2a173976CA11);
    VmSafe private constant vm = VmSafe(address(uint160(uint256(keccak256("hevm cheat code")))));
    address private constant CONSOLE2_ADDRESS = 0x000000000000000000636F6e736F6c652e6c6f67;
    uint256 private constant INT256_MIN_ABS =
    57896044618658097711785492504343953926634992332820282019728792003956564819968;
    uint256 private constant SECP256K1_ORDER =
    115792089237316195423570985008687907852837564279074904382605163141518161494337;
    uint256 private constant UINT256_MAX =
    115792089237316195423570985008687907853269984665640564039457584007913129639935;
    // Used by default when deploying with create2, https://github.com/Arachnid/deterministic-deployment-proxy.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 14 of 21 : Vm.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // Automatically @generated by scripts/vm.py. Do not modify manually.
    // SPDX-License-Identifier: MIT OR Apache-2.0
    pragma solidity >=0.6.2 <0.9.0;
    pragma experimental ABIEncoderV2;
    /// The `VmSafe` interface does not allow manipulation of the EVM state or other actions that may
    /// result in Script simulations differing from on-chain execution. It is recommended to only use
    /// these cheats in scripts.
    interface VmSafe {
    /// A modification applied to either `msg.sender` or `tx.origin`. Returned by `readCallers`.
    enum CallerMode {
    // No caller modification is currently active.
    None,
    // A one time broadcast triggered by a `vm.broadcast()` call is currently active.
    Broadcast,
    // A recurrent broadcast triggered by a `vm.startBroadcast()` call is currently active.
    RecurrentBroadcast,
    // A one time prank triggered by a `vm.prank()` call is currently active.
    Prank,
    // A recurrent prank triggered by a `vm.startPrank()` call is currently active.
    RecurrentPrank
    }
    /// The kind of account access that occurred.
    enum AccountAccessKind {
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 15 of 21 : Base.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity >=0.6.2 <0.9.0;
    import {StdStorage} from "./StdStorage.sol";
    import {Vm, VmSafe} from "./Vm.sol";
    abstract contract CommonBase {
    // Cheat code address, 0x7109709ECfa91a80626fF3989D68f67F5b1DD12D.
    address internal constant VM_ADDRESS = address(uint160(uint256(keccak256("hevm cheat code"))));
    // console.sol and console2.sol work by executing a staticcall to this address.
    address internal constant CONSOLE = 0x000000000000000000636F6e736F6c652e6c6f67;
    // Used when deploying with create2, https://github.com/Arachnid/deterministic-deployment-proxy.
    address internal constant CREATE2_FACTORY = 0x4e59b44847b379578588920cA78FbF26c0B4956C;
    // Default address for tx.origin and msg.sender, 0x1804c8AB1F12E6bbf3894d4083f33e07309d1f38.
    address internal constant DEFAULT_SENDER = address(uint160(uint256(keccak256("foundry default caller"))));
    // Address of the test contract, deployed by the DEFAULT_SENDER.
    address internal constant DEFAULT_TEST_CONTRACT = 0x5615dEB798BB3E4dFa0139dFa1b3D433Cc23b72f;
    // Deterministic deployment address of the Multicall3 contract.
    address internal constant MULTICALL3_ADDRESS = 0xcA11bde05977b3631167028862bE2a173976CA11;
    // The order of the secp256k1 curve.
    uint256 internal constant SECP256K1_ORDER =
    115792089237316195423570985008687907852837564279074904382605163141518161494337;
    uint256 internal constant UINT256_MAX =
    115792089237316195423570985008687907853269984665640564039457584007913129639935;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 16 of 21 : IMulticall3.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity >=0.6.2 <0.9.0;
    pragma experimental ABIEncoderV2;
    interface IMulticall3 {
    struct Call {
    address target;
    bytes callData;
    }
    struct Call3 {
    address target;
    bool allowFailure;
    bytes callData;
    }
    struct Call3Value {
    address target;
    bool allowFailure;
    uint256 value;
    bytes callData;
    }
    struct Result {
    bool success;
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 17 of 21 : MockERC20.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity >=0.6.2 <0.9.0;
    import {IERC20} from "../interfaces/IERC20.sol";
    /// @notice This is a mock contract of the ERC20 standard for testing purposes only, it SHOULD NOT be used in production.
    /// @dev Forked from: https://github.com/transmissions11/solmate/blob/0384dbaaa4fcb5715738a9254a7c0a4cb62cf458/src/tokens/ERC20.sol
    contract MockERC20 is IERC20 {
    /*//////////////////////////////////////////////////////////////
    METADATA STORAGE
    //////////////////////////////////////////////////////////////*/
    string internal _name;
    string internal _symbol;
    uint8 internal _decimals;
    function name() external view override returns (string memory) {
    return _name;
    }
    function symbol() external view override returns (string memory) {
    return _symbol;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 18 of 21 : MockERC721.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity >=0.6.2 <0.9.0;
    import {IERC721Metadata, IERC721TokenReceiver} from "../interfaces/IERC721.sol";
    /// @notice This is a mock contract of the ERC721 standard for testing purposes only, it SHOULD NOT be used in production.
    /// @dev Forked from: https://github.com/transmissions11/solmate/blob/0384dbaaa4fcb5715738a9254a7c0a4cb62cf458/src/tokens/ERC721.sol
    contract MockERC721 is IERC721Metadata {
    /*//////////////////////////////////////////////////////////////
    METADATA STORAGE/LOGIC
    //////////////////////////////////////////////////////////////*/
    string internal _name;
    string internal _symbol;
    function name() external view override returns (string memory) {
    return _name;
    }
    function symbol() external view override returns (string memory) {
    return _symbol;
    }
    function tokenURI(uint256 id) public view virtual override returns (string memory) {}
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 19 of 21 : IERC20.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity >=0.6.2;
    /// @dev Interface of the ERC20 standard as defined in the EIP.
    /// @dev This includes the optional name, symbol, and decimals metadata.
    interface IERC20 {
    /// @dev Emitted when `value` tokens are moved from one account (`from`) to another (`to`).
    event Transfer(address indexed from, address indexed to, uint256 value);
    /// @dev Emitted when the allowance of a `spender` for an `owner` is set, where `value`
    /// is the new allowance.
    event Approval(address indexed owner, address indexed spender, uint256 value);
    /// @notice Returns the amount of tokens in existence.
    function totalSupply() external view returns (uint256);
    /// @notice Returns the amount of tokens owned by `account`.
    function balanceOf(address account) external view returns (uint256);
    /// @notice Moves `amount` tokens from the caller's account to `to`.
    function transfer(address to, uint256 amount) external returns (bool);
    /// @notice Returns the remaining number of tokens that `spender` is allowed
    /// to spend on behalf of `owner`
    function allowance(address owner, address spender) external view returns (uint256);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 20 of 21 : IERC721.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // SPDX-License-Identifier: MIT
    pragma solidity >=0.6.2;
    import "./IERC165.sol";
    /// @title ERC-721 Non-Fungible Token Standard
    /// @dev See https://eips.ethereum.org/EIPS/eip-721
    /// Note: the ERC-165 identifier for this interface is 0x80ac58cd.
    interface IERC721 is IERC165 {
    /// @dev This emits when ownership of any NFT changes by any mechanism.
    /// This event emits when NFTs are created (`from` == 0) and destroyed
    /// (`to` == 0). Exception: during contract creation, any number of NFTs
    /// may be created and assigned without emitting Transfer. At the time of
    /// any transfer, the approved address for that NFT (if any) is reset to none.
    event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);
    /// @dev This emits when the approved address for an NFT is changed or
    /// reaffirmed. The zero address indicates there is no approved address.
    /// When a Transfer event emits, this also indicates that the approved
    /// address for that NFT (if any) is reset to none.
    event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);
    /// @dev This emits when an operator is enabled or disabled for an owner.
    /// The operator can manage all NFTs of the owner.
    event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    File 21 of 21 : IERC165.sol
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // SPDX-License-Identifier: MIT
    pragma solidity >=0.6.2;
    interface IERC165 {
    /// @notice Query if a contract implements an interface
    /// @param interfaceID The interface identifier, as specified in ERC-165
    /// @dev Interface identification is specified in ERC-165. This function
    /// uses less than 30,000 gas.
    /// @return `true` if the contract implements `interfaceID` and
    /// `interfaceID` is not 0xffffffff, `false` otherwise
    function supportsInterface(bytes4 interfaceID) external view returns (bool);
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Settings
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    {
    "remappings": [
    "@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/",
    "@prb/test/=node_modules/@prb/test/",
    "@nexus/=node_modules/nexus/",
    "forge-std/=lib/forge-std/src/",
    "account-abstraction/=node_modules/account-abstraction/contracts/",
    "@ERC4337/account-abstraction/=node_modules/account-abstraction/",
    "@modulekit/=node_modules/modulekit/src/",
    "sentinellist/=node_modules/sentinellist/src/",
    "solady/=node_modules/solady/src/",
    "@uniswap/v3-periphery/contracts/=node_modules/@uniswap/v3-periphery/contracts/",
    "@uniswap/v3-core/contracts/=node_modules/@uniswap/v3-core/contracts/",
    "@uniswap/swap-router-contracts/contracts/=node_modules/@uniswap/swap-router-contracts/contracts/",
    "solady/src/=node_modules/solady/src/",
    "excessively-safe-call/=node_modules/excessively-safe-call/src/",
    "modulekit/=node_modules/@rhinestone/modulekit/src/",
    "module-bases/=node_modules/module-bases/src/",
    "erc7579/=node_modules/erc7579/src/",
    "kernel/=node_modules/@zerodev/kernel/src/",
    "@safe-global/=node_modules/@safe-global/",
    "solarray/=node_modules/solarray/src/",
    "erc7739Validator/=node_modules/erc7739-validator-base/src/",
    "@biconomy-devx/=node_modules/@biconomy-devx/",
    "@erc7579/=node_modules/@erc7579/",
    "@gnosis.pm/=node_modules/@gnosis.pm/",
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    Contract Security Audit

    Contract ABI

    API
    [{"inputs":[{"internalType":"address","name":"pythFeedAddress","type":"address"},{"internalType":"string","name":"_name","type":"string"},{"internalType":"bytes32","name":"_priceId","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidPythFeedAddress","type":"error"},{"inputs":[],"name":"InvalidPythFeedPrecision","type":"error"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"latestAnswer","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"latestRoundData","outputs":[{"internalType":"uint80","name":"roundId","type":"uint80"},{"internalType":"int256","name":"answer","type":"int256"},{"internalType":"uint256","name":"startedAt","type":"uint256"},{"internalType":"uint256","name":"updatedAt","type":"uint256"},{"internalType":"uint80","name":"answeredInRound","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceId","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pythFeed","outputs":[{"internalType":"contract IPythFeed","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

    60c08060405234610328576107fb803803809161001c828561034e565b83398101906060818303126103285780516001600160a01b03811691908290036103285760208101516001600160401b0381116103285781019083601f830112156103285781516001600160401b0381116102785760405194610089601f8301601f19166020018761034e565b81865260208285010111610328576020815f9282604096018389015e86010152015190801561033f576080816024928252604051928380926396834ad360e01b82528660048301525afa908115610334575f9161029b575b50604060071991015160030b0361028c5760a05280516001600160401b038111610278575f54600181811c9116801561026e575b602082101461025a57601f81116101f8575b50602091601f821160011461019a579181925f9261018f575b50508160011b915f199060031b1c1916175f555b6040516104899081610372823960805181818160a90152818161018401526101f3015260a051818181607d015281816101c701526102980152f35b015190505f80610140565b601f198216925f8052805f20915f5b8581106101e0575083600195106101c8575b505050811b015f55610154565b01515f1960f88460031b161c191690555f80806101bb565b919260206001819286850151815501940192016101a9565b5f80527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563601f830160051c81019160208410610250575b601f0160051c01905b8181106102455750610127565b5f8155600101610238565b909150819061022f565b634e487b7160e01b5f52602260045260245ffd5b90607f1690610115565b634e487b7160e01b5f52604160045260245ffd5b63104a661d60e21b5f5260045ffd5b90506080813d60801161032c575b816102b66080938361034e565b810103126103285760405190608082016001600160401b038111838210176102785760405280518060070b810361032857825260208101516001600160401b03811681036103285760208301526040810151908160030b8203610328576060916040840152015160608201525f6100e1565b5f80fd5b3d91506102a9565b6040513d5f823e3d90fd5b63e63e109360e01b5f5260045ffd5b601f909101601f19168101906001600160401b038211908210176102785760405256fe6080806040526004361015610012575f80fd5b5f3560e01c90816306fdde03146102bb575080633118933414610281578063313ce5671461026657806350d25bcd146101a8578063ca7ef348146101585763feaf968c1461005e575f80fd5b34610154575f366003190112610154576040516396834ad360e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201526080816024817f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165afa80156101495760a0915f9161011a575b506060815160070b910151604051915f8352602083015280604083015260608201525f6080820152f35b61013c915060803d608011610142575b61013481836103d2565b810190610408565b5f6100f0565b503d61012a565b6040513d5f823e3d90fd5b5f80fd5b34610154575f36600319011261015457602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b34610154575f366003190112610154576040516396834ad360e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201526080816024817f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff165afa8015610149576020915f91610247575b505160070b604051908152f35b610260915060803d6080116101425761013481836103d2565b8261023a565b34610154575f36600319011261015457602060405160088152f35b34610154575f3660031901126101545760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b34610154575f366003190112610154575f905f54918260011c600184169384156103c8575b6020821085146103b4578184526020840194908115610399575060011461033d575b50906103128160409303826103d2565b8151928391602083525180918160208501528484015e5f828201840152601f01601f19168101030190f35b5f8080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563939250905b80821061037f57509091508101602001610312610302565b919260018160209254838588010152019101909291610367565b60ff1916855250151560051b82016020019050610312610302565b634e487b7160e01b5f52602260045260245ffd5b90607f16906102e0565b90601f8019910116810190811067ffffffffffffffff8211176103f457604052565b634e487b7160e01b5f52604160045260245ffd5b9081608091031261015457604051906080820182811067ffffffffffffffff8211176103f45760405280518060070b8103610154578252602081015167ffffffffffffffff811681036101545760208301526040810151908160030b8203610154576060916040840152015160608201529056fea164736f6c634300081b000a0000000000000000000000002880ab155794e7179c9ee2e38200202908c17b430000000000000000000000000000000000000000000000000000000000000060f490b178d0c85683b7a0f2388b40af2e6f7c90cbe0f96b31f315f08d0e5a2d6d0000000000000000000000000000000000000000000000000000000000000005532f555344000000000000000000000000000000000000000000000000000000

    Deployed Bytecode

    0x6080806040526004361015610012575f80fd5b5f3560e01c90816306fdde03146102bb575080633118933414610281578063313ce5671461026657806350d25bcd146101a8578063ca7ef348146101585763feaf968c1461005e575f80fd5b34610154575f366003190112610154576040516396834ad360e01b81527ff490b178d0c85683b7a0f2388b40af2e6f7c90cbe0f96b31f315f08d0e5a2d6d60048201526080816024817f0000000000000000000000002880ab155794e7179c9ee2e38200202908c17b4373ffffffffffffffffffffffffffffffffffffffff165afa80156101495760a0915f9161011a575b506060815160070b910151604051915f8352602083015280604083015260608201525f6080820152f35b61013c915060803d608011610142575b61013481836103d2565b810190610408565b5f6100f0565b503d61012a565b6040513d5f823e3d90fd5b5f80fd5b34610154575f36600319011261015457602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000002880ab155794e7179c9ee2e38200202908c17b43168152f35b34610154575f366003190112610154576040516396834ad360e01b81527ff490b178d0c85683b7a0f2388b40af2e6f7c90cbe0f96b31f315f08d0e5a2d6d60048201526080816024817f0000000000000000000000002880ab155794e7179c9ee2e38200202908c17b4373ffffffffffffffffffffffffffffffffffffffff165afa8015610149576020915f91610247575b505160070b604051908152f35b610260915060803d6080116101425761013481836103d2565b8261023a565b34610154575f36600319011261015457602060405160088152f35b34610154575f3660031901126101545760206040517ff490b178d0c85683b7a0f2388b40af2e6f7c90cbe0f96b31f315f08d0e5a2d6d8152f35b34610154575f366003190112610154575f905f54918260011c600184169384156103c8575b6020821085146103b4578184526020840194908115610399575060011461033d575b50906103128160409303826103d2565b8151928391602083525180918160208501528484015e5f828201840152601f01601f19168101030190f35b5f8080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563939250905b80821061037f57509091508101602001610312610302565b919260018160209254838588010152019101909291610367565b60ff1916855250151560051b82016020019050610312610302565b634e487b7160e01b5f52602260045260245ffd5b90607f16906102e0565b90601f8019910116810190811067ffffffffffffffff8211176103f457604052565b634e487b7160e01b5f52604160045260245ffd5b9081608091031261015457604051906080820182811067ffffffffffffffff8211176103f45760405280518060070b8103610154578252602081015167ffffffffffffffff811681036101545760208301526040810151908160030b8203610154576060916040840152015160608201529056fea164736f6c634300081b000a

    Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

    0000000000000000000000002880ab155794e7179c9ee2e38200202908c17b430000000000000000000000000000000000000000000000000000000000000060f490b178d0c85683b7a0f2388b40af2e6f7c90cbe0f96b31f315f08d0e5a2d6d0000000000000000000000000000000000000000000000000000000000000005532f555344000000000000000000000000000000000000000000000000000000

    -----Decoded View---------------
    Arg [0] : pythFeedAddress (address): 0x2880aB155794e7179c9eE2e38200202908C17B43
    Arg [1] : _name (string): S/USD
    Arg [2] : _priceId (bytes32): 0xf490b178d0c85683b7a0f2388b40af2e6f7c90cbe0f96b31f315f08d0e5a2d6d

    -----Encoded View---------------
    5 Constructor Arguments found :
    Arg [0] : 0000000000000000000000002880ab155794e7179c9ee2e38200202908c17b43
    Arg [1] : 0000000000000000000000000000000000000000000000000000000000000060
    Arg [2] : f490b178d0c85683b7a0f2388b40af2e6f7c90cbe0f96b31f315f08d0e5a2d6d
    Arg [3] : 0000000000000000000000000000000000000000000000000000000000000005
    Arg [4] : 532f555344000000000000000000000000000000000000000000000000000000


    Block Age Transaction Gas Used Reward
    view all blocks ##produced##

    Block Age Uncle Number Difficulty Gas Used Reward
    View All Uncles
    Loading...
    Loading
    Loading...
    Loading

    Validator Index Block Age Amount
    View All Withdrawals

    Transaction Hash Block Age Value Eth2 PubKey Valid
    View All Deposits

    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.