Skip to main content

Distribution modes and the split

A campaign's token pool is shared between the earners who qualify, in proportion to their points in that campaign by default, under the split rules you set. You choose how it is paid in the wizard's Rewards & distribution step.

Manual or automatic​

ManualAutomatic
Who holds the poolyou, until you payan escrow contract on Safrochain, from before launch
Who paysyou, with Studio's payout assistant (Manual payouts)the contract, after a challenge window (Automatic distribution)
Fundingnone up frontyou lock the pool with a transaction signed in your wallet; the campaign cannot launch until it is locked (Funding)
Datesoptional (open-ended allowed)start and end required, fixed once funded
Split rulesapply when Dyma computes the splitfrozen once the pool is locked
Tokensany registered reward tokenbank tokens (native, IBC such as USDC, tokenfactory) and approved CW20 codes on a chain where Dyma's escrow is deployed (Safrochain today)
Earners see"Paid by your project" and the split rulesan Escrow badge, the split rules, the contract address and its live balance
Network feesyou pay your transfersDyma's operator pays the payout transactions; you pay the funding transaction
Dyma feenonefee_bps set by Dyma, 0 by default (capped at 10% by the contracts)

Both modes compute exactly the same split, at the same time, with the same code.

:::note Where the escrow runs The escrow runs on Safrochain today. If your reward token lives on another network, you can request the escrow for that network from Studio. :::

Settings​

SettingDefaultRangeApplies to
Pool—> 0both (manual: what you declare you will pay)
Splitby pointsby points or equalboth
Minimum pointsnone≥ 1 DPboth
Top Nnone (every earner who qualifies)≥ 1 earnerboth
Maximum payout per earnernonea token amount up to the pool; the escrow stores it as a share of the pool (max_share_bps, 0.01%–100%)both
Minimum payout0.01 token (10^(decimals−2) base units)≥ 0both
Review grace24 hours1–72 hoursboth
Challenge window24 hours1 hour–7 daysautomatic

Split rules​

Earners see the rules you set on the campaign page, under How rewards are split (only the ones that are set).

  • Split by points (the default): each qualifying earner's share follows their points. Equal split: every qualifying earner receives the same amount.
  • Minimum points: earners with fewer DP in the campaign do not qualify.
  • Top N: only the N earners with the most points are paid.
  • Maximum payout: no earner receives more than this amount, whatever their points. On a 1,000,000 SAF pool with a maximum of 100,000, ten earners can each receive 100,000; with two earners, each still receives 100,000, never more, and the other 800,000 returns to you.
  • Minimum payout: an earner whose share is below it is not paid.

In automatic mode the rules are frozen when you lock the pool: the escrow is created with the maximum (as max_share_bps, so a top-up raises it in proportion) and the minimum payout, and no rule can change afterwards. Manual campaigns are paid from the split Dyma computes with the same rules.

Which points count​

  • The cut-off is the campaign's end (or the moment you ended a manual campaign).
  • Submissions created before the cut-off and verified before the end of the review grace count. Use the grace to clear your review queue; anything still pending after it is left out.
  • Excluded from the split: project members, suspended accounts, earners without a usable payout address on the token's chain, addresses shared by two accounts, and addresses the escrow refuses (contracts and the escrow's own role addresses). Earners are told why on their campaign page.
  • Your split rules can leave more earners out: those below the minimum points, and those outside the top N.

The formula​

On chain, the escrow pays each committed entry:

B = escrow balance at finalize
max_fee = floor(B × fee_bps / 10 000) fee reserve (0 by default)
D = B − max_fee distributable
cap = floor(D × max_share_bps / 10 000)
W = sum of the committed weights
amount_i = min( floor(D × weight_i / W), cap )
skipped ⇔ amount_i = 0 or amount_i < min_payout (the amount stays in the leftover)

Before committing, Dyma plans the weights off chain so the whole pool reaches the earners who qualify:

  1. Who qualifies. Earners below the minimum points are left out; with a top N, only the N earners with the most points remain.
  2. Pro rata on points, or equal. Each earner's share of D is D × points ÷ total points (split by points) or D ÷ number of earners (equal split), rounded down to the token's smallest unit. The units left over by the rounding are handed out one by one, to the largest remainders first, so the shares add up to D exactly.
  3. Cap (hard maximum). No earner receives more than the maximum payout. The part of a share above the cap is not given to the other earners: it stays in the escrow and returns to you at completion (manual mode: you simply don't pay it).
  4. Minimum payout. If some shares fall below the minimum, the smallest earners are dropped (earners with equal points are always treated alike) and the pool is shared again between the rest, keeping the largest group in which everyone gets at least the minimum.
  5. The planned amounts are committed as the weights. With the planned balance the contract's formula pays every entry exactly its planned amount; if the balance at finalize differs (a top-up), payouts scale proportionally and never exceed the cap.

Manual mode uses steps 1–4 for the amounts you pay.

Worked examples​

USDC has 6 decimals; amounts below are in USDC, fee 0 (the default).

1. Plain split. Pool 1,000; minimum 0.01; no cap.

EarnerPointsPayout
Ada500500.000000
Bo300300.000000
Chi200200.000000

2. Rounding. Pool 100; three earners with 10 points each. 100 ÷ 3 = 33.333333 each, with 0.000001 left over: it goes to one earner (equal remainders and points: the first address in byte order), so nothing is lost.

EarnerPointsPayout
Ada1033.333334
Bo1033.333333
Chi1033.333333

3. Maximum payout 400 USDC (a 40% cap). Pool 1,000.

EarnerPointsPro-rata sharePayout
Ada800800400 (capped)
Bo150150150
Chi505050

Ada's share is cut to the 400 maximum. The 400 above it is not shared out to Bo and Chi: 600 is paid and 400 returns to you at completion.

4. Maximum binding for everyone. Pool 1,000, maximum 250 (a 25% cap), two earners (70 and 30 points): each receives 250, and the 500 left over returns to you at completion. The pool is paid in full only when no earner's share is above the maximum; with equal shares that means at least pool ÷ maximum earners.

5. Minimum payout 1 USDC on a 10 USDC pool.

EarnerPointsPayout
Ada6006.666667
Bo3003.333333
Chi60— (about 0.6, below 1)
Dee30—
Eve10—

Dropping Eve and Dee still leaves Chi below the minimum, so Chi is dropped too; Ada and Bo share the full pool.

6. With a fee (illustration). If Dyma set fee_bps = 100 (1%) on a 1,000 USDC escrow: max_fee = 10 is reserved at finalize, D = 990 is split, and at completion the escrow charges floor(paid_total × 1%) — 9.90 if every payout succeeds — and refunds the unused reserve with the leftovers. Dyma's default fee is 0.

7. Maximum and minimum payout. Pool 1,000,000 SAF, maximum 100,000 SAF per earner (10% of the pool), minimum payout 1,000 SAF, every earner with the same points (or an equal split), fee 0.

EarnersEach receivesPaid outReturned to you at completion
2100,000 (an even split would be 500,000)200,000800,000
10100,0001,000,0000
2050,0001,000,0000

No share falls below the 1,000 SAF minimum here, so everyone is paid.

Leftovers​

Whatever earners do not receive (apart from Dyma's fee) goes back to the wallet that funded the escrow (automatic) or simply stays with you (manual). In automatic mode it comes back at these moments:

WhenWhat comes backHow
At completionrounding dust, skipped amounts, cap overflow, the unused fee reserve, and the whole pool if nobody qualifiesautomatically, in the transaction that completes the escrow
After the claim deadlinepayouts still unclaimed (failed payouts stay reserved for their earners until then)sweep_leftover, which anyone can call
If the split expiresthe whole pool, when Dyma did not finalize the split before the commit deadlinereclaim_expired, which anyone can call

See Automatic distribution for the deadlines.

Previewing​

During the campaign, Rewards → Escrow & payouts and the campaign's distribution panel show a live preview (participants, points, projected amounts, exclusions), and the distribution CSV exports it. The final list is frozen at the end of the review grace.