> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fuse.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Non-Blocking Transactions

For Developers who want to build use cases that require a higher throughput, then 2D nonces are essential. For example: A user may want to make four independent transactions. With only a 1D nonce, a user would have to wait for each transaction to get on-chain before sending the next one to the mempool. In Non-Blocking such a user can build each User Operation using nonces from keys 0, 1, 2, and 3. All four transactions can then be submitted at once without blocking each other. This can be an approve, unstake, withdraw and transfer transaction in one User Operation. The executeBatch() method is used.

To utilize this feature, simply pass the `TxOptions` with `useNonceSequence: true`. Setting this flag activates the NonceManager, which increments the nonce automatically. Additionally, you have the option to pass a custom nonce key, for example, `customNonceKey: BigInt.from(10)`.

<PlatformTabs groupId="sdk" activeOptions={["web","flutter"]}>
  <PlatformTabItem value="web">
    ```typescript theme={null}
    const tokenAddress = "YOUR_TOKEN";
    const tokenDecimals = 18;
    const to = "RECEIVER_ADDRESS";
    const amount = ethers.parseUnits("0.001", tokenDecimals);
    const data = Uint8Array.from([]);
    await fuseSDK.transferToken(tokenAddress, to, amount, data, {
      useNonceSequence: true,
    });

    await fuseSDK.transferToken(tokenAddress, to, amount, data, {
      useNonceSequence: true,
      customNonceKey: 231,
    });
    ```
  </PlatformTabItem>

  <PlatformTabItem value="flutter">
    ```dart theme={null}
    // Approve and transfer
    final tokenAddress = EthereumAddress.fromHex('TOKEN_ADDRESS');
    final recipientAddress = EthereumAddress.fromHex('RECIPIENT_ADDRESS');
    final amountInWei = BigInt.parse('AMOUNT_IN_WEI');

    final res = await fuseSDK.executeBatch(
      [
        // Approve ERC20 Token call
        Call(
          to: tokenAddress,
          value: BigInt.zero,
          data: ContractsUtils.encodeERC20ApproveCall(
            tokenAddress,
            recipientAddress,
            amountInWei,
          ),
        ),
        // Transfer ERC20 Token call
        Call(
          to: tokenAddress,
          value: BigInt.zero,
          data: ContractsUtils.encodeERC20TransferCall(
            tokenAddress,
            recipientAddress,
            amountInWei,
          ),
        ),
      ],
      FuseSDK.defaultTxOptions.copyWith(
        useNonceSequence: true,
        customNonceKey: BigInt.from(11),
      ),
    );

    // Transfer
    await fuseSDK.transferToken(
      EthereumAddress.fromHex('TOKEN_ADDRESS'),
      EthereumAddress.fromHex('RECIPIENT_ADDRESS'),
      BigInt.parse('AMOUNT_IN_WEI'),
      FuseSDK.defaultTxOptions.copyWith(
        useNonceSequence: true,
        customNonceKey: BigInt.from(12),
      ),
    );

    // Transfer
    await fuseSDK.transferToken(
      EthereumAddress.fromHex('TOKEN_ADDRESS'),
      EthereumAddress.fromHex('RECIPIENT_ADDRESS'),
      BigInt.parse('AMOUNT_IN_WEI'),
      FuseSDK.defaultTxOptions.copyWith(
        useNonceSequence: true,
        customNonceKey: BigInt.from(34234),
      ),
    );
    ```
  </PlatformTabItem>
</PlatformTabs>
