Skip to content
SpendTheBits

Treasury · 7 min read

Bulk USDC payouts: pay a whole team with one signature

By , Founder, SpendTheBits ·

In short

Bulk USDC payouts put many transfers inside one transaction, so you sign once and pay one network fee for the whole batch. On Arc the batch is built from calls routed through a contract that keeps your wallet as the sender, and memos on chain make each line easy to reconcile later.

1 signature
to pay a whole list of recipients in one batchMeasured by SpendTheBits in production

Paying ten people means ten transfers. Paying two hundred people means two hundred transfers, and if you do them by hand that is two hundred approvals, two hundred chances to paste the wrong address, and two hundred small network fees. Most teams that move stablecoins feel this pain the first time they run a contractor round or a community reward.

The fix is to stop sending transfers one at a time. A batched transaction packs many transfers into one transaction, so you approve once. This piece explains how Bulk USDC payouts work on Arc, what happens when one line fails, how memos help your books, and how SpendTheBits turns it into a pasted list and a single tap on your phone.

One signature branching into many payment lines, illustrating bulk USDC payouts.

Why one transaction beats two hundred

A blockchain transaction is one signed instruction. If you want to pay two hundred people, the plain way is to sign two hundred of them. Each one needs its own approval, its own fee, and its own wait. Batching changes the shape of the work: you hand the network a single transaction that contains a list of smaller calls, and the network runs them in order.

On Arc, applications can submit multiple contract calls in a single transaction through a predeployed contract called Multicall3From [1]. Your wallet calls one function, and that function forwards each encoded USDC transfer on your behalf. You sign once, and the chain does the repeating for you.

Bulk payouts in SpendTheBits does this on Arc: one signature on the phone pays a whole pasted list of addresses or @handles in USDC. The saving is not only fees. It is also attention. One review screen, one approval, and one record of the run replace a long afternoon of copy, paste and confirm. For a founder paying a team at month end, that is the difference between a ten-minute task and a half-day chore.

There is a safety angle too. Every manual send is a fresh chance to slip a digit in an address. When the list is reviewed once as a whole, you can read it top to bottom before anything moves, and fix mistakes while they still cost nothing.

What Arc does under the hood

Most batching contracts have a catch. The token contract usually sees the batching contract as the sender, not you [1]. That makes it harder to read the history later, because the on-chain record points at the helper instead of your wallet. Arc's batching contract is built to avoid that.

Multicall3From routes each subcall through Arc's CallFrom precompile, which executes calls on behalf of the original sender [1]. So when a batch of USDC transfers runs, the USDC contract sees your wallet as the sender for every transfer [1]. The Transfer event for each line shows your wallet in the from field, the recipient in the to field, and the amount in base units [1].

There is no single batch event to read. Instead, a successful batch emits one USDC Transfer event per successful transfer, and you verify those [1]. That is handy for accounting, because each payment stays a normal, searchable transfer rather than a blob inside one big record.

The guardrails matter too. You must submit the batch from a plain externally owned account, because calls routed through an intermediary contract with a different sender are rejected [1]. Value-forwarding patterns are not supported either [1]. Arc's own advice is to test your exact call set and failure policy on its testnet before you rely on Bulk USDC payouts in production [1].

One network fee, paid in USDC

Fees are the other half of the story. On Arc, all transaction fees are denominated in USDC, which is the native gas token [3]. That means you do not need a second coin in your wallet just to pay for a payroll run. The balance you are paying people from is the same balance that pays the network.

Arc's fee market uses an EIP-1559 style model with smoothing, so the base fee moves gently rather than lurching with every busy block [3]. The design target is about $0.001 per ERC-20 transfer under normal load [3]. The protocol also sets a floor of 20 Gwei and a ceiling of 20,000 Gwei on the base fee, which bounds the worst case [3].

In our production test on 18 September 2026, a USDC send on Arc cost about 0.001 USDC in network fee, in line with that design target. A batch is one transaction, so it carries one fee wrapper rather than two hundred separate ones.

The practical habit is to show fees in dollar terms, not raw Gwei, because the network is built around a stablecoin-native view [3]. A treasury lead should be able to read the cost of a run as a few cents and move on.

When one line fails

Every batch raises the same worry: what if one payment goes wrong? Each subcall carries an allowFailure setting that decides whether a failed call cancels the whole batch [1]. That one switch defines how the run behaves.

Set it to false when every payment must succeed. If any subcall then fails, the whole batch reverts and nothing moves [1]. That is the strict, all-or-nothing mode, and it suits cases where a partial run would leave your records in a mess.

Set it to true and a failed subcall does not stop the others, but Arc's docs say to do this only when your application explicitly handles the failures [1]. In that mode you must read the result of each line and decide what to do about the ones that did not land.

SpendTheBits makes that result visible. Its Bulk USDC payouts show each line as paid or not paid, so after a run you see which people received funds and which did not, rather than guessing from a single success message. That per-line result is what lets a founder fix two bad addresses and resend only those, instead of redoing the whole list. It is the same reasoning as in our look at stablecoin payroll on Arc, where clear status beats optimism.

Bulk payouts result screen showing each recipient marked paid or not paid
After a run, every line is marked paid or not paid.

Memos turn a payout into a record

A transfer on its own says who got what. It does not say why. Finance teams need the why: which invoice, which sprint, which month. Arc has a Memo contract for exactly this, which attaches application metadata, such as an invoice or order reference, to a contract call [2].

The Memo contract wraps the call and emits the metadata as events, so wallets, exchanges, and indexers can reconcile onchain transfers against offchain records [2]. Like batching, it keeps the original wallet as the sender, so a USDC transfer still sees you, not the Memo contract [2].

On success, the contract emits an ordered trail: a BeforeMemo event, the target contract events such as the USDC Transfer, and then a Memo event carrying the sender, target, a hash of the call data, your memo identifier and the memo bytes [2]. You can query Memo events by indexed fields such as the identifier, the sender and the target [2].

In SpendTheBits, each payment in a bulk run can carry a short memo written on chain through Arc's memo contract. Keep one thing in mind: memos are public and permanent, so write a reference like a batch number, never a private detail about a person. For the wider picture of how this fits a treasury workflow, see our founders and treasuries page.

Doing it in SpendTheBits

You paste a list or CSV of addresses or @handles, add amounts and optional memos, review the batch, and approve it with one signature on your phone. Bulk USDC payouts run in USDC on Arc, and network gas is paid in USDC, so you need no second coin. There is no SpendTheBits fee on bulk payouts today.

Because SpendTheBits is fully non-custodial, the key and the signing stay on your device. The backend prepares context and relays the signed transaction, but it never sees a seed or private key and cannot move your funds. That matters for a treasury: the person holding the phone is the only one who can approve a run.

Safety checks run before anything moves. Every recipient is screened against sanctions lists first, and spending guardrails apply to the batch total, so a cap you set for a day covers the whole run, not each line. A batch holds up to a few hundred people. To learn how to set limits, read our help page on spending guardrails.

Afterward, results export as a CSV for the books, with each line marked paid or not paid. Pair that with the memos on chain and your reconciliation has two matching trails. Autopay and money streams are not live for real settlement yet, so each batch is a run you start and sign yourself. For the broader payroll picture, see how to run payroll in USDC.

Bulk payouts review screen listing recipients, amounts and memos before signing
Review the whole batch, then approve once.

In the app · 4 steps

Pay a list of people in one signature in SpendTheBits

Bulk payouts lives under Arc tools. Here is the path from a pasted list to a batch you can export.

  1. Start a batch

    Go to Arc tools, then Bulk payouts, and tap New batch.

    The Bulk payouts screen in SpendTheBits showing payouts made on Arc
  2. Paste the list

    Paste one person per line: address or handle, amount, optional memo. Tap Check the list to see problems under each line.

    A new bulk payout batch in SpendTheBits with a pasted line
  3. Review and sign once

    Check people, payouts, total and the network fee, then pay everyone with one Face ID.

    The review screen for a bulk USDC payout in SpendTheBits
  4. See every line

    Each line shows Paid or Not paid, and the batch exports as a CSV for your books.

    A finished bulk payout in SpendTheBits with each line marked paid

Hold your own keys, keep the yield, skip the middleman.

SpendTheBits is a fully non-custodial wallet for 13 chains, free on iOS and Android.

Frequently asked

Put the transfers inside one batched transaction and sign once. On Arc a predeployed contract forwards each USDC transfer for your wallet [1]. In SpendTheBits you paste a list or CSV and approve with one signature on your phone.

It depends on the failure setting. With allowFailure set to false, one failure reverts the whole batch [1]. SpendTheBits shows each line as paid or not paid so you can resend only the ones that failed.

No. Memos in SpendTheBits are public and permanent, because they are written on chain through Arc's memo contract. Use a reference such as an invoice or batch number, not personal details.

There is no SpendTheBits fee on bulk payouts today. Network gas is paid in USDC and goes to the network.

Sources

  1. 1.Batched transactions - Arc Docs · Arc Docs · accessed 2026-10-23
  2. 2.Transaction memos - Arc Docs · Arc Docs · accessed 2026-10-23
  3. 3.Gas and fees - Arc Docs · Arc Docs · accessed 2026-10-23

This article is educational and reflects observed data and public sources on the date shown. It is not financial, legal or tax advice. Digital assets can lose value; yields shown are observed, not promised.

STB Weekly, every tuesday

The short version of pieces like this one, plus what moved in AI in finance and agent payments. What you get

Product updates and release notes. No price calls, no spam, unsubscribe in one click. We email you once to confirm before anything else is sent.