/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */

import BN from "bn.js";

export type TxID = { transactionId: string };

export interface ExchangeProxy {
  _fillLimitOrder: {
    ({
      order,
      signature,
      takerTokenFillAmount,
      taker,
      sender,
    }: {
      order: {
        makerToken: string;
        takerToken: string;
        makerAmount: number | BN | string;
        takerAmount: number | BN | string;
        takerTokenFeeAmount: number | BN | string;
        maker: string;
        taker: string;
        sender: string;
        feeRecipient: string;
        pool: string;
        expiry: number | BN | string;
        salt: number | BN | string;
      };
      signature: {
        signatureType: number | BN | string;
        v: number | BN | string;
        r: string;
        s: string;
      };
      takerTokenFillAmount: number | BN | string;
      taker: string;
      sender: string;
    }): Promise<TxID>;
  };

  _fillOtcOrder: {
    ({
      order,
      makerSignature,
      takerTokenFillAmount,
      taker,
      useSelfBalance,
      recipient,
    }: {
      order: {
        makerToken: string;
        takerToken: string;
        makerAmount: number | BN | string;
        takerAmount: number | BN | string;
        maker: string;
        taker: string;
        txOrigin: string;
        expiryAndNonce: number | BN | string;
      };
      makerSignature: {
        signatureType: number | BN | string;
        v: number | BN | string;
        r: string;
        s: string;
      };
      takerTokenFillAmount: number | BN | string;
      taker: string;
      useSelfBalance: boolean;
      recipient: string;
    }): Promise<TxID>;
  };

  _fillRfqOrder: {
    ({
      order,
      signature,
      takerTokenFillAmount,
      taker,
      useSelfBalance,
      recipient,
    }: {
      order: {
        makerToken: string;
        takerToken: string;
        makerAmount: number | BN | string;
        takerAmount: number | BN | string;
        maker: string;
        taker: string;
        txOrigin: string;
        pool: string;
        expiry: number | BN | string;
        salt: number | BN | string;
      };
      signature: {
        signatureType: number | BN | string;
        v: number | BN | string;
        r: string;
        s: string;
      };
      takerTokenFillAmount: number | BN | string;
      taker: string;
      useSelfBalance: boolean;
      recipient: string;
    }): Promise<TxID>;
  };

  _sellHeldTokenForTokenToUniswapV3: {
    ({
      encodedPath,
      sellAmount,
      minBuyAmount,
      recipient,
    }: {
      encodedPath: string;
      sellAmount: number | BN | string;
      minBuyAmount: number | BN | string;
      recipient: string;
    }): Promise<TxID>;
  };

  _transformERC20: {
    ({
      args,
    }: {
      args: {
        taker: string;
        inputToken: string;
        outputToken: string;
        inputTokenAmount: number | BN | string;
        minOutputTokenAmount: number | BN | string;
        transformations: {
          deploymentNonce: number | BN | string;
          data: string;
        }[];
        useSelfBalance: boolean;
        recipient: string;
      };
    }): Promise<TxID>;
  };

  batchBuyERC1155s: {
    ({
      sellOrders,
      signatures,
      erc1155TokenAmounts,
      callbackData,
      revertIfIncomplete,
    }: {
      sellOrders: {
        direction: number | BN | string;
        maker: string;
        taker: string;
        expiry: number | BN | string;
        nonce: number | BN | string;
        erc20Token: string;
        erc20TokenAmount: number | BN | string;
        fees: {
          recipient: string;
          amount: number | BN | string;
          feeData: string;
        }[];
        erc1155Token: string;
        erc1155TokenId: number | BN | string;
        erc1155TokenProperties: {
          propertyValidator: string;
          propertyData: string;
        }[];
        erc1155TokenAmount: number | BN | string;
      }[];
      signatures: {
        signatureType: number | BN | string;
        v: number | BN | string;
        r: string;
        s: string;
      }[];
      erc1155TokenAmounts: (number | BN | string)[];
      callbackData: string[];
      revertIfIncomplete: boolean;
    }): Promise<TxID>;
  };

  batchBuyERC721s: {
    ({
      sellOrders,
      signatures,
      callbackData,
      revertIfIncomplete,
    }: {
      sellOrders: {
        direction: number | BN | string;
        maker: string;
        taker: string;
        expiry: number | BN | string;
        nonce: number | BN | string;
        erc20Token: string;
        erc20TokenAmount: number | BN | string;
        fees: {
          recipient: string;
          amount: number | BN | string;
          feeData: string;
        }[];
        erc721Token: string;
        erc721TokenId: number | BN | string;
        erc721TokenProperties: {
          propertyValidator: string;
          propertyData: string;
        }[];
      }[];
      signatures: {
        signatureType: number | BN | string;
        v: number | BN | string;
        r: string;
        s: string;
      }[];
      callbackData: string[];
      revertIfIncomplete: boolean;
    }): Promise<TxID>;
  };

  batchCancelERC1155Orders: {
    ({ orderNonces }: { orderNonces: (number | BN | string)[] }): Promise<TxID>;
  };

  batchCancelERC721Orders: {
    ({ orderNonces }: { orderNonces: (number | BN | string)[] }): Promise<TxID>;
  };

  batchCancelLimitOrders: {
    ({
      orders,
    }: {
      orders: {
        makerToken: string;
        takerToken: string;
        makerAmount: number | BN | string;
        takerAmount: number | BN | string;
        takerTokenFeeAmount: number | BN | string;
        maker: string;
        taker: string;
        sender: string;
        feeRecipient: string;
        pool: string;
        expiry: number | BN | string;
        salt: number | BN | string;
      }[];
    }): Promise<TxID>;
  };

  batchCancelPairLimitOrders: {
    ({
      makerTokens,
      takerTokens,
      minValidSalts,
    }: {
      makerTokens: string[];
      takerTokens: string[];
      minValidSalts: (number | BN | string)[];
    }): Promise<TxID>;
  };

  batchCancelPairLimitOrdersWithSigner: {
    ({
      maker,
      makerTokens,
      takerTokens,
      minValidSalts,
    }: {
      maker: string;
      makerTokens: string[];
      takerTokens: string[];
      minValidSalts: (number | BN | string)[];
    }): Promise<TxID>;
  };

  batchCancelPairRfqOrders: {
    ({
      makerTokens,
      takerTokens,
      minValidSalts,
    }: {
      makerTokens: string[];
      takerTokens: string[];
      minValidSalts: (number | BN | string)[];
    }): Promise<TxID>;
  };

  batchCancelPairRfqOrdersWithSigner: {
    ({
      maker,
      makerTokens,
      takerTokens,
      minValidSalts,
    }: {
      maker: string;
      makerTokens: string[];
      takerTokens: string[];
      minValidSalts: (number | BN | string)[];
    }): Promise<TxID>;
  };

  batchCancelRfqOrders: {
    ({
      orders,
    }: {
      orders: {
        makerToken: string;
        takerToken: string;
        makerAmount: number | BN | string;
        takerAmount: number | BN | string;
        maker: string;
        taker: string;
        txOrigin: string;
        pool: string;
        expiry: number | BN | string;
        salt: number | BN | string;
      }[];
    }): Promise<TxID>;
  };

  batchExecuteMetaTransactions: {
    ({
      mtxs,
      signatures,
    }: {
      mtxs: {
        signer: string;
        sender: string;
        minGasPrice: number | BN | string;
        maxGasPrice: number | BN | string;
        expirationTimeSeconds: number | BN | string;
        salt: number | BN | string;
        callData: string;
        value: number | BN | string;
        feeToken: string;
        feeAmount: number | BN | string;
      }[];
      signatures: {
        signatureType: number | BN | string;
        v: number | BN | string;
        r: string;
        s: string;
      }[];
    }): Promise<TxID>;
  };

  batchFillLimitOrders: {
    ({
      orders,
      signatures,
      takerTokenFillAmounts,
      revertIfIncomplete,
    }: {
      orders: {
        makerToken: string;
        takerToken: string;
        makerAmount: number | BN | string;
        takerAmount: number | BN | string;
        takerTokenFeeAmount: number | BN | string;
        maker: string;
        taker: string;
        sender: string;
        feeRecipient: string;
        pool: string;
        expiry: number | BN | string;
        salt: number | BN | string;
      }[];
      signatures: {
        signatureType: number | BN | string;
        v: number | BN | string;
        r: string;
        s: string;
      }[];
      takerTokenFillAmounts: (number | BN | string)[];
      revertIfIncomplete: boolean;
    }): Promise<TxID>;
  };

  batchFillRfqOrders: {
    ({
      orders,
      signatures,
      takerTokenFillAmounts,
      revertIfIncomplete,
    }: {
      orders: {
        makerToken: string;
        takerToken: string;
        makerAmount: number | BN | string;
        takerAmount: number | BN | string;
        maker: string;
        taker: string;
        txOrigin: string;
        pool: string;
        expiry: number | BN | string;
        salt: number | BN | string;
      }[];
      signatures: {
        signatureType: number | BN | string;
        v: number | BN | string;
        r: string;
        s: string;
      }[];
      takerTokenFillAmounts: (number | BN | string)[];
      revertIfIncomplete: boolean;
    }): Promise<TxID>;
  };

  batchFillTakerSignedOtcOrders: {
    ({
      orders,
      makerSignatures,
      takerSignatures,
      unwrapWeth,
    }: {
      orders: {
        makerToken: string;
        takerToken: string;
        makerAmount: number | BN | string;
        takerAmount: number | BN | string;
        maker: string;
        taker: string;
        txOrigin: string;
        expiryAndNonce: number | BN | string;
      }[];
      makerSignatures: {
        signatureType: number | BN | string;
        v: number | BN | string;
        r: string;
        s: string;
      }[];
      takerSignatures: {
        signatureType: number | BN | string;
        v: number | BN | string;
        r: string;
        s: string;
      }[];
      unwrapWeth: boolean[];
    }): Promise<TxID>;
  };

  batchGetLimitOrderRelevantStates({
    orders,
    signatures,
  }: {
    orders: {
      makerToken: string;
      takerToken: string;
      makerAmount: number | BN | string;
      takerAmount: number | BN | string;
      takerTokenFeeAmount: number | BN | string;
      maker: string;
      taker: string;
      sender: string;
      feeRecipient: string;
      pool: string;
      expiry: number | BN | string;
      salt: number | BN | string;
    }[];
    signatures: {
      signatureType: number | BN | string;
      v: number | BN | string;
      r: string;
      s: string;
    }[];
  }): Promise<{
    orderInfos: { orderHash: string; status: BN; takerTokenFilledAmount: BN }[];
    actualFillableTakerTokenAmounts: BN[];
    isSignatureValids: boolean[];
  }>;

  batchGetRfqOrderRelevantStates({
    orders,
    signatures,
  }: {
    orders: {
      makerToken: string;
      takerToken: string;
      makerAmount: number | BN | string;
      takerAmount: number | BN | string;
      maker: string;
      taker: string;
      txOrigin: string;
      pool: string;
      expiry: number | BN | string;
      salt: number | BN | string;
    }[];
    signatures: {
      signatureType: number | BN | string;
      v: number | BN | string;
      r: string;
      s: string;
    }[];
  }): Promise<{
    orderInfos: { orderHash: string; status: BN; takerTokenFilledAmount: BN }[];
    actualFillableTakerTokenAmounts: BN[];
    isSignatureValids: boolean[];
  }>;

  batchMatchERC721Orders: {
    ({
      sellOrders,
      buyOrders,
      sellOrderSignatures,
      buyOrderSignatures,
    }: {
      sellOrders: {
        direction: number | BN | string;
        maker: string;
        taker: string;
        expiry: number | BN | string;
        nonce: number | BN | string;
        erc20Token: string;
        erc20TokenAmount: number | BN | string;
        fees: {
          recipient: string;
          amount: number | BN | string;
          feeData: string;
        }[];
        erc721Token: string;
        erc721TokenId: number | BN | string;
        erc721TokenProperties: {
          propertyValidator: string;
          propertyData: string;
        }[];
      }[];
      buyOrders: {
        direction: number | BN | string;
        maker: string;
        taker: string;
        expiry: number | BN | string;
        nonce: number | BN | string;
        erc20Token: string;
        erc20TokenAmount: number | BN | string;
        fees: {
          recipient: string;
          amount: number | BN | string;
          feeData: string;
        }[];
        erc721Token: string;
        erc721TokenId: number | BN | string;
        erc721TokenProperties: {
          propertyValidator: string;
          propertyData: string;
        }[];
      }[];
      sellOrderSignatures: {
        signatureType: number | BN | string;
        v: number | BN | string;
        r: string;
        s: string;
      }[];
      buyOrderSignatures: {
        signatureType: number | BN | string;
        v: number | BN | string;
        r: string;
        s: string;
      }[];
    }): Promise<TxID>;
  };

  buyERC1155: {
    ({
      sellOrder,
      signature,
      erc1155BuyAmount,
      callbackData,
    }: {
      sellOrder: {
        direction: number | BN | string;
        maker: string;
        taker: string;
        expiry: number | BN | string;
        nonce: number | BN | string;
        erc20Token: string;
        erc20TokenAmount: number | BN | string;
        fees: {
          recipient: string;
          amount: number | BN | string;
          feeData: string;
        }[];
        erc1155Token: string;
        erc1155TokenId: number | BN | string;
        erc1155TokenProperties: {
          propertyValidator: string;
          propertyData: string;
        }[];
        erc1155TokenAmount: number | BN | string;
      };
      signature: {
        signatureType: number | BN | string;
        v: number | BN | string;
        r: string;
        s: string;
      };
      erc1155BuyAmount: number | BN | string;
      callbackData: string;
    }): Promise<TxID>;
  };

  buyERC721: {
    ({
      sellOrder,
      signature,
      callbackData,
    }: {
      sellOrder: {
        direction: number | BN | string;
        maker: string;
        taker: string;
        expiry: number | BN | string;
        nonce: number | BN | string;
        erc20Token: string;
        erc20TokenAmount: number | BN | string;
        fees: {
          recipient: string;
          amount: number | BN | string;
          feeData: string;
        }[];
        erc721Token: string;
        erc721TokenId: number | BN | string;
        erc721TokenProperties: {
          propertyValidator: string;
          propertyData: string;
        }[];
      };
      signature: {
        signatureType: number | BN | string;
        v: number | BN | string;
        r: string;
        s: string;
      };
      callbackData: string;
    }): Promise<TxID>;
  };

  cancelERC1155Order: {
    ({ orderNonce }: { orderNonce: number | BN | string }): Promise<TxID>;
  };

  cancelERC721Order: {
    ({ orderNonce }: { orderNonce: number | BN | string }): Promise<TxID>;
  };

  cancelLimitOrder: {
    ({
      order,
    }: {
      order: {
        makerToken: string;
        takerToken: string;
        makerAmount: number | BN | string;
        takerAmount: number | BN | string;
        takerTokenFeeAmount: number | BN | string;
        maker: string;
        taker: string;
        sender: string;
        feeRecipient: string;
        pool: string;
        expiry: number | BN | string;
        salt: number | BN | string;
      };
    }): Promise<TxID>;
  };

  cancelPairLimitOrders: {
    ({
      makerToken,
      takerToken,
      minValidSalt,
    }: {
      makerToken: string;
      takerToken: string;
      minValidSalt: number | BN | string;
    }): Promise<TxID>;
  };

  cancelPairLimitOrdersWithSigner: {
    ({
      maker,
      makerToken,
      takerToken,
      minValidSalt,
    }: {
      maker: string;
      makerToken: string;
      takerToken: string;
      minValidSalt: number | BN | string;
    }): Promise<TxID>;
  };

  cancelPairRfqOrders: {
    ({
      makerToken,
      takerToken,
      minValidSalt,
    }: {
      makerToken: string;
      takerToken: string;
      minValidSalt: number | BN | string;
    }): Promise<TxID>;
  };

  cancelPairRfqOrdersWithSigner: {
    ({
      maker,
      makerToken,
      takerToken,
      minValidSalt,
    }: {
      maker: string;
      makerToken: string;
      takerToken: string;
      minValidSalt: number | BN | string;
    }): Promise<TxID>;
  };

  cancelRfqOrder: {
    ({
      order,
    }: {
      order: {
        makerToken: string;
        takerToken: string;
        makerAmount: number | BN | string;
        takerAmount: number | BN | string;
        maker: string;
        taker: string;
        txOrigin: string;
        pool: string;
        expiry: number | BN | string;
        salt: number | BN | string;
      };
    }): Promise<TxID>;
  };

  createTransformWallet: {
    (): Promise<TxID>;
  };

  executeMetaTransaction: {
    ({
      mtx,
      signature,
    }: {
      mtx: {
        signer: string;
        sender: string;
        minGasPrice: number | BN | string;
        maxGasPrice: number | BN | string;
        expirationTimeSeconds: number | BN | string;
        salt: number | BN | string;
        callData: string;
        value: number | BN | string;
        feeToken: string;
        feeAmount: number | BN | string;
      };
      signature: {
        signatureType: number | BN | string;
        v: number | BN | string;
        r: string;
        s: string;
      };
    }): Promise<TxID>;
  };

  extend: {
    ({ selector, impl }: { selector: string; impl: string }): Promise<TxID>;
  };

  fillLimitOrder: {
    ({
      order,
      signature,
      takerTokenFillAmount,
    }: {
      order: {
        makerToken: string;
        takerToken: string;
        makerAmount: number | BN | string;
        takerAmount: number | BN | string;
        takerTokenFeeAmount: number | BN | string;
        maker: string;
        taker: string;
        sender: string;
        feeRecipient: string;
        pool: string;
        expiry: number | BN | string;
        salt: number | BN | string;
      };
      signature: {
        signatureType: number | BN | string;
        v: number | BN | string;
        r: string;
        s: string;
      };
      takerTokenFillAmount: number | BN | string;
    }): Promise<TxID>;
  };

  fillOrKillLimitOrder: {
    ({
      order,
      signature,
      takerTokenFillAmount,
    }: {
      order: {
        makerToken: string;
        takerToken: string;
        makerAmount: number | BN | string;
        takerAmount: number | BN | string;
        takerTokenFeeAmount: number | BN | string;
        maker: string;
        taker: string;
        sender: string;
        feeRecipient: string;
        pool: string;
        expiry: number | BN | string;
        salt: number | BN | string;
      };
      signature: {
        signatureType: number | BN | string;
        v: number | BN | string;
        r: string;
        s: string;
      };
      takerTokenFillAmount: number | BN | string;
    }): Promise<TxID>;
  };

  fillOrKillRfqOrder: {
    ({
      order,
      signature,
      takerTokenFillAmount,
    }: {
      order: {
        makerToken: string;
        takerToken: string;
        makerAmount: number | BN | string;
        takerAmount: number | BN | string;
        maker: string;
        taker: string;
        txOrigin: string;
        pool: string;
        expiry: number | BN | string;
        salt: number | BN | string;
      };
      signature: {
        signatureType: number | BN | string;
        v: number | BN | string;
        r: string;
        s: string;
      };
      takerTokenFillAmount: number | BN | string;
    }): Promise<TxID>;
  };

  fillOtcOrder: {
    ({
      order,
      makerSignature,
      takerTokenFillAmount,
    }: {
      order: {
        makerToken: string;
        takerToken: string;
        makerAmount: number | BN | string;
        takerAmount: number | BN | string;
        maker: string;
        taker: string;
        txOrigin: string;
        expiryAndNonce: number | BN | string;
      };
      makerSignature: {
        signatureType: number | BN | string;
        v: number | BN | string;
        r: string;
        s: string;
      };
      takerTokenFillAmount: number | BN | string;
    }): Promise<TxID>;
  };

  fillOtcOrderForEth: {
    ({
      order,
      makerSignature,
      takerTokenFillAmount,
    }: {
      order: {
        makerToken: string;
        takerToken: string;
        makerAmount: number | BN | string;
        takerAmount: number | BN | string;
        maker: string;
        taker: string;
        txOrigin: string;
        expiryAndNonce: number | BN | string;
      };
      makerSignature: {
        signatureType: number | BN | string;
        v: number | BN | string;
        r: string;
        s: string;
      };
      takerTokenFillAmount: number | BN | string;
    }): Promise<TxID>;
  };

  fillOtcOrderWithEth: {
    ({
      order,
      makerSignature,
    }: {
      order: {
        makerToken: string;
        takerToken: string;
        makerAmount: number | BN | string;
        takerAmount: number | BN | string;
        maker: string;
        taker: string;
        txOrigin: string;
        expiryAndNonce: number | BN | string;
      };
      makerSignature: {
        signatureType: number | BN | string;
        v: number | BN | string;
        r: string;
        s: string;
      };
    }): Promise<TxID>;
  };

  fillRfqOrder: {
    ({
      order,
      signature,
      takerTokenFillAmount,
    }: {
      order: {
        makerToken: string;
        takerToken: string;
        makerAmount: number | BN | string;
        takerAmount: number | BN | string;
        maker: string;
        taker: string;
        txOrigin: string;
        pool: string;
        expiry: number | BN | string;
        salt: number | BN | string;
      };
      signature: {
        signatureType: number | BN | string;
        v: number | BN | string;
        r: string;
        s: string;
      };
      takerTokenFillAmount: number | BN | string;
    }): Promise<TxID>;
  };

  fillTakerSignedOtcOrder: {
    ({
      order,
      makerSignature,
      takerSignature,
    }: {
      order: {
        makerToken: string;
        takerToken: string;
        makerAmount: number | BN | string;
        takerAmount: number | BN | string;
        maker: string;
        taker: string;
        txOrigin: string;
        expiryAndNonce: number | BN | string;
      };
      makerSignature: {
        signatureType: number | BN | string;
        v: number | BN | string;
        r: string;
        s: string;
      };
      takerSignature: {
        signatureType: number | BN | string;
        v: number | BN | string;
        r: string;
        s: string;
      };
    }): Promise<TxID>;
  };

  fillTakerSignedOtcOrderForEth: {
    ({
      order,
      makerSignature,
      takerSignature,
    }: {
      order: {
        makerToken: string;
        takerToken: string;
        makerAmount: number | BN | string;
        takerAmount: number | BN | string;
        maker: string;
        taker: string;
        txOrigin: string;
        expiryAndNonce: number | BN | string;
      };
      makerSignature: {
        signatureType: number | BN | string;
        v: number | BN | string;
        r: string;
        s: string;
      };
      takerSignature: {
        signatureType: number | BN | string;
        v: number | BN | string;
        r: string;
        s: string;
      };
    }): Promise<TxID>;
  };

  getERC1155OrderHash({
    order,
  }: {
    order: {
      direction: number | BN | string;
      maker: string;
      taker: string;
      expiry: number | BN | string;
      nonce: number | BN | string;
      erc20Token: string;
      erc20TokenAmount: number | BN | string;
      fees: {
        recipient: string;
        amount: number | BN | string;
        feeData: string;
      }[];
      erc1155Token: string;
      erc1155TokenId: number | BN | string;
      erc1155TokenProperties: {
        propertyValidator: string;
        propertyData: string;
      }[];
      erc1155TokenAmount: number | BN | string;
    };
  }): Promise<string>;

  getERC1155OrderInfo({
    order,
  }: {
    order: {
      direction: number | BN | string;
      maker: string;
      taker: string;
      expiry: number | BN | string;
      nonce: number | BN | string;
      erc20Token: string;
      erc20TokenAmount: number | BN | string;
      fees: {
        recipient: string;
        amount: number | BN | string;
        feeData: string;
      }[];
      erc1155Token: string;
      erc1155TokenId: number | BN | string;
      erc1155TokenProperties: {
        propertyValidator: string;
        propertyData: string;
      }[];
      erc1155TokenAmount: number | BN | string;
    };
  }): Promise<{
    orderHash: string;
    status: BN;
    orderAmount: BN;
    remainingAmount: BN;
  }>;

  getERC721OrderHash({
    order,
  }: {
    order: {
      direction: number | BN | string;
      maker: string;
      taker: string;
      expiry: number | BN | string;
      nonce: number | BN | string;
      erc20Token: string;
      erc20TokenAmount: number | BN | string;
      fees: {
        recipient: string;
        amount: number | BN | string;
        feeData: string;
      }[];
      erc721Token: string;
      erc721TokenId: number | BN | string;
      erc721TokenProperties: {
        propertyValidator: string;
        propertyData: string;
      }[];
    };
  }): Promise<string>;

  getERC721OrderStatus({
    order,
  }: {
    order: {
      direction: number | BN | string;
      maker: string;
      taker: string;
      expiry: number | BN | string;
      nonce: number | BN | string;
      erc20Token: string;
      erc20TokenAmount: number | BN | string;
      fees: {
        recipient: string;
        amount: number | BN | string;
        feeData: string;
      }[];
      erc721Token: string;
      erc721TokenId: number | BN | string;
      erc721TokenProperties: {
        propertyValidator: string;
        propertyData: string;
      }[];
    };
  }): Promise<BN>;

  getERC721OrderStatusBitVector({
    maker,
    nonceRange,
  }: {
    maker: string;
    nonceRange: number | BN | string;
  }): Promise<BN>;

  getLimitOrderHash({
    order,
  }: {
    order: {
      makerToken: string;
      takerToken: string;
      makerAmount: number | BN | string;
      takerAmount: number | BN | string;
      takerTokenFeeAmount: number | BN | string;
      maker: string;
      taker: string;
      sender: string;
      feeRecipient: string;
      pool: string;
      expiry: number | BN | string;
      salt: number | BN | string;
    };
  }): Promise<string>;

  getLimitOrderInfo({
    order,
  }: {
    order: {
      makerToken: string;
      takerToken: string;
      makerAmount: number | BN | string;
      takerAmount: number | BN | string;
      takerTokenFeeAmount: number | BN | string;
      maker: string;
      taker: string;
      sender: string;
      feeRecipient: string;
      pool: string;
      expiry: number | BN | string;
      salt: number | BN | string;
    };
  }): Promise<{ orderHash: string; status: BN; takerTokenFilledAmount: BN }>;

  getLimitOrderRelevantState({
    order,
    signature,
  }: {
    order: {
      makerToken: string;
      takerToken: string;
      makerAmount: number | BN | string;
      takerAmount: number | BN | string;
      takerTokenFeeAmount: number | BN | string;
      maker: string;
      taker: string;
      sender: string;
      feeRecipient: string;
      pool: string;
      expiry: number | BN | string;
      salt: number | BN | string;
    };
    signature: {
      signatureType: number | BN | string;
      v: number | BN | string;
      r: string;
      s: string;
    };
  }): Promise<{
    orderInfo: { orderHash: string; status: BN; takerTokenFilledAmount: BN };
    actualFillableTakerTokenAmount: BN;
    isSignatureValid: boolean;
  }>;

  getMetaTransactionExecutedBlock({
    mtx,
  }: {
    mtx: {
      signer: string;
      sender: string;
      minGasPrice: number | BN | string;
      maxGasPrice: number | BN | string;
      expirationTimeSeconds: number | BN | string;
      salt: number | BN | string;
      callData: string;
      value: number | BN | string;
      feeToken: string;
      feeAmount: number | BN | string;
    };
  }): Promise<BN>;

  getMetaTransactionHash({
    mtx,
  }: {
    mtx: {
      signer: string;
      sender: string;
      minGasPrice: number | BN | string;
      maxGasPrice: number | BN | string;
      expirationTimeSeconds: number | BN | string;
      salt: number | BN | string;
      callData: string;
      value: number | BN | string;
      feeToken: string;
      feeAmount: number | BN | string;
    };
  }): Promise<string>;

  getMetaTransactionHashExecutedBlock({
    mtxHash,
  }: {
    mtxHash: string;
  }): Promise<BN>;

  getOtcOrderHash({
    order,
  }: {
    order: {
      makerToken: string;
      takerToken: string;
      makerAmount: number | BN | string;
      takerAmount: number | BN | string;
      maker: string;
      taker: string;
      txOrigin: string;
      expiryAndNonce: number | BN | string;
    };
  }): Promise<string>;

  getOtcOrderInfo({
    order,
  }: {
    order: {
      makerToken: string;
      takerToken: string;
      makerAmount: number | BN | string;
      takerAmount: number | BN | string;
      maker: string;
      taker: string;
      txOrigin: string;
      expiryAndNonce: number | BN | string;
    };
  }): Promise<{ orderHash: string; status: BN }>;

  getProtocolFeeMultiplier(): Promise<BN>;

  getQuoteSigner(): Promise<string>;

  getRfqOrderHash({
    order,
  }: {
    order: {
      makerToken: string;
      takerToken: string;
      makerAmount: number | BN | string;
      takerAmount: number | BN | string;
      maker: string;
      taker: string;
      txOrigin: string;
      pool: string;
      expiry: number | BN | string;
      salt: number | BN | string;
    };
  }): Promise<string>;

  getRfqOrderInfo({
    order,
  }: {
    order: {
      makerToken: string;
      takerToken: string;
      makerAmount: number | BN | string;
      takerAmount: number | BN | string;
      maker: string;
      taker: string;
      txOrigin: string;
      pool: string;
      expiry: number | BN | string;
      salt: number | BN | string;
    };
  }): Promise<{ orderHash: string; status: BN; takerTokenFilledAmount: BN }>;

  getRfqOrderRelevantState({
    order,
    signature,
  }: {
    order: {
      makerToken: string;
      takerToken: string;
      makerAmount: number | BN | string;
      takerAmount: number | BN | string;
      maker: string;
      taker: string;
      txOrigin: string;
      pool: string;
      expiry: number | BN | string;
      salt: number | BN | string;
    };
    signature: {
      signatureType: number | BN | string;
      v: number | BN | string;
      r: string;
      s: string;
    };
  }): Promise<{
    orderInfo: { orderHash: string; status: BN; takerTokenFilledAmount: BN };
    actualFillableTakerTokenAmount: BN;
    isSignatureValid: boolean;
  }>;

  getRollbackEntryAtIndex({
    selector,
    idx,
  }: {
    selector: string;
    idx: number | BN | string;
  }): Promise<string>;

  getRollbackLength({ selector }: { selector: string }): Promise<BN>;

  getTransformWallet(): Promise<string>;

  getTransformerDeployer(): Promise<string>;

  isValidOrderSigner({
    maker,
    signer,
  }: {
    maker: string;
    signer: string;
  }): Promise<boolean>;

  lastOtcTxOriginNonce({
    txOrigin,
    nonceBucket,
  }: {
    txOrigin: string;
    nonceBucket: number | BN | string;
  }): Promise<BN>;

  matchERC721Orders: {
    ({
      sellOrder,
      buyOrder,
      sellOrderSignature,
      buyOrderSignature,
    }: {
      sellOrder: {
        direction: number | BN | string;
        maker: string;
        taker: string;
        expiry: number | BN | string;
        nonce: number | BN | string;
        erc20Token: string;
        erc20TokenAmount: number | BN | string;
        fees: {
          recipient: string;
          amount: number | BN | string;
          feeData: string;
        }[];
        erc721Token: string;
        erc721TokenId: number | BN | string;
        erc721TokenProperties: {
          propertyValidator: string;
          propertyData: string;
        }[];
      };
      buyOrder: {
        direction: number | BN | string;
        maker: string;
        taker: string;
        expiry: number | BN | string;
        nonce: number | BN | string;
        erc20Token: string;
        erc20TokenAmount: number | BN | string;
        fees: {
          recipient: string;
          amount: number | BN | string;
          feeData: string;
        }[];
        erc721Token: string;
        erc721TokenId: number | BN | string;
        erc721TokenProperties: {
          propertyValidator: string;
          propertyData: string;
        }[];
      };
      sellOrderSignature: {
        signatureType: number | BN | string;
        v: number | BN | string;
        r: string;
        s: string;
      };
      buyOrderSignature: {
        signatureType: number | BN | string;
        v: number | BN | string;
        r: string;
        s: string;
      };
    }): Promise<TxID>;
  };

  migrate: {
    ({
      target,
      data,
      newOwner,
    }: {
      target: string;
      data: string;
      newOwner: string;
    }): Promise<TxID>;
  };

  multiplexBatchSellEthForToken: {
    ({
      outputToken,
      calls,
      minBuyAmount,
    }: {
      outputToken: string;
      calls: {
        id: number | BN | string;
        sellAmount: number | BN | string;
        data: string;
      }[];
      minBuyAmount: number | BN | string;
    }): Promise<TxID>;
  };

  multiplexBatchSellTokenForEth: {
    ({
      inputToken,
      calls,
      sellAmount,
      minBuyAmount,
    }: {
      inputToken: string;
      calls: {
        id: number | BN | string;
        sellAmount: number | BN | string;
        data: string;
      }[];
      sellAmount: number | BN | string;
      minBuyAmount: number | BN | string;
    }): Promise<TxID>;
  };

  multiplexBatchSellTokenForToken: {
    ({
      inputToken,
      outputToken,
      calls,
      sellAmount,
      minBuyAmount,
    }: {
      inputToken: string;
      outputToken: string;
      calls: {
        id: number | BN | string;
        sellAmount: number | BN | string;
        data: string;
      }[];
      sellAmount: number | BN | string;
      minBuyAmount: number | BN | string;
    }): Promise<TxID>;
  };

  multiplexMultiHopSellEthForToken: {
    ({
      tokens,
      calls,
      minBuyAmount,
    }: {
      tokens: string[];
      calls: { id: number | BN | string; data: string }[];
      minBuyAmount: number | BN | string;
    }): Promise<TxID>;
  };

  multiplexMultiHopSellTokenForEth: {
    ({
      tokens,
      calls,
      sellAmount,
      minBuyAmount,
    }: {
      tokens: string[];
      calls: { id: number | BN | string; data: string }[];
      sellAmount: number | BN | string;
      minBuyAmount: number | BN | string;
    }): Promise<TxID>;
  };

  multiplexMultiHopSellTokenForToken: {
    ({
      tokens,
      calls,
      sellAmount,
      minBuyAmount,
    }: {
      tokens: string[];
      calls: { id: number | BN | string; data: string }[];
      sellAmount: number | BN | string;
      minBuyAmount: number | BN | string;
    }): Promise<TxID>;
  };

  onERC1155Received: {
    ({
      operator,
      from,
      tokenId,
      value,
      data,
    }: {
      operator: string;
      from: string;
      tokenId: number | BN | string;
      value: number | BN | string;
      data: string;
    }): Promise<TxID>;
  };

  onERC721Received: {
    ({
      operator,
      from,
      tokenId,
      data,
    }: {
      operator: string;
      from: string;
      tokenId: number | BN | string;
      data: string;
    }): Promise<TxID>;
  };

  owner(): Promise<string>;

  preSignERC1155Order: {
    ({
      order,
    }: {
      order: {
        direction: number | BN | string;
        maker: string;
        taker: string;
        expiry: number | BN | string;
        nonce: number | BN | string;
        erc20Token: string;
        erc20TokenAmount: number | BN | string;
        fees: {
          recipient: string;
          amount: number | BN | string;
          feeData: string;
        }[];
        erc1155Token: string;
        erc1155TokenId: number | BN | string;
        erc1155TokenProperties: {
          propertyValidator: string;
          propertyData: string;
        }[];
        erc1155TokenAmount: number | BN | string;
      };
    }): Promise<TxID>;
  };

  preSignERC721Order: {
    ({
      order,
    }: {
      order: {
        direction: number | BN | string;
        maker: string;
        taker: string;
        expiry: number | BN | string;
        nonce: number | BN | string;
        erc20Token: string;
        erc20TokenAmount: number | BN | string;
        fees: {
          recipient: string;
          amount: number | BN | string;
          feeData: string;
        }[];
        erc721Token: string;
        erc721TokenId: number | BN | string;
        erc721TokenProperties: {
          propertyValidator: string;
          propertyData: string;
        }[];
      };
    }): Promise<TxID>;
  };

  registerAllowedOrderSigner: {
    ({ signer, allowed }: { signer: string; allowed: boolean }): Promise<TxID>;
  };

  registerAllowedRfqOrigins: {
    ({
      origins,
      allowed,
    }: {
      origins: string[];
      allowed: boolean;
    }): Promise<TxID>;
  };

  rollback: {
    ({
      selector,
      targetImpl,
    }: {
      selector: string;
      targetImpl: string;
    }): Promise<TxID>;
  };

  sellERC1155: {
    ({
      buyOrder,
      signature,
      erc1155TokenId,
      erc1155SellAmount,
      unwrapNativeToken,
      callbackData,
    }: {
      buyOrder: {
        direction: number | BN | string;
        maker: string;
        taker: string;
        expiry: number | BN | string;
        nonce: number | BN | string;
        erc20Token: string;
        erc20TokenAmount: number | BN | string;
        fees: {
          recipient: string;
          amount: number | BN | string;
          feeData: string;
        }[];
        erc1155Token: string;
        erc1155TokenId: number | BN | string;
        erc1155TokenProperties: {
          propertyValidator: string;
          propertyData: string;
        }[];
        erc1155TokenAmount: number | BN | string;
      };
      signature: {
        signatureType: number | BN | string;
        v: number | BN | string;
        r: string;
        s: string;
      };
      erc1155TokenId: number | BN | string;
      erc1155SellAmount: number | BN | string;
      unwrapNativeToken: boolean;
      callbackData: string;
    }): Promise<TxID>;
  };

  sellERC721: {
    ({
      buyOrder,
      signature,
      erc721TokenId,
      unwrapNativeToken,
      callbackData,
    }: {
      buyOrder: {
        direction: number | BN | string;
        maker: string;
        taker: string;
        expiry: number | BN | string;
        nonce: number | BN | string;
        erc20Token: string;
        erc20TokenAmount: number | BN | string;
        fees: {
          recipient: string;
          amount: number | BN | string;
          feeData: string;
        }[];
        erc721Token: string;
        erc721TokenId: number | BN | string;
        erc721TokenProperties: {
          propertyValidator: string;
          propertyData: string;
        }[];
      };
      signature: {
        signatureType: number | BN | string;
        v: number | BN | string;
        r: string;
        s: string;
      };
      erc721TokenId: number | BN | string;
      unwrapNativeToken: boolean;
      callbackData: string;
    }): Promise<TxID>;
  };

  sellEthForTokenToUniswapV3: {
    ({
      encodedPath,
      minBuyAmount,
      recipient,
    }: {
      encodedPath: string;
      minBuyAmount: number | BN | string;
      recipient: string;
    }): Promise<TxID>;
  };

  sellToLiquidityProvider: {
    ({
      inputToken,
      outputToken,
      provider,
      recipient,
      sellAmount,
      minBuyAmount,
      auxiliaryData,
    }: {
      inputToken: string;
      outputToken: string;
      provider: string;
      recipient: string;
      sellAmount: number | BN | string;
      minBuyAmount: number | BN | string;
      auxiliaryData: string;
    }): Promise<TxID>;
  };

  sellToPancakeSwap: {
    ({
      tokens,
      sellAmount,
      minBuyAmount,
      fork,
    }: {
      tokens: string[];
      sellAmount: number | BN | string;
      minBuyAmount: number | BN | string;
      fork: number | BN | string;
    }): Promise<TxID>;
  };

  sellToUniswap: {
    ({
      tokens,
      sellAmount,
      minBuyAmount,
      isSushi,
    }: {
      tokens: string[];
      sellAmount: number | BN | string;
      minBuyAmount: number | BN | string;
      isSushi: boolean;
    }): Promise<TxID>;
  };

  sellTokenForEthToUniswapV3: {
    ({
      encodedPath,
      sellAmount,
      minBuyAmount,
      recipient,
    }: {
      encodedPath: string;
      sellAmount: number | BN | string;
      minBuyAmount: number | BN | string;
      recipient: string;
    }): Promise<TxID>;
  };

  sellTokenForTokenToUniswapV3: {
    ({
      encodedPath,
      sellAmount,
      minBuyAmount,
      recipient,
    }: {
      encodedPath: string;
      sellAmount: number | BN | string;
      minBuyAmount: number | BN | string;
      recipient: string;
    }): Promise<TxID>;
  };

  setQuoteSigner: {
    ({ quoteSigner }: { quoteSigner: string }): Promise<TxID>;
  };

  setTransformerDeployer: {
    ({ transformerDeployer }: { transformerDeployer: string }): Promise<TxID>;
  };

  supportInterface({ interfaceId }: { interfaceId: string }): Promise<boolean>;

  transferOwnership: {
    ({ newOwner }: { newOwner: string }): Promise<TxID>;
  };

  transferProtocolFeesForPools: {
    ({ poolIds }: { poolIds: string[] }): Promise<TxID>;
  };

  transferTrappedTokensTo: {
    ({
      erc20,
      amountOut,
      recipientWallet,
    }: {
      erc20: string;
      amountOut: number | BN | string;
      recipientWallet: string;
    }): Promise<TxID>;
  };

  transformERC20: {
    ({
      inputToken,
      outputToken,
      inputTokenAmount,
      minOutputTokenAmount,
      transformations,
    }: {
      inputToken: string;
      outputToken: string;
      inputTokenAmount: number | BN | string;
      minOutputTokenAmount: number | BN | string;
      transformations: {
        deploymentNonce: number | BN | string;
        data: string;
      }[];
    }): Promise<TxID>;
  };

  uniswapV3SwapCallback: {
    ({
      amount0Delta,
      amount1Delta,
      data,
    }: {
      amount0Delta: number | BN | string;
      amount1Delta: number | BN | string;
      data: string;
    }): Promise<TxID>;
  };

  validateERC1155OrderProperties({
    order,
    erc1155TokenId,
  }: {
    order: {
      direction: number | BN | string;
      maker: string;
      taker: string;
      expiry: number | BN | string;
      nonce: number | BN | string;
      erc20Token: string;
      erc20TokenAmount: number | BN | string;
      fees: {
        recipient: string;
        amount: number | BN | string;
        feeData: string;
      }[];
      erc1155Token: string;
      erc1155TokenId: number | BN | string;
      erc1155TokenProperties: {
        propertyValidator: string;
        propertyData: string;
      }[];
      erc1155TokenAmount: number | BN | string;
    };
    erc1155TokenId: number | BN | string;
  }): Promise<void>;

  validateERC1155OrderSignature({
    order,
    signature,
  }: {
    order: {
      direction: number | BN | string;
      maker: string;
      taker: string;
      expiry: number | BN | string;
      nonce: number | BN | string;
      erc20Token: string;
      erc20TokenAmount: number | BN | string;
      fees: {
        recipient: string;
        amount: number | BN | string;
        feeData: string;
      }[];
      erc1155Token: string;
      erc1155TokenId: number | BN | string;
      erc1155TokenProperties: {
        propertyValidator: string;
        propertyData: string;
      }[];
      erc1155TokenAmount: number | BN | string;
    };
    signature: {
      signatureType: number | BN | string;
      v: number | BN | string;
      r: string;
      s: string;
    };
  }): Promise<void>;

  validateERC721OrderProperties({
    order,
    erc721TokenId,
  }: {
    order: {
      direction: number | BN | string;
      maker: string;
      taker: string;
      expiry: number | BN | string;
      nonce: number | BN | string;
      erc20Token: string;
      erc20TokenAmount: number | BN | string;
      fees: {
        recipient: string;
        amount: number | BN | string;
        feeData: string;
      }[];
      erc721Token: string;
      erc721TokenId: number | BN | string;
      erc721TokenProperties: {
        propertyValidator: string;
        propertyData: string;
      }[];
    };
    erc721TokenId: number | BN | string;
  }): Promise<void>;

  validateERC721OrderSignature({
    order,
    signature,
  }: {
    order: {
      direction: number | BN | string;
      maker: string;
      taker: string;
      expiry: number | BN | string;
      nonce: number | BN | string;
      erc20Token: string;
      erc20TokenAmount: number | BN | string;
      fees: {
        recipient: string;
        amount: number | BN | string;
        feeData: string;
      }[];
      erc721Token: string;
      erc721TokenId: number | BN | string;
      erc721TokenProperties: {
        propertyValidator: string;
        propertyData: string;
      }[];
    };
    signature: {
      signatureType: number | BN | string;
      v: number | BN | string;
      r: string;
      s: string;
    };
  }): Promise<void>;
}
