> Feedback: If these docs are stale, missing, or confusing, post sanitized feedback to `https://docs.tempo.xyz/api/feedback` with `source: "mcp"`, a short `message`, and any relevant `toolName`, `relatedResource`, or `client`.
# Send Parallel Transactions

Tempo enables concurrent transaction execution through its [expiring nonce](/docs/guide/tempo-transaction#expiring-nonces) system. Unlike traditional sequential nonces that require transactions to be processed one at a time, expiring nonces allow multiple transactions to be submitted simultaneously without nonce conflicts. Each transaction uses an independent nonce that automatically expires after a set time window, enabling true parallel execution.

## Demo

By the end of this guide you will understand how to send parallel payments using expiring nonces under-the-hood.

<Demo.Container name="Send Parallel Payments" footerVariant="balances" tokens={[Token.alphaUsd]}>
  <Connect stepNumber={1} />

  <AddFunds stepNumber={2} />

  <SendParallelPayments stepNumber={3} />
</Demo.Container>

## Steps

::::steps

### Set up Wagmi

Ensure that you have set up your project with Wagmi, a Tempo chain config, and a wallet connector:

* [Connection details](/docs/quickstart/connection-details)
* [TypeScript SDK](/docs/sdk/typescript)
* [Wallet integration](/docs/quickstart/wallet-developers)

### Send concurrent transactions with nonce keys

To send multiple transactions in parallel, simply batch them together. [Expiring nonces](/docs/guide/tempo-transaction#expiring-nonces) are attached to each transaction automatically.

:::code-group

```ts twoslash [example.ts]
// @noErrors
import { Hooks } from 'wagmi/tempo'
import { parseUnits } from 'viem'

const alphaUsd = '0x20c0000000000000000000000000000000000001'

const { mutate: transfer } = Hooks.token.useTransferSync()

// Send both transfers in parallel. // [!code focus]
const [receipt1, receipt2] = await Promise.all([ // [!code focus]
  transfer.mutate({ // [!code focus]
    amount: parseUnits('100', 6), // [!code focus]
    to: '0x70997970C51812dc3A010C7d01b50e0d17dc79C8', // [!code focus]
    token: alphaUsd, // [!code focus]
  }), // [!code focus]
  transfer.mutate({ // [!code focus]
    amount: parseUnits('50', 6), // [!code focus]
    to: '0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC', // [!code focus]
    token: alphaUsd, // [!code focus]
  }), // [!code focus]
]) // [!code focus]

console.log('Transaction 1:', receipt1.transactionHash) // [!code focus]
console.log('Transaction 2:', receipt2.transactionHash) // [!code focus]
```

```tsx twoslash [wagmi.config.ts] filename="wagmi.config.ts"
// @noErrors
// [!include ~/snippets/wagmi.config.ts:setup]
```

:::

::::

## Learning Resources

<Cards>
  <Card description="Learn more about expiring nonces that power concurrent transactions." to="/docs/guide/tempo-transaction#expiring-nonces" icon="lucide:timer" title="Expiring Nonces" />

  <Card description="Learn more about Tempo Transactions and their properties." to="/docs/protocol/transactions" icon="lucide:send" title="Transactions" />
</Cards>
