> Feedback: If these docs are stale, missing, or confusing, post sanitized feedback to `https://tempo.xyz/developers/api/feedback` with `source: "mcp"`, a short `message`, and any relevant `toolName`, `relatedResource`, or `client`.
> **Can't find what you're looking for?** Use `search_docs` on the docs MCP server at `https://tempo.xyz/developers/api/mcp` to find what you need.
>
> **Have feedback?** Use `submit_feedback` on the same MCP server.

# 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.

## Parallel transaction 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>

## Parallel transaction implementation steps

::::steps
### Set up Wagmi for parallel transactions

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]
```
:::
::::

## Parallel transaction 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>
