Install and enable

Turning the Staking addon on — the extension flag, the hourly cron, permissions, KYC gates and the Super Admin the fee collector depends on.

5 min readUpdated 3 August 2026install, extension, cron, permissions, kyc

Staking installs as part of the platform tree. There is no separate archive to extract into a subdirectory and no migration to run by hand — the tables are created by the same auto-sync that creates the core schema. What you do have to do is switch the extension on, confirm the scheduled task exists, and hand out the permissions.

Do core install first. Staking assumes a working platform with wallets and a running cron process.

Turn the extension on

  1. Open the extensions screen — sign in as an administrator and go to /admin/system/extension. You need the edit.extension permission; Super Admin has it.

  2. Find the Staking row — it is seeded as Staking Crypto, product ID 37434481. If the row is missing entirely, your database predates the extensions seeder; re-run the seeders rather than inserting the row by hand.

  3. Flip the status switch to on. The backend writes the row and clears the settings cache in the same request.

  4. Reload the admin panel. Both menu trees are gated on the extension flag, so Staking Services under Extensions and Staking Rewards in the user navigation only appear once the row is active.

If the toggle animates on and then reverts on reload, the update threw. Check the backend log for EXTENSION. Earlier builds returned a 200 with an error key in the body, which the frontend read as success — the switch stayed on screen while the database row never changed. That is fixed, but an old install can still show it.

Confirm the scheduled task

Everything automatic in this product is one cron entry.

The task is registered as processStakingPositions under the staking category, with a period of one hour. Its title on screen is Process Staking Logs. It accrues due rewards and settles matured positions.

Go to /admin/system/cron and confirm Process Staking Logs is listed and running. It executes once an hour on the dedicated cron process (port 4001), not on the API process.

The cron is the only thing that returns principal at the end of a lock period. If it is not running, matured positions sit at ACTIVE forever, users' money stays locked past the term they agreed to, and the admin overview will start counting them under stale matured after 24 hours. This is a breach of the agreement the user accepted when they staked, not a cosmetic delay.

The task is safe to run repeatedly and safe to retry. Accrual is delta-based against a per-position watermark and every write is keyed to a distribution period, so a run that overlaps a previous one credits nothing twice.

Make sure a Super Admin exists

Both staking fees — the admin fee on rewards and the early-withdrawal fee on principal — are collected by crediting the wallet of the oldest user holding the Super Admin role.

If there is no Super Admin role, or the role exists with no users, the fee collector logs [CRITICAL] No Super Admin ... platform fees are being dropped and returns nothing. The staking code then deliberately skips writing the bookkeeping row, so your earnings screen stays honest — but the revenue is gone and there is no retry.

One more consequence worth knowing: when the actor performing a fee-bearing action is the Super Admin, the fee is skipped entirely rather than credited back to themselves. Testing distributions from the Super Admin account will show zero platform fees. That is correct behaviour, not a bug.

Grant the permissions

Nineteen keys control the addon. Assign them at /admin/crm/role.

Key Opens
access.staking The admin overview and the solvency dashboard endpoint
access.staking.pool · view.staking.pool The pool list and pool detail
create.staking.pool · edit.staking.pool · delete.staking.pool Creating, editing, reordering and deleting pools
access.staking.position · view.staking.position The position table
create.staking.position · edit.staking.position · delete.staking.position Position edits, approving or rejecting withdrawals, terminal transitions
access.staking.earning · view.staking.earning The earnings desk
create.staking.earning · edit.staking.earning Both distribute endpoints and claiming an admin earning row
view.staking.performance · create.staking.performance External pool performance records
view.staking.activity The staking admin activity log
access.staking.settings The staking settings screen

edit.staking.position is the one that moves money: approving a withdrawal request settles the position and returns principal. Treat it as a finance-desk permission, not a support one. See Permissions for how a key maps to an admin path.

Set the KYC gates

Three feature gates apply, enforced server-side on the user endpoints:

Feature Blocks Enforced on
view_staking Browsing staking opportunities The user-facing surfaces
invest_staking Opening a position POST /api/staking/position
withdraw_staking Claiming rewards and requesting a withdrawal The claim and withdraw endpoints

Configure them with the rest of your verification levels in the KYC settings. Leaving them ungated is a deliberate choice, not an oversight — but note that withdraw_staking covers both leaving a position and claiming rewards, so gating it locks users out of money they have already earned until they verify.

Affiliate rewards

Two seeded referral conditions fire from staking, if you run the affiliate system:

  • STAKING — Staking Commission. Fires when a referred user opens a position, on the staked amount. Seeded at 2% and enabled.
  • STAKING_LOYALTY — Staking Loyalty Bonus. Fires once when a position completes, on the original principal. Seeded at 3% and disabled; enable it in the affiliate conditions screen if you want it.

Both are processed after the money transaction commits and are best-effort — a failure there is logged and never rolls back a stake or a settlement.

Verify the install

Work through this on a staging install before you publish a pool:

    • The Staking extension row shows as active at /admin/system/extension
    • Staking Services appears under Extensions in the admin menu
    • Process Staking Logs is listed at /admin/system/cron and has run
    • A Super Admin user exists and is not the account you test with
    • Your admin role holds at least access.staking and view.staking.pool
    • /admin/staking loads without a permission error
    • /admin/staking/settings loads and shows the Platform and Earnings tabs
    • A test user can reach /staking and see the pool list

Then read Creating pools — a pool has more fields that cannot be changed later than fields that can.