Transactions for zkFi protocol can be created via TransactionRequest, TransactionOptions types of the Labyrinth SDK. A TransactionRequest object has the following fields:

export type TransactionRequest = {
  type: TransactionType;
  assetIds: number[];
  values: bigint[];
  feeAssetId: number;
  to: string;
  payload?: string;


A TransactionType enum to define the type of transaction - DEPOSIT, WITHDRAW, TRANSFER , and CONVERT. The types specify what you want to do with your account's assets.

  • DEPOSIT: To specify that you want to fund a shielded account from your public wallet i.e. it tops up the shielded account specified in to the field.

  • WITHDRAW: You may want to withdraw assets from your shielded account to your regular wallet address. This is what this type is for. The to field in this case must be a plain wallet address.

  • TRANSFER: This is to perform a fully private transfer of assets from your shielded account to another shielded account.

  • CONVERT: This is the special one to perform a transaction with any protocol that integrates with Labyrinth. e.g. to swap with Uniswap, lend on Aave, stake on Lido, etc. The to must be the address of the target protocols' "adaptor" contract. See more [here].


Specify a list of Labyrinth's assetIds of the asset/token you intend to transact. You can get a list of all supported assets from contractService::getAssets().


The corresponding values of assetIds you are transacting, in the same order.


The shielded address or public address to deposit, transfer or withdraw funds to. Or it could be the address of the integrated protocols' proxy contract.


The optional arbitrary data that may be needed by adaptor contract to function, in case of a CONVERT type transaction. It is empty (0x) by default. Feel free to refer the Uniswap integration example to understand this better.

Transaction Options

export type TransactionOptions = {
  revokerId: number;
  paymaster?: Hex;
  viaBundler?: boolean;

You can modify the default options to change some parameters of the transactions by passing TransactionOptionsobject. Current available options are as follows:

  • revokerId: The ID of the revoker chosen. You can query the registered revoker details from contractSource::getRevoker(...).

  • viaBundler: This is a boolean to specify if the prepared transactions will be sent via a bundler. This parameter affects the values used to generate proof and pay gas fee.

  • paymaster: The paymaster address that should pay the fee, if the transaction is sent via bundler.

Last updated