SLUICE docs
v0.1.0
Live demo Get help
● Set up · Walkthrough

Your first round
measure, check, sign, record.

A complete round from a new project to confirmed signatures. Do it first with a small amount, and on a token you control.

01Before you start

  • Your own RPC endpoint is set and Test the endpoint answers (how).
  • A Helius key is set if the token has many holders.
  • You have signing tooling for the funding wallet that can take instructions as JSON (below).
  • Your fee is set, if you charge one (Your fee).

02The round

  1. Create the projectProjects → New project: name, snapshot mint, the asset you send (mint, symbol, decimals), the funding wallet, the treasury wallet, the minimum per holder, method, dust and remainder rules, and the unclaimed policy. Choose the unclaimed policy now; holders see it from the first round.
  2. Add your exclusionsExclusions → Your list: your treasury and team wallets, any burn address you know. Leave detection on.
  3. Dry runSnapshot → enter the amount the project funds → Dry run. Read who gets what, what each route costs in SOL, Your fee, and what the exclusions removed. Nothing has moved.
  4. Check the exclusionsExports → Exclusions · CSV. Look at it before funding anything. A holder who should not be there, or a missing one, is fixed here, not after payment.
  5. Choose the routeDirect transfers needs no program. Merkle claim needs your claim program ID in the project.
  6. CommitPress the action button (for example Distribute) → Commit it. SLUICE records the round as prepared. Nothing has moved yet.
  7. Fund and sign from your own walletTake the unsigned batches (Rounds → Copy the unpaid batches) and sign and send them with the funding wallet (how). Your fee is its own batch, the last one.
  8. Attach the signaturesRounds → the round → paste each Signature, pick its Batch, Attach and confirm. SLUICE confirms each one on-chain before it counts it.
  9. Export the proof bundleExports → Proof bundle · JSON. Keep it; it is the durable record of the round.

03Signing the batches

SLUICE never signs and never sends. Each batch is a list of Solana instructions in JSON: the program ID, the accounts (with signer and writable flags) and the instruction data in base64 (lib/core/distribute/solana_instruction.dart). There is no blockhash in it: you add a recent blockhash, build the transaction, sign with the funding wallet and send it, using tooling you control, for example a small script with a Solana SDK, or a multisig.

Resending pays again

Each batch is labelled planHash:batch:index. It is a label, not a safeguard: Solana has no idempotency key, so sending the same batch twice pays it twice. After an interruption, use Copy the unpaid batches: it leaves out everyone a finalized batch already paid, your fee included.

SLUICE ships no signing tool, and the wallet connector for browsers is unverified in 0.1.0 (CHANGELOG.md).

04Recipients without a token account

For direct transfers, SLUICE creates a recipient's token account inside the same transaction as the transfer. The funding wallet pays the rent, about 0.002 SOL per new account; the dry run includes it in the network cost estimate and counts the recipients who need one.

05Token-2022 tokens

The token program is read from the mint, so Token-2022 needs no setting. Two extensions matter: with a transfer fee every recipient receives less than the amount shown (the fee goes to the mint's fee authority, not to you), and with a transfer hook a transfer can fail for reasons SLUICE cannot see, so the dry run recommends the Merkle route. Both are warned about in the dry run.