MLM & Affiliate System 6.2.4
Latest13 October 2026
This release has upgrade notes. Read them before updating — they describe behaviour changes that need your attention.
MLM & Affiliate System v6.2.4
Release Date: October 13, 2026 Tags: REWARDS, PAYOUTS, ECOSYSTEM TOKEN, SETTINGS
Overview
Referral rewards can be paid in one ecosystem token, such as PBX. A new Reward Payout group on the Commission tab of Affiliate Settings chooses between paying each reward in its condition's own currency, as before and still the default, and paying every reward in one ecosystem token that you price at a fixed dollar price, at its market, or at its market with the fixed price as a fallback. The condition still decides what a reward is worth. The token price turns that worth into tokens when the reward is earned.
Every reward now records the currency and wallet type it pays in, so changing the mode, or a condition's currency, no longer changes the unit of rewards already earned. The payout threshold is now counted in dollars across a member's currencies, which changes who can claim: read Upgrade Notes before you update.
Requires Core v6.8.6: the new settings need a Super Admin to change, and their 15 new texts are in its language files.
Update Instructions
pnpm updatorIt adds two columns to the reward table and then runs the seeder that fills them for rewards already earned. Both happen on their own, and nothing is paid differently until you change a setting. If your .env has DB_SYNC="none", nothing adds the columns: add currency VARCHAR(191) NULL and walletType ENUM('FIAT','SPOT','ECO') NULL to mlm_referral_reward first, then run pnpm seed. The new texts are in English in all 90 languages until they are translated.
Upgrade Notes
Who can claim changes: the payout threshold is in dollars
The threshold, Payout Threshold ($), used to be compared with one raw sum of a member's unclaimed rewards in every currency at once, so 0.002 BTC counted as 0.002. Each currency's total is now priced in US dollars (the reward token at its configured price) and the dollars are added up.
- Changed who clears the threshold. A member holding a small amount of a high-value coin can now claim, and a member holding a large amount of a cheap coin can now be held back, where the old comparison got both wrong. The refusal reads like "… $50 … $12.34".
- A currency with no price is left out of the sum. When one is left out and what is priced falls short of the threshold, the threshold is waived for that claim and a warning is logged, rather than being applied to part of the balance.
- The screen shows 50, but no value is stored until someone saves one, and only a saved positive value is enforced. This applies on update in every payout mode, including the default.
Before you switch to a token
- Set the fixed price first. With Pay Rewards In on the token, Reward Token Price on "Fixed price" and no price typed, a reward pays nothing. Of the 37 conditions the add-on seeds, 20 pay at the moment of the activity: when the token has no price at that moment the reward is logged and skipped, and it is not tried again, because the hourly job leaves those conditions out. A price typed too low pays far more tokens than intended: a reward worth 10 USD pays 10 divided by the price.
- Only a Super Admin can change the four settings. Anyone else gets
Only a Super Admin can change the "<key>" settingand the whole save is refused. A change needs no restart. - The token you choose must be an active ecosystem token when the settings are saved, otherwise the save is refused:
"X" is not an active ecosystem token. Add or enable it under Ecosystem → Tokens first.A token deactivated afterwards keeps being paid. With no token chosen, the mode behaves as each condition's own currency.
Rewards earned before the update
- The seeder gives every existing reward its condition's currency and wallet type, which is what the old claim would have paid it in. It can run again safely. A reward left without them, because the seeder has not run or its condition was deleted, is still paid in whatever its condition says at the moment of the claim.
- Editing a condition's currency used to be refused with "Do it anyway?" while unclaimed rewards existed under it. The check now counts only rewards with no stored currency, so after the seeder has run an edit no longer asks.
Added
Pay every reward in one ecosystem token
- Added the Reward Payout group with four settings. Pay Rewards In chooses "Each condition's own currency" (the default) or "One ecosystem token (Reward Token)". Reward Token is the token. Reward Token Price chooses "Fixed price" (the default), "Market price (last trade against USDT)" or "Market price, or the fixed price when there is no market". Fixed Token Price (USD) is the price for the two choices that use one, and has no default.
- The market price is read from the token's market against USDT, from its latest daily candle. A market that has never traded has no price.
- Members see "Paid in
" under a condition's figure when the token differs from the condition's currency. The condition editor shows a notice in the same case. - Added a Currency column to the admin reward list, sortable and filterable. A percentage reward prints as "9.99 USDT", not "9.99%".
Changed
Each reward knows its own currency
A reward used to record a number and nothing else. The claim paid whatever currency its condition named at the moment of claiming, so editing a condition's currency turned every unclaimed reward under it from, say, 50 USD into 50 BTC.
- Changed rewards to record the currency and the wallet type (fiat, spot or ecosystem) they pay in. The event engine, the hourly job and a manually created reward all stamp them, and a manual reward always takes its condition's currency. A claim pays exactly what was earned.
- Changed the hourly job to top a percentage reward up in its own currency: each run converts the period's volume into the reward's unit at the current price and raises the reward when the result is higher, never lowering it. Fixed-amount rewards are never topped up. When the token has no price, the job writes nothing and the period stays payable, but only the current and the previous period are looked at again, about 48 hours on a daily condition. A lowered fixed price therefore raises unclaimed rewards, and for a reward already claimed the log says "claimed at X but now earns Y".
- Changed the member-facing figures to price each reward in its own unit: the landing page's paid-out, average, ranking and top-earning figures and the stats route are in US dollars per reward currency, with unpriced currencies left out, and the recent-activity list shows each reward's own currency.
- The admin reward analytics cannot price a token and say "Excludes
- no exchange rate". The admin dashboard changes only its unit label: its totals are still raw sums.
Fixed
A percentage reward in an ecosystem-only currency paid nothing
Referred volume in a token that the fiat and exchange tables do not know could not be priced. A percentage condition that earns an ecosystem token was skipped with a warning when the activity was in another currency, and the hourly job paid neither percentage nor fixed conditions in such a currency.
- Fixed it by pricing the volume through the token's ecosystem market when the Ecosystem extension is enabled and the market has traded, in both the event engine and the hourly job, so more of the volume now qualifies. When the token is the configured reward token it is priced at the configured price. A currency that is still unpriced is skipped, as before.