Module brontes_classifier::ZeroXInterface

source ·
Expand description

Generated by the following Solidity interface…

interface ZeroXInterface {
    type MultiplexSubcall is uint8;
    type OrderStatus is uint8;
    type ProtocolFork is uint8;
    type SignatureType is uint8;
    type TradeDirection is uint8;
    struct BatchSellParams {
        address inputToken;
        address outputToken;
        uint256 sellAmount;
        BatchSellSubcall[] calls;
        bool useSelfBalance;
        address recipient;
        address payer;
    }
    struct BatchSellSubcall {
        MultiplexSubcall id;
        uint256 sellAmount;
        bytes data;
    }
    struct ERC1155Order {
        TradeDirection direction;
        address maker;
        address taker;
        uint256 expiry;
        uint256 nonce;
        address erc20Token;
        uint256 erc20TokenAmount;
        Fee[] fees;
        address erc1155Token;
        uint256 erc1155TokenId;
        Property[] erc1155TokenProperties;
        uint128 erc1155TokenAmount;
    }
    struct ERC721Order {
        TradeDirection direction;
        address maker;
        address taker;
        uint256 expiry;
        uint256 nonce;
        address erc20Token;
        uint256 erc20TokenAmount;
        Fee[] fees;
        address erc721Token;
        uint256 erc721TokenId;
        Property[] erc721TokenProperties;
    }
    struct Fee {
        address recipient;
        uint256 amount;
        bytes feeData;
    }
    struct LimitOrder {
        address makerToken;
        address takerToken;
        uint128 makerAmount;
        uint128 takerAmount;
        uint128 takerTokenFeeAmount;
        address maker;
        address taker;
        address sender;
        address feeRecipient;
        bytes32 pool;
        uint64 expiry;
        uint256 salt;
    }
    struct MetaTransactionData {
        address payable signer;
        address sender;
        uint256 minGasPrice;
        uint256 maxGasPrice;
        uint256 expirationTimeSeconds;
        uint256 salt;
        bytes callData;
        uint256 value;
        address feeToken;
        uint256 feeAmount;
    }
    struct MetaTransactionDataV2 {
        address payable signer;
        address sender;
        uint256 expirationTimeSeconds;
        uint256 salt;
        bytes callData;
        address feeToken;
        MetaTransactionFeeData[] fees;
    }
    struct MetaTransactionFeeData {
        address recipient;
        uint256 amount;
    }
    struct MultiHopSellParams {
        address[] tokens;
        uint256 sellAmount;
        MultiHopSellSubcall[] calls;
        bool useSelfBalance;
        address recipient;
        address payer;
    }
    struct MultiHopSellSubcall {
        MultiplexSubcall id;
        bytes data;
    }
    struct OrderInfo {
        bytes32 orderHash;
        OrderStatus status;
        uint128 takerTokenFilledAmount;
    }
    struct OtcOrder {
        address makerToken;
        address takerToken;
        uint128 makerAmount;
        uint128 takerAmount;
        address maker;
        address taker;
        address txOrigin;
        uint256 expiryAndNonce;
    }
    struct OtcOrderInfo {
        bytes32 orderHash;
        OrderStatus status;
    }
    struct Property {
        address propertyValidator;
        bytes propertyData;
    }
    struct RfqOrder {
        address makerToken;
        address takerToken;
        uint128 makerAmount;
        uint128 takerAmount;
        address maker;
        address taker;
        address txOrigin;
        bytes32 pool;
        uint64 expiry;
        uint256 salt;
    }
    struct Signature {
        SignatureType signatureType;
        uint8 v;
        bytes32 r;
        bytes32 s;
    }
    struct TransformERC20Args {
        address payable taker;
        address inputToken;
        address outputToken;
        uint256 inputTokenAmount;
        uint256 minOutputTokenAmount;
        Transformation[] transformations;
        bool useSelfBalance;
        address payable recipient;
    }
    struct Transformation {
        uint32 deploymentNonce;
        bytes data;
    }

    event ERC1155OrderCancelled(address maker, uint256 nonce);
    event ERC1155OrderFilled(TradeDirection direction, address maker, address taker, uint256 nonce, address erc20Token, uint256 erc20FillAmount, address erc1155Token, uint256 erc1155TokenId, uint128 erc1155FillAmount, address matcher);
    event ERC1155OrderPreSigned(TradeDirection direction, address maker, address taker, uint256 expiry, uint256 nonce, address erc20Token, uint256 erc20TokenAmount, Fee[] fees, address erc1155Token, uint256 erc1155TokenId, Property[] erc1155TokenProperties, uint128 erc1155TokenAmount);
    event ERC721OrderCancelled(address maker, uint256 nonce);
    event ERC721OrderFilled(TradeDirection direction, address maker, address taker, uint256 nonce, address erc20Token, uint256 erc20TokenAmount, address erc721Token, uint256 erc721TokenId, address matcher);
    event ERC721OrderPreSigned(TradeDirection direction, address maker, address taker, uint256 expiry, uint256 nonce, address erc20Token, uint256 erc20TokenAmount, Fee[] fees, address erc721Token, uint256 erc721TokenId, Property[] erc721TokenProperties);
    event LimitOrderFilled(bytes32 orderHash, address maker, address taker, address feeRecipient, address makerToken, address takerToken, uint128 takerTokenFilledAmount, uint128 makerTokenFilledAmount, uint128 takerTokenFeeFilledAmount, uint256 protocolFeePaid, bytes32 pool);
    event LiquidityProviderSwap(address inputToken, address outputToken, uint256 inputTokenAmount, uint256 outputTokenAmount, address provider, address recipient);
    event MetaTransactionExecuted(bytes32 hash, bytes4 indexed selector, address signer, address sender);
    event Migrated(address caller, address migrator, address newOwner);
    event OrderCancelled(bytes32 orderHash, address maker);
    event OrderSignerRegistered(address maker, address signer, bool allowed);
    event OtcOrderFilled(bytes32 orderHash, address maker, address taker, address makerToken, address takerToken, uint128 makerTokenFilledAmount, uint128 takerTokenFilledAmount);
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    event PairCancelledLimitOrders(address maker, address makerToken, address takerToken, uint256 minValidSalt);
    event PairCancelledRfqOrders(address maker, address makerToken, address takerToken, uint256 minValidSalt);
    event ProxyFunctionUpdated(bytes4 indexed selector, address oldImpl, address newImpl);
    event QuoteSignerUpdated(address quoteSigner);
    event RfqOrderFilled(bytes32 orderHash, address maker, address taker, address makerToken, address takerToken, uint128 takerTokenFilledAmount, uint128 makerTokenFilledAmount, bytes32 pool);
    event RfqOrderOriginsAllowed(address origin, address[] addrs, bool allowed);
    event TransformedERC20(address indexed taker, address inputToken, address outputToken, uint256 inputTokenAmount, uint256 outputTokenAmount);
    event TransformerDeployerUpdated(address transformerDeployer);

    function _fillLimitOrder(LimitOrder memory order, Signature memory signature, uint128 takerTokenFillAmount, address taker, address sender) external payable returns (uint128 takerTokenFilledAmount, uint128 makerTokenFilledAmount);
    function _fillOtcOrder(OtcOrder memory order, Signature memory makerSignature, uint128 takerTokenFillAmount, address taker, bool useSelfBalance, address recipient) external returns (uint128 takerTokenFilledAmount, uint128 makerTokenFilledAmount);
    function _fillRfqOrder(RfqOrder memory order, Signature memory signature, uint128 takerTokenFillAmount, address taker, bool useSelfBalance, address recipient) external returns (uint128 takerTokenFilledAmount, uint128 makerTokenFilledAmount);
    function _multiplexBatchSell(BatchSellParams memory params, uint256 minBuyAmount) external returns (uint256 boughtAmount);
    function _multiplexMultiHopSell(MultiHopSellParams memory params, uint256 minBuyAmount) external returns (uint256 boughtAmount);
    function _sellHeldTokenForTokenToUniswapV3(bytes memory encodedPath, uint256 sellAmount, uint256 minBuyAmount, address recipient) external returns (uint256 buyAmount);
    function _sellTokenForTokenToUniswapV3(bytes memory encodedPath, uint256 sellAmount, uint256 minBuyAmount, address recipient, address payer) external returns (uint256 buyAmount);
    function _transformERC20(TransformERC20Args memory args) external payable returns (uint256 outputTokenAmount);
    function batchBuyERC1155s(ERC1155Order[] memory sellOrders, Signature[] memory signatures, uint128[] memory erc1155TokenAmounts, bytes[] memory callbackData, bool revertIfIncomplete) external payable returns (bool[] memory successes);
    function batchBuyERC721s(ERC721Order[] memory sellOrders, Signature[] memory signatures, bytes[] memory callbackData, bool revertIfIncomplete) external payable returns (bool[] memory successes);
    function batchCancelERC1155Orders(uint256[] memory orderNonces) external;
    function batchCancelERC721Orders(uint256[] memory orderNonces) external;
    function batchCancelLimitOrders(LimitOrder[] memory orders) external;
    function batchCancelPairLimitOrders(address[] memory makerTokens, address[] memory takerTokens, uint256[] memory minValidSalts) external;
    function batchCancelPairLimitOrdersWithSigner(address maker, address[] memory makerTokens, address[] memory takerTokens, uint256[] memory minValidSalts) external;
    function batchCancelPairRfqOrders(address[] memory makerTokens, address[] memory takerTokens, uint256[] memory minValidSalts) external;
    function batchCancelPairRfqOrdersWithSigner(address maker, address[] memory makerTokens, address[] memory takerTokens, uint256[] memory minValidSalts) external;
    function batchCancelRfqOrders(RfqOrder[] memory orders) external;
    function batchExecuteMetaTransactions(MetaTransactionData[] memory mtxs, Signature[] memory signatures) external payable returns (bytes[] memory returnResults);
    function batchExecuteMetaTransactionsV2(MetaTransactionDataV2[] memory mtxs, Signature[] memory signatures) external returns (bytes[] memory returnResults);
    function batchFillLimitOrders(LimitOrder[] memory orders, Signature[] memory signatures, uint128[] memory takerTokenFillAmounts, bool revertIfIncomplete) external payable returns (uint128[] memory takerTokenFilledAmounts, uint128[] memory makerTokenFilledAmounts);
    function batchFillRfqOrders(RfqOrder[] memory orders, Signature[] memory signatures, uint128[] memory takerTokenFillAmounts, bool revertIfIncomplete) external returns (uint128[] memory takerTokenFilledAmounts, uint128[] memory makerTokenFilledAmounts);
    function batchFillTakerSignedOtcOrders(OtcOrder[] memory orders, Signature[] memory makerSignatures, Signature[] memory takerSignatures, bool[] memory unwrapWeth) external returns (bool[] memory successes);
    function batchGetLimitOrderRelevantStates(LimitOrder[] memory orders, Signature[] memory signatures) external view returns (OrderInfo[] memory orderInfos, uint128[] memory actualFillableTakerTokenAmounts, bool[] memory isSignatureValids);
    function batchGetRfqOrderRelevantStates(RfqOrder[] memory orders, Signature[] memory signatures) external view returns (OrderInfo[] memory orderInfos, uint128[] memory actualFillableTakerTokenAmounts, bool[] memory isSignatureValids);
    function batchMatchERC721Orders(ERC721Order[] memory sellOrders, ERC721Order[] memory buyOrders, Signature[] memory sellOrderSignatures, Signature[] memory buyOrderSignatures) external returns (uint256[] memory profits, bool[] memory successes);
    function buyERC1155(ERC1155Order memory sellOrder, Signature memory signature, uint128 erc1155BuyAmount, bytes memory callbackData) external payable;
    function buyERC721(ERC721Order memory sellOrder, Signature memory signature, bytes memory callbackData) external payable;
    function cancelERC1155Order(uint256 orderNonce) external;
    function cancelERC721Order(uint256 orderNonce) external;
    function cancelLimitOrder(LimitOrder memory order) external;
    function cancelPairLimitOrders(address makerToken, address takerToken, uint256 minValidSalt) external;
    function cancelPairLimitOrdersWithSigner(address maker, address makerToken, address takerToken, uint256 minValidSalt) external;
    function cancelPairRfqOrders(address makerToken, address takerToken, uint256 minValidSalt) external;
    function cancelPairRfqOrdersWithSigner(address maker, address makerToken, address takerToken, uint256 minValidSalt) external;
    function cancelRfqOrder(RfqOrder memory order) external;
    function createTransformWallet() external returns (address wallet);
    function executeMetaTransaction(MetaTransactionData memory mtx, Signature memory signature) external payable returns (bytes memory returnResult);
    function executeMetaTransactionV2(MetaTransactionDataV2 memory mtx, Signature memory signature) external returns (bytes memory returnResult);
    function extend(bytes4 selector, address impl) external;
    function fillLimitOrder(LimitOrder memory order, Signature memory signature, uint128 takerTokenFillAmount) external payable returns (uint128 takerTokenFilledAmount, uint128 makerTokenFilledAmount);
    function fillOrKillLimitOrder(LimitOrder memory order, Signature memory signature, uint128 takerTokenFillAmount) external payable returns (uint128 makerTokenFilledAmount);
    function fillOrKillRfqOrder(RfqOrder memory order, Signature memory signature, uint128 takerTokenFillAmount) external returns (uint128 makerTokenFilledAmount);
    function fillOtcOrder(OtcOrder memory order, Signature memory makerSignature, uint128 takerTokenFillAmount) external returns (uint128 takerTokenFilledAmount, uint128 makerTokenFilledAmount);
    function fillOtcOrderForEth(OtcOrder memory order, Signature memory makerSignature, uint128 takerTokenFillAmount) external returns (uint128 takerTokenFilledAmount, uint128 makerTokenFilledAmount);
    function fillOtcOrderWithEth(OtcOrder memory order, Signature memory makerSignature) external payable returns (uint128 takerTokenFilledAmount, uint128 makerTokenFilledAmount);
    function fillRfqOrder(RfqOrder memory order, Signature memory signature, uint128 takerTokenFillAmount) external returns (uint128 takerTokenFilledAmount, uint128 makerTokenFilledAmount);
    function fillTakerSignedOtcOrder(OtcOrder memory order, Signature memory makerSignature, Signature memory takerSignature) external;
    function fillTakerSignedOtcOrderForEth(OtcOrder memory order, Signature memory makerSignature, Signature memory takerSignature) external;
    function getERC1155OrderHash(ERC1155Order memory order) external view returns (bytes32 orderHash);
    function getERC1155OrderInfo(ERC1155Order memory order) external view returns (OrderInfo memory orderInfo);
    function getERC721OrderHash(ERC721Order memory order) external view returns (bytes32 orderHash);
    function getERC721OrderStatus(ERC721Order memory order) external view returns (OrderStatus status);
    function getERC721OrderStatusBitVector(address maker, uint248 nonceRange) external view returns (uint256 bitVector);
    function getLimitOrderHash(LimitOrder memory order) external view returns (bytes32 orderHash);
    function getLimitOrderInfo(LimitOrder memory order) external view returns (OrderInfo memory orderInfo);
    function getLimitOrderRelevantState(LimitOrder memory order, Signature memory signature) external view returns (OrderInfo memory orderInfo, uint128 actualFillableTakerTokenAmount, bool isSignatureValid);
    function getMetaTransactionExecutedBlock(MetaTransactionData memory mtx) external view returns (uint256 blockNumber);
    function getMetaTransactionHash(MetaTransactionData memory mtx) external view returns (bytes32 mtxHash);
    function getMetaTransactionHashExecutedBlock(bytes32 mtxHash) external view returns (uint256 blockNumber);
    function getMetaTransactionV2ExecutedBlock(MetaTransactionDataV2 memory mtx) external view returns (uint256 blockNumber);
    function getMetaTransactionV2Hash(MetaTransactionDataV2 memory mtx) external view returns (bytes32 mtxHash);
    function getMetaTransactionV2HashExecutedBlock(bytes32 mtxHash) external view returns (uint256 blockNumber);
    function getOtcOrderHash(OtcOrder memory order) external view returns (bytes32 orderHash);
    function getOtcOrderInfo(OtcOrder memory order) external view returns (OtcOrderInfo memory orderInfo);
    function getProtocolFeeMultiplier() external view returns (uint32 multiplier);
    function getQuoteSigner() external view returns (address signer);
    function getRfqOrderHash(RfqOrder memory order) external view returns (bytes32 orderHash);
    function getRfqOrderInfo(RfqOrder memory order) external view returns (OrderInfo memory orderInfo);
    function getRfqOrderRelevantState(RfqOrder memory order, Signature memory signature) external view returns (OrderInfo memory orderInfo, uint128 actualFillableTakerTokenAmount, bool isSignatureValid);
    function getRollbackEntryAtIndex(bytes4 selector, uint256 idx) external view returns (address impl);
    function getRollbackLength(bytes4 selector) external view returns (uint256 rollbackLength);
    function getTransformWallet() external view returns (address wallet);
    function getTransformerDeployer() external view returns (address deployer);
    function isValidOrderSigner(address maker, address signer) external view returns (bool isAllowed);
    function lastOtcTxOriginNonce(address txOrigin, uint64 nonceBucket) external view returns (uint128 lastNonce);
    function matchERC721Orders(ERC721Order memory sellOrder, ERC721Order memory buyOrder, Signature memory sellOrderSignature, Signature memory buyOrderSignature) external returns (uint256 profit);
    function migrate(address target, bytes memory data, address newOwner) external;
    function multiplexBatchSellEthForToken(address outputToken, BatchSellSubcall[] memory calls, uint256 minBuyAmount) external payable returns (uint256 boughtAmount);
    function multiplexBatchSellTokenForEth(address inputToken, BatchSellSubcall[] memory calls, uint256 sellAmount, uint256 minBuyAmount) external returns (uint256 boughtAmount);
    function multiplexBatchSellTokenForToken(address inputToken, address outputToken, BatchSellSubcall[] memory calls, uint256 sellAmount, uint256 minBuyAmount) external returns (uint256 boughtAmount);
    function multiplexMultiHopSellEthForToken(address[] memory tokens, MultiHopSellSubcall[] memory calls, uint256 minBuyAmount) external payable returns (uint256 boughtAmount);
    function multiplexMultiHopSellTokenForEth(address[] memory tokens, MultiHopSellSubcall[] memory calls, uint256 sellAmount, uint256 minBuyAmount) external returns (uint256 boughtAmount);
    function multiplexMultiHopSellTokenForToken(address[] memory tokens, MultiHopSellSubcall[] memory calls, uint256 sellAmount, uint256 minBuyAmount) external returns (uint256 boughtAmount);
    function onERC1155Received(address operator, address from, uint256 tokenId, uint256 value, bytes memory data) external returns (bytes4 success);
    function onERC721Received(address operator, address from, uint256 tokenId, bytes memory data) external returns (bytes4 success);
    function owner() external view returns (address ownerAddress);
    function preSignERC1155Order(ERC1155Order memory order) external;
    function preSignERC721Order(ERC721Order memory order) external;
    function registerAllowedOrderSigner(address signer, bool allowed) external;
    function registerAllowedRfqOrigins(address[] memory origins, bool allowed) external;
    function rollback(bytes4 selector, address targetImpl) external;
    function sellERC1155(ERC1155Order memory buyOrder, Signature memory signature, uint256 erc1155TokenId, uint128 erc1155SellAmount, bool unwrapNativeToken, bytes memory callbackData) external;
    function sellERC721(ERC721Order memory buyOrder, Signature memory signature, uint256 erc721TokenId, bool unwrapNativeToken, bytes memory callbackData) external;
    function sellEthForTokenToUniswapV3(bytes memory encodedPath, uint256 minBuyAmount, address recipient) external payable returns (uint256 buyAmount);
    function sellToLiquidityProvider(address inputToken, address outputToken, address provider, address recipient, uint256 sellAmount, uint256 minBuyAmount, bytes memory auxiliaryData) external payable returns (uint256 boughtAmount);
    function sellToPancakeSwap(address[] memory tokens, uint256 sellAmount, uint256 minBuyAmount, ProtocolFork fork) external payable returns (uint256 buyAmount);
    function sellToUniswap(address[] memory tokens, uint256 sellAmount, uint256 minBuyAmount, bool isSushi) external payable returns (uint256 buyAmount);
    function sellTokenForEthToUniswapV3(bytes memory encodedPath, uint256 sellAmount, uint256 minBuyAmount, address payable recipient) external returns (uint256 buyAmount);
    function sellTokenForTokenToUniswapV3(bytes memory encodedPath, uint256 sellAmount, uint256 minBuyAmount, address recipient) external returns (uint256 buyAmount);
    function setQuoteSigner(address quoteSigner) external;
    function setTransformerDeployer(address transformerDeployer) external;
    function supportInterface(bytes4 interfaceId) external pure returns (bool isSupported);
    function transferOwnership(address newOwner) external;
    function transferProtocolFeesForPools(bytes32[] memory poolIds) external;
    function transferTrappedTokensTo(address erc20, uint256 amountOut, address payable recipientWallet) external;
    function transformERC20(address inputToken, address outputToken, uint256 inputTokenAmount, uint256 minOutputTokenAmount, Transformation[] memory transformations) external payable returns (uint256 outputTokenAmount);
    function uniswapV3SwapCallback(int256 amount0Delta, int256 amount1Delta, bytes memory data) external;
    function validateERC1155OrderProperties(ERC1155Order memory order, uint256 erc1155TokenId) external view;
    function validateERC1155OrderSignature(ERC1155Order memory order, Signature memory signature) external view;
    function validateERC721OrderProperties(ERC721Order memory order, uint256 erc721TokenId) external view;
    function validateERC721OrderSignature(ERC721Order memory order, Signature memory signature) external view;
}

…which was generated by the following JSON ABI:

[
  {
    "type": "function",
    "name": "_fillLimitOrder",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNativeOrder.LimitOrder",
        "components": [
          {
            "name": "makerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "takerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "makerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerTokenFeeAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "sender",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "feeRecipient",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "pool",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "expiry",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "salt",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      },
      {
        "name": "signature",
        "type": "tuple",
        "internalType": "struct LibSignature.Signature",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      },
      {
        "name": "takerTokenFillAmount",
        "type": "uint128",
        "internalType": "uint128"
      },
      {
        "name": "taker",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "sender",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "takerTokenFilledAmount",
        "type": "uint128",
        "internalType": "uint128"
      },
      {
        "name": "makerTokenFilledAmount",
        "type": "uint128",
        "internalType": "uint128"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "_fillOtcOrder",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNativeOrder.OtcOrder",
        "components": [
          {
            "name": "makerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "takerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "makerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "txOrigin",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiryAndNonce",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      },
      {
        "name": "makerSignature",
        "type": "tuple",
        "internalType": "struct LibSignature.Signature",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      },
      {
        "name": "takerTokenFillAmount",
        "type": "uint128",
        "internalType": "uint128"
      },
      {
        "name": "taker",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "useSelfBalance",
        "type": "bool",
        "internalType": "bool"
      },
      {
        "name": "recipient",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "takerTokenFilledAmount",
        "type": "uint128",
        "internalType": "uint128"
      },
      {
        "name": "makerTokenFilledAmount",
        "type": "uint128",
        "internalType": "uint128"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "_fillRfqOrder",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNativeOrder.RfqOrder",
        "components": [
          {
            "name": "makerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "takerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "makerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "txOrigin",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "pool",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "expiry",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "salt",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      },
      {
        "name": "signature",
        "type": "tuple",
        "internalType": "struct LibSignature.Signature",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      },
      {
        "name": "takerTokenFillAmount",
        "type": "uint128",
        "internalType": "uint128"
      },
      {
        "name": "taker",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "useSelfBalance",
        "type": "bool",
        "internalType": "bool"
      },
      {
        "name": "recipient",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "takerTokenFilledAmount",
        "type": "uint128",
        "internalType": "uint128"
      },
      {
        "name": "makerTokenFilledAmount",
        "type": "uint128",
        "internalType": "uint128"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "_multiplexBatchSell",
    "inputs": [
      {
        "name": "params",
        "type": "tuple",
        "internalType": "struct IMultiplexFeature.BatchSellParams",
        "components": [
          {
            "name": "inputToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "outputToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "sellAmount",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "calls",
            "type": "tuple[]",
            "internalType": "struct IMultiplexFeature.BatchSellSubcall[]",
            "components": [
              {
                "name": "id",
                "type": "uint8",
                "internalType": "enum IMultiplexFeature.MultiplexSubcall"
              },
              {
                "name": "sellAmount",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "data",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          },
          {
            "name": "useSelfBalance",
            "type": "bool",
            "internalType": "bool"
          },
          {
            "name": "recipient",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "payer",
            "type": "address",
            "internalType": "address"
          }
        ]
      },
      {
        "name": "minBuyAmount",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "boughtAmount",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "_multiplexMultiHopSell",
    "inputs": [
      {
        "name": "params",
        "type": "tuple",
        "internalType": "struct IMultiplexFeature.MultiHopSellParams",
        "components": [
          {
            "name": "tokens",
            "type": "address[]",
            "internalType": "address[]"
          },
          {
            "name": "sellAmount",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "calls",
            "type": "tuple[]",
            "internalType": "struct IMultiplexFeature.MultiHopSellSubcall[]",
            "components": [
              {
                "name": "id",
                "type": "uint8",
                "internalType": "enum IMultiplexFeature.MultiplexSubcall"
              },
              {
                "name": "data",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          },
          {
            "name": "useSelfBalance",
            "type": "bool",
            "internalType": "bool"
          },
          {
            "name": "recipient",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "payer",
            "type": "address",
            "internalType": "address"
          }
        ]
      },
      {
        "name": "minBuyAmount",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "boughtAmount",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "_sellHeldTokenForTokenToUniswapV3",
    "inputs": [
      {
        "name": "encodedPath",
        "type": "bytes",
        "internalType": "bytes"
      },
      {
        "name": "sellAmount",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "minBuyAmount",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "recipient",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "buyAmount",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "_sellTokenForTokenToUniswapV3",
    "inputs": [
      {
        "name": "encodedPath",
        "type": "bytes",
        "internalType": "bytes"
      },
      {
        "name": "sellAmount",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "minBuyAmount",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "recipient",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "payer",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "buyAmount",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "_transformERC20",
    "inputs": [
      {
        "name": "args",
        "type": "tuple",
        "internalType": "struct ITransformERC20Feature.TransformERC20Args",
        "components": [
          {
            "name": "taker",
            "type": "address",
            "internalType": "address payable"
          },
          {
            "name": "inputToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "outputToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "inputTokenAmount",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "minOutputTokenAmount",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "transformations",
            "type": "tuple[]",
            "internalType": "struct ITransformERC20Feature.Transformation[]",
            "components": [
              {
                "name": "deploymentNonce",
                "type": "uint32",
                "internalType": "uint32"
              },
              {
                "name": "data",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          },
          {
            "name": "useSelfBalance",
            "type": "bool",
            "internalType": "bool"
          },
          {
            "name": "recipient",
            "type": "address",
            "internalType": "address payable"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "outputTokenAmount",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "batchBuyERC1155s",
    "inputs": [
      {
        "name": "sellOrders",
        "type": "tuple[]",
        "internalType": "struct LibNFTOrder.ERC1155Order[]",
        "components": [
          {
            "name": "direction",
            "type": "uint8",
            "internalType": "enum LibNFTOrder.TradeDirection"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiry",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "nonce",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc20Token",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "erc20TokenAmount",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "fees",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Fee[]",
            "components": [
              {
                "name": "recipient",
                "type": "address",
                "internalType": "address"
              },
              {
                "name": "amount",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "feeData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          },
          {
            "name": "erc1155Token",
            "type": "address",
            "internalType": "contract IERC1155Token"
          },
          {
            "name": "erc1155TokenId",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc1155TokenProperties",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Property[]",
            "components": [
              {
                "name": "propertyValidator",
                "type": "address",
                "internalType": "contract IPropertyValidator"
              },
              {
                "name": "propertyData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          },
          {
            "name": "erc1155TokenAmount",
            "type": "uint128",
            "internalType": "uint128"
          }
        ]
      },
      {
        "name": "signatures",
        "type": "tuple[]",
        "internalType": "struct LibSignature.Signature[]",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      },
      {
        "name": "erc1155TokenAmounts",
        "type": "uint128[]",
        "internalType": "uint128[]"
      },
      {
        "name": "callbackData",
        "type": "bytes[]",
        "internalType": "bytes[]"
      },
      {
        "name": "revertIfIncomplete",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "outputs": [
      {
        "name": "successes",
        "type": "bool[]",
        "internalType": "bool[]"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "batchBuyERC721s",
    "inputs": [
      {
        "name": "sellOrders",
        "type": "tuple[]",
        "internalType": "struct LibNFTOrder.ERC721Order[]",
        "components": [
          {
            "name": "direction",
            "type": "uint8",
            "internalType": "enum LibNFTOrder.TradeDirection"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiry",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "nonce",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc20Token",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "erc20TokenAmount",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "fees",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Fee[]",
            "components": [
              {
                "name": "recipient",
                "type": "address",
                "internalType": "address"
              },
              {
                "name": "amount",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "feeData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          },
          {
            "name": "erc721Token",
            "type": "address",
            "internalType": "contract IERC721Token"
          },
          {
            "name": "erc721TokenId",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc721TokenProperties",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Property[]",
            "components": [
              {
                "name": "propertyValidator",
                "type": "address",
                "internalType": "contract IPropertyValidator"
              },
              {
                "name": "propertyData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          }
        ]
      },
      {
        "name": "signatures",
        "type": "tuple[]",
        "internalType": "struct LibSignature.Signature[]",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      },
      {
        "name": "callbackData",
        "type": "bytes[]",
        "internalType": "bytes[]"
      },
      {
        "name": "revertIfIncomplete",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "outputs": [
      {
        "name": "successes",
        "type": "bool[]",
        "internalType": "bool[]"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "batchCancelERC1155Orders",
    "inputs": [
      {
        "name": "orderNonces",
        "type": "uint256[]",
        "internalType": "uint256[]"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "batchCancelERC721Orders",
    "inputs": [
      {
        "name": "orderNonces",
        "type": "uint256[]",
        "internalType": "uint256[]"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "batchCancelLimitOrders",
    "inputs": [
      {
        "name": "orders",
        "type": "tuple[]",
        "internalType": "struct LibNativeOrder.LimitOrder[]",
        "components": [
          {
            "name": "makerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "takerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "makerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerTokenFeeAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "sender",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "feeRecipient",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "pool",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "expiry",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "salt",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "batchCancelPairLimitOrders",
    "inputs": [
      {
        "name": "makerTokens",
        "type": "address[]",
        "internalType": "contract IERC20Token[]"
      },
      {
        "name": "takerTokens",
        "type": "address[]",
        "internalType": "contract IERC20Token[]"
      },
      {
        "name": "minValidSalts",
        "type": "uint256[]",
        "internalType": "uint256[]"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "batchCancelPairLimitOrdersWithSigner",
    "inputs": [
      {
        "name": "maker",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "makerTokens",
        "type": "address[]",
        "internalType": "contract IERC20Token[]"
      },
      {
        "name": "takerTokens",
        "type": "address[]",
        "internalType": "contract IERC20Token[]"
      },
      {
        "name": "minValidSalts",
        "type": "uint256[]",
        "internalType": "uint256[]"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "batchCancelPairRfqOrders",
    "inputs": [
      {
        "name": "makerTokens",
        "type": "address[]",
        "internalType": "contract IERC20Token[]"
      },
      {
        "name": "takerTokens",
        "type": "address[]",
        "internalType": "contract IERC20Token[]"
      },
      {
        "name": "minValidSalts",
        "type": "uint256[]",
        "internalType": "uint256[]"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "batchCancelPairRfqOrdersWithSigner",
    "inputs": [
      {
        "name": "maker",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "makerTokens",
        "type": "address[]",
        "internalType": "contract IERC20Token[]"
      },
      {
        "name": "takerTokens",
        "type": "address[]",
        "internalType": "contract IERC20Token[]"
      },
      {
        "name": "minValidSalts",
        "type": "uint256[]",
        "internalType": "uint256[]"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "batchCancelRfqOrders",
    "inputs": [
      {
        "name": "orders",
        "type": "tuple[]",
        "internalType": "struct LibNativeOrder.RfqOrder[]",
        "components": [
          {
            "name": "makerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "takerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "makerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "txOrigin",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "pool",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "expiry",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "salt",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "batchExecuteMetaTransactions",
    "inputs": [
      {
        "name": "mtxs",
        "type": "tuple[]",
        "internalType": "struct IMetaTransactionsFeature.MetaTransactionData[]",
        "components": [
          {
            "name": "signer",
            "type": "address",
            "internalType": "address payable"
          },
          {
            "name": "sender",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "minGasPrice",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "maxGasPrice",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "expirationTimeSeconds",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "salt",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "callData",
            "type": "bytes",
            "internalType": "bytes"
          },
          {
            "name": "value",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "feeToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "feeAmount",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      },
      {
        "name": "signatures",
        "type": "tuple[]",
        "internalType": "struct LibSignature.Signature[]",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "returnResults",
        "type": "bytes[]",
        "internalType": "bytes[]"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "batchExecuteMetaTransactionsV2",
    "inputs": [
      {
        "name": "mtxs",
        "type": "tuple[]",
        "internalType": "struct IMetaTransactionsFeatureV2.MetaTransactionDataV2[]",
        "components": [
          {
            "name": "signer",
            "type": "address",
            "internalType": "address payable"
          },
          {
            "name": "sender",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expirationTimeSeconds",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "salt",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "callData",
            "type": "bytes",
            "internalType": "bytes"
          },
          {
            "name": "feeToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "fees",
            "type": "tuple[]",
            "internalType": "struct IMetaTransactionsFeatureV2.MetaTransactionFeeData[]",
            "components": [
              {
                "name": "recipient",
                "type": "address",
                "internalType": "address"
              },
              {
                "name": "amount",
                "type": "uint256",
                "internalType": "uint256"
              }
            ]
          }
        ]
      },
      {
        "name": "signatures",
        "type": "tuple[]",
        "internalType": "struct LibSignature.Signature[]",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "returnResults",
        "type": "bytes[]",
        "internalType": "bytes[]"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "batchFillLimitOrders",
    "inputs": [
      {
        "name": "orders",
        "type": "tuple[]",
        "internalType": "struct LibNativeOrder.LimitOrder[]",
        "components": [
          {
            "name": "makerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "takerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "makerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerTokenFeeAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "sender",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "feeRecipient",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "pool",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "expiry",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "salt",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      },
      {
        "name": "signatures",
        "type": "tuple[]",
        "internalType": "struct LibSignature.Signature[]",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      },
      {
        "name": "takerTokenFillAmounts",
        "type": "uint128[]",
        "internalType": "uint128[]"
      },
      {
        "name": "revertIfIncomplete",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "outputs": [
      {
        "name": "takerTokenFilledAmounts",
        "type": "uint128[]",
        "internalType": "uint128[]"
      },
      {
        "name": "makerTokenFilledAmounts",
        "type": "uint128[]",
        "internalType": "uint128[]"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "batchFillRfqOrders",
    "inputs": [
      {
        "name": "orders",
        "type": "tuple[]",
        "internalType": "struct LibNativeOrder.RfqOrder[]",
        "components": [
          {
            "name": "makerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "takerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "makerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "txOrigin",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "pool",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "expiry",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "salt",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      },
      {
        "name": "signatures",
        "type": "tuple[]",
        "internalType": "struct LibSignature.Signature[]",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      },
      {
        "name": "takerTokenFillAmounts",
        "type": "uint128[]",
        "internalType": "uint128[]"
      },
      {
        "name": "revertIfIncomplete",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "outputs": [
      {
        "name": "takerTokenFilledAmounts",
        "type": "uint128[]",
        "internalType": "uint128[]"
      },
      {
        "name": "makerTokenFilledAmounts",
        "type": "uint128[]",
        "internalType": "uint128[]"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "batchFillTakerSignedOtcOrders",
    "inputs": [
      {
        "name": "orders",
        "type": "tuple[]",
        "internalType": "struct LibNativeOrder.OtcOrder[]",
        "components": [
          {
            "name": "makerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "takerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "makerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "txOrigin",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiryAndNonce",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      },
      {
        "name": "makerSignatures",
        "type": "tuple[]",
        "internalType": "struct LibSignature.Signature[]",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      },
      {
        "name": "takerSignatures",
        "type": "tuple[]",
        "internalType": "struct LibSignature.Signature[]",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      },
      {
        "name": "unwrapWeth",
        "type": "bool[]",
        "internalType": "bool[]"
      }
    ],
    "outputs": [
      {
        "name": "successes",
        "type": "bool[]",
        "internalType": "bool[]"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "batchGetLimitOrderRelevantStates",
    "inputs": [
      {
        "name": "orders",
        "type": "tuple[]",
        "internalType": "struct LibNativeOrder.LimitOrder[]",
        "components": [
          {
            "name": "makerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "takerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "makerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerTokenFeeAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "sender",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "feeRecipient",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "pool",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "expiry",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "salt",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      },
      {
        "name": "signatures",
        "type": "tuple[]",
        "internalType": "struct LibSignature.Signature[]",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "orderInfos",
        "type": "tuple[]",
        "internalType": "struct LibNativeOrder.OrderInfo[]",
        "components": [
          {
            "name": "orderHash",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "status",
            "type": "uint8",
            "internalType": "enum LibNativeOrder.OrderStatus"
          },
          {
            "name": "takerTokenFilledAmount",
            "type": "uint128",
            "internalType": "uint128"
          }
        ]
      },
      {
        "name": "actualFillableTakerTokenAmounts",
        "type": "uint128[]",
        "internalType": "uint128[]"
      },
      {
        "name": "isSignatureValids",
        "type": "bool[]",
        "internalType": "bool[]"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "batchGetRfqOrderRelevantStates",
    "inputs": [
      {
        "name": "orders",
        "type": "tuple[]",
        "internalType": "struct LibNativeOrder.RfqOrder[]",
        "components": [
          {
            "name": "makerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "takerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "makerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "txOrigin",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "pool",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "expiry",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "salt",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      },
      {
        "name": "signatures",
        "type": "tuple[]",
        "internalType": "struct LibSignature.Signature[]",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "orderInfos",
        "type": "tuple[]",
        "internalType": "struct LibNativeOrder.OrderInfo[]",
        "components": [
          {
            "name": "orderHash",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "status",
            "type": "uint8",
            "internalType": "enum LibNativeOrder.OrderStatus"
          },
          {
            "name": "takerTokenFilledAmount",
            "type": "uint128",
            "internalType": "uint128"
          }
        ]
      },
      {
        "name": "actualFillableTakerTokenAmounts",
        "type": "uint128[]",
        "internalType": "uint128[]"
      },
      {
        "name": "isSignatureValids",
        "type": "bool[]",
        "internalType": "bool[]"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "batchMatchERC721Orders",
    "inputs": [
      {
        "name": "sellOrders",
        "type": "tuple[]",
        "internalType": "struct LibNFTOrder.ERC721Order[]",
        "components": [
          {
            "name": "direction",
            "type": "uint8",
            "internalType": "enum LibNFTOrder.TradeDirection"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiry",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "nonce",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc20Token",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "erc20TokenAmount",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "fees",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Fee[]",
            "components": [
              {
                "name": "recipient",
                "type": "address",
                "internalType": "address"
              },
              {
                "name": "amount",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "feeData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          },
          {
            "name": "erc721Token",
            "type": "address",
            "internalType": "contract IERC721Token"
          },
          {
            "name": "erc721TokenId",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc721TokenProperties",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Property[]",
            "components": [
              {
                "name": "propertyValidator",
                "type": "address",
                "internalType": "contract IPropertyValidator"
              },
              {
                "name": "propertyData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          }
        ]
      },
      {
        "name": "buyOrders",
        "type": "tuple[]",
        "internalType": "struct LibNFTOrder.ERC721Order[]",
        "components": [
          {
            "name": "direction",
            "type": "uint8",
            "internalType": "enum LibNFTOrder.TradeDirection"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiry",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "nonce",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc20Token",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "erc20TokenAmount",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "fees",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Fee[]",
            "components": [
              {
                "name": "recipient",
                "type": "address",
                "internalType": "address"
              },
              {
                "name": "amount",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "feeData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          },
          {
            "name": "erc721Token",
            "type": "address",
            "internalType": "contract IERC721Token"
          },
          {
            "name": "erc721TokenId",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc721TokenProperties",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Property[]",
            "components": [
              {
                "name": "propertyValidator",
                "type": "address",
                "internalType": "contract IPropertyValidator"
              },
              {
                "name": "propertyData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          }
        ]
      },
      {
        "name": "sellOrderSignatures",
        "type": "tuple[]",
        "internalType": "struct LibSignature.Signature[]",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      },
      {
        "name": "buyOrderSignatures",
        "type": "tuple[]",
        "internalType": "struct LibSignature.Signature[]",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "profits",
        "type": "uint256[]",
        "internalType": "uint256[]"
      },
      {
        "name": "successes",
        "type": "bool[]",
        "internalType": "bool[]"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "buyERC1155",
    "inputs": [
      {
        "name": "sellOrder",
        "type": "tuple",
        "internalType": "struct LibNFTOrder.ERC1155Order",
        "components": [
          {
            "name": "direction",
            "type": "uint8",
            "internalType": "enum LibNFTOrder.TradeDirection"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiry",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "nonce",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc20Token",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "erc20TokenAmount",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "fees",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Fee[]",
            "components": [
              {
                "name": "recipient",
                "type": "address",
                "internalType": "address"
              },
              {
                "name": "amount",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "feeData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          },
          {
            "name": "erc1155Token",
            "type": "address",
            "internalType": "contract IERC1155Token"
          },
          {
            "name": "erc1155TokenId",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc1155TokenProperties",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Property[]",
            "components": [
              {
                "name": "propertyValidator",
                "type": "address",
                "internalType": "contract IPropertyValidator"
              },
              {
                "name": "propertyData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          },
          {
            "name": "erc1155TokenAmount",
            "type": "uint128",
            "internalType": "uint128"
          }
        ]
      },
      {
        "name": "signature",
        "type": "tuple",
        "internalType": "struct LibSignature.Signature",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      },
      {
        "name": "erc1155BuyAmount",
        "type": "uint128",
        "internalType": "uint128"
      },
      {
        "name": "callbackData",
        "type": "bytes",
        "internalType": "bytes"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "buyERC721",
    "inputs": [
      {
        "name": "sellOrder",
        "type": "tuple",
        "internalType": "struct LibNFTOrder.ERC721Order",
        "components": [
          {
            "name": "direction",
            "type": "uint8",
            "internalType": "enum LibNFTOrder.TradeDirection"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiry",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "nonce",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc20Token",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "erc20TokenAmount",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "fees",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Fee[]",
            "components": [
              {
                "name": "recipient",
                "type": "address",
                "internalType": "address"
              },
              {
                "name": "amount",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "feeData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          },
          {
            "name": "erc721Token",
            "type": "address",
            "internalType": "contract IERC721Token"
          },
          {
            "name": "erc721TokenId",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc721TokenProperties",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Property[]",
            "components": [
              {
                "name": "propertyValidator",
                "type": "address",
                "internalType": "contract IPropertyValidator"
              },
              {
                "name": "propertyData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          }
        ]
      },
      {
        "name": "signature",
        "type": "tuple",
        "internalType": "struct LibSignature.Signature",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      },
      {
        "name": "callbackData",
        "type": "bytes",
        "internalType": "bytes"
      }
    ],
    "outputs": [],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "cancelERC1155Order",
    "inputs": [
      {
        "name": "orderNonce",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "cancelERC721Order",
    "inputs": [
      {
        "name": "orderNonce",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "cancelLimitOrder",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNativeOrder.LimitOrder",
        "components": [
          {
            "name": "makerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "takerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "makerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerTokenFeeAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "sender",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "feeRecipient",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "pool",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "expiry",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "salt",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "cancelPairLimitOrders",
    "inputs": [
      {
        "name": "makerToken",
        "type": "address",
        "internalType": "contract IERC20Token"
      },
      {
        "name": "takerToken",
        "type": "address",
        "internalType": "contract IERC20Token"
      },
      {
        "name": "minValidSalt",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "cancelPairLimitOrdersWithSigner",
    "inputs": [
      {
        "name": "maker",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "makerToken",
        "type": "address",
        "internalType": "contract IERC20Token"
      },
      {
        "name": "takerToken",
        "type": "address",
        "internalType": "contract IERC20Token"
      },
      {
        "name": "minValidSalt",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "cancelPairRfqOrders",
    "inputs": [
      {
        "name": "makerToken",
        "type": "address",
        "internalType": "contract IERC20Token"
      },
      {
        "name": "takerToken",
        "type": "address",
        "internalType": "contract IERC20Token"
      },
      {
        "name": "minValidSalt",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "cancelPairRfqOrdersWithSigner",
    "inputs": [
      {
        "name": "maker",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "makerToken",
        "type": "address",
        "internalType": "contract IERC20Token"
      },
      {
        "name": "takerToken",
        "type": "address",
        "internalType": "contract IERC20Token"
      },
      {
        "name": "minValidSalt",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "cancelRfqOrder",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNativeOrder.RfqOrder",
        "components": [
          {
            "name": "makerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "takerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "makerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "txOrigin",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "pool",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "expiry",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "salt",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "createTransformWallet",
    "inputs": [],
    "outputs": [
      {
        "name": "wallet",
        "type": "address",
        "internalType": "contract IFlashWallet"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "executeMetaTransaction",
    "inputs": [
      {
        "name": "mtx",
        "type": "tuple",
        "internalType": "struct IMetaTransactionsFeature.MetaTransactionData",
        "components": [
          {
            "name": "signer",
            "type": "address",
            "internalType": "address payable"
          },
          {
            "name": "sender",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "minGasPrice",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "maxGasPrice",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "expirationTimeSeconds",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "salt",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "callData",
            "type": "bytes",
            "internalType": "bytes"
          },
          {
            "name": "value",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "feeToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "feeAmount",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      },
      {
        "name": "signature",
        "type": "tuple",
        "internalType": "struct LibSignature.Signature",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "returnResult",
        "type": "bytes",
        "internalType": "bytes"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "executeMetaTransactionV2",
    "inputs": [
      {
        "name": "mtx",
        "type": "tuple",
        "internalType": "struct IMetaTransactionsFeatureV2.MetaTransactionDataV2",
        "components": [
          {
            "name": "signer",
            "type": "address",
            "internalType": "address payable"
          },
          {
            "name": "sender",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expirationTimeSeconds",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "salt",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "callData",
            "type": "bytes",
            "internalType": "bytes"
          },
          {
            "name": "feeToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "fees",
            "type": "tuple[]",
            "internalType": "struct IMetaTransactionsFeatureV2.MetaTransactionFeeData[]",
            "components": [
              {
                "name": "recipient",
                "type": "address",
                "internalType": "address"
              },
              {
                "name": "amount",
                "type": "uint256",
                "internalType": "uint256"
              }
            ]
          }
        ]
      },
      {
        "name": "signature",
        "type": "tuple",
        "internalType": "struct LibSignature.Signature",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "returnResult",
        "type": "bytes",
        "internalType": "bytes"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "extend",
    "inputs": [
      {
        "name": "selector",
        "type": "bytes4",
        "internalType": "bytes4"
      },
      {
        "name": "impl",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "fillLimitOrder",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNativeOrder.LimitOrder",
        "components": [
          {
            "name": "makerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "takerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "makerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerTokenFeeAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "sender",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "feeRecipient",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "pool",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "expiry",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "salt",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      },
      {
        "name": "signature",
        "type": "tuple",
        "internalType": "struct LibSignature.Signature",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      },
      {
        "name": "takerTokenFillAmount",
        "type": "uint128",
        "internalType": "uint128"
      }
    ],
    "outputs": [
      {
        "name": "takerTokenFilledAmount",
        "type": "uint128",
        "internalType": "uint128"
      },
      {
        "name": "makerTokenFilledAmount",
        "type": "uint128",
        "internalType": "uint128"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "fillOrKillLimitOrder",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNativeOrder.LimitOrder",
        "components": [
          {
            "name": "makerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "takerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "makerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerTokenFeeAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "sender",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "feeRecipient",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "pool",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "expiry",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "salt",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      },
      {
        "name": "signature",
        "type": "tuple",
        "internalType": "struct LibSignature.Signature",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      },
      {
        "name": "takerTokenFillAmount",
        "type": "uint128",
        "internalType": "uint128"
      }
    ],
    "outputs": [
      {
        "name": "makerTokenFilledAmount",
        "type": "uint128",
        "internalType": "uint128"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "fillOrKillRfqOrder",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNativeOrder.RfqOrder",
        "components": [
          {
            "name": "makerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "takerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "makerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "txOrigin",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "pool",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "expiry",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "salt",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      },
      {
        "name": "signature",
        "type": "tuple",
        "internalType": "struct LibSignature.Signature",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      },
      {
        "name": "takerTokenFillAmount",
        "type": "uint128",
        "internalType": "uint128"
      }
    ],
    "outputs": [
      {
        "name": "makerTokenFilledAmount",
        "type": "uint128",
        "internalType": "uint128"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "fillOtcOrder",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNativeOrder.OtcOrder",
        "components": [
          {
            "name": "makerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "takerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "makerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "txOrigin",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiryAndNonce",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      },
      {
        "name": "makerSignature",
        "type": "tuple",
        "internalType": "struct LibSignature.Signature",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      },
      {
        "name": "takerTokenFillAmount",
        "type": "uint128",
        "internalType": "uint128"
      }
    ],
    "outputs": [
      {
        "name": "takerTokenFilledAmount",
        "type": "uint128",
        "internalType": "uint128"
      },
      {
        "name": "makerTokenFilledAmount",
        "type": "uint128",
        "internalType": "uint128"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "fillOtcOrderForEth",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNativeOrder.OtcOrder",
        "components": [
          {
            "name": "makerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "takerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "makerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "txOrigin",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiryAndNonce",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      },
      {
        "name": "makerSignature",
        "type": "tuple",
        "internalType": "struct LibSignature.Signature",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      },
      {
        "name": "takerTokenFillAmount",
        "type": "uint128",
        "internalType": "uint128"
      }
    ],
    "outputs": [
      {
        "name": "takerTokenFilledAmount",
        "type": "uint128",
        "internalType": "uint128"
      },
      {
        "name": "makerTokenFilledAmount",
        "type": "uint128",
        "internalType": "uint128"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "fillOtcOrderWithEth",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNativeOrder.OtcOrder",
        "components": [
          {
            "name": "makerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "takerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "makerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "txOrigin",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiryAndNonce",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      },
      {
        "name": "makerSignature",
        "type": "tuple",
        "internalType": "struct LibSignature.Signature",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "takerTokenFilledAmount",
        "type": "uint128",
        "internalType": "uint128"
      },
      {
        "name": "makerTokenFilledAmount",
        "type": "uint128",
        "internalType": "uint128"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "fillRfqOrder",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNativeOrder.RfqOrder",
        "components": [
          {
            "name": "makerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "takerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "makerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "txOrigin",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "pool",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "expiry",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "salt",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      },
      {
        "name": "signature",
        "type": "tuple",
        "internalType": "struct LibSignature.Signature",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      },
      {
        "name": "takerTokenFillAmount",
        "type": "uint128",
        "internalType": "uint128"
      }
    ],
    "outputs": [
      {
        "name": "takerTokenFilledAmount",
        "type": "uint128",
        "internalType": "uint128"
      },
      {
        "name": "makerTokenFilledAmount",
        "type": "uint128",
        "internalType": "uint128"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "fillTakerSignedOtcOrder",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNativeOrder.OtcOrder",
        "components": [
          {
            "name": "makerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "takerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "makerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "txOrigin",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiryAndNonce",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      },
      {
        "name": "makerSignature",
        "type": "tuple",
        "internalType": "struct LibSignature.Signature",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      },
      {
        "name": "takerSignature",
        "type": "tuple",
        "internalType": "struct LibSignature.Signature",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "fillTakerSignedOtcOrderForEth",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNativeOrder.OtcOrder",
        "components": [
          {
            "name": "makerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "takerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "makerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "txOrigin",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiryAndNonce",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      },
      {
        "name": "makerSignature",
        "type": "tuple",
        "internalType": "struct LibSignature.Signature",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      },
      {
        "name": "takerSignature",
        "type": "tuple",
        "internalType": "struct LibSignature.Signature",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "getERC1155OrderHash",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNFTOrder.ERC1155Order",
        "components": [
          {
            "name": "direction",
            "type": "uint8",
            "internalType": "enum LibNFTOrder.TradeDirection"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiry",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "nonce",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc20Token",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "erc20TokenAmount",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "fees",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Fee[]",
            "components": [
              {
                "name": "recipient",
                "type": "address",
                "internalType": "address"
              },
              {
                "name": "amount",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "feeData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          },
          {
            "name": "erc1155Token",
            "type": "address",
            "internalType": "contract IERC1155Token"
          },
          {
            "name": "erc1155TokenId",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc1155TokenProperties",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Property[]",
            "components": [
              {
                "name": "propertyValidator",
                "type": "address",
                "internalType": "contract IPropertyValidator"
              },
              {
                "name": "propertyData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          },
          {
            "name": "erc1155TokenAmount",
            "type": "uint128",
            "internalType": "uint128"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "orderHash",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getERC1155OrderInfo",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNFTOrder.ERC1155Order",
        "components": [
          {
            "name": "direction",
            "type": "uint8",
            "internalType": "enum LibNFTOrder.TradeDirection"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiry",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "nonce",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc20Token",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "erc20TokenAmount",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "fees",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Fee[]",
            "components": [
              {
                "name": "recipient",
                "type": "address",
                "internalType": "address"
              },
              {
                "name": "amount",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "feeData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          },
          {
            "name": "erc1155Token",
            "type": "address",
            "internalType": "contract IERC1155Token"
          },
          {
            "name": "erc1155TokenId",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc1155TokenProperties",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Property[]",
            "components": [
              {
                "name": "propertyValidator",
                "type": "address",
                "internalType": "contract IPropertyValidator"
              },
              {
                "name": "propertyData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          },
          {
            "name": "erc1155TokenAmount",
            "type": "uint128",
            "internalType": "uint128"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "orderInfo",
        "type": "tuple",
        "internalType": "struct LibNFTOrder.OrderInfo",
        "components": [
          {
            "name": "orderHash",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "status",
            "type": "uint8",
            "internalType": "enum LibNFTOrder.OrderStatus"
          },
          {
            "name": "orderAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "remainingAmount",
            "type": "uint128",
            "internalType": "uint128"
          }
        ]
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getERC721OrderHash",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNFTOrder.ERC721Order",
        "components": [
          {
            "name": "direction",
            "type": "uint8",
            "internalType": "enum LibNFTOrder.TradeDirection"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiry",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "nonce",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc20Token",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "erc20TokenAmount",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "fees",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Fee[]",
            "components": [
              {
                "name": "recipient",
                "type": "address",
                "internalType": "address"
              },
              {
                "name": "amount",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "feeData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          },
          {
            "name": "erc721Token",
            "type": "address",
            "internalType": "contract IERC721Token"
          },
          {
            "name": "erc721TokenId",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc721TokenProperties",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Property[]",
            "components": [
              {
                "name": "propertyValidator",
                "type": "address",
                "internalType": "contract IPropertyValidator"
              },
              {
                "name": "propertyData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "orderHash",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getERC721OrderStatus",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNFTOrder.ERC721Order",
        "components": [
          {
            "name": "direction",
            "type": "uint8",
            "internalType": "enum LibNFTOrder.TradeDirection"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiry",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "nonce",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc20Token",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "erc20TokenAmount",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "fees",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Fee[]",
            "components": [
              {
                "name": "recipient",
                "type": "address",
                "internalType": "address"
              },
              {
                "name": "amount",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "feeData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          },
          {
            "name": "erc721Token",
            "type": "address",
            "internalType": "contract IERC721Token"
          },
          {
            "name": "erc721TokenId",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc721TokenProperties",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Property[]",
            "components": [
              {
                "name": "propertyValidator",
                "type": "address",
                "internalType": "contract IPropertyValidator"
              },
              {
                "name": "propertyData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "status",
        "type": "uint8",
        "internalType": "enum LibNFTOrder.OrderStatus"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getERC721OrderStatusBitVector",
    "inputs": [
      {
        "name": "maker",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "nonceRange",
        "type": "uint248",
        "internalType": "uint248"
      }
    ],
    "outputs": [
      {
        "name": "bitVector",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getLimitOrderHash",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNativeOrder.LimitOrder",
        "components": [
          {
            "name": "makerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "takerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "makerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerTokenFeeAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "sender",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "feeRecipient",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "pool",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "expiry",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "salt",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "orderHash",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getLimitOrderInfo",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNativeOrder.LimitOrder",
        "components": [
          {
            "name": "makerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "takerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "makerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerTokenFeeAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "sender",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "feeRecipient",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "pool",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "expiry",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "salt",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "orderInfo",
        "type": "tuple",
        "internalType": "struct LibNativeOrder.OrderInfo",
        "components": [
          {
            "name": "orderHash",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "status",
            "type": "uint8",
            "internalType": "enum LibNativeOrder.OrderStatus"
          },
          {
            "name": "takerTokenFilledAmount",
            "type": "uint128",
            "internalType": "uint128"
          }
        ]
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getLimitOrderRelevantState",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNativeOrder.LimitOrder",
        "components": [
          {
            "name": "makerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "takerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "makerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerTokenFeeAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "sender",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "feeRecipient",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "pool",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "expiry",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "salt",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      },
      {
        "name": "signature",
        "type": "tuple",
        "internalType": "struct LibSignature.Signature",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "orderInfo",
        "type": "tuple",
        "internalType": "struct LibNativeOrder.OrderInfo",
        "components": [
          {
            "name": "orderHash",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "status",
            "type": "uint8",
            "internalType": "enum LibNativeOrder.OrderStatus"
          },
          {
            "name": "takerTokenFilledAmount",
            "type": "uint128",
            "internalType": "uint128"
          }
        ]
      },
      {
        "name": "actualFillableTakerTokenAmount",
        "type": "uint128",
        "internalType": "uint128"
      },
      {
        "name": "isSignatureValid",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getMetaTransactionExecutedBlock",
    "inputs": [
      {
        "name": "mtx",
        "type": "tuple",
        "internalType": "struct IMetaTransactionsFeature.MetaTransactionData",
        "components": [
          {
            "name": "signer",
            "type": "address",
            "internalType": "address payable"
          },
          {
            "name": "sender",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "minGasPrice",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "maxGasPrice",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "expirationTimeSeconds",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "salt",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "callData",
            "type": "bytes",
            "internalType": "bytes"
          },
          {
            "name": "value",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "feeToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "feeAmount",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "blockNumber",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getMetaTransactionHash",
    "inputs": [
      {
        "name": "mtx",
        "type": "tuple",
        "internalType": "struct IMetaTransactionsFeature.MetaTransactionData",
        "components": [
          {
            "name": "signer",
            "type": "address",
            "internalType": "address payable"
          },
          {
            "name": "sender",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "minGasPrice",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "maxGasPrice",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "expirationTimeSeconds",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "salt",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "callData",
            "type": "bytes",
            "internalType": "bytes"
          },
          {
            "name": "value",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "feeToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "feeAmount",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "mtxHash",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getMetaTransactionHashExecutedBlock",
    "inputs": [
      {
        "name": "mtxHash",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "outputs": [
      {
        "name": "blockNumber",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getMetaTransactionV2ExecutedBlock",
    "inputs": [
      {
        "name": "mtx",
        "type": "tuple",
        "internalType": "struct IMetaTransactionsFeatureV2.MetaTransactionDataV2",
        "components": [
          {
            "name": "signer",
            "type": "address",
            "internalType": "address payable"
          },
          {
            "name": "sender",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expirationTimeSeconds",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "salt",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "callData",
            "type": "bytes",
            "internalType": "bytes"
          },
          {
            "name": "feeToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "fees",
            "type": "tuple[]",
            "internalType": "struct IMetaTransactionsFeatureV2.MetaTransactionFeeData[]",
            "components": [
              {
                "name": "recipient",
                "type": "address",
                "internalType": "address"
              },
              {
                "name": "amount",
                "type": "uint256",
                "internalType": "uint256"
              }
            ]
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "blockNumber",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getMetaTransactionV2Hash",
    "inputs": [
      {
        "name": "mtx",
        "type": "tuple",
        "internalType": "struct IMetaTransactionsFeatureV2.MetaTransactionDataV2",
        "components": [
          {
            "name": "signer",
            "type": "address",
            "internalType": "address payable"
          },
          {
            "name": "sender",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expirationTimeSeconds",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "salt",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "callData",
            "type": "bytes",
            "internalType": "bytes"
          },
          {
            "name": "feeToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "fees",
            "type": "tuple[]",
            "internalType": "struct IMetaTransactionsFeatureV2.MetaTransactionFeeData[]",
            "components": [
              {
                "name": "recipient",
                "type": "address",
                "internalType": "address"
              },
              {
                "name": "amount",
                "type": "uint256",
                "internalType": "uint256"
              }
            ]
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "mtxHash",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getMetaTransactionV2HashExecutedBlock",
    "inputs": [
      {
        "name": "mtxHash",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "outputs": [
      {
        "name": "blockNumber",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getOtcOrderHash",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNativeOrder.OtcOrder",
        "components": [
          {
            "name": "makerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "takerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "makerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "txOrigin",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiryAndNonce",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "orderHash",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getOtcOrderInfo",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNativeOrder.OtcOrder",
        "components": [
          {
            "name": "makerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "takerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "makerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "txOrigin",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiryAndNonce",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "orderInfo",
        "type": "tuple",
        "internalType": "struct LibNativeOrder.OtcOrderInfo",
        "components": [
          {
            "name": "orderHash",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "status",
            "type": "uint8",
            "internalType": "enum LibNativeOrder.OrderStatus"
          }
        ]
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getProtocolFeeMultiplier",
    "inputs": [],
    "outputs": [
      {
        "name": "multiplier",
        "type": "uint32",
        "internalType": "uint32"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getQuoteSigner",
    "inputs": [],
    "outputs": [
      {
        "name": "signer",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getRfqOrderHash",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNativeOrder.RfqOrder",
        "components": [
          {
            "name": "makerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "takerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "makerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "txOrigin",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "pool",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "expiry",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "salt",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "orderHash",
        "type": "bytes32",
        "internalType": "bytes32"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getRfqOrderInfo",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNativeOrder.RfqOrder",
        "components": [
          {
            "name": "makerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "takerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "makerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "txOrigin",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "pool",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "expiry",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "salt",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "orderInfo",
        "type": "tuple",
        "internalType": "struct LibNativeOrder.OrderInfo",
        "components": [
          {
            "name": "orderHash",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "status",
            "type": "uint8",
            "internalType": "enum LibNativeOrder.OrderStatus"
          },
          {
            "name": "takerTokenFilledAmount",
            "type": "uint128",
            "internalType": "uint128"
          }
        ]
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getRfqOrderRelevantState",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNativeOrder.RfqOrder",
        "components": [
          {
            "name": "makerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "takerToken",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "makerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "takerAmount",
            "type": "uint128",
            "internalType": "uint128"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "txOrigin",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "pool",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "expiry",
            "type": "uint64",
            "internalType": "uint64"
          },
          {
            "name": "salt",
            "type": "uint256",
            "internalType": "uint256"
          }
        ]
      },
      {
        "name": "signature",
        "type": "tuple",
        "internalType": "struct LibSignature.Signature",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "orderInfo",
        "type": "tuple",
        "internalType": "struct LibNativeOrder.OrderInfo",
        "components": [
          {
            "name": "orderHash",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "status",
            "type": "uint8",
            "internalType": "enum LibNativeOrder.OrderStatus"
          },
          {
            "name": "takerTokenFilledAmount",
            "type": "uint128",
            "internalType": "uint128"
          }
        ]
      },
      {
        "name": "actualFillableTakerTokenAmount",
        "type": "uint128",
        "internalType": "uint128"
      },
      {
        "name": "isSignatureValid",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getRollbackEntryAtIndex",
    "inputs": [
      {
        "name": "selector",
        "type": "bytes4",
        "internalType": "bytes4"
      },
      {
        "name": "idx",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "impl",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getRollbackLength",
    "inputs": [
      {
        "name": "selector",
        "type": "bytes4",
        "internalType": "bytes4"
      }
    ],
    "outputs": [
      {
        "name": "rollbackLength",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getTransformWallet",
    "inputs": [],
    "outputs": [
      {
        "name": "wallet",
        "type": "address",
        "internalType": "contract IFlashWallet"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "getTransformerDeployer",
    "inputs": [],
    "outputs": [
      {
        "name": "deployer",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "isValidOrderSigner",
    "inputs": [
      {
        "name": "maker",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "signer",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "isAllowed",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "lastOtcTxOriginNonce",
    "inputs": [
      {
        "name": "txOrigin",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "nonceBucket",
        "type": "uint64",
        "internalType": "uint64"
      }
    ],
    "outputs": [
      {
        "name": "lastNonce",
        "type": "uint128",
        "internalType": "uint128"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "matchERC721Orders",
    "inputs": [
      {
        "name": "sellOrder",
        "type": "tuple",
        "internalType": "struct LibNFTOrder.ERC721Order",
        "components": [
          {
            "name": "direction",
            "type": "uint8",
            "internalType": "enum LibNFTOrder.TradeDirection"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiry",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "nonce",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc20Token",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "erc20TokenAmount",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "fees",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Fee[]",
            "components": [
              {
                "name": "recipient",
                "type": "address",
                "internalType": "address"
              },
              {
                "name": "amount",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "feeData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          },
          {
            "name": "erc721Token",
            "type": "address",
            "internalType": "contract IERC721Token"
          },
          {
            "name": "erc721TokenId",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc721TokenProperties",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Property[]",
            "components": [
              {
                "name": "propertyValidator",
                "type": "address",
                "internalType": "contract IPropertyValidator"
              },
              {
                "name": "propertyData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          }
        ]
      },
      {
        "name": "buyOrder",
        "type": "tuple",
        "internalType": "struct LibNFTOrder.ERC721Order",
        "components": [
          {
            "name": "direction",
            "type": "uint8",
            "internalType": "enum LibNFTOrder.TradeDirection"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiry",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "nonce",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc20Token",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "erc20TokenAmount",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "fees",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Fee[]",
            "components": [
              {
                "name": "recipient",
                "type": "address",
                "internalType": "address"
              },
              {
                "name": "amount",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "feeData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          },
          {
            "name": "erc721Token",
            "type": "address",
            "internalType": "contract IERC721Token"
          },
          {
            "name": "erc721TokenId",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc721TokenProperties",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Property[]",
            "components": [
              {
                "name": "propertyValidator",
                "type": "address",
                "internalType": "contract IPropertyValidator"
              },
              {
                "name": "propertyData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          }
        ]
      },
      {
        "name": "sellOrderSignature",
        "type": "tuple",
        "internalType": "struct LibSignature.Signature",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      },
      {
        "name": "buyOrderSignature",
        "type": "tuple",
        "internalType": "struct LibSignature.Signature",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "profit",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "migrate",
    "inputs": [
      {
        "name": "target",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "data",
        "type": "bytes",
        "internalType": "bytes"
      },
      {
        "name": "newOwner",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "multiplexBatchSellEthForToken",
    "inputs": [
      {
        "name": "outputToken",
        "type": "address",
        "internalType": "contract IERC20Token"
      },
      {
        "name": "calls",
        "type": "tuple[]",
        "internalType": "struct IMultiplexFeature.BatchSellSubcall[]",
        "components": [
          {
            "name": "id",
            "type": "uint8",
            "internalType": "enum IMultiplexFeature.MultiplexSubcall"
          },
          {
            "name": "sellAmount",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "data",
            "type": "bytes",
            "internalType": "bytes"
          }
        ]
      },
      {
        "name": "minBuyAmount",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "boughtAmount",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "multiplexBatchSellTokenForEth",
    "inputs": [
      {
        "name": "inputToken",
        "type": "address",
        "internalType": "contract IERC20Token"
      },
      {
        "name": "calls",
        "type": "tuple[]",
        "internalType": "struct IMultiplexFeature.BatchSellSubcall[]",
        "components": [
          {
            "name": "id",
            "type": "uint8",
            "internalType": "enum IMultiplexFeature.MultiplexSubcall"
          },
          {
            "name": "sellAmount",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "data",
            "type": "bytes",
            "internalType": "bytes"
          }
        ]
      },
      {
        "name": "sellAmount",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "minBuyAmount",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "boughtAmount",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "multiplexBatchSellTokenForToken",
    "inputs": [
      {
        "name": "inputToken",
        "type": "address",
        "internalType": "contract IERC20Token"
      },
      {
        "name": "outputToken",
        "type": "address",
        "internalType": "contract IERC20Token"
      },
      {
        "name": "calls",
        "type": "tuple[]",
        "internalType": "struct IMultiplexFeature.BatchSellSubcall[]",
        "components": [
          {
            "name": "id",
            "type": "uint8",
            "internalType": "enum IMultiplexFeature.MultiplexSubcall"
          },
          {
            "name": "sellAmount",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "data",
            "type": "bytes",
            "internalType": "bytes"
          }
        ]
      },
      {
        "name": "sellAmount",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "minBuyAmount",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "boughtAmount",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "multiplexMultiHopSellEthForToken",
    "inputs": [
      {
        "name": "tokens",
        "type": "address[]",
        "internalType": "address[]"
      },
      {
        "name": "calls",
        "type": "tuple[]",
        "internalType": "struct IMultiplexFeature.MultiHopSellSubcall[]",
        "components": [
          {
            "name": "id",
            "type": "uint8",
            "internalType": "enum IMultiplexFeature.MultiplexSubcall"
          },
          {
            "name": "data",
            "type": "bytes",
            "internalType": "bytes"
          }
        ]
      },
      {
        "name": "minBuyAmount",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "boughtAmount",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "multiplexMultiHopSellTokenForEth",
    "inputs": [
      {
        "name": "tokens",
        "type": "address[]",
        "internalType": "address[]"
      },
      {
        "name": "calls",
        "type": "tuple[]",
        "internalType": "struct IMultiplexFeature.MultiHopSellSubcall[]",
        "components": [
          {
            "name": "id",
            "type": "uint8",
            "internalType": "enum IMultiplexFeature.MultiplexSubcall"
          },
          {
            "name": "data",
            "type": "bytes",
            "internalType": "bytes"
          }
        ]
      },
      {
        "name": "sellAmount",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "minBuyAmount",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "boughtAmount",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "multiplexMultiHopSellTokenForToken",
    "inputs": [
      {
        "name": "tokens",
        "type": "address[]",
        "internalType": "address[]"
      },
      {
        "name": "calls",
        "type": "tuple[]",
        "internalType": "struct IMultiplexFeature.MultiHopSellSubcall[]",
        "components": [
          {
            "name": "id",
            "type": "uint8",
            "internalType": "enum IMultiplexFeature.MultiplexSubcall"
          },
          {
            "name": "data",
            "type": "bytes",
            "internalType": "bytes"
          }
        ]
      },
      {
        "name": "sellAmount",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "minBuyAmount",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [
      {
        "name": "boughtAmount",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "onERC1155Received",
    "inputs": [
      {
        "name": "operator",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "from",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "tokenId",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "value",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "data",
        "type": "bytes",
        "internalType": "bytes"
      }
    ],
    "outputs": [
      {
        "name": "success",
        "type": "bytes4",
        "internalType": "bytes4"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "onERC721Received",
    "inputs": [
      {
        "name": "operator",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "from",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "tokenId",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "data",
        "type": "bytes",
        "internalType": "bytes"
      }
    ],
    "outputs": [
      {
        "name": "success",
        "type": "bytes4",
        "internalType": "bytes4"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "owner",
    "inputs": [],
    "outputs": [
      {
        "name": "ownerAddress",
        "type": "address",
        "internalType": "address"
      }
    ],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "preSignERC1155Order",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNFTOrder.ERC1155Order",
        "components": [
          {
            "name": "direction",
            "type": "uint8",
            "internalType": "enum LibNFTOrder.TradeDirection"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiry",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "nonce",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc20Token",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "erc20TokenAmount",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "fees",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Fee[]",
            "components": [
              {
                "name": "recipient",
                "type": "address",
                "internalType": "address"
              },
              {
                "name": "amount",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "feeData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          },
          {
            "name": "erc1155Token",
            "type": "address",
            "internalType": "contract IERC1155Token"
          },
          {
            "name": "erc1155TokenId",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc1155TokenProperties",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Property[]",
            "components": [
              {
                "name": "propertyValidator",
                "type": "address",
                "internalType": "contract IPropertyValidator"
              },
              {
                "name": "propertyData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          },
          {
            "name": "erc1155TokenAmount",
            "type": "uint128",
            "internalType": "uint128"
          }
        ]
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "preSignERC721Order",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNFTOrder.ERC721Order",
        "components": [
          {
            "name": "direction",
            "type": "uint8",
            "internalType": "enum LibNFTOrder.TradeDirection"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiry",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "nonce",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc20Token",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "erc20TokenAmount",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "fees",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Fee[]",
            "components": [
              {
                "name": "recipient",
                "type": "address",
                "internalType": "address"
              },
              {
                "name": "amount",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "feeData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          },
          {
            "name": "erc721Token",
            "type": "address",
            "internalType": "contract IERC721Token"
          },
          {
            "name": "erc721TokenId",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc721TokenProperties",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Property[]",
            "components": [
              {
                "name": "propertyValidator",
                "type": "address",
                "internalType": "contract IPropertyValidator"
              },
              {
                "name": "propertyData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          }
        ]
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "registerAllowedOrderSigner",
    "inputs": [
      {
        "name": "signer",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "allowed",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "registerAllowedRfqOrigins",
    "inputs": [
      {
        "name": "origins",
        "type": "address[]",
        "internalType": "address[]"
      },
      {
        "name": "allowed",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "rollback",
    "inputs": [
      {
        "name": "selector",
        "type": "bytes4",
        "internalType": "bytes4"
      },
      {
        "name": "targetImpl",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "sellERC1155",
    "inputs": [
      {
        "name": "buyOrder",
        "type": "tuple",
        "internalType": "struct LibNFTOrder.ERC1155Order",
        "components": [
          {
            "name": "direction",
            "type": "uint8",
            "internalType": "enum LibNFTOrder.TradeDirection"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiry",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "nonce",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc20Token",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "erc20TokenAmount",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "fees",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Fee[]",
            "components": [
              {
                "name": "recipient",
                "type": "address",
                "internalType": "address"
              },
              {
                "name": "amount",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "feeData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          },
          {
            "name": "erc1155Token",
            "type": "address",
            "internalType": "contract IERC1155Token"
          },
          {
            "name": "erc1155TokenId",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc1155TokenProperties",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Property[]",
            "components": [
              {
                "name": "propertyValidator",
                "type": "address",
                "internalType": "contract IPropertyValidator"
              },
              {
                "name": "propertyData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          },
          {
            "name": "erc1155TokenAmount",
            "type": "uint128",
            "internalType": "uint128"
          }
        ]
      },
      {
        "name": "signature",
        "type": "tuple",
        "internalType": "struct LibSignature.Signature",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      },
      {
        "name": "erc1155TokenId",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "erc1155SellAmount",
        "type": "uint128",
        "internalType": "uint128"
      },
      {
        "name": "unwrapNativeToken",
        "type": "bool",
        "internalType": "bool"
      },
      {
        "name": "callbackData",
        "type": "bytes",
        "internalType": "bytes"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "sellERC721",
    "inputs": [
      {
        "name": "buyOrder",
        "type": "tuple",
        "internalType": "struct LibNFTOrder.ERC721Order",
        "components": [
          {
            "name": "direction",
            "type": "uint8",
            "internalType": "enum LibNFTOrder.TradeDirection"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiry",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "nonce",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc20Token",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "erc20TokenAmount",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "fees",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Fee[]",
            "components": [
              {
                "name": "recipient",
                "type": "address",
                "internalType": "address"
              },
              {
                "name": "amount",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "feeData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          },
          {
            "name": "erc721Token",
            "type": "address",
            "internalType": "contract IERC721Token"
          },
          {
            "name": "erc721TokenId",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc721TokenProperties",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Property[]",
            "components": [
              {
                "name": "propertyValidator",
                "type": "address",
                "internalType": "contract IPropertyValidator"
              },
              {
                "name": "propertyData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          }
        ]
      },
      {
        "name": "signature",
        "type": "tuple",
        "internalType": "struct LibSignature.Signature",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      },
      {
        "name": "erc721TokenId",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "unwrapNativeToken",
        "type": "bool",
        "internalType": "bool"
      },
      {
        "name": "callbackData",
        "type": "bytes",
        "internalType": "bytes"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "sellEthForTokenToUniswapV3",
    "inputs": [
      {
        "name": "encodedPath",
        "type": "bytes",
        "internalType": "bytes"
      },
      {
        "name": "minBuyAmount",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "recipient",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "buyAmount",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "sellToLiquidityProvider",
    "inputs": [
      {
        "name": "inputToken",
        "type": "address",
        "internalType": "contract IERC20Token"
      },
      {
        "name": "outputToken",
        "type": "address",
        "internalType": "contract IERC20Token"
      },
      {
        "name": "provider",
        "type": "address",
        "internalType": "contract ILiquidityProvider"
      },
      {
        "name": "recipient",
        "type": "address",
        "internalType": "address"
      },
      {
        "name": "sellAmount",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "minBuyAmount",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "auxiliaryData",
        "type": "bytes",
        "internalType": "bytes"
      }
    ],
    "outputs": [
      {
        "name": "boughtAmount",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "sellToPancakeSwap",
    "inputs": [
      {
        "name": "tokens",
        "type": "address[]",
        "internalType": "contract IERC20Token[]"
      },
      {
        "name": "sellAmount",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "minBuyAmount",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "fork",
        "type": "uint8",
        "internalType": "enum IPancakeSwapFeature.ProtocolFork"
      }
    ],
    "outputs": [
      {
        "name": "buyAmount",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "sellToUniswap",
    "inputs": [
      {
        "name": "tokens",
        "type": "address[]",
        "internalType": "contract IERC20Token[]"
      },
      {
        "name": "sellAmount",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "minBuyAmount",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "isSushi",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "outputs": [
      {
        "name": "buyAmount",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "sellTokenForEthToUniswapV3",
    "inputs": [
      {
        "name": "encodedPath",
        "type": "bytes",
        "internalType": "bytes"
      },
      {
        "name": "sellAmount",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "minBuyAmount",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "recipient",
        "type": "address",
        "internalType": "address payable"
      }
    ],
    "outputs": [
      {
        "name": "buyAmount",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "sellTokenForTokenToUniswapV3",
    "inputs": [
      {
        "name": "encodedPath",
        "type": "bytes",
        "internalType": "bytes"
      },
      {
        "name": "sellAmount",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "minBuyAmount",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "recipient",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [
      {
        "name": "buyAmount",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "setQuoteSigner",
    "inputs": [
      {
        "name": "quoteSigner",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "setTransformerDeployer",
    "inputs": [
      {
        "name": "transformerDeployer",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "supportInterface",
    "inputs": [
      {
        "name": "interfaceId",
        "type": "bytes4",
        "internalType": "bytes4"
      }
    ],
    "outputs": [
      {
        "name": "isSupported",
        "type": "bool",
        "internalType": "bool"
      }
    ],
    "stateMutability": "pure"
  },
  {
    "type": "function",
    "name": "transferOwnership",
    "inputs": [
      {
        "name": "newOwner",
        "type": "address",
        "internalType": "address"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "transferProtocolFeesForPools",
    "inputs": [
      {
        "name": "poolIds",
        "type": "bytes32[]",
        "internalType": "bytes32[]"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "transferTrappedTokensTo",
    "inputs": [
      {
        "name": "erc20",
        "type": "address",
        "internalType": "contract IERC20Token"
      },
      {
        "name": "amountOut",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "recipientWallet",
        "type": "address",
        "internalType": "address payable"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "transformERC20",
    "inputs": [
      {
        "name": "inputToken",
        "type": "address",
        "internalType": "contract IERC20Token"
      },
      {
        "name": "outputToken",
        "type": "address",
        "internalType": "contract IERC20Token"
      },
      {
        "name": "inputTokenAmount",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "minOutputTokenAmount",
        "type": "uint256",
        "internalType": "uint256"
      },
      {
        "name": "transformations",
        "type": "tuple[]",
        "internalType": "struct ITransformERC20Feature.Transformation[]",
        "components": [
          {
            "name": "deploymentNonce",
            "type": "uint32",
            "internalType": "uint32"
          },
          {
            "name": "data",
            "type": "bytes",
            "internalType": "bytes"
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "outputTokenAmount",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "stateMutability": "payable"
  },
  {
    "type": "function",
    "name": "uniswapV3SwapCallback",
    "inputs": [
      {
        "name": "amount0Delta",
        "type": "int256",
        "internalType": "int256"
      },
      {
        "name": "amount1Delta",
        "type": "int256",
        "internalType": "int256"
      },
      {
        "name": "data",
        "type": "bytes",
        "internalType": "bytes"
      }
    ],
    "outputs": [],
    "stateMutability": "nonpayable"
  },
  {
    "type": "function",
    "name": "validateERC1155OrderProperties",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNFTOrder.ERC1155Order",
        "components": [
          {
            "name": "direction",
            "type": "uint8",
            "internalType": "enum LibNFTOrder.TradeDirection"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiry",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "nonce",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc20Token",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "erc20TokenAmount",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "fees",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Fee[]",
            "components": [
              {
                "name": "recipient",
                "type": "address",
                "internalType": "address"
              },
              {
                "name": "amount",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "feeData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          },
          {
            "name": "erc1155Token",
            "type": "address",
            "internalType": "contract IERC1155Token"
          },
          {
            "name": "erc1155TokenId",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc1155TokenProperties",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Property[]",
            "components": [
              {
                "name": "propertyValidator",
                "type": "address",
                "internalType": "contract IPropertyValidator"
              },
              {
                "name": "propertyData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          },
          {
            "name": "erc1155TokenAmount",
            "type": "uint128",
            "internalType": "uint128"
          }
        ]
      },
      {
        "name": "erc1155TokenId",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "validateERC1155OrderSignature",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNFTOrder.ERC1155Order",
        "components": [
          {
            "name": "direction",
            "type": "uint8",
            "internalType": "enum LibNFTOrder.TradeDirection"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiry",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "nonce",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc20Token",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "erc20TokenAmount",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "fees",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Fee[]",
            "components": [
              {
                "name": "recipient",
                "type": "address",
                "internalType": "address"
              },
              {
                "name": "amount",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "feeData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          },
          {
            "name": "erc1155Token",
            "type": "address",
            "internalType": "contract IERC1155Token"
          },
          {
            "name": "erc1155TokenId",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc1155TokenProperties",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Property[]",
            "components": [
              {
                "name": "propertyValidator",
                "type": "address",
                "internalType": "contract IPropertyValidator"
              },
              {
                "name": "propertyData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          },
          {
            "name": "erc1155TokenAmount",
            "type": "uint128",
            "internalType": "uint128"
          }
        ]
      },
      {
        "name": "signature",
        "type": "tuple",
        "internalType": "struct LibSignature.Signature",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      }
    ],
    "outputs": [],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "validateERC721OrderProperties",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNFTOrder.ERC721Order",
        "components": [
          {
            "name": "direction",
            "type": "uint8",
            "internalType": "enum LibNFTOrder.TradeDirection"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiry",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "nonce",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc20Token",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "erc20TokenAmount",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "fees",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Fee[]",
            "components": [
              {
                "name": "recipient",
                "type": "address",
                "internalType": "address"
              },
              {
                "name": "amount",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "feeData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          },
          {
            "name": "erc721Token",
            "type": "address",
            "internalType": "contract IERC721Token"
          },
          {
            "name": "erc721TokenId",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc721TokenProperties",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Property[]",
            "components": [
              {
                "name": "propertyValidator",
                "type": "address",
                "internalType": "contract IPropertyValidator"
              },
              {
                "name": "propertyData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          }
        ]
      },
      {
        "name": "erc721TokenId",
        "type": "uint256",
        "internalType": "uint256"
      }
    ],
    "outputs": [],
    "stateMutability": "view"
  },
  {
    "type": "function",
    "name": "validateERC721OrderSignature",
    "inputs": [
      {
        "name": "order",
        "type": "tuple",
        "internalType": "struct LibNFTOrder.ERC721Order",
        "components": [
          {
            "name": "direction",
            "type": "uint8",
            "internalType": "enum LibNFTOrder.TradeDirection"
          },
          {
            "name": "maker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "taker",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "expiry",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "nonce",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc20Token",
            "type": "address",
            "internalType": "contract IERC20Token"
          },
          {
            "name": "erc20TokenAmount",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "fees",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Fee[]",
            "components": [
              {
                "name": "recipient",
                "type": "address",
                "internalType": "address"
              },
              {
                "name": "amount",
                "type": "uint256",
                "internalType": "uint256"
              },
              {
                "name": "feeData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          },
          {
            "name": "erc721Token",
            "type": "address",
            "internalType": "contract IERC721Token"
          },
          {
            "name": "erc721TokenId",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "erc721TokenProperties",
            "type": "tuple[]",
            "internalType": "struct LibNFTOrder.Property[]",
            "components": [
              {
                "name": "propertyValidator",
                "type": "address",
                "internalType": "contract IPropertyValidator"
              },
              {
                "name": "propertyData",
                "type": "bytes",
                "internalType": "bytes"
              }
            ]
          }
        ]
      },
      {
        "name": "signature",
        "type": "tuple",
        "internalType": "struct LibSignature.Signature",
        "components": [
          {
            "name": "signatureType",
            "type": "uint8",
            "internalType": "enum LibSignature.SignatureType"
          },
          {
            "name": "v",
            "type": "uint8",
            "internalType": "uint8"
          },
          {
            "name": "r",
            "type": "bytes32",
            "internalType": "bytes32"
          },
          {
            "name": "s",
            "type": "bytes32",
            "internalType": "bytes32"
          }
        ]
      }
    ],
    "outputs": [],
    "stateMutability": "view"
  },
  {
    "type": "event",
    "name": "ERC1155OrderCancelled",
    "inputs": [
      {
        "name": "maker",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "nonce",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "ERC1155OrderFilled",
    "inputs": [
      {
        "name": "direction",
        "type": "uint8",
        "indexed": false,
        "internalType": "enum LibNFTOrder.TradeDirection"
      },
      {
        "name": "maker",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "taker",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "nonce",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "erc20Token",
        "type": "address",
        "indexed": false,
        "internalType": "contract IERC20Token"
      },
      {
        "name": "erc20FillAmount",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "erc1155Token",
        "type": "address",
        "indexed": false,
        "internalType": "contract IERC1155Token"
      },
      {
        "name": "erc1155TokenId",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "erc1155FillAmount",
        "type": "uint128",
        "indexed": false,
        "internalType": "uint128"
      },
      {
        "name": "matcher",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "ERC1155OrderPreSigned",
    "inputs": [
      {
        "name": "direction",
        "type": "uint8",
        "indexed": false,
        "internalType": "enum LibNFTOrder.TradeDirection"
      },
      {
        "name": "maker",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "taker",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "expiry",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "nonce",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "erc20Token",
        "type": "address",
        "indexed": false,
        "internalType": "contract IERC20Token"
      },
      {
        "name": "erc20TokenAmount",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "fees",
        "type": "tuple[]",
        "indexed": false,
        "internalType": "struct LibNFTOrder.Fee[]",
        "components": [
          {
            "name": "recipient",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "amount",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "feeData",
            "type": "bytes",
            "internalType": "bytes"
          }
        ]
      },
      {
        "name": "erc1155Token",
        "type": "address",
        "indexed": false,
        "internalType": "contract IERC1155Token"
      },
      {
        "name": "erc1155TokenId",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "erc1155TokenProperties",
        "type": "tuple[]",
        "indexed": false,
        "internalType": "struct LibNFTOrder.Property[]",
        "components": [
          {
            "name": "propertyValidator",
            "type": "address",
            "internalType": "contract IPropertyValidator"
          },
          {
            "name": "propertyData",
            "type": "bytes",
            "internalType": "bytes"
          }
        ]
      },
      {
        "name": "erc1155TokenAmount",
        "type": "uint128",
        "indexed": false,
        "internalType": "uint128"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "ERC721OrderCancelled",
    "inputs": [
      {
        "name": "maker",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "nonce",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "ERC721OrderFilled",
    "inputs": [
      {
        "name": "direction",
        "type": "uint8",
        "indexed": false,
        "internalType": "enum LibNFTOrder.TradeDirection"
      },
      {
        "name": "maker",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "taker",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "nonce",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "erc20Token",
        "type": "address",
        "indexed": false,
        "internalType": "contract IERC20Token"
      },
      {
        "name": "erc20TokenAmount",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "erc721Token",
        "type": "address",
        "indexed": false,
        "internalType": "contract IERC721Token"
      },
      {
        "name": "erc721TokenId",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "matcher",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "ERC721OrderPreSigned",
    "inputs": [
      {
        "name": "direction",
        "type": "uint8",
        "indexed": false,
        "internalType": "enum LibNFTOrder.TradeDirection"
      },
      {
        "name": "maker",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "taker",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "expiry",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "nonce",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "erc20Token",
        "type": "address",
        "indexed": false,
        "internalType": "contract IERC20Token"
      },
      {
        "name": "erc20TokenAmount",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "fees",
        "type": "tuple[]",
        "indexed": false,
        "internalType": "struct LibNFTOrder.Fee[]",
        "components": [
          {
            "name": "recipient",
            "type": "address",
            "internalType": "address"
          },
          {
            "name": "amount",
            "type": "uint256",
            "internalType": "uint256"
          },
          {
            "name": "feeData",
            "type": "bytes",
            "internalType": "bytes"
          }
        ]
      },
      {
        "name": "erc721Token",
        "type": "address",
        "indexed": false,
        "internalType": "contract IERC721Token"
      },
      {
        "name": "erc721TokenId",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "erc721TokenProperties",
        "type": "tuple[]",
        "indexed": false,
        "internalType": "struct LibNFTOrder.Property[]",
        "components": [
          {
            "name": "propertyValidator",
            "type": "address",
            "internalType": "contract IPropertyValidator"
          },
          {
            "name": "propertyData",
            "type": "bytes",
            "internalType": "bytes"
          }
        ]
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "LimitOrderFilled",
    "inputs": [
      {
        "name": "orderHash",
        "type": "bytes32",
        "indexed": false,
        "internalType": "bytes32"
      },
      {
        "name": "maker",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "taker",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "feeRecipient",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "makerToken",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "takerToken",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "takerTokenFilledAmount",
        "type": "uint128",
        "indexed": false,
        "internalType": "uint128"
      },
      {
        "name": "makerTokenFilledAmount",
        "type": "uint128",
        "indexed": false,
        "internalType": "uint128"
      },
      {
        "name": "takerTokenFeeFilledAmount",
        "type": "uint128",
        "indexed": false,
        "internalType": "uint128"
      },
      {
        "name": "protocolFeePaid",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "pool",
        "type": "bytes32",
        "indexed": false,
        "internalType": "bytes32"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "LiquidityProviderSwap",
    "inputs": [
      {
        "name": "inputToken",
        "type": "address",
        "indexed": false,
        "internalType": "contract IERC20Token"
      },
      {
        "name": "outputToken",
        "type": "address",
        "indexed": false,
        "internalType": "contract IERC20Token"
      },
      {
        "name": "inputTokenAmount",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "outputTokenAmount",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "provider",
        "type": "address",
        "indexed": false,
        "internalType": "contract ILiquidityProvider"
      },
      {
        "name": "recipient",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "MetaTransactionExecuted",
    "inputs": [
      {
        "name": "hash",
        "type": "bytes32",
        "indexed": false,
        "internalType": "bytes32"
      },
      {
        "name": "selector",
        "type": "bytes4",
        "indexed": true,
        "internalType": "bytes4"
      },
      {
        "name": "signer",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "sender",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "Migrated",
    "inputs": [
      {
        "name": "caller",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "migrator",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "newOwner",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "OrderCancelled",
    "inputs": [
      {
        "name": "orderHash",
        "type": "bytes32",
        "indexed": false,
        "internalType": "bytes32"
      },
      {
        "name": "maker",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "OrderSignerRegistered",
    "inputs": [
      {
        "name": "maker",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "signer",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "allowed",
        "type": "bool",
        "indexed": false,
        "internalType": "bool"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "OtcOrderFilled",
    "inputs": [
      {
        "name": "orderHash",
        "type": "bytes32",
        "indexed": false,
        "internalType": "bytes32"
      },
      {
        "name": "maker",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "taker",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "makerToken",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "takerToken",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "makerTokenFilledAmount",
        "type": "uint128",
        "indexed": false,
        "internalType": "uint128"
      },
      {
        "name": "takerTokenFilledAmount",
        "type": "uint128",
        "indexed": false,
        "internalType": "uint128"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "OwnershipTransferred",
    "inputs": [
      {
        "name": "previousOwner",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "newOwner",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "PairCancelledLimitOrders",
    "inputs": [
      {
        "name": "maker",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "makerToken",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "takerToken",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "minValidSalt",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "PairCancelledRfqOrders",
    "inputs": [
      {
        "name": "maker",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "makerToken",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "takerToken",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "minValidSalt",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "ProxyFunctionUpdated",
    "inputs": [
      {
        "name": "selector",
        "type": "bytes4",
        "indexed": true,
        "internalType": "bytes4"
      },
      {
        "name": "oldImpl",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "newImpl",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "QuoteSignerUpdated",
    "inputs": [
      {
        "name": "quoteSigner",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "RfqOrderFilled",
    "inputs": [
      {
        "name": "orderHash",
        "type": "bytes32",
        "indexed": false,
        "internalType": "bytes32"
      },
      {
        "name": "maker",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "taker",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "makerToken",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "takerToken",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "takerTokenFilledAmount",
        "type": "uint128",
        "indexed": false,
        "internalType": "uint128"
      },
      {
        "name": "makerTokenFilledAmount",
        "type": "uint128",
        "indexed": false,
        "internalType": "uint128"
      },
      {
        "name": "pool",
        "type": "bytes32",
        "indexed": false,
        "internalType": "bytes32"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "RfqOrderOriginsAllowed",
    "inputs": [
      {
        "name": "origin",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "addrs",
        "type": "address[]",
        "indexed": false,
        "internalType": "address[]"
      },
      {
        "name": "allowed",
        "type": "bool",
        "indexed": false,
        "internalType": "bool"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "TransformedERC20",
    "inputs": [
      {
        "name": "taker",
        "type": "address",
        "indexed": true,
        "internalType": "address"
      },
      {
        "name": "inputToken",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "outputToken",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      },
      {
        "name": "inputTokenAmount",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      },
      {
        "name": "outputTokenAmount",
        "type": "uint256",
        "indexed": false,
        "internalType": "uint256"
      }
    ],
    "anonymous": false
  },
  {
    "type": "event",
    "name": "TransformerDeployerUpdated",
    "inputs": [
      {
        "name": "transformerDeployer",
        "type": "address",
        "indexed": false,
        "internalType": "address"
      }
    ],
    "anonymous": false
  }
]

Structs§

Enums§