S Price: $0.524975 (+2.68%)

Contract

0x57A694CE76eBe7A52EDb32eA5D017F2C7BBf65ad

Overview

S Balance

Sonic LogoSonic LogoSonic Logo0 S

S Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

1 Internal Transaction found.

Latest 1 internal transaction

Parent Transaction Hash Block From To
165524582025-03-28 11:37:0026 days ago1743161820  Contract Creation0 S
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
StructHash

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 200 runs

Other Settings:
london EvmVersion
File 1 of 1 : StructHash.sol
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.0;
pragma abicoder v2;

library StructHash {
    function _hash(bytes memory abiEncodedUserOrder) external pure returns (bytes32) {
        return _hash(abi.decode(abiEncodedUserOrder, (Order)));
    }

    // keccak256(
    //     "RebalanceAutoCompound(RebalanceAutoCompoundAction action)RebalanceAutoCompoundAction(int256 maxGasProportionX64,int256 feeToPrincipalRatioThresholdX64)"
    // );
    bytes32 constant RebalanceAutoCompound_TYPEHASH =
        0x35d8f787f18def78c8e6fcafa2acf783916baed9dc692c38b4e8a97c853b7477;
    struct RebalanceAutoCompound {
        RebalanceAutoCompoundAction action;
    }
    function _hash(RebalanceAutoCompound memory obj) internal pure returns (bytes32) {
        return keccak256(abi.encode(RebalanceAutoCompound_TYPEHASH, _hash(obj.action)));
    }

    // keccak256(
    //     "RebalanceAutoCompoundAction(int256 maxGasProportionX64,int256 feeToPrincipalRatioThresholdX64)"
    // );
    bytes32 constant RebalanceAutoCompoundAction_TYPEHASH =
        0x3fa522c715dd2d3373663b38d551ef7f7a5beec25a19992cd26eae7d7df39486;
    struct RebalanceAutoCompoundAction {
        int256 maxGasProportionX64;
        int256 feeToPrincipalRatioThresholdX64;
    }
    function _hash(RebalanceAutoCompoundAction memory obj) internal pure returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    RebalanceAutoCompoundAction_TYPEHASH,
                    obj.maxGasProportionX64,
                    obj.feeToPrincipalRatioThresholdX64
                )
            );
    }

    // keccak256(
    //     "TickOffsetCondition(uint32 gteTickOffset,uint32 lteTickOffset)"
    // );
    bytes32 constant TickOffsetCondition_TYPEHASH = 0x62a0ad438254a5fc08168ddf3cb49a0b3c0e730e76f4fa785b4df532bc2dafb9;
    struct TickOffsetCondition {
        uint32 gteTickOffset;
        uint32 lteTickOffset;
    }
    function _hash(TickOffsetCondition memory obj) internal pure returns (bytes32) {
        return keccak256(abi.encode(TickOffsetCondition_TYPEHASH, obj.gteTickOffset, obj.lteTickOffset));
    }

    // keccak256(
    //     "PriceOffsetCondition(uint32 baseToken,uint256 gteOffsetSqrtPriceX96,uint256 lteOffsetSqrtPriceX96)"
    // );
    bytes32 constant PriceOffsetCondition_TYPEHASH = 0xee7cf2600f91b8ddafa790dd184ce3c665f9dc116423525b336e1edac8e07e12;
    struct PriceOffsetCondition {
        uint32 baseToken;
        uint256 gteOffsetSqrtPriceX96;
        uint256 lteOffsetSqrtPriceX96;
    }
    function _hash(PriceOffsetCondition memory obj) internal pure returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    PriceOffsetCondition_TYPEHASH,
                    obj.baseToken,
                    obj.gteOffsetSqrtPriceX96,
                    obj.lteOffsetSqrtPriceX96
                )
            );
    }

    // keccak256(
    //     "TokenRatioCondition(int256 lteToken0RatioX64,int256 gteToken0RatioX64)"
    // );
    bytes32 constant TokenRatioCondition_TYPEHASH = 0x45ae7b1ead003f850829121834fe562edded567cc66a42e8315561c98a7735f9;
    struct TokenRatioCondition {
        int256 lteToken0RatioX64;
        int256 gteToken0RatioX64;
    }
    function _hash(TokenRatioCondition memory obj) internal pure returns (bytes32) {
        return keccak256(abi.encode(TokenRatioCondition_TYPEHASH, obj.lteToken0RatioX64, obj.gteToken0RatioX64));
    }

    // keccak256(
    //     "Condition(string type,int160 sqrtPriceX96,int64 timeBuffer,TickOffsetCondition tickOffsetCondition,PriceOffsetCondition priceOffsetCondition,TokenRatioCondition tokenRatioCondition)PriceOffsetCondition(uint32 baseToken,uint256 gteOffsetSqrtPriceX96,uint256 lteOffsetSqrtPriceX96)TickOffsetCondition(uint32 gteTickOffset,uint32 lteTickOffset)TokenRatioCondition(int256 lteToken0RatioX64,int256 gteToken0RatioX64)"
    // );
    bytes32 constant Condition_TYPEHASH = 0xaf36b8bda8212b5328e48351dce631ba51b3a66e23916e5bb6bbd603d2d06f08;
    struct Condition {
        string _type;
        int160 sqrtPriceX96;
        int64 timeBuffer;
        TickOffsetCondition tickOffsetCondition;
        PriceOffsetCondition priceOffsetCondition;
        TokenRatioCondition tokenRatioCondition;
    }
    function _hash(Condition memory obj) internal pure returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    Condition_TYPEHASH,
                    keccak256(bytes(obj._type)),
                    obj.sqrtPriceX96,
                    obj.timeBuffer,
                    _hash(obj.tickOffsetCondition),
                    _hash(obj.priceOffsetCondition),
                    _hash(obj.tokenRatioCondition)
                )
            );
    }

    // keccak256(
    //     "TickOffsetAction(uint32 tickLowerOffset,uint32 tickUpperOffset)"
    // );
    bytes32 constant TickOffsetAction_TYPEHASH = 0xf5f25bd65589108507b815014b323a5f159027eba9a477039a198a5f7fc368fc;
    struct TickOffsetAction {
        uint32 tickLowerOffset;
        uint32 tickUpperOffset;
    }
    function _hash(TickOffsetAction memory obj) internal pure returns (bytes32) {
        return keccak256(abi.encode(TickOffsetAction_TYPEHASH, obj.tickLowerOffset, obj.tickUpperOffset));
    }

    // keccak256(
    //     "PriceOffsetAction(uint32 baseToken,int160 lowerOffsetSqrtPriceX96,int160 upperOffsetSqrtPriceX96)"
    // );
    bytes32 constant PriceOffsetAction_TYPEHASH = 0x0a6de33fb4ce9e036ea5aa72e73288d926400e8cc438f63c7c1c84b392c5801c;
    struct PriceOffsetAction {
        uint32 baseToken;
        int160 lowerOffsetSqrtPriceX96;
        int160 upperOffsetSqrtPriceX96;
    }
    function _hash(PriceOffsetAction memory obj) internal pure returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    PriceOffsetAction_TYPEHASH,
                    obj.baseToken,
                    obj.lowerOffsetSqrtPriceX96,
                    obj.upperOffsetSqrtPriceX96
                )
            );
    }

    // keccak256(
    //     "TokenRatioAction(uint32 tickWidth,int256 token0RatioX64)"
    // );
    bytes32 constant TokenRatioAction_TYPEHASH = 0x2d91584261cab64f66268846e106be0b9e325f19b0457d3be9790bff2e4d9259;
    struct TokenRatioAction {
        uint32 tickWidth;
        int256 token0RatioX64;
    }
    function _hash(TokenRatioAction memory obj) internal pure returns (bytes32) {
        return keccak256(abi.encode(TokenRatioAction_TYPEHASH, obj.tickWidth, obj.token0RatioX64));
    }

    // keccak256(
    //     "RebalanceAction(int256 maxGasProportionX64,int256 swapSlippageX64,int256 liquiditySlippageX64,string type,TickOffsetAction tickOffsetAction,PriceOffsetAction priceOffsetAction,TokenRatioAction tokenRatioAction)PriceOffsetAction(uint32 baseToken,int160 lowerOffsetSqrtPriceX96,int160 upperOffsetSqrtPriceX96)TickOffsetAction(uint32 tickLowerOffset,uint32 tickUpperOffset)TokenRatioAction(uint32 tickWidth,int256 token0RatioX64)"
    // );
    bytes32 constant RebalanceAction_TYPEHASH = 0xe862ada4db7ad1d390d5445cf9eae9093553a68a1c33bdc043a9b9868c555579;
    struct RebalanceAction {
        int256 maxGasProportionX64;
        int256 swapSlippageX64;
        int256 liquiditySlippageX64;
        string _type;
        TickOffsetAction tickOffsetAction;
        PriceOffsetAction priceOffsetAction;
        TokenRatioAction tokenRatioAction;
    }
    function _hash(RebalanceAction memory obj) internal pure returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    RebalanceAction_TYPEHASH,
                    obj.maxGasProportionX64,
                    obj.swapSlippageX64,
                    obj.liquiditySlippageX64,
                    keccak256(bytes(obj._type)),
                    _hash(obj.tickOffsetAction),
                    _hash(obj.priceOffsetAction),
                    _hash(obj.tokenRatioAction)
                )
            );
    }

    // keccak256(
    //     "RebalanceConfig(Condition rebalanceCondition,RebalanceAction rebalanceAction,RebalanceAutoCompound autoCompound,bool recurring)Condition(string type,int160 sqrtPriceX96,int64 timeBuffer,TickOffsetCondition tickOffsetCondition,PriceOffsetCondition priceOffsetCondition,TokenRatioCondition tokenRatioCondition)PriceOffsetAction(uint32 baseToken,int160 lowerOffsetSqrtPriceX96,int160 upperOffsetSqrtPriceX96)PriceOffsetCondition(uint32 baseToken,uint256 gteOffsetSqrtPriceX96,uint256 lteOffsetSqrtPriceX96)RebalanceAction(int256 maxGasProportionX64,int256 swapSlippageX64,int256 liquiditySlippageX64,string type,TickOffsetAction tickOffsetAction,PriceOffsetAction priceOffsetAction,TokenRatioAction tokenRatioAction)RebalanceAutoCompound(RebalanceAutoCompoundAction action)RebalanceAutoCompoundAction(int256 maxGasProportionX64,int256 feeToPrincipalRatioThresholdX64)TickOffsetAction(uint32 tickLowerOffset,uint32 tickUpperOffset)TickOffsetCondition(uint32 gteTickOffset,uint32 lteTickOffset)TokenRatioAction(uint32 tickWidth,int256 token0RatioX64)TokenRatioCondition(int256 lteToken0RatioX64,int256 gteToken0RatioX64)"
    // );
    bytes32 constant RebalanceConfig_TYPEHASH = 0xa595ef3200e4f62a94e521635728388988c00fa41a2fe6662a35a989b84c8507;
    struct RebalanceConfig {
        Condition rebalanceCondition;
        RebalanceAction rebalanceAction;
        RebalanceAutoCompound autoCompound;
        bool recurring;
    }
    function _hash(RebalanceConfig memory obj) internal pure returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    RebalanceConfig_TYPEHASH,
                    _hash(obj.rebalanceCondition),
                    _hash(obj.rebalanceAction),
                    _hash(obj.autoCompound),
                    obj.recurring
                )
            );
    }

    // keccak256(
    //     "RangeOrderCondition(bool zeroToOne,int32 gteTickAbsolute,int32 lteTickAbsolute)"
    // );
    bytes32 constant RangeOrderCondition_TYPEHASH = 0xb6800e34595dae872617c5005f10a6a9e2b6a2520654db474bf4750fdd70a0c8;
    struct RangeOrderCondition {
        bool zeroToOne;
        int32 gteTickAbsolute;
        int32 lteTickAbsolute;
    }
    function _hash(RangeOrderCondition memory obj) internal pure returns (bytes32) {
        return
            keccak256(
                abi.encode(RangeOrderCondition_TYPEHASH, obj.zeroToOne, obj.gteTickAbsolute, obj.lteTickAbsolute)
            );
    }

    // keccak256(
    //     "RangeOrderAction(int256 maxGasProportionX64,int256 swapSlippageX64,int256 withdrawSlippageX64)"
    // );
    bytes32 constant RangeOrderAction_TYPEHASH = 0xf512215c27c5930c08d4f9d3f8d89d9b5735fb786bebf2231b3e88df5c4015d9;
    struct RangeOrderAction {
        int256 maxGasProportionX64;
        int256 swapSlippageX64;
        int256 withdrawSlippageX64;
    }
    function _hash(RangeOrderAction memory obj) internal pure returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    RangeOrderAction_TYPEHASH,
                    obj.maxGasProportionX64,
                    obj.swapSlippageX64,
                    obj.withdrawSlippageX64
                )
            );
    }

    // keccak256(
    //     "RangeOrderConfig(RangeOrderCondition condition,RangeOrderAction action)RangeOrderAction(int256 maxGasProportionX64,int256 swapSlippageX64,int256 withdrawSlippageX64)RangeOrderCondition(bool zeroToOne,int32 gteTickAbsolute,int32 lteTickAbsolute)"
    // );
    bytes32 constant RangeOrderConfig_TYPEHASH = 0x896dec1198540e9a29dda867832b7bb119f2cec50527c0f5ee63ef305b0f539a;
    struct RangeOrderConfig {
        RangeOrderCondition condition;
        RangeOrderAction action;
    }
    function _hash(RangeOrderConfig memory obj) internal pure returns (bytes32) {
        return keccak256(abi.encode(RangeOrderConfig_TYPEHASH, _hash(obj.condition), _hash(obj.action)));
    }

    // keccak256(
    //     "FeeBasedCondition(int256 minFeeEarnedUsdX64)"
    // );
    bytes32 constant FeeBasedCondition_TYPEHASH = 0x0db5bdb29ccc0083eec5fc69273aba7a8fa98c12cb39bfa1377ade34a3b76e41;
    struct FeeBasedCondition {
        int256 minFeeEarnedUsdX64;
    }
    function _hash(FeeBasedCondition memory obj) internal pure returns (bytes32) {
        return keccak256(abi.encode(FeeBasedCondition_TYPEHASH, obj.minFeeEarnedUsdX64));
    }

    // keccak256(
    //     "TimeBasedCondition(int256 intervalInSecond)"
    // );
    bytes32 constant TimeBasedCondition_TYPEHASH = 0xf75b2fc8dbd0e2a1eccdee6280f192941a296b909b47921d1a7c7cfd48993252;
    struct TimeBasedCondition {
        int256 intervalInSecond;
    }
    function _hash(TimeBasedCondition memory obj) internal pure returns (bytes32) {
        return keccak256(abi.encode(TimeBasedCondition_TYPEHASH, obj.intervalInSecond));
    }

    // keccak256(
    //     "AutoCompoundCondition(string type,FeeBasedCondition feeBasedCondition,TimeBasedCondition timeBasedCondition)FeeBasedCondition(int256 minFeeEarnedUsdX64)TimeBasedCondition(int256 intervalInSecond)"
    // );
    bytes32 constant AutoCompoundCondition_TYPEHASH =
        0x8077238253cf3aae9fc43bae69ede107dc9ecfe05cc3947a0cac4f94212a6223;
    struct AutoCompoundCondition {
        string _type;
        FeeBasedCondition feeBasedCondition;
        TimeBasedCondition timeBasedCondition;
    }
    function _hash(AutoCompoundCondition memory obj) internal pure returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    AutoCompoundCondition_TYPEHASH,
                    keccak256(bytes(obj._type)),
                    _hash(obj.feeBasedCondition),
                    _hash(obj.timeBasedCondition)
                )
            );
    }

    // keccak256(
    //     "AutoCompoundAction(int256 maxGasProportionX64,int256 poolSlippageX64,int256 swapSlippageX64)"
    // );
    bytes32 constant AutoCompoundAction_TYPEHASH = 0xe17b1ff10b4c0a0b457f201ae45a54a25ec9d424f9f0e068502ea1eab65d6e0e;
    struct AutoCompoundAction {
        int256 maxGasProportionX64;
        int256 poolSlippageX64;
        int256 swapSlippageX64;
    }
    function _hash(AutoCompoundAction memory obj) internal pure returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    AutoCompoundAction_TYPEHASH,
                    obj.maxGasProportionX64,
                    obj.poolSlippageX64,
                    obj.swapSlippageX64
                )
            );
    }

    // keccak256(
    //     "AutoCompoundConfig(AutoCompoundCondition condition,AutoCompoundAction action)AutoCompoundAction(int256 maxGasProportionX64,int256 poolSlippageX64,int256 swapSlippageX64)AutoCompoundCondition(string type,FeeBasedCondition feeBasedCondition,TimeBasedCondition timeBasedCondition)FeeBasedCondition(int256 minFeeEarnedUsdX64)TimeBasedCondition(int256 intervalInSecond)"
    // );
    bytes32 constant AutoCompoundConfig_TYPEHASH = 0xbf8ab0c4189cfff5a6148a64201555fddbb74f69f3c9ed9673c79357a2c77217;
    struct AutoCompoundConfig {
        AutoCompoundCondition condition;
        AutoCompoundAction action;
    }
    function _hash(AutoCompoundConfig memory obj) internal pure returns (bytes32) {
        return keccak256(abi.encode(AutoCompoundConfig_TYPEHASH, _hash(obj.condition), _hash(obj.action)));
    }

    // keccak256(
    //     "AutoExitConfig(Condition condition,AutoExitAction action)AutoExitAction(int256 maxGasProportionX64,int256 swapSlippageX64,int256 liquiditySlippageX64,address tokenOutAddress)Condition(string type,int160 sqrtPriceX96,int64 timeBuffer,TickOffsetCondition tickOffsetCondition,PriceOffsetCondition priceOffsetCondition,TokenRatioCondition tokenRatioCondition)PriceOffsetCondition(uint32 baseToken,uint256 gteOffsetSqrtPriceX96,uint256 lteOffsetSqrtPriceX96)TickOffsetCondition(uint32 gteTickOffset,uint32 lteTickOffset)TokenRatioCondition(int256 lteToken0RatioX64,int256 gteToken0RatioX64)"
    // );
    bytes32 constant AutoExitConfig_TYPEHASH = 0x12abd614ffecf2dd5f160268162f92b4228cb34287cce8936339e98be3db7a86;
    struct AutoExitConfig {
        Condition condition;
        AutoExitAction action;
    }
    function _hash(AutoExitConfig memory obj) internal pure returns (bytes32) {
        return keccak256(abi.encode(AutoExitConfig_TYPEHASH, _hash(obj.condition), _hash(obj.action)));
    }

    // keccak256(
    //     "AutoExitAction(int256 maxGasProportionX64,int256 swapSlippageX64,int256 liquiditySlippageX64,address tokenOutAddress)"
    // );
    bytes32 constant AutoExitAction_TYPEHASH = 0x335b4a1f07e5a10cc856257ff4116d238ebc816eb0189c48ede23eab0ba1b164;
    struct AutoExitAction {
        int256 maxGasProportionX64;
        int256 swapSlippageX64;
        int256 liquiditySlippageX64;
        address tokenOutAddress;
    }
    function _hash(AutoExitAction memory obj) internal pure returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    AutoExitAction_TYPEHASH,
                    obj.maxGasProportionX64,
                    obj.swapSlippageX64,
                    obj.liquiditySlippageX64,
                    obj.tokenOutAddress
                )
            );
    }

    // keccak256(
    //     "OrderConfig(RebalanceConfig rebalanceConfig,RangeOrderConfig rangeOrderConfig,AutoCompoundConfig autoCompoundConfig,AutoExitConfig autoExitConfig)AutoCompoundAction(int256 maxGasProportionX64,int256 poolSlippageX64,int256 swapSlippageX64)AutoCompoundCondition(string type,FeeBasedCondition feeBasedCondition,TimeBasedCondition timeBasedCondition)AutoCompoundConfig(AutoCompoundCondition condition,AutoCompoundAction action)AutoExitAction(int256 maxGasProportionX64,int256 swapSlippageX64,int256 liquiditySlippageX64,address tokenOutAddress)AutoExitConfig(Condition condition,AutoExitAction action)Condition(string type,int160 sqrtPriceX96,int64 timeBuffer,TickOffsetCondition tickOffsetCondition,PriceOffsetCondition priceOffsetCondition,TokenRatioCondition tokenRatioCondition)FeeBasedCondition(int256 minFeeEarnedUsdX64)PriceOffsetAction(uint32 baseToken,int160 lowerOffsetSqrtPriceX96,int160 upperOffsetSqrtPriceX96)PriceOffsetCondition(uint32 baseToken,uint256 gteOffsetSqrtPriceX96,uint256 lteOffsetSqrtPriceX96)RangeOrderAction(int256 maxGasProportionX64,int256 swapSlippageX64,int256 withdrawSlippageX64)RangeOrderCondition(bool zeroToOne,int32 gteTickAbsolute,int32 lteTickAbsolute)RangeOrderConfig(RangeOrderCondition condition,RangeOrderAction action)RebalanceAction(int256 maxGasProportionX64,int256 swapSlippageX64,int256 liquiditySlippageX64,string type,TickOffsetAction tickOffsetAction,PriceOffsetAction priceOffsetAction,TokenRatioAction tokenRatioAction)RebalanceAutoCompound(RebalanceAutoCompoundAction action)RebalanceAutoCompoundAction(int256 maxGasProportionX64,int256 feeToPrincipalRatioThresholdX64)RebalanceConfig(Condition rebalanceCondition,RebalanceAction rebalanceAction,RebalanceAutoCompound autoCompound,bool recurring)TickOffsetAction(uint32 tickLowerOffset,uint32 tickUpperOffset)TickOffsetCondition(uint32 gteTickOffset,uint32 lteTickOffset)TimeBasedCondition(int256 intervalInSecond)TokenRatioAction(uint32 tickWidth,int256 token0RatioX64)TokenRatioCondition(int256 lteToken0RatioX64,int256 gteToken0RatioX64)"
    // );
    bytes32 constant OrderConfig_TYPEHASH = 0x5697d3035f19beb9868f849a8299e5c537a4c0359a4de82d07077a2bb857f3bf;
    struct OrderConfig {
        RebalanceConfig rebalanceConfig;
        RangeOrderConfig rangeOrderConfig;
        AutoCompoundConfig autoCompoundConfig;
        AutoExitConfig autoExitConfig;
    }
    function _hash(OrderConfig memory obj) internal pure returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    OrderConfig_TYPEHASH,
                    _hash(obj.rebalanceConfig),
                    _hash(obj.rangeOrderConfig),
                    _hash(obj.autoCompoundConfig),
                    _hash(obj.autoExitConfig)
                )
            );
    }

    // keccak256(
    //     "Order(int64 chainId,address nfpmAddress,uint256 tokenId,string orderType,OrderConfig config,int64 signatureTime)AutoCompoundAction(int256 maxGasProportionX64,int256 poolSlippageX64,int256 swapSlippageX64)AutoCompoundCondition(string type,FeeBasedCondition feeBasedCondition,TimeBasedCondition timeBasedCondition)AutoCompoundConfig(AutoCompoundCondition condition,AutoCompoundAction action)AutoExitAction(int256 maxGasProportionX64,int256 swapSlippageX64,int256 liquiditySlippageX64,address tokenOutAddress)AutoExitConfig(Condition condition,AutoExitAction action)Condition(string type,int160 sqrtPriceX96,int64 timeBuffer,TickOffsetCondition tickOffsetCondition,PriceOffsetCondition priceOffsetCondition,TokenRatioCondition tokenRatioCondition)FeeBasedCondition(int256 minFeeEarnedUsdX64)OrderConfig(RebalanceConfig rebalanceConfig,RangeOrderConfig rangeOrderConfig,AutoCompoundConfig autoCompoundConfig,AutoExitConfig autoExitConfig)PriceOffsetAction(uint32 baseToken,int160 lowerOffsetSqrtPriceX96,int160 upperOffsetSqrtPriceX96)PriceOffsetCondition(uint32 baseToken,uint256 gteOffsetSqrtPriceX96,uint256 lteOffsetSqrtPriceX96)RangeOrderAction(int256 maxGasProportionX64,int256 swapSlippageX64,int256 withdrawSlippageX64)RangeOrderCondition(bool zeroToOne,int32 gteTickAbsolute,int32 lteTickAbsolute)RangeOrderConfig(RangeOrderCondition condition,RangeOrderAction action)RebalanceAction(int256 maxGasProportionX64,int256 swapSlippageX64,int256 liquiditySlippageX64,string type,TickOffsetAction tickOffsetAction,PriceOffsetAction priceOffsetAction,TokenRatioAction tokenRatioAction)RebalanceAutoCompound(RebalanceAutoCompoundAction action)RebalanceAutoCompoundAction(int256 maxGasProportionX64,int256 feeToPrincipalRatioThresholdX64)RebalanceConfig(Condition rebalanceCondition,RebalanceAction rebalanceAction,RebalanceAutoCompound autoCompound,bool recurring)TickOffsetAction(uint32 tickLowerOffset,uint32 tickUpperOffset)TickOffsetCondition(uint32 gteTickOffset,uint32 lteTickOffset)TimeBasedCondition(int256 intervalInSecond)TokenRatioAction(uint32 tickWidth,int256 token0RatioX64)TokenRatioCondition(int256 lteToken0RatioX64,int256 gteToken0RatioX64)"
    // );
    bytes32 constant Order_TYPEHASH = 0xe90c3305b073b571e7a0d9f03c551c07c8a7b94927ec80f7a2a5e4282b2153fa;
    struct Order {
        int64 chainId;
        address nfpmAddress;
        uint256 tokenId;
        string orderType;
        OrderConfig config;
        int64 signatureTime;
    }
    function _hash(Order memory obj) internal pure returns (bytes32) {
        return
            keccak256(
                abi.encode(
                    Order_TYPEHASH,
                    obj.chainId,
                    obj.nfpmAddress,
                    obj.tokenId,
                    keccak256(bytes(obj.orderType)),
                    _hash(obj.config),
                    obj.signatureTime
                )
            );
    }
}

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

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"bytes","name":"abiEncodedUserOrder","type":"bytes"}],"name":"_hash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"}]

61129061003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c806389b029f71461003a575b600080fd5b61004d610048366004610a94565b61005f565b60405190815260200160405180910390f35b600061007d82806020019051810190610078919061118d565b610083565b92915050565b60007fe90c3305b073b571e7a0d9f03c551c07c8a7b94927ec80f7a2a5e4282b2153fa60001b8260000151836020015184604001518560600151805190602001206100d18760800151610136565b60a080890151604080516020810199909952600797880b908901526001600160a01b03909516606088015260808701939093529185015260c0840152900b60e0820152610100015b604051602081830303815290604052805190602001209050919050565b80516000907f5697d3035f19beb9868f849a8299e5c537a4c0359a4de82d07077a2bb857f3bf90610166906101b9565b6101738460200151610235565b6101808560400151610291565b61018d86606001516102ce565b6040805160208101969096528501939093526060840191909152608083015260a082015260c001610119565b80516000907fa595ef3200e4f62a94e521635728388988c00fa41a2fe6662a35a989b84c8507906101e99061030b565b6101f684602001516103ae565b6102038560400151610456565b6060808701516040805160208101979097528601949094528401919091526080830152151560a082015260c001610119565b80516000907f896dec1198540e9a29dda867832b7bb119f2cec50527c0f5ee63ef305b0f539a906102659061049d565b61027284602001516104fa565b6040805160208101949094528301919091526060820152608001610119565b80516000907fbf8ab0c4189cfff5a6148a64201555fddbb74f69f3c9ed9673c79357a2c77217906102c190610551565b61027284602001516105c1565b80516000907f12abd614ffecf2dd5f160268162f92b4228cb34287cce8936339e98be3db7a86906102fe9061030b565b6102728460200151610618565b60007faf36b8bda8212b5328e48351dce631ba51b3a66e23916e5bb6bbd603d2d06f0860001b826000015180519060200120836020015184604001516103548660600151610688565b61036187608001516106db565b61036e8860a00151610737565b60408051602081019890985287019590955260139390930b606086015260079190910b608085015260a084015260c083015260e082015261010001610119565b60007fe862ada4db7ad1d390d5445cf9eae9093553a68a1c33bdc043a9b9868c55557960001b8260000151836020015184604001518560600151805190602001206103fc8760800151610784565b6104098860a001516107d7565b6104168960c00151610839565b6040805160208101999099528801969096526060870194909452608086019290925260a085015260c084015260e083015261010082015261012001610119565b80516000907f35d8f787f18def78c8e6fcafa2acf783916baed9dc692c38b4e8a97c853b7477906104869061088c565b604080516020810193909352820152606001610119565b805160208083015160408085015181517fb6800e34595dae872617c5005f10a6a9e2b6a2520654db474bf4750fdd70a0c89481019490945293151590830152600390810b60608301529190910b608082015260009060a001610119565b805160208083015160408085015181517ff512215c27c5930c08d4f9d3f8d89d9b5735fb786bebf2231b3e88df5c4015d994810194909452908301939093526060820152608081019190915260009060a001610119565b60007f8077238253cf3aae9fc43bae69ede107dc9ecfe05cc3947a0cac4f94212a622360001b82600001518051906020012061059084602001516108d9565b61059d8560400151610917565b6040805160208101959095528401929092526060830152608082015260a001610119565b805160208083015160408085015181517fe17b1ff10b4c0a0b457f201ae45a54a25ec9d424f9f0e068502ea1eab65d6e0e94810194909452908301939093526060820152608081019190915260009060a001610119565b805160208083015160408085015160608601519151600095610119957f335b4a1f07e5a10cc856257ff4116d238ebc816eb0189c48ede23eab0ba1b164959194919392019485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b8051602080830151604051600093610119937f62a0ad438254a5fc08168ddf3cb49a0b3c0e730e76f4fa785b4df532bc2dafb99391920192835263ffffffff918216602084015216604082015260600190565b805160208083015160408085015181517fee7cf2600f91b8ddafa790dd184ce3c665f9dc116423525b336e1edac8e07e129481019490945263ffffffff909416908301526060820152608081019190915260009060a001610119565b8051602080830151604051600093610119937f45ae7b1ead003f850829121834fe562edded567cc66a42e8315561c98a7735f9939192019283526020830191909152604082015260600190565b8051602080830151604051600093610119937ff5f25bd65589108507b815014b323a5f159027eba9a477039a198a5f7fc368fc9391920192835263ffffffff918216602084015216604082015260600190565b805160208083015160408085015181517f0a6de33fb4ce9e036ea5aa72e73288d926400e8cc438f63c7c1c84b392c5801c9481019490945263ffffffff90941690830152601390810b60608301529190910b608082015260009060a001610119565b8051602080830151604051600093610119937f2d91584261cab64f66268846e106be0b9e325f19b0457d3be9790bff2e4d92599391920192835263ffffffff919091166020830152604082015260600190565b8051602080830151604051600093610119937f3fa522c715dd2d3373663b38d551ef7f7a5beec25a19992cd26eae7d7df39486939192019283526020830191909152604082015260600190565b8051604080517f0db5bdb29ccc0083eec5fc69273aba7a8fa98c12cb39bfa1377ade34a3b76e41602082015290810191909152600090606001610119565b8051604080517ff75b2fc8dbd0e2a1eccdee6280f192941a296b909b47921d1a7c7cfd48993252602082015290810191909152600090606001610119565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561098d5761098d610955565b60405290565b60405160c081016001600160401b038111828210171561098d5761098d610955565b604051606081016001600160401b038111828210171561098d5761098d610955565b604051602081016001600160401b038111828210171561098d5761098d610955565b604051608081016001600160401b038111828210171561098d5761098d610955565b60405160e081016001600160401b038111828210171561098d5761098d610955565b604051601f8201601f191681016001600160401b0381118282101715610a6557610a65610955565b604052919050565b60006001600160401b03821115610a8657610a86610955565b50601f01601f191660200190565b600060208284031215610aa657600080fd5b81356001600160401b03811115610abc57600080fd5b8201601f81018413610acd57600080fd5b8035610ae0610adb82610a6d565b610a3d565b818152856020838501011115610af557600080fd5b81602084016020830137600091810160200191909152949350505050565b8051600781900b8114610b2557600080fd5b919050565b80516001600160a01b0381168114610b2557600080fd5b600082601f830112610b5257600080fd5b8151610b60610adb82610a6d565b81815260208581848701011115610b7657600080fd5b60005b83811015610b94578581018201518382018301528101610b79565b83811115610ba55760008285850101525b509095945050505050565b8051601381900b8114610b2557600080fd5b805163ffffffff81168114610b2557600080fd5b600060408284031215610be857600080fd5b610bf061096b565b9050610bfb82610bc2565b8152610c0960208301610bc2565b602082015292915050565b600060408284031215610c2657600080fd5b610c2e61096b565b9050815181526020820151602082015292915050565b6000818303610140811215610c5857600080fd5b610c60610993565b915082516001600160401b03811115610c7857600080fd5b610c8485828601610b41565b835250610c9360208401610bb0565b6020830152610ca460408401610b13565b6040830152610cb68460608501610bd6565b60608301526060609f1982011215610ccd57600080fd5b50610cd66109b5565b610ce260a08401610bc2565b815260c0830151602082015260e083015160408201526080820152610d0b836101008401610c14565b60a082015292915050565b600060608284031215610d2857600080fd5b610d306109b5565b9050610d3b82610bc2565b8152610d4960208301610bb0565b6020820152610d5a60408301610bb0565b604082015292915050565b600060408284031215610d7757600080fd5b610d7f61096b565b9050610d8a82610bc2565b81526020820151602082015292915050565b600060408284031215610dae57600080fd5b610db66109d7565b9050610dc28383610c14565b815292915050565b80518015158114610b2557600080fd5b8051600381900b8114610b2557600080fd5b600060608284031215610dfe57600080fd5b610e066109b5565b905081518152602082015160208201526040820151604082015292915050565b600081830360c0811215610e3957600080fd5b610e4161096b565b91506060811215610e5157600080fd5b50610e5a6109b5565b610e6383610dca565b8152610e7160208401610dda565b6020820152610e8260408401610dda565b60408201528152610c098360608401610dec565b600060208284031215610ea857600080fd5b610eb06109d7565b9151825250919050565b600060808284031215610ecc57600080fd5b610ed461096b565b905081516001600160401b0380821115610eed57600080fd5b9083019060608286031215610f0157600080fd5b610f096109b5565b825182811115610f1857600080fd5b610f2487828601610b41565b825250610f348660208501610e96565b6020820152610f468660408501610e96565b6040820152835250610c0990508360208401610dec565b600081830360a0811215610f7057600080fd5b610f7861096b565b915082516001600160401b03811115610f9057600080fd5b610f9c85828601610c44565b8352506080601f1982011215610fb157600080fd5b50610fba6109f9565b602083015181526040830151602082015260608301516040820152610fe160808401610b2a565b6060820152602082015292915050565b600061012080838503121561100557600080fd5b61100d6109f9565b915082516001600160401b038082111561102657600080fd5b9084019060a0828703121561103a57600080fd5b6110426109f9565b82518281111561105157600080fd5b61105d88828601610c44565b8252506020808401518381111561107357600080fd5b8401610160818a03121561108657600080fd5b61108e610a1b565b815181528282015183820152604082015160408201526060820151858111156110b657600080fd5b6110c28b828501610b41565b6060830152506110d58a60808401610bd6565b60808201526110e78a60c08401610d16565b60a08201526110f88a888401610d65565b60c0820152838301525061110f8860408601610d9c565b604083015261112060808501610dca565b606083015281865261113488828901610e26565b908601525060e085015192508083111561114d57600080fd5b61115986848701610eba565b604085015261010085015192508083111561117357600080fd5b505061118184828501610f5d565b60608301525092915050565b60006020828403121561119f57600080fd5b81516001600160401b03808211156111b657600080fd5b9083019060c082860312156111ca57600080fd5b6111d2610993565b6111db83610b13565b81526111e960208401610b2a565b60208201526040830151604082015260608301518281111561120a57600080fd5b61121687828601610b41565b60608301525060808301518281111561122e57600080fd5b61123a87828601610ff1565b60808301525061124c60a08401610b13565b60a08201529594505050505056fea2646970667358221220d79f0308754155e33fc7b263dab9957121689402929ef14d285b6e248199d1a164736f6c634300080f0033

Deployed Bytecode

0x7357a694ce76ebe7a52edb32ea5d017f2c7bbf65ad30146080604052600436106100355760003560e01c806389b029f71461003a575b600080fd5b61004d610048366004610a94565b61005f565b60405190815260200160405180910390f35b600061007d82806020019051810190610078919061118d565b610083565b92915050565b60007fe90c3305b073b571e7a0d9f03c551c07c8a7b94927ec80f7a2a5e4282b2153fa60001b8260000151836020015184604001518560600151805190602001206100d18760800151610136565b60a080890151604080516020810199909952600797880b908901526001600160a01b03909516606088015260808701939093529185015260c0840152900b60e0820152610100015b604051602081830303815290604052805190602001209050919050565b80516000907f5697d3035f19beb9868f849a8299e5c537a4c0359a4de82d07077a2bb857f3bf90610166906101b9565b6101738460200151610235565b6101808560400151610291565b61018d86606001516102ce565b6040805160208101969096528501939093526060840191909152608083015260a082015260c001610119565b80516000907fa595ef3200e4f62a94e521635728388988c00fa41a2fe6662a35a989b84c8507906101e99061030b565b6101f684602001516103ae565b6102038560400151610456565b6060808701516040805160208101979097528601949094528401919091526080830152151560a082015260c001610119565b80516000907f896dec1198540e9a29dda867832b7bb119f2cec50527c0f5ee63ef305b0f539a906102659061049d565b61027284602001516104fa565b6040805160208101949094528301919091526060820152608001610119565b80516000907fbf8ab0c4189cfff5a6148a64201555fddbb74f69f3c9ed9673c79357a2c77217906102c190610551565b61027284602001516105c1565b80516000907f12abd614ffecf2dd5f160268162f92b4228cb34287cce8936339e98be3db7a86906102fe9061030b565b6102728460200151610618565b60007faf36b8bda8212b5328e48351dce631ba51b3a66e23916e5bb6bbd603d2d06f0860001b826000015180519060200120836020015184604001516103548660600151610688565b61036187608001516106db565b61036e8860a00151610737565b60408051602081019890985287019590955260139390930b606086015260079190910b608085015260a084015260c083015260e082015261010001610119565b60007fe862ada4db7ad1d390d5445cf9eae9093553a68a1c33bdc043a9b9868c55557960001b8260000151836020015184604001518560600151805190602001206103fc8760800151610784565b6104098860a001516107d7565b6104168960c00151610839565b6040805160208101999099528801969096526060870194909452608086019290925260a085015260c084015260e083015261010082015261012001610119565b80516000907f35d8f787f18def78c8e6fcafa2acf783916baed9dc692c38b4e8a97c853b7477906104869061088c565b604080516020810193909352820152606001610119565b805160208083015160408085015181517fb6800e34595dae872617c5005f10a6a9e2b6a2520654db474bf4750fdd70a0c89481019490945293151590830152600390810b60608301529190910b608082015260009060a001610119565b805160208083015160408085015181517ff512215c27c5930c08d4f9d3f8d89d9b5735fb786bebf2231b3e88df5c4015d994810194909452908301939093526060820152608081019190915260009060a001610119565b60007f8077238253cf3aae9fc43bae69ede107dc9ecfe05cc3947a0cac4f94212a622360001b82600001518051906020012061059084602001516108d9565b61059d8560400151610917565b6040805160208101959095528401929092526060830152608082015260a001610119565b805160208083015160408085015181517fe17b1ff10b4c0a0b457f201ae45a54a25ec9d424f9f0e068502ea1eab65d6e0e94810194909452908301939093526060820152608081019190915260009060a001610119565b805160208083015160408085015160608601519151600095610119957f335b4a1f07e5a10cc856257ff4116d238ebc816eb0189c48ede23eab0ba1b164959194919392019485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b8051602080830151604051600093610119937f62a0ad438254a5fc08168ddf3cb49a0b3c0e730e76f4fa785b4df532bc2dafb99391920192835263ffffffff918216602084015216604082015260600190565b805160208083015160408085015181517fee7cf2600f91b8ddafa790dd184ce3c665f9dc116423525b336e1edac8e07e129481019490945263ffffffff909416908301526060820152608081019190915260009060a001610119565b8051602080830151604051600093610119937f45ae7b1ead003f850829121834fe562edded567cc66a42e8315561c98a7735f9939192019283526020830191909152604082015260600190565b8051602080830151604051600093610119937ff5f25bd65589108507b815014b323a5f159027eba9a477039a198a5f7fc368fc9391920192835263ffffffff918216602084015216604082015260600190565b805160208083015160408085015181517f0a6de33fb4ce9e036ea5aa72e73288d926400e8cc438f63c7c1c84b392c5801c9481019490945263ffffffff90941690830152601390810b60608301529190910b608082015260009060a001610119565b8051602080830151604051600093610119937f2d91584261cab64f66268846e106be0b9e325f19b0457d3be9790bff2e4d92599391920192835263ffffffff919091166020830152604082015260600190565b8051602080830151604051600093610119937f3fa522c715dd2d3373663b38d551ef7f7a5beec25a19992cd26eae7d7df39486939192019283526020830191909152604082015260600190565b8051604080517f0db5bdb29ccc0083eec5fc69273aba7a8fa98c12cb39bfa1377ade34a3b76e41602082015290810191909152600090606001610119565b8051604080517ff75b2fc8dbd0e2a1eccdee6280f192941a296b909b47921d1a7c7cfd48993252602082015290810191909152600090606001610119565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561098d5761098d610955565b60405290565b60405160c081016001600160401b038111828210171561098d5761098d610955565b604051606081016001600160401b038111828210171561098d5761098d610955565b604051602081016001600160401b038111828210171561098d5761098d610955565b604051608081016001600160401b038111828210171561098d5761098d610955565b60405160e081016001600160401b038111828210171561098d5761098d610955565b604051601f8201601f191681016001600160401b0381118282101715610a6557610a65610955565b604052919050565b60006001600160401b03821115610a8657610a86610955565b50601f01601f191660200190565b600060208284031215610aa657600080fd5b81356001600160401b03811115610abc57600080fd5b8201601f81018413610acd57600080fd5b8035610ae0610adb82610a6d565b610a3d565b818152856020838501011115610af557600080fd5b81602084016020830137600091810160200191909152949350505050565b8051600781900b8114610b2557600080fd5b919050565b80516001600160a01b0381168114610b2557600080fd5b600082601f830112610b5257600080fd5b8151610b60610adb82610a6d565b81815260208581848701011115610b7657600080fd5b60005b83811015610b94578581018201518382018301528101610b79565b83811115610ba55760008285850101525b509095945050505050565b8051601381900b8114610b2557600080fd5b805163ffffffff81168114610b2557600080fd5b600060408284031215610be857600080fd5b610bf061096b565b9050610bfb82610bc2565b8152610c0960208301610bc2565b602082015292915050565b600060408284031215610c2657600080fd5b610c2e61096b565b9050815181526020820151602082015292915050565b6000818303610140811215610c5857600080fd5b610c60610993565b915082516001600160401b03811115610c7857600080fd5b610c8485828601610b41565b835250610c9360208401610bb0565b6020830152610ca460408401610b13565b6040830152610cb68460608501610bd6565b60608301526060609f1982011215610ccd57600080fd5b50610cd66109b5565b610ce260a08401610bc2565b815260c0830151602082015260e083015160408201526080820152610d0b836101008401610c14565b60a082015292915050565b600060608284031215610d2857600080fd5b610d306109b5565b9050610d3b82610bc2565b8152610d4960208301610bb0565b6020820152610d5a60408301610bb0565b604082015292915050565b600060408284031215610d7757600080fd5b610d7f61096b565b9050610d8a82610bc2565b81526020820151602082015292915050565b600060408284031215610dae57600080fd5b610db66109d7565b9050610dc28383610c14565b815292915050565b80518015158114610b2557600080fd5b8051600381900b8114610b2557600080fd5b600060608284031215610dfe57600080fd5b610e066109b5565b905081518152602082015160208201526040820151604082015292915050565b600081830360c0811215610e3957600080fd5b610e4161096b565b91506060811215610e5157600080fd5b50610e5a6109b5565b610e6383610dca565b8152610e7160208401610dda565b6020820152610e8260408401610dda565b60408201528152610c098360608401610dec565b600060208284031215610ea857600080fd5b610eb06109d7565b9151825250919050565b600060808284031215610ecc57600080fd5b610ed461096b565b905081516001600160401b0380821115610eed57600080fd5b9083019060608286031215610f0157600080fd5b610f096109b5565b825182811115610f1857600080fd5b610f2487828601610b41565b825250610f348660208501610e96565b6020820152610f468660408501610e96565b6040820152835250610c0990508360208401610dec565b600081830360a0811215610f7057600080fd5b610f7861096b565b915082516001600160401b03811115610f9057600080fd5b610f9c85828601610c44565b8352506080601f1982011215610fb157600080fd5b50610fba6109f9565b602083015181526040830151602082015260608301516040820152610fe160808401610b2a565b6060820152602082015292915050565b600061012080838503121561100557600080fd5b61100d6109f9565b915082516001600160401b038082111561102657600080fd5b9084019060a0828703121561103a57600080fd5b6110426109f9565b82518281111561105157600080fd5b61105d88828601610c44565b8252506020808401518381111561107357600080fd5b8401610160818a03121561108657600080fd5b61108e610a1b565b815181528282015183820152604082015160408201526060820151858111156110b657600080fd5b6110c28b828501610b41565b6060830152506110d58a60808401610bd6565b60808201526110e78a60c08401610d16565b60a08201526110f88a888401610d65565b60c0820152838301525061110f8860408601610d9c565b604083015261112060808501610dca565b606083015281865261113488828901610e26565b908601525060e085015192508083111561114d57600080fd5b61115986848701610eba565b604085015261010085015192508083111561117357600080fd5b505061118184828501610f5d565b60608301525092915050565b60006020828403121561119f57600080fd5b81516001600160401b03808211156111b657600080fd5b9083019060c082860312156111ca57600080fd5b6111d2610993565b6111db83610b13565b81526111e960208401610b2a565b60208201526040830151604082015260608301518281111561120a57600080fd5b61121687828601610b41565b60608301525060808301518281111561122e57600080fd5b61123a87828601610ff1565b60808301525061124c60a08401610b13565b60a08201529594505050505056fea2646970667358221220d79f0308754155e33fc7b263dab9957121689402929ef14d285b6e248199d1a164736f6c634300080f0033

Block Transaction 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  ]

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.