Install and enable
How to activate the MLM & Affiliate addon on a Bicrypto install — where the extension actually lives, what the seeder creates, and how to prove commissions are being generated before you advertise the programme.
There is nothing to unzip into a web root and nothing to compile by hand. Installing the addon is three moves in the Extension Manager — activate the licence, install the release, switch it on — plus one command in a shell. Everything else on this page is about making sure the programme is actually generating commissions once you do.
Before you start
- A working Bicrypto install. See Server requirements if you do not have one yet.
- The purchase code for Multi Level Marketing — product ID
36667808— from your MashDiv dashboard. - Outbound HTTPS from the server to the licence host — or, for a server that has none, the licence certificate downloaded from your MashDiv dashboard, for the License File route on the activation screen.
- A shell on the server, for the one command that applies the install
(
pnpm updator) and forpnpm seed.
Nothing else. This addon adds no services, no environment variables and no external dependencies.
Step 1 — Activate, install and enable
- The Multi Level Marketing card — click it to open the product page
- Its switch stays disabled until the licence is activated
-
Open the Extension Manager. Sign in as an administrator and go to Admin → System → Extension Manager (
/admin/system/extension) — the page heading reads Add-ons & Integrations, and the screen needs theaccess.extensionpermission; a Super Admin always has it. On the Extensions tab, or with the search box, find Multi Level Marketing. Not "Affiliate" and not "MLM & Affiliate" — the card is titled Multi Level Marketing, its internal name ismlm, and its product ID is36667808. Click the card. Until its licence is activated the switch on the card is disabled and reads Activate license first. -
Activate the licence. On the product page press Activate License. Paste the purchase code from your MashDiv dashboard, optionally an email address for update notifications, and press Activate License; the screen confirms License Activated! and sends you back to the product page a couple of seconds later. Activation writes the encrypted, machine-bound licence file
lic/36667808.lic— moving the install to a different machine invalidates it. If the server has no outbound access, the License File tab on the same screen takes the licence certificate downloaded from your MashDiv dashboard instead.- Paste the purchase code here
- Activate License — then wait for the redirect back to the product page
- The offline route, for a server with no outbound HTTPS
-
Install the release. Back on the product page, now licensed, the Overview tab has a release panel. If it offers Install v…, press it; if it says Up to date on a product you have only just licensed, press Check for Updates once, then install whatever it offers. The Releases tab holds the notes for the version you are being offered — read them first.
Install downloads the release, verifies it and extracts it over the project root. It runs no migrations, builds nothing and restarts nothing, so finish it from a shell on the server:
pnpm updatorThat is the finalise chain — stop, dependencies, schema, seed data, frontend build, start — and it is what makes the addon's five tables, its routes and its screens exist. If the panel still says Up to date after the check there is nothing to download; go straight to the next step.
- Check for Updates, then Install v… when it is offered
- Releases — the notes for the version you are about to install
- The Enabled switch — step 4, not yet
-
Switch it on. Turn the Enabled switch on — in the product page heading, or on the card in the Extension Manager, usable now that the licence is verified. The licence and the switch are two separate things: a valid licence unblocks the gate, the switch turns the feature on. You need both, and the switch takes effect without a restart.
-
Confirm both menus appeared. The admin mega-menu grows a Business Tools → Affiliate Program entry, and signed-in members get Services → Affiliate Program. Both are gated on the
mlmextension being enabled, so if they are missing the switch did not take.
On a managed or headless install you can do steps 2 and 4 in one command from the project root:
pnpm activate-product 36667808 YOUR-PURCHASE-CODEThat runs the same code the admin screen runs — it activates the licence and
switches the extension on, without a restart. It does not install a pending
release, so step 3 still applies: if the Extension Manager offers
Install v… for the product, press it and run pnpm updator.
After enabling, every screen, URL, permission and settings key uses the word
affiliate. The only artefacts that say mlm are the Multi Level Marketing
card you just switched on in the Extension Manager, the five database tables,
and the affiliateMlmSystem setting. Do not go looking for an MLM section in
the admin — there is not one.
Step 2 — Seed the commission rules
The addon is useless without conditions: they are the rules that say what earns
a commission and how much. They live in mlm_referral_condition and are created
by a seeder, not by enabling the extension.
pnpm seedThis inserts 37 conditions covering every addon in the catalogue. It skips
any condition whose name already exists, so it is safe to run repeatedly and
it will never overwrite a rate you have edited.
15 of the 37 are active on a fresh database. The other 22 are seeded disabled on purpose. Several conditions can fire on the same activity, and every one of them used to ship active — a single deposit paid three commissions at once (10% + 5% + 2% = 17%) on a screen that read "10%". Exactly one rule per trigger is now enabled by default, so the number you see is the number you pay.
The 15 that start active:
| Trigger | Condition | Reward | Minimum |
|---|---|---|---|
| Deposit | DEPOSIT |
2% | 5 |
| Spot trade | SPOT_TRADE |
0.1% | 1 |
| Binary win | BINARY_WIN |
2% | 5 |
| Investment | INVESTMENT |
5% | 50 |
| AI investment | AI_INVESTMENT |
2% | 25 |
| Forex investment | FOREX_INVESTMENT |
100 fixed | 100 |
| ICO contribution | ICO_CONTRIBUTION |
15% | 10 |
| Staking | STAKING |
2% | 1 |
| E-commerce purchase | ECOMMERCE_PURCHASE |
5% | 5 |
| P2P trade (buyer side) | P2P_TRADE |
1% | 10 |
| P2P trade (seller side) | P2P_TRADE_COMPLETION |
0.5% | 10 |
| NFT purchase | NFT_PURCHASE |
2% | 5 |
| NFT sale | NFT_SALE |
2% | 5 |
| Copy trading | COPY_TRADING |
3% | 50 |
| Futures trade | FUTURES_TRADE |
0.1% | 10 |
New conditions are seeded to pay USDT into a SPOT wallet. Read Commission conditions before you change that — the reward currency is what all qualifying volume is converted into, and picking one your platform cannot price stops the rule paying anyone.
The seeder skips by name, so an install that has been running since before the defaults changed keeps whatever it had — including the historical state where every seeded condition was active and one deposit paid three commissions.
pnpm seed prints an audit of which active conditions currently collect on the
same activity. Read that output, then open Admin → Affiliate → Conditions
and turn off the ones you did not intend to run. The screen shows the combined
effective rate per rule, so you can see what a transaction really costs before
you decide.
Step 3 — Choose the structure
- Pick the structure: DIRECT, BINARY or UNILEVEL
- Set a level count between 2 and 7
- Enter each level's share of the commission
Go to Admin → Affiliate → Settings. The default is DIRECT, which pays the
immediate sponsor and nobody else. That is the right choice for most operators
and the only one that needs no further configuration.
If you want multi-level payouts, switch to BINARY or UNILEVEL, set a level
count between 2 and 7, and enter a percentage for each level. The percentages
are shares of the commission, not extra commission, and they must total 100% or
less — over 100% and the engine refuses to pay anything at all, silently.
The settings screen shows the running total for exactly this reason.
Full detail in Programme settings and Referral structures.
Step 4 — Prove it works
Do not announce the programme until you have seen a reward row appear.
-
Check the cron job registered. Open Admin → System → Cron and look for Process MLM Referral Conditions in the
mlmcategory. It runs hourly. The job only exists while the extension is enabled — it is added and removed as you toggle, without a restart — so its absence means the extension is off. -
Create a referral. Open a private browser window, register a throwaway account through
https://your-site/en/register?ref=<an existing user id>, then check Admin → Affiliate → Referrals. A row should exist. Its status isACTIVEunless you turned on Require Approval, in which case it isPENDINGand will earn nothing until you approve it. -
Trigger a commission. Have the new account do something a live rule pays on — a deposit above the condition's minimum is the easiest. Event-driven rules (deposits, staking, ICO, P2P, NFT, futures, copy trading) pay within seconds. Cron-driven rules wait for the next hourly run.
-
Check the reward exists. Admin → Affiliate → Rewards should show an unclaimed row against the referrer. The referrer also gets an in-app notification linking to
/affiliate/reward. -
Claim it. Sign in as the referrer, open Affiliate → Rewards and press Claim. The amount lands in the wallet named by the condition (
SPOT/USDTby default) and the reward row flips to claimed.
If step 3 or 4 produces nothing, work through Troubleshooting — there are five independent gates and each one fails quietly.
What the addon added to your database
Five tables, all prefixed mlm_:
| Table | Holds |
|---|---|
mlm_referral |
who referred whom, and whether the referral is PENDING, ACTIVE or REJECTED |
mlm_referral_condition |
the commission rules |
mlm_referral_reward |
earned commissions, claimed or not |
mlm_binary_node |
binary tree placement (display only) |
mlm_unilevel_node |
unilevel tree placement (display only) |
mlm_referral, mlm_referral_reward and mlm_referral_condition are
soft-deleting: an admin delete sets deletedAt rather than removing the row.
Turning it off
Turn the Enabled switch off — on the product page, or on the card in the
Extension Manager. The reward engine stops immediately — it checks that the
mlm extension is enabled before doing anything — and the hourly job is
deregistered within a scheduler cycle. Both menu entries disappear.
Nothing is deleted. Existing referrals, unclaimed rewards and tree nodes stay in the database exactly as they were, and the licence stays in place, so switching back on needs no reactivation and resumes from there. Unclaimed rewards become claimable again the moment it is back on.