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 has no .env file and reads one --dart-define: SLUICE_OPERATOR_PASSCODE, without which the build has no console (details). SLUICE_DEMO=true exists only for the public demo build (tool/build_web_demo.sh); never use it for your own 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 18) | When every recipient already has a token account. |
| Transfers that also create an account | 6 (max 8) | The create instruction adds accounts and bytes, so fewer fit. |
| Priority fee, micro-lamports per CU | 1000 | The fallback. During a run SLUICE reads a current value from your endpoint (getRecentPrioritizationFees) and bids it with SetComputeUnitPrice in every batch. Fill with the defaults resets packing. |
| Compute units per transaction | 200,000 | Between 10,000 and 1,400,000. Every batch sets it with SetComputeUnitLimit, and the priority fee is charged against it. Raise it if you raise the account-creating batch size. |
| 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.
Third-party API services such as Solana RPC providers (Helius, QuickNode, Alchemy and others) may charge for usage. Any such costs are the buyer's responsibility; SLUICE ships no API key and no paid plan. See Costs not included in the price.
What every batch contains
Each batch opens with two Compute Budget instructions: SetComputeUnitLimit with the Compute units per transaction setting, and SetComputeUnitPrice with the priority fee in micro-lamports per CU (left out when the fee is 0). Then come the SPL TransferChecked transfers, each preceded by the creation of the recipient's token account when it does not exist yet (lib/core/distribute/solana_instruction.dart). The Priority fees line of the dry run's network-cost estimate is exactly what these instructions bid: compute unit limit × price per CU, per transaction.
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 every batch. Excluded from its own round by default. A project treasury is excluded through Your list. |
| Minimum per holder | Below this, a recipient costs more in fees than they receive. |
| Method | Pro-rata by balance or By tier. By tier opens the tier editor (below). |
| Dust rule, Remainder rule | See below. |
| 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. |
Tiers
Choose By tier as the method and the project form shows TIERS:
| Field | What it does |
|---|---|
| Tier rule | Balance multiplier: each tier multiplies a holder's balance before the pro-rata division; 1 is no change, 2 counts a balance twice. Fixed portion of the pool: each tier gets a fixed percentage of the pool, split evenly among its members; the percentages must add up to 100. |
| Snapshot token decimals | Minimums are entered in whole tokens, so SLUICE needs the snapshot token's decimals. Read from mint fills it from the chain. A dry run refuses to run if the mint's decimals differ from this value. |
| Name, Minimum held, Multiplier or Pool portion % | One row per tier. The minimum is in whole snapshot tokens. The bin icon removes a tier; Add tier adds one. |
| Include holders below every tier | Multiplier rule only: when on, holders below every minimum take part at 1×; when off, they are left out. With fixed portions only tier members are paid, so it has no effect. |
A holder falls in the highest tier whose minimum they meet. The form names a tier with a missing name or an unreadable minimum, multiplier or percentage before it saves, and a schedule whose percentages do not add up to 100 is refused. Tier schedules are stored on the project (lib/core/compute/tier_schedule.dart).
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 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.