Injected EOA wallet
Reviews and signs one aggregate transaction per chunk.
BatchPayArc is a non-custodial browser interface for resumable, multi-transaction USDC payouts on Arc Testnet. It deploys no custom contract and runs no payment backend.
Every boundary is explicit: local planning, wallet authorization, transaction-local atomicity, then event-level verification.
Enter at least two recipients or import a UTF-8 CSV. Addresses, amounts, precision, totals, and duplicates are checked locally.
The ordered list becomes deterministic chunks of at most 100 transfers, with no fixed total-recipient ceiling imposed by BatchPayArc.
A new run checks contract bytecode. Before every signature, BatchPayArc simulates aggregate3, estimates gas, and re-checks the wallet, chain, and USDC balance.
Your injected EOA wallet signs each chunk. BatchPayArc never receives a private key and never signs or relays a transaction for you.
The receipt must succeed and contain the exact expected USDC Transfer events before the next chunk can begin.
The versioned local checkpoint identifies the first unfinished chunk. Verified transactions are final and are never replayed by the resume flow.
Reviews and signs one aggregate transaction per chunk.
Stores the fixed run plan and transaction checkpoints.
Routes every encoded transfer through Arc's CallFrom precompile.
Transfers execute, then exact ERC-20 events are reconciled.
USDC.transfer(recipient, amount6)
→ Multicall3From.aggregate3(calls)
→ allowFailure: false
→ native value: 0CallFrom preserves the original EOA as msg.sender for each USDC subcall. BatchPayArc does not call the precompile directly.
Addresses below are Arc Testnet predeploys verified against the official Arc documentation on 15 July 2026.
0x522fAf9A91c41c443c66765030741e4AaCe147D0aggregate3(Call3[])0x3600000000000000000000000000000000000000transfer call per recipientTransfer logs prove the chunkWhat is not used: the standard Multicall3 at 0xcA11…CA11, Permit2, approvals, transferFrom, a relayer, or a BatchPayArc smart contract. The native system USDC emitter is also excluded from receipt counts to avoid double-counting.
Every subcall uses allowFailure: false. If transfer 73 fails, that entire chunk reverts. Earlier verified chunks remain final and later chunks are not attempted.
Plans, attempts, hashes, and receipt checkpoints are stored in localStorage. The data is unencrypted, origin-specific, and never synchronized across browsers or devices.