frxETH Price: $1,791.11 (+2.44%)

Contract

0x9EfeaC259c4D22Dd79305897563c5d30782C972b

Overview

frxETH Balance | FXTL Balance

0 frxETH | 285,113 FXTL

frxETH Value

$0.00

Token Holdings

Transaction Hash
Method
Block
From
To
Query185009562025-04-05 0:23:4318 days ago1743812623IN
0x9EfeaC25...0782C972b
0.00045 frxETH00.0001011
Query146380772025-01-05 14:21:05107 days ago1736086865IN
0x9EfeaC25...0782C972b
0.00015 frxETH0.000000040.00110025
Query146380292025-01-05 14:19:29107 days ago1736086769IN
0x9EfeaC25...0782C972b
0.00005 frxETH0.000000040.00110025
Query135908252024-12-12 8:32:41131 days ago1733992361IN
0x9EfeaC25...0782C972b
0.00045 frxETH0.000000040.00110025
Query119542182024-11-04 11:19:07169 days ago1730719147IN
0x9EfeaC25...0782C972b
0.00045 frxETH00.00010025
Query117020722024-10-29 15:14:15175 days ago1730214855IN
0x9EfeaC25...0782C972b
0.00015 frxETH00.00010025
Query117020652024-10-29 15:14:01175 days ago1730214841IN
0x9EfeaC25...0782C972b
0.00015 frxETH00.00010025
Query117017722024-10-29 15:04:15175 days ago1730214255IN
0x9EfeaC25...0782C972b
0.00015 frxETH00.00010025
Query117017692024-10-29 15:04:09175 days ago1730214249IN
0x9EfeaC25...0782C972b
0.00015 frxETH00.00010025
Query117017572024-10-29 15:03:45175 days ago1730214225IN
0x9EfeaC25...0782C972b
0.00015 frxETH00.00010025
Query117016982024-10-29 15:01:47175 days ago1730214107IN
0x9EfeaC25...0782C972b
0.00015 frxETH00.00010025
Query93795082024-09-05 20:55:27229 days ago1725569727IN
0x9EfeaC25...0782C972b
0.00015 frxETH00.00010025
Query91186442024-08-30 19:59:59235 days ago1725047999IN
0x9EfeaC25...0782C972b
0.00015 frxETH00.00010025
Query90913882024-08-30 4:51:27236 days ago1724993487IN
0x9EfeaC25...0782C972b
0.00015 frxETH00.00010025
Query90913712024-08-30 4:50:53236 days ago1724993453IN
0x9EfeaC25...0782C972b
0.00015 frxETH00.00010025
Query90817292024-08-29 23:29:29236 days ago1724974169IN
0x9EfeaC25...0782C972b
0.00015 frxETH0.000000040.00110025
Query90775832024-08-29 21:11:17236 days ago1724965877IN
0x9EfeaC25...0782C972b
0.00045 frxETH00.00010025
Query90775542024-08-29 21:10:19236 days ago1724965819IN
0x9EfeaC25...0782C972b
0.00045 frxETH00.00010025
Query90598482024-08-29 11:20:07236 days ago1724930407IN
0x9EfeaC25...0782C972b
0.00045 frxETH00.00010025
Query90597892024-08-29 11:18:09236 days ago1724930289IN
0x9EfeaC25...0782C972b
0.00045 frxETH00.00010025
Query90597482024-08-29 11:16:47236 days ago1724930207IN
0x9EfeaC25...0782C972b
0.00045 frxETH00.00010025
Query90336732024-08-28 20:47:37237 days ago1724878057IN
0x9EfeaC25...0782C972b
0.00045 frxETH00.00010025
Query90043162024-08-28 4:29:03238 days ago1724819343IN
0x9EfeaC25...0782C972b
0.00045 frxETH00.00010025
Query90042942024-08-28 4:28:19238 days ago1724819299IN
0x9EfeaC25...0782C972b
0.00045 frxETH00.00010025
Query90042502024-08-28 4:26:51238 days ago1724819211IN
0x9EfeaC25...0782C972b
0.00045 frxETH00.00010025
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
185009562025-04-05 0:23:4318 days ago1743812623
0x9EfeaC25...0782C972b
0.00045 frxETH
146380772025-01-05 14:21:05107 days ago1736086865
0x9EfeaC25...0782C972b
0.00015 frxETH
146380292025-01-05 14:19:29107 days ago1736086769
0x9EfeaC25...0782C972b
0.00005 frxETH
135908252024-12-12 8:32:41131 days ago1733992361
0x9EfeaC25...0782C972b
0.00045 frxETH
119542182024-11-04 11:19:07169 days ago1730719147
0x9EfeaC25...0782C972b
0.00045 frxETH
117020722024-10-29 15:14:15175 days ago1730214855
0x9EfeaC25...0782C972b
0.00015 frxETH
117020652024-10-29 15:14:01175 days ago1730214841
0x9EfeaC25...0782C972b
0.00015 frxETH
117017722024-10-29 15:04:15175 days ago1730214255
0x9EfeaC25...0782C972b
0.00015 frxETH
117017692024-10-29 15:04:09175 days ago1730214249
0x9EfeaC25...0782C972b
0.00015 frxETH
117017572024-10-29 15:03:45175 days ago1730214225
0x9EfeaC25...0782C972b
0.00015 frxETH
117016982024-10-29 15:01:47175 days ago1730214107
0x9EfeaC25...0782C972b
0.00015 frxETH
93795082024-09-05 20:55:27229 days ago1725569727
0x9EfeaC25...0782C972b
0.00015 frxETH
91186442024-08-30 19:59:59235 days ago1725047999
0x9EfeaC25...0782C972b
0.00015 frxETH
90913882024-08-30 4:51:27236 days ago1724993487
0x9EfeaC25...0782C972b
0.00015 frxETH
90913712024-08-30 4:50:53236 days ago1724993453
0x9EfeaC25...0782C972b
0.00015 frxETH
90817292024-08-29 23:29:29236 days ago1724974169
0x9EfeaC25...0782C972b
0.00015 frxETH
90775832024-08-29 21:11:17236 days ago1724965877
0x9EfeaC25...0782C972b
0.00045 frxETH
90775542024-08-29 21:10:19236 days ago1724965819
0x9EfeaC25...0782C972b
0.00045 frxETH
90598482024-08-29 11:20:07236 days ago1724930407
0x9EfeaC25...0782C972b
0.00045 frxETH
90597892024-08-29 11:18:09236 days ago1724930289
0x9EfeaC25...0782C972b
0.00045 frxETH
90597482024-08-29 11:16:47236 days ago1724930207
0x9EfeaC25...0782C972b
0.00045 frxETH
90336732024-08-28 20:47:37237 days ago1724878057
0x9EfeaC25...0782C972b
0.00045 frxETH
90043162024-08-28 4:29:03238 days ago1724819343
0x9EfeaC25...0782C972b
0.00045 frxETH
90042942024-08-28 4:28:19238 days ago1724819299
0x9EfeaC25...0782C972b
0.00045 frxETH
90042502024-08-28 4:26:51238 days ago1724819211
0x9EfeaC25...0782C972b
0.00045 frxETH
View All Internal Transactions

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LPNQueryV0

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
Yes with 200 runs

Other Settings:
cancun EvmVersion
File 1 of 4 : LPNQueryV0.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

import {LPNClientV0} from "./LPNClientV0.sol";
import {ILPNRegistry} from "../interfaces/ILPNRegistry.sol";

/**
 * @title LPNQueryV0
 * @dev A contract for querying NFT ownership using the Lagrange Euclid testnet.
 */
contract LPNQueryV0 is LPNClientV0 {
    /**
     * @dev Struct to store metadata about a query request.
     * @param sender The address that sent the query request.
     * @param holder The address of the NFT holder being queried.
     */
    struct RequestMetadata {
        address sender;
        address holder;
    }

    /**
     * @dev Mapping to store request metadata by request ID.
     */
    mapping(uint256 requestId => RequestMetadata request) public requests;

    /**
     * @dev Event emitted when a query request is made.
     * @param sender The address that sent the query request.
     * @param storageContract The address of the NFT contract being queried.
     */
    event Query(address indexed sender, address indexed storageContract);

    /**
     * @dev Event emitted when the result of a query is received.
     * @param requestId The ID of the query request.
     * @param sender The address that sent the query request.
     * @param holder The address of the NFT holder that was queried.
     * @param results The array of NFT IDs owned by the queried holder.
     */
    event Result(
        uint256 indexed requestId,
        address indexed sender,
        address indexed holder,
        uint256[] results
    );

    /**
     * @dev Constructor to initialize the LPNQueryV0 contract.
     * @param lpnRegistry The address of the LPN registry contract.
     */
    constructor(ILPNRegistry lpnRegistry) LPNClientV0(lpnRegistry) {}

    /**
     * @dev Function to query the NFT IDs of a specific owner over a range of blocks.
     * @param storageContract The address of the NFT contract to query.
     * @param holder The address of the NFT holder to query.
     * @param startBlock The starting block number for the query range.
     * @param endBlock The ending block number for the query range.
     * @param offset The offset for pagination of results.
     */
    function query(
        address storageContract,
        address holder,
        uint256 startBlock,
        uint256 endBlock,
        uint8 offset
    ) external payable {
        uint256 requestId = lpnRegistry.request{value: msg.value}(
            storageContract,
            bytes32(uint256(uint160(holder))),
            startBlock,
            endBlock,
            offset
        );

        requests[requestId] =
            RequestMetadata({sender: msg.sender, holder: holder});

        emit Query(msg.sender, storageContract);
    }

    /**
     * @dev Internal function called by LPNClientV0 to provide the result of a query.
     * @param requestId The ID of the query request.
     * @param results The array of NFT IDs owned by the queried holder.
     */
    function processCallback(uint256 requestId, uint256[] calldata results)
        internal
        override
    {
        RequestMetadata memory req = requests[requestId];
        emit Result(requestId, req.sender, req.holder, results);
        delete requests[requestId];
    }
}

File 2 of 4 : LPNClientV0.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import {ILPNRegistry} from "../interfaces/ILPNRegistry.sol";
import {ILPNClient} from "../interfaces/ILPNClient.sol";

error CallbackNotAuthorized();

abstract contract LPNClientV0 is ILPNClient {
    ILPNRegistry public lpnRegistry;

    modifier onlyLagrangeRegistry() {
        if (msg.sender != address(lpnRegistry)) {
            revert CallbackNotAuthorized();
        }
        _;
    }

    constructor(ILPNRegistry _lpnRegistry) {
        lpnRegistry = _lpnRegistry;
    }

    function lpnCallback(uint256 requestId, uint256[] calldata results)
        external
        onlyLagrangeRegistry
    {
        processCallback(requestId, results);
    }

    function processCallback(uint256 requestId, uint256[] calldata results)
        internal
        virtual;
}

File 3 of 4 : ILPNRegistry.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/// @title ILPNRegistry
/// @notice Interface for the LPNRegistryV0 contract.
interface ILPNRegistry {
    /// @notice Event emitted when a new client registers.
    /// @param storageContract The address of the smart contract to be indexed.
    /// @param client The address of the client who requested this contract to be indexed.
    /// @param mappingSlot The storage slot of the client's mapping to be computed and proved over.
    /// @param lengthSlot The storage slot of the variable storing the length of the client's mapping.
    event NewRegistration(
        address indexed storageContract,
        address indexed client,
        uint256 mappingSlot,
        uint256 lengthSlot
    );

    /// @notice Event emitted when a new request is made.
    /// @param requestId The ID of the request.
    /// @param storageContract The address of the smart contract with the storage associated with the request.
    /// @param client The address of the client who made this request.
    /// @param key The key of the mapping for the value associated with the request.
    /// @param startBlock The starting block for the computation.
    /// @param endBlock The ending block for the computation.
    /// @param proofBlock The requested block for the proof to be computed against.
    ///                   Currently required for OP Stack chains
    event NewRequest(
        uint256 indexed requestId,
        address indexed storageContract,
        address indexed client,
        bytes32 key,
        uint256 startBlock,
        uint256 endBlock,
        uint256 offset,
        uint256 gasFee,
        uint256 proofBlock
    );

    /// @notice Event emitted when a response is received.
    /// @param requestId The ID of the request.
    /// @param client The address of the client who made the matching request.
    /// @param results The computed results for the request.
    event NewResponse(
        uint256 indexed requestId, address indexed client, uint256[] results
    );

    /// @notice The gas fee paid for on request to reimburse the response transaction.
    function gasFee() external returns (uint256);

    /// @notice Registers a client with the provided mapping and length slots.
    /// @param storageContract The address of the contract to be queried.
    /// @param mappingSlot The storage slot of the client's mapping to be computed and proved over.
    /// @param lengthSlot The storage slot of the variable storing the length of the client's mapping.
    function register(
        address storageContract,
        uint256 mappingSlot,
        uint256 lengthSlot
    ) external;

    /// @notice Submits a new request to the registry.
    /// @param storageContract The address of the smart contract with the storage associated with the request.
    /// @param key The key of the mapping for the value associated with the request.
    /// @param startBlock The starting block for the computation.
    /// @param endBlock The ending block for the computation.
    /// @return The ID of the newly created request.
    function request(
        address storageContract,
        bytes32 key,
        uint256 startBlock,
        uint256 endBlock,
        uint256 offset
    ) external payable returns (uint256);

    /// @notice Submits a response to a specific request.
    /// @param requestId_ The ID of the request to respond to.
    /// @param data The proof, inputs, and public inputs to verify.
    /// - groth16_proof.proofs: 8 * U256 = 256 bytes
    /// - groth16_proof.inputs: 3 * U256 = 96 bytes
    /// - plonky2_proof.public_inputs: the little-endian bytes of public inputs exported by user
    /// @param blockNumber The block number of the block hash corresponding to the proof.
    function respond(
        uint256 requestId_,
        bytes32[] calldata data,
        uint256 blockNumber
    ) external;
}

File 4 of 4 : ILPNClient.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import {ILPNRegistry} from "./ILPNRegistry.sol";

/**
 * @title ILPNClient
 * @notice Interface for the LPNClientV0 contract.
 */
interface ILPNClient {
    /// @notice Callback function called by the LPNRegistry contract.
    /// @param requestId The ID of the request.
    /// @param results The result of the request.
    function lpnCallback(uint256 requestId, uint256[] calldata results)
        external;
}

Settings
{
  "remappings": [
    "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
    "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
    "ds-test/=lib/forge-std/lib/ds-test/src/",
    "forge-std/=lib/forge-std/src/",
    "solady/=lib/solady/src/",
    "@openzeppelin-upgrades/=lib/eigenlayer-contracts/lib/openzeppelin-contracts-upgradeable/",
    "eigenlayer-contracts/=lib/eigenlayer-contracts/",
    "erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
    "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
    "openzeppelin-contracts/=lib/openzeppelin-contracts/"
  ],
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "metadata": {
    "useLiteralContent": false,
    "bytecodeHash": "ipfs",
    "appendCBOR": true
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "evmVersion": "cancun",
  "viaIR": false,
  "libraries": {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"contract ILPNRegistry","name":"lpnRegistry","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"CallbackNotAuthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"storageContract","type":"address"}],"name":"Query","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"requestId","type":"uint256"},{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"results","type":"uint256[]"}],"name":"Result","type":"event"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"},{"internalType":"uint256[]","name":"results","type":"uint256[]"}],"name":"lpnCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lpnRegistry","outputs":[{"internalType":"contract ILPNRegistry","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"storageContract","type":"address"},{"internalType":"address","name":"holder","type":"address"},{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"uint256","name":"endBlock","type":"uint256"},{"internalType":"uint8","name":"offset","type":"uint8"}],"name":"query","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"requestId","type":"uint256"}],"name":"requests","outputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"holder","type":"address"}],"stateMutability":"view","type":"function"}]

6080604052348015600e575f80fd5b50604051610519380380610519833981016040819052602b91604e565b5f80546001600160a01b0319166001600160a01b03929092169190911790556079565b5f60208284031215605d575f80fd5b81516001600160a01b03811681146072575f80fd5b9392505050565b610493806100865f395ff3fe60806040526004361061003e575f3560e01c806315bf2e41146100425780633e8258f1146100575780636337ec5a1461007657806381d12c58146100b1575b5f80fd5b610055610050366004610324565b610110565b005b348015610062575f80fd5b50610055610071366004610380565b61022c565b348015610081575f80fd5b505f54610094906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100bc575f80fd5b506100f06100cb3660046103f8565b600160208190525f918252604090912080549101546001600160a01b03918216911682565b604080516001600160a01b039384168152929091166020830152016100a8565b5f80546040516304e8ad4360e21b81526001600160a01b0388811660048301528781166024830152604482018790526064820186905260ff85166084830152909116906313a2b50c90349060a40160206040518083038185885af115801561017a573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061019f919061040f565b604080518082018252338082526001600160a01b0389811660208085019182525f878152600191829052868120955186549085166001600160a01b03199182161787559251959091018054958416959092169490941790559251939450918916927f5904592568a4fbb78135ee4f11eab3d6638454d85eec4b0f4e1002f125fd66b29190a3505050505050565b5f546001600160a01b03163314610256576040516311016bf360e01b815260040160405180910390fd5b610261838383610266565b505050565b5f838152600160208181526040928390208351808501855281546001600160a01b03908116808352929094015490931691830182905292519192909186907f96cd981e2886f10a0f0fdfa65634c1242f211bf9abdbaaf18e199aed945b6ff9906102d39088908890610426565b60405180910390a45050505f90815260016020819052604090912080546001600160a01b03199081168255910180549091169055565b80356001600160a01b038116811461031f575f80fd5b919050565b5f805f805f60a08688031215610338575f80fd5b61034186610309565b945061034f60208701610309565b93506040860135925060608601359150608086013560ff81168114610372575f80fd5b809150509295509295909350565b5f805f60408486031215610392575f80fd5b83359250602084013567ffffffffffffffff808211156103b0575f80fd5b818601915086601f8301126103c3575f80fd5b8135818111156103d1575f80fd5b8760208260051b85010111156103e5575f80fd5b6020830194508093505050509250925092565b5f60208284031215610408575f80fd5b5035919050565b5f6020828403121561041f575f80fd5b5051919050565b602080825281018290525f6001600160fb1b03831115610444575f80fd5b8260051b8085604085013791909101604001939250505056fea2646970667358221220266c6d50994fd4d0a32f5eec857765ac9f5ac5a8285c0ee9c84931c328423f2f64736f6c634300081900330000000000000000000000002584665beff871534118aabae781bc267af142f9

Deployed Bytecode

0x60806040526004361061003e575f3560e01c806315bf2e41146100425780633e8258f1146100575780636337ec5a1461007657806381d12c58146100b1575b5f80fd5b610055610050366004610324565b610110565b005b348015610062575f80fd5b50610055610071366004610380565b61022c565b348015610081575f80fd5b505f54610094906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100bc575f80fd5b506100f06100cb3660046103f8565b600160208190525f918252604090912080549101546001600160a01b03918216911682565b604080516001600160a01b039384168152929091166020830152016100a8565b5f80546040516304e8ad4360e21b81526001600160a01b0388811660048301528781166024830152604482018790526064820186905260ff85166084830152909116906313a2b50c90349060a40160206040518083038185885af115801561017a573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061019f919061040f565b604080518082018252338082526001600160a01b0389811660208085019182525f878152600191829052868120955186549085166001600160a01b03199182161787559251959091018054958416959092169490941790559251939450918916927f5904592568a4fbb78135ee4f11eab3d6638454d85eec4b0f4e1002f125fd66b29190a3505050505050565b5f546001600160a01b03163314610256576040516311016bf360e01b815260040160405180910390fd5b610261838383610266565b505050565b5f838152600160208181526040928390208351808501855281546001600160a01b03908116808352929094015490931691830182905292519192909186907f96cd981e2886f10a0f0fdfa65634c1242f211bf9abdbaaf18e199aed945b6ff9906102d39088908890610426565b60405180910390a45050505f90815260016020819052604090912080546001600160a01b03199081168255910180549091169055565b80356001600160a01b038116811461031f575f80fd5b919050565b5f805f805f60a08688031215610338575f80fd5b61034186610309565b945061034f60208701610309565b93506040860135925060608601359150608086013560ff81168114610372575f80fd5b809150509295509295909350565b5f805f60408486031215610392575f80fd5b83359250602084013567ffffffffffffffff808211156103b0575f80fd5b818601915086601f8301126103c3575f80fd5b8135818111156103d1575f80fd5b8760208260051b85010111156103e5575f80fd5b6020830194508093505050509250925092565b5f60208284031215610408575f80fd5b5035919050565b5f6020828403121561041f575f80fd5b5051919050565b602080825281018290525f6001600160fb1b03831115610444575f80fd5b8260051b8085604085013791909101604001939250505056fea2646970667358221220266c6d50994fd4d0a32f5eec857765ac9f5ac5a8285c0ee9c84931c328423f2f64736f6c63430008190033

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

0000000000000000000000002584665beff871534118aabae781bc267af142f9

-----Decoded View---------------
Arg [0] : lpnRegistry (address): 0x2584665Beff871534118aAbAE781BC267Af142f9

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000002584665beff871534118aabae781bc267af142f9


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ 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.