← All case studies
Batch Payments on Arc
Manifest
Live on Arc mainnet
Pay an entire list in one transaction, and give every recipient a receipt they can check for themselves without a wallet installed.
3
Payments in one transaction
no approvals, no per-recipient transfer
86,452
Gas for the whole batch
0.00185872 USDC total cost
The Problem
- Paying many people at once does not work cleanly on other chains. Multicall3 loses msg.sender, so a batch cannot prove who actually paid.
- USDC is normally an ERC-20, which means every transfer needs an approve step first.
- A native value transfer emits no event, so reconciliation normally requires an indexer.
- N transfers cost N transactions, which makes splitting small amounts uneconomic.
The Solution
- Built on Arc, where USDC is the native asset, so msg.value is dollars and there are no approvals to grant.
- One transaction pays every recipient in the list, with each amount carrying its own label.
- The browser builds the batch and reads the receipt straight from Arc's own logs, so the payment evidence does not depend on a server anyone has to trust.
- There is no backend, because there does not need to be one.
The Result
- Live on Arc mainnet, chain ID 5042, at zaygal.github.io/manifest, with the contract at 0xe0436a564d77ef02c3c7aec13253f050fd89bb6f.
- Has settled a real batch: three separate payments in a single transaction for 86,452 gas, costing 0.00185872 USDC.
- Any recipient can open their receipt link with no wallet installed and see their own payment read directly from the chain.
What this does not claim
- Payments are public on-chain, including the labels attached to them. This is a payments tool, not a privacy tool.
- Settled volume is one real test batch, not production traffic.
Stack
SolidityArcUSDCFoundryTypeScript