Skip to content

iamvon/stellar-multisend

Repository files navigation

Stellar Multisend

Stellar Multisend is a dashboard for sending one batch of payments to many recipients on Stellar testnet. It is built for fast operator workflows: connect Freighter, upload a CSV, review recipients, choose XLM or a custom asset, and submit multisend batches with live progress and post-send insights.

The app is currently optimized for Stellar testnet usage, including custom asset testing, recipient validation, CSV-based payout preparation, and batch-level transaction visibility.

The repo also includes a Soroban claim-campaign path:

  • a shared multi-campaign distributor contract under contracts/
  • a claim-mode UI that can export draft or deploy-ready campaign packages
  • an off-chain Merkle artifact generator for campaign manifests and proofs

Product Preview

Stellar Multisend dashboard in light mode
Light mode
Stellar Multisend dashboard in dark mode
Dark mode

Batch Insights showing timings, fees, transaction hashes, and pagination
Batch Insights tracks timings, totals, fees, attempted and completed batches, plus paginated transaction hashes.

What It Does

  • Connects to Freighter for wallet access and signing
  • Imports recipients from CSV with address,amount format
  • Supports XLM and custom Stellar assets
  • Validates recipient accounts and trustlines before send
  • Splits large multisends into transaction batches
  • Tracks progress during signing and submission
  • Shows batch insights for time, fees, totals, attempted/completed batches, and submitted transaction hashes
  • Displays XLM/USD estimates for balances, totals, and fees
  • Includes light and dark mode UI

Run

yarn install
yarn dev

Generate CSV via CLI

Use the built-in generator to create upload-ready recipients CSV:

yarn generate:csv --count 20 --mode fixed --amount 3 --output ./recipients.csv

Random amount example:

yarn generate:csv --count 20 --mode random --min 1 --max 8 --decimals 5 --output ./recipients.csv

Help:

yarn generate:csv --help

Export Claim Campaign Packages

In claim mode, the app can export:

  • *.campaign.json draft files for manual or scripted artifact generation
  • *.package.json deploy-ready packages that already include the Merkle root, proof set, and create_campaign payload

The fastest path is:

  1. Build the campaign in the app
  2. Click Export Campaign Package
  3. Resolve and deploy it with the helper below

The app also includes a deployment workspace in claim mode. If you fill in the shared contract id, source account, token contract, metadata URI, and network settings, it can:

  • preview the resolved create_campaign JSON payload
  • generate the exact stellar contract invoke ... command
  • export *.resolved.json directly from the browser

Generate Claim Campaign Artifacts From A Draft

After exporting a claim campaign draft JSON from the app, generate the Merkle root and proofs:

yarn generate:claim-campaign --draft ./my-campaign.campaign.json

Optional output directory:

yarn generate:claim-campaign --draft ./my-campaign.campaign.json --out-dir ./claim-campaigns

This writes:

  • campaign-manifest.json
  • deployment.json
  • proofs.json
  • proofs/<address>.json

Notes:

  • campaign_id for the contract is derived as sha256(campaign.campaignId)
  • amounts are converted into Stellar 7-decimal base units
  • Merkle hashing matches the shared contract in contracts/shared-claim-distributor

Run help:

yarn generate:claim-campaign --help

Resolve Or Execute Campaign Deployment

Take either the app-exported *.package.json or the generated deployment.json, fill the runtime values, and print the exact Stellar CLI invoke command:

Directly from the app package:

yarn deploy:claim-campaign \
  --package ./march-payroll.package.json \
  --contract-id C... \
  --source-account alice \
  --token C... \
  --metadata-uri ipfs://march-payroll \
  --days-from-now 30 \
  --network testnet

From the generator output:

yarn deploy:claim-campaign \
  --deployment ./claim-campaigns/sample-campaign/deployment.json \
  --contract-id C... \
  --source-account alice \
  --token C... \
  --metadata-uri ipfs://sample-campaign \
  --days-from-now 30 \
  --network testnet

This writes *.resolved.json next to the input file and prints the command.

To execute immediately, add --exec:

yarn deploy:claim-campaign \
  --deployment ./claim-campaigns/sample-campaign/deployment.json \
  --contract-id C... \
  --source-account alice \
  --token C... \
  --metadata-uri ipfs://sample-campaign \
  --days-from-now 30 \
  --network testnet \
  --exec

If you are not using a named Stellar CLI network, pass explicit RPC settings:

yarn deploy:claim-campaign \
  --deployment ./claim-campaigns/sample-campaign/deployment.json \
  --contract-id C... \
  --source-account alice \
  --token C... \
  --metadata-uri ipfs://sample-campaign \
  --days-from-now 30 \
  --rpc-url https://soroban-testnet.stellar.org \
  --network-passphrase "Test SDF Network ; September 2015"

Generate token-ready recipients (auto-funded + trustline ready):

yarn generate:token-ready-csv --issuer-secret SA... --code TESTUSD --count 50 --mode fixed --amount 3

This outputs:

  • recipients-token-ready.csv (upload to multisend app)
  • recipients-token-ready.secrets.csv (test wallet secrets)

Help:

yarn generate:token-ready-csv --help

Mint Testnet Token via CLI

Create a custom Stellar testnet asset (issuer + distributor) and mint supply:

yarn mint:testnet-token --code TESTUSD --amount 50000

This prints:

  • Asset Code
  • Asset Issuer (use in app custom asset issuer field)
  • DISTRIBUTOR_SECRET (import to Freighter wallet to send tokens)
  • tx hash + Stellar Expert link

Help:

yarn mint:testnet-token --help

Mint to a specific wallet:

yarn mint:to --issuer-secret SA... --code TESTUSD --to GBIGKXLLOIS3SYVVTRLEUFQYEY52DTSPQDFUS6ACZTOTLGJHHW2BDBV4 --amount 5000

Notes for mint:to:

  • Destination account must exist on Stellar testnet
  • Destination must already trust TESTUSD from the issuer

Help:

yarn mint:to --help

Notes

  • Install the Freighter wallet extension before using the app.
  • Use Stellar Friendbot to fund testnet wallets.
  • CSV format:
address,amount
GA...,10
GB...,5.5

License

MIT

About

Stellar Multisend dashboard with CSV payouts and transaction insights.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors