Configuration
every setting, what it costs.
SLUICE has three kinds of settings: operator settings that apply to every project, project settings, and exclusion rules. There is no .env file and no build-time key. Everything is set in the console and stays on the machine.
01Where settings live
| What | Where it is stored |
|---|---|
| Helius API key | OS keystore (sluice.vault.helius_api_key) |
| Operator settings, projects, audit trail | The app's local preferences on this machine |
| Vocabulary presets | assets/vocabulary/presets.json (built in), plus your custom preset |
SLUICE reads no --dart-define values and has no .env file. A plain flutter build is the release build.
02Operator settings
Settings. These are yours and apply across projects.
| Setting | Default | Notes |
|---|---|---|
| JSON-RPC endpoints | https://api.mainnet-beta.solana.com | One per line, tried in order, rotated on failure. Replace the default. |
| Helius API key | empty | Keystore only. Absent means holders are read with getProgramAccounts. |
| Fee wallet | empty | No fee is taken while this is empty, whatever the rate says. |
| Fee, basis points | 0 | Capped at 200 in code (Your fee). |
| Flat amount per round | empty | Whole units of the asset the project pays in. Charged on top of the rate. |
| Transfers per transaction | 10 (max 22) | When every recipient already has a token account. |
| When each also creates an account | 6 (max 12) | The create instruction adds accounts and bytes, so fewer fit. |
| Priority fee, micro-lamports per CU | 1000 | SLUICE also reads a current value from your endpoint during a run (getRecentPrioritizationFees). Fill with the defaults resets packing. |
| Compute units per transaction | 200,000 | Between 10,000 and 1,400,000. |
| Explorer base URL | https://solscan.io/tx/ | Where a recorded signature opens. |
| Default vocabulary preset | distribution | Applied to new projects. |
Settings → Effective configuration shows what SLUICE is actually running on, from what is saved, not from what is typed but unsaved.
03Project settings
Projects → New project, or select one to edit.
| Setting | Notes |
|---|---|
| Name | For you. |
| Snapshot mint | The token holders are measured on. The token program is read from the mint, so Token-2022 needs no extra setting. |
| Asset mint, symbol, decimals | What is being sent. Often not the snapshot token. |
| Funding wallet | Funds and signs. Excluded from its own round by default. |
| Treasury wallet | Where unclaimed value goes under the treasury policy. |
| Minimum per holder | Below this, a recipient costs more in fees than they receive. |
| Method | Pro-rata by balance or By tier. |
| Dust rule, Remainder rule | See below. |
| Unclaimed policy, claim window (days) | See below. |
| Claim program id | Yours. Empty means the Merkle path is not ready. |
| Recurring schedule | Started by hand, Every N days, or When the funded balance passes a threshold. |
Dust rule
| Choice | What happens |
|---|---|
| Re-divide among those above the minimum (default) | Recipients below the minimum are dropped and the pool is divided again among the rest, until stable. |
| Leave it with the funding wallet | Dropped; their share never leaves the funding wallet. |
| Carry it to the next round | Dropped; the amount is recorded as a carry-forward. |
Remainder rule
| Choice | What happens |
|---|---|
| Largest discarded fraction first, ties by address (default) | One base unit each to the largest fractions. Allocations then sum to the pool exactly. |
| Leave the crumbs with the funding wallet | The leftover units stay put. |
Unclaimed policy
Choose it before the first round. It is shown on the claim page from day one and enforced by your claim program.
| Choice | After the deadline |
|---|---|
| Back to the treasury | You withdraw the rest. Needs a treasury wallet. |
| Into the next round | The rest opens the next round. |
| No deadline | Claimable as long as the account exists. |
Tiers
- Multiplier: a tier multiplies a holder's balance before the pro-rata division. 10000 bps is 1×.
- Fixed slice: each tier gets a fixed share of the pool in bps, split evenly among its members. The slices must add up to 10000 or the plan is refused.
A holder falls in the highest tier whose minimum they meet.
In 0.1.0 the project form offers By tier but has no fields to define the tiers themselves. With no tiers defined, the dry run warns that the round is computed pro-rata. Tier schedules are defined in code (lib/core/compute/tier_schedule.dart, stored on the project as tierSchedule). Use Pro-rata by balance unless you add a tier editor yourself.
04Exclusion rules
| Setting | Default | Notes |
|---|---|---|
| Exclude program-controlled authorities | on | The only setting that can put a pool vault back into a round. Turning it off asks you to confirm. |
| Look for exchange omnibus wallets | on | Flags, does not remove. |
| Apply a probable omnibus flag automatically | off | Detect and flag; you decide. |
| Minimum share examined | 0.5 % | Fixed default, no console control. The omnibus check costs one RPC call per candidate. |
| Transfers per day threshold | 50 | Fixed default, no console control. Above this an on-curve account looks like infrastructure. |
| Named lookups | 100 | Fixed default, no console control. How many of the largest holders get a venue name. The curve test runs on all. |
| Exclude the funding wallet | on | Fixed default, no console control. Paying yourself inflates every published figure. |
The four fixed defaults are in lib/core/exclusions/exclusion_policy.dart; change them there if you need different values.
Your list: add addresses with a reason: Treasury, Team wallet, Burn address, Exchange wallet or Other. The exchange list ships empty on purpose: a wrong exchange address silently removes a real holder from every round.
05Vocabulary
| Preset | The thing that moves | The funded account |
|---|---|---|
rewards | reward | reward pool |
distribution (default) | distribution | distribution pool |
revenue-share | revenue share | revenue pool |
dividend | dividend | dividend pool |
yield | yield | yield pool |
| custom | Your words. Anything left blank falls back to the default preset. | |
Changing the preset changes no number. test/vocabulary/preset_changes_no_number_test.dart renders the dry run, the exports, the Merkle root and the realised rate under every preset and requires identical figures. To add a language, add a sibling block under locales in presets.json. The choice of words carries legal weight in some markets; see Compliance.