frxETH Price: $3,459.09 (-0.02%)

Contract

0x9EfeaC259c4D22Dd79305897563c5d30782C972b
 

Overview

frxETH Balance | FXTL Balance

0 frxETH | 278,731 FXTL

frxETH Value

$0.00

Token Holdings

Transaction Hash
Method
Block
From
To
Query71245492024-07-15 16:10:0913 hrs ago1721059809IN
0x9EfeaC25...0782C972b
0.000015 frxETH00.00010025
Query71245002024-07-15 16:08:3113 hrs ago1721059711IN
0x9EfeaC25...0782C972b
0.00015 frxETH00.00010025
Query71244582024-07-15 16:07:0713 hrs ago1721059627IN
0x9EfeaC25...0782C972b
0.0004511 frxETH00.00010025
Query71243592024-07-15 16:03:4913 hrs ago1721059429IN
0x9EfeaC25...0782C972b
0.00015 frxETH00.00010025
Query71243012024-07-15 16:01:5313 hrs ago1721059313IN
0x9EfeaC25...0782C972b
0.0005 frxETH00.00010025
Query71241912024-07-15 15:58:1313 hrs ago1721059093IN
0x9EfeaC25...0782C972b
0.00045 frxETH00.00010025
Query71241912024-07-15 15:58:1313 hrs ago1721059093IN
0x9EfeaC25...0782C972b
0.00045 frxETH00.00010025
Query71241912024-07-15 15:58:1313 hrs ago1721059093IN
0x9EfeaC25...0782C972b
0.00045 frxETH00.00010025
Query71240612024-07-15 15:53:5313 hrs ago1721058833IN
0x9EfeaC25...0782C972b
0.00045 frxETH00.00010025
Query71240462024-07-15 15:53:2313 hrs ago1721058803IN
0x9EfeaC25...0782C972b
0.00045 frxETH00.00010025
Query71003902024-07-15 2:44:5126 hrs ago1721011491IN
0x9EfeaC25...0782C972b
0.00045 frxETH0.000000390.01
Query71003532024-07-15 2:43:3726 hrs ago1721011417IN
0x9EfeaC25...0782C972b
0.00045 frxETH0.000000020.00100025
Query70933342024-07-14 22:49:3930 hrs ago1720997379IN
0x9EfeaC25...0782C972b
0.00015 frxETH0.000000050.0013
Query70933052024-07-14 22:48:4130 hrs ago1720997321IN
0x9EfeaC25...0782C972b
0.00015 frxETH0.000000040.0012
Query70931662024-07-14 22:44:0330 hrs ago1720997043IN
0x9EfeaC25...0782C972b
0.00015 frxETH0.000000040.0012
Query70930542024-07-14 22:40:1930 hrs ago1720996819IN
0x9EfeaC25...0782C972b
0.00015 frxETH00.00010025
Query70930302024-07-14 22:39:3130 hrs ago1720996771IN
0x9EfeaC25...0782C972b
0.00015 frxETH00.00010025
Query70929452024-07-14 22:36:4130 hrs ago1720996601IN
0x9EfeaC25...0782C972b
0.00015 frxETH00.00010025
Query70710632024-07-14 10:27:1742 hrs ago1720952837IN
0x9EfeaC25...0782C972b
0.00045 frxETH00.00010025
Query70679362024-07-14 8:43:0344 hrs ago1720946583IN
0x9EfeaC25...0782C972b
0.0002 frxETH0.000000030.00100025
Query70679142024-07-14 8:42:1944 hrs ago1720946539IN
0x9EfeaC25...0782C972b
0.0005 frxETH0.000000030.00100025
Query70508242024-07-13 23:12:392 days ago1720912359IN
0x9EfeaC25...0782C972b
0.0005 frxETH00.00010025
Query70506962024-07-13 23:08:232 days ago1720912103IN
0x9EfeaC25...0782C972b
0.0003 frxETH00.00010025
Query70364972024-07-13 15:15:052 days ago1720883705IN
0x9EfeaC25...0782C972b
0.00045 frxETH0.000000050.0013
Query70364902024-07-13 15:14:512 days ago1720883691IN
0x9EfeaC25...0782C972b
0.00045 frxETH0.000000050.0013
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
71245492024-07-15 16:10:0913 hrs ago1721059809
0x9EfeaC25...0782C972b
0.000015 frxETH
71245002024-07-15 16:08:3113 hrs ago1721059711
0x9EfeaC25...0782C972b
0.00015 frxETH
71244582024-07-15 16:07:0713 hrs ago1721059627
0x9EfeaC25...0782C972b
0.0004511 frxETH
71243592024-07-15 16:03:4913 hrs ago1721059429
0x9EfeaC25...0782C972b
0.00015 frxETH
71243012024-07-15 16:01:5313 hrs ago1721059313
0x9EfeaC25...0782C972b
0.0005 frxETH
71241912024-07-15 15:58:1313 hrs ago1721059093
0x9EfeaC25...0782C972b
0.00045 frxETH
71241912024-07-15 15:58:1313 hrs ago1721059093
0x9EfeaC25...0782C972b
0.00045 frxETH
71241912024-07-15 15:58:1313 hrs ago1721059093
0x9EfeaC25...0782C972b
0.00045 frxETH
71240612024-07-15 15:53:5313 hrs ago1721058833
0x9EfeaC25...0782C972b
0.00045 frxETH
71240462024-07-15 15:53:2313 hrs ago1721058803
0x9EfeaC25...0782C972b
0.00045 frxETH
71003902024-07-15 2:44:5126 hrs ago1721011491
0x9EfeaC25...0782C972b
0.00045 frxETH
70933342024-07-14 22:49:3930 hrs ago1720997379
0x9EfeaC25...0782C972b
0.00015 frxETH
70933052024-07-14 22:48:4130 hrs ago1720997321
0x9EfeaC25...0782C972b
0.00015 frxETH
70931662024-07-14 22:44:0330 hrs ago1720997043
0x9EfeaC25...0782C972b
0.00015 frxETH
70930542024-07-14 22:40:1930 hrs ago1720996819
0x9EfeaC25...0782C972b
0.00015 frxETH
70930302024-07-14 22:39:3130 hrs ago1720996771
0x9EfeaC25...0782C972b
0.00015 frxETH
70929452024-07-14 22:36:4130 hrs ago1720996601
0x9EfeaC25...0782C972b
0.00015 frxETH
70710632024-07-14 10:27:1742 hrs ago1720952837
0x9EfeaC25...0782C972b
0.00045 frxETH
70679362024-07-14 8:43:0344 hrs ago1720946583
0x9EfeaC25...0782C972b
0.0002 frxETH
70679142024-07-14 8:42:1944 hrs ago1720946539
0x9EfeaC25...0782C972b
0.0005 frxETH
70508242024-07-13 23:12:392 days ago1720912359
0x9EfeaC25...0782C972b
0.0005 frxETH
70506962024-07-13 23:08:232 days ago1720912103
0x9EfeaC25...0782C972b
0.0003 frxETH
70364972024-07-13 15:15:052 days ago1720883705
0x9EfeaC25...0782C972b
0.00045 frxETH
70364902024-07-13 15:14:512 days ago1720883691
0x9EfeaC25...0782C972b
0.00045 frxETH
70364842024-07-13 15:14:392 days ago1720883679
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

[{"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.