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

> Batch multiple transactions into a single on-chain transaction

# Batch transactions

<Frame>
  <img width="305" noZoom src="https://mintcdn.com/walletkit-docs/7aZXvKfTnGcrV8aq/images/connect_batch_send_transaction_1.png?fit=max&auto=format&n=7aZXvKfTnGcrV8aq&q=85&s=377beca9c814581ecf5e7b10ada7d622" data-path="images/connect_batch_send_transaction_1.png" />
</Frame>

WalletKit prompts the user to review all transactions in the batch before signing. It displays details of each transaction and any expected changes in assets. The user can then sign the transaction using their 6-digit pin.

Batching is available for Smart Wallets and each batched transaction is broadcasted on-chain as a single transaction.

<CodeGroup>
  ```typescript React theme={null}
  import { useWalletKitLink } from "@walletkit/react-link";
  import { parseUnits } from "viem";

  export function App() {
    const walletKit = useWalletKitLink();
    const [hash, setHash] = useState("");

    const sendTransaction = async () => {
      const hash = await walletKit.signAndSendTransactions([
        {
          abi: erc20ABI,
          address: USDC_ADDRESS,
          functionName: "approve",
          args: [
            "0x000000000000000000000000000000000000dead",
            parseUnits("5", 6),
          ],
        },
        {
          abi: erc20ABI,
          address: USDC_ADDRESS,
          functionName: "transfer",
          args: [
            "0x000000000000000000000000000000000000dead",
            parseUnits("5", 6),
          ],
        },
      ]);
      setHash(hash);
    };

    return (
      <div>
        <button onClick={() => sendTransaction()}>Send Transaction</button>
        {hash ? <div>Transaction: {hash}</div> : null}
      </div>
    );
  }
  ```

  ```typescript wagmi theme={null}
  import { useBatchWriteContract } from "@walletkit/react-link";

  function App() {
    const [hash, setHash] = useState("");
    const { batchWriteContractAsync } = useBatchWriteContract([
      {
        abi: erc20ABI,
        address: USDC_ADDRESS,
        functionName: "approve",
        args: ["0x000000000000000000000000000000000000dead", parseUnits("5", 6)],
      },
      {
        abi: erc20ABI,
        address: USDC_ADDRESS,
        functionName: "transfer",
        args: ["0x000000000000000000000000000000000000dead", parseUnits("5", 6)],
      },
    ]);

    const handleSendTransaction = async () => {
      const hash = await batchWriteContractAsync();
      setHash(hash);
    };

    return (
      <div>
        <button onClick={handleSendTransaction}>Send Transaction</button>
        {hash ? <div>Transaction: {hash}</div> : null}
      </div>
    );
  }
  ```
</CodeGroup>
