Testnet-first MVP · Circle Arc

Payroll, but on stablecoin rails

Convoy lets an employer pay their whole team in USDC in one on-chain batch — no bank rails, no ETH, no waiting. Gas is USDC. Every payment leaves an immutable on-chain paystub, and employees can bridge their salary to any chain through Circle CCTP.

Total paid
0USDC
Batches
0
Payments
0
Fees collected
0USDC
What is Convoy

One transaction, an entire payroll run

Convoy is a batch-payout primitive for teams paid in USDC. An employer approves a single allowance and calls createBatch — the contract splits the total across every recipient, takes a configurable platform fee, and writes a paystub for each payment. No loops on the client, no one-by-one sends.

  • • Direct-payout mode — funds land in each wallet immediately
  • • One platform fee, transparent and owner-settable
  • • Every payment independently verifiable on-chain
Employer
CSV upload
PayrollBatch
one tx · USDC
Employees
paid instantly
Why Arc

Built for stablecoin-native payments

Gas is USDC

No ETH anywhere. The same stablecoin you pay with is the gas token — one asset for the whole flow.

🧬
Native stablecoins

USDC/EURC are protocol-level primitives with a built-in ERC-20 interface (0x3600…0000). No wrapper contracts.

🔗
CCTP & Gateway

Circle’s cross-chain stack is the bridge path — employees can withdraw to other chains through it.

Deterministic finality

Transactions finalize on inclusion, so an employer can act after a single confirmation.

Features

Everything a payroll run needs

Batch payout

Pay 1 or 1,000 employees in a single transaction — one approve + one createBatch, direct to each wallet.

📄
CSV upload

Drop a name,address,amount,note CSV. It is parsed and validated on the server before a single cent moves.

🧾
On-chain paystubs

Every payment is recorded in PaystubRegistry — employee, amount, batch id and the block it landed in.

⚙️
Configurable platform fee

A feeBps is taken on top of each batch, owner-adjustable from the admin page and capped at 100%.

🌉
Cross-chain withdrawal

Employees request a withdrawal to Base / Arbitrum / Solana via a CCTP intent (mocked until CCTP is wired).

🛡️
Hardened by default

Ownable + Pausable + ReentrancyGuard + SafeERC20, with length / zero-address / amount validation on every batch.

How it works

Four steps, end to end

01
Upload CSV

Employer drops a payroll CSV and reviews the parsed rows, total and fee.

02
Approve + pay

One approve, then createBatch pays everyone in USDC in a single transaction.

03
Paystubs recorded

PaystubRegistry writes an immutable record for every employee payment.

04
Withdraw anywhere

Employees view their records and request a cross-chain withdrawal via CCTP.

Tech stack

Contracts, app, scripts

Solidity ^0.8.24FoundryOpenZeppelinNext.js 14TypeScriptTailwind CSSwagmi / viemCircle Arc

Ready to run a payroll?

Connect a wallet, drop a CSV, and pay your team in one USDC batch.

Start now →