Batch Transactions
Queue multiple transactions as separate intents, then authorize the full multi-intent batch with one passkey confirmation. Perfect for shopping carts and multi-step workflows where each action needs its own intent result.
Using BatchQueue
The BatchQueue components let users add items to a queue. Every queue entry becomes a separate intent; one passkey ceremony authorizes the complete batch. This is not an atomic multicall or wallet_sendCalls request.
Install the SDK
npm install @rhinestone/1authConfigure BatchQueueProvider
Create a client and wrap your app with BatchQueueProvider:
import { OneAuthClient } from '@rhinestone/1auth'
import { BatchQueueProvider } from '@rhinestone/1auth/react'
const client = new OneAuthClient({
providerUrl: 'https://passkey.1auth.app',
clientId: 'my-app',
})
export function App({ accountAddress }: { accountAddress?: string }) {
return (
<BatchQueueProvider client={client} accountAddress={accountAddress}> // [!code ++]
<YourApp />
</BatchQueueProvider>
)
}Add items to the queue
Use the useBatchQueue hook to add transactions:
Display the queue widget
Add the BatchQueueWidget to show queued items:
Done
You have successfully set up batch transactions!
Chain validation
All calls in a batch must target the same chain:
const { addToBatch } = useBatchQueue()
// First call sets the batch chain
addToBatch({ to: '0x...', label: 'Action 1' }, 8453) // Base
// This will fail - different chain
const result = addToBatch({ to: '0x...', label: 'Action 2' }, 1) // Ethereum
if (!result.success) {
console.log(result.error) // "Batch is set to Base..."
}BatchQueueProvider props
| Prop | Type | Required | Description |
|---|---|---|---|
client | OneAuthClient | Yes | SDK client instance |
accountAddress | Address | No | Smart account address used for signing and localStorage persistence (enables queue to survive page refresh) |
children | ReactNode | Yes | Child components |
useBatchQueue reference
| Property | Type | Description |
|---|---|---|
queue | BatchedCall[] | Array of queued calls |
batchChainId | number | null | Chain ID of the batch (set by first call) |
addToBatch | (call: IntentCall, chainId: number) => { success: boolean; error?: string } | Add a call to queue |
removeFromBatch | (id: string) => void | Remove a specific call |
clearBatch | () => void | Clear all calls |
signAll | (identity?: Address | { accountAddress: Address }) => Promise<SendIntentResult> | Sign and submit all calls (a bare address is treated as the account address) |
isSigning | boolean | Whether signing is in progress |
isExpanded | boolean | Whether the widget is expanded |
setExpanded | (expanded: boolean) => void | Set widget expanded state |
Widget features
The BatchQueueWidget includes:
- Collapsible header with call counter badge
- Chain indicator for current batch
- Remove individual calls on hover
- Clear all button
- Bounce animation on new additions
- Auto-hide when queue is empty
See the full React Components reference for more details.
Next steps
- Crosschain - Execute transactions on any chain
- Deposit - Fund user accounts