OrbitDocs

Batch payroll

Pay every contributor in one atomic ledger transaction.

batch_disburse sends a different amount to each recipient from a single sender, all inside one Soroban invocation. Either every transfer lands or none do.

sum(i=1..N) splits[i].amount <= allowance(sender, orbit)

From the dashboard

The dashboard's payroll module is in preview. It parses and checks the CSV, then simulates the disbursement. To pay on-chain today, use the CLI below.

Prepare a CSV

recipient,amount
GBXQ...A8S,4200.00
GDQP...4N2,3500.00
GA4B...78K,1800.00

Amounts are in whole USDC. On-chain they become raw units (x 10^7).

Upload and validate

Dashboard → Batch Payroll → Upload CSV. The rows are parsed into a recipient list you can review and edit.

Approve and disburse

On-chain, this takes two signatures: approve for the batch total, then batch_disburse.

From the CLI

stellar contract invoke --id $TOKEN --source treasury --network testnet -- \
  approve --from $TREASURY --spender $ORBIT --amount 95000000000 --live_until_ledger 5000000

stellar contract invoke --id $ORBIT --source treasury --network testnet -- \
  batch_disburse \
  --sender $TREASURY \
  --token $TOKEN \
  --splits '[
    {"recipient":"GBXQ...A8S","amount":"42000000000"},
    {"recipient":"GDQP...4N2","amount":"35000000000"},
    {"recipient":"GA4B...78K","amount":"18000000000"}
  ]'

Limits

On this page