Staking for Bicrypto
Publish your own APR, lock the deposits, pay the rewards yourself — a yield product you fully control.
- One pool, many terms — 30, 90 and 365 days side by side on one capacity
- Four payout schedules per term: daily, weekly, monthly or end of term
- Auto-compound terms pay principal plus compounded reward in one credit
- APR and both fees frozen per position, so a pool edit never reprices a lock
- Your admin fee comes off every accrual, straight to the Super Admin wallet
- A capacity ceiling per pool that caps exposure and cannot be oversold
- Hourly settlement returns principal at maturity whatever your toggles say
- Early exits queue for approval, priced from the day the customer asked
- Pools on FIAT, SPOT or Ecosystem on-chain wallets, with no extra plumbing
- Solvency overview: advertised, net-promised and realised APR per pool
- Nineteen permission keys, plus KYC gates on staking and on taking money out
- Landing page, pool browser, positions dashboard and a rewards calculator
Inside Staking
Two yield products: your treasury pays one, the network pays the other
Two products behind one setting. On the fixed-rate product — the default — customers lock funds from their platform wallet at a rate you publish: no validator, no bonding, no external provider, the money never leaves your platform, and one hourly task is the only thing standing between a stake and its maturity. Switch the mode and the same addon runs custodial on-chain staking on Solana and Lido, where the network pays the reward and you keep a commission.
In detail
Staking gives your customers a place to lock funds from their platform wallet at a rate you publish, and gives you a fixed-term deposit product with nobody else in it. Money never leaves your platform: a stake is debited from the customer's wallet and held as a position, rewards accrue on the schedule you set, and at maturity the principal returns to that same wallet.
How it works
A customer picks a pool, picks one of its terms and commits an amount. The position freezes that term's APR, admin fee and exit fee, so a later edit cannot reprice a lock somebody already agreed to. One hourly task does the rest: it computes the reward owed for the whole elapsed term, subtracts what it has credited and writes the difference as an unclaimed earning row, so a missed run costs nobody anything. Your admin fee comes off the top of each accrual and lands in the Super Admin wallet. At maturity the final reward accrues, the principal returns and pool capacity is restored.
The surface you configure
| Per pool | Per term |
|---|---|
| Asset symbol and wallet type — FIAT, SPOT or ECO | Lock period, from one day |
| Capacity ceiling, your exposure limit | APR |
| Minimum and maximum stake | Daily, weekly, monthly or end-of-term payouts |
| Admin fee % and early-exit fee % | Auto-compound |
| Profit source, allocation, risks, rewards | Its own minimum, maximum and fees |
What operators control
Pools are ACTIVE, INACTIVE or COMING_SOON, and only one per asset and wallet type can be live at once. Positions run ACTIVE, PENDING_WITHDRAWAL, COMPLETED or CANCELLED, with bulk actions on up to 100 at a time and a guard on deleting anything still holding principal. Early exits can route to a queue where you approve or reject each, priced from the day the customer asked. A solvency overview ranks pools by what needs you first, compares advertised against net-promised and realised APR, and flags any pool past 90% of capacity. **Nineteen permission keys**, two KYC gates and eight platform settings sit behind it.
Nothing is staked on a blockchain. No validator is involved, nothing is bonded, and no external yield reaches the platform — you fund every reward from your own float, and each accrual is booked against your treasury as written. That is the trade: no slashing, no unbonding queue and no third party who can move your terms, for a liability you price yourself and cap with each pool's capacity. Requires Bicrypto core and the cron running; ECO pools also need the Ecosystem addon, and your admin fee is logged and dropped unless a Super Admin user exists.
Who pays the reward is the whole difference between the two
A fixed-rate pool is not delegated staking, and selling it as such would be a promise you cannot keep. A stake is debited from the customer's wallet and held as a position row. When a reward accrues, one transaction writes three things: an unclaimed earning row for the customer, your admin fee credited to the Super Admin wallet, and the gross booked against your treasury as money you have committed to pay. Every point of APR you advertise is a point you fund — which is also why nothing can slash you, nothing unbonds, and no third party can change your terms mid-lock. An on-chain pool reverses every clause of that. It is one balance on Solana or on Ethereum, owned by many holders in shares: a stake mints shares at the current price, an observer writes what the network actually paid into that price, and an exit burns shares at the lower of the price frozen at the request and the price at finalisation. The reward is whatever the network paid — it is not fixed, it is not guaranteed, your treasury never adds to it, and a validator penalty moves the price down for everyone holding. Your commission is minted as shares out of a positive reward only, so your take is a share of coins that exist rather than a credit written ahead of them.
On a fixed-rate pool your real yield source lives outside this product, and each pool's capacity ceiling is the ceiling on the liability, so set it generously at creation: the pool edit form cannot change capacity once the pool is live, and no admin screen sends the capacity delta the API expects. The on-chain half is not a setting you flick on. It is refused until the Ecosystem extension and the Web3 Trading addon — sold as Web3 Wallet & On-Chain Trading — are each installed, enabled and licensed, the ecosystem key vault is unlocked, and at least one chain is activated: a declaration of your entity, your licence and the territories you serve, accepted by a Super Admin. Buy that half deliberately. An operator who only ever stakes Solana still needs the Web3 Trading addon.
One fixed-rate pool, several terms, one capacity
A fixed-rate pool can publish 30-, 90- and 365-day terms side by side, each with its own APR and payout schedule, and each free to override the minimum, the maximum, the admin fee and the exit fee. They share one asset and one capacity ceiling. One term is marked featured — it is what the pool advertises and what the staking form preselects — while the ladder still reads shortest to longest. Every position snapshots the term it opened on, so editing a tier tomorrow cannot reprice a lock somebody already agreed to. None of this exists on an on-chain pool. It publishes no APR, because the number would be a forecast; the model refuses a rate, a lock period and a capacity ceiling on it outright, and the only clock on an on-chain position starts when the customer asks to leave.
Retire a term by setting it INACTIVE rather than deleting it — positions reference the tier row for history. A pool with no tiers still works: its own rate, lock period and schedule are the single implicit term. A pool also snapshots the mode it was created under and cannot change it once it holds a position, so fixed-rate and on-chain pools run side by side on one install and a customer's position stays the product they bought.
The fixed-rate book runs on one hourly task, and one queue
On the fixed-rate product the scheduled task accrues what is due and settles what has matured, and maturity settlement always runs — holding capital past an agreed term is not a configuration option. Early exits are the only thing that can need you. They land in a queue ordered oldest first, each row showing the principal, how many days early the request was, how long it has waited, and the exit cost computed exactly as settlement will compute it. Approve returns the principal net of that fee; reject puts the position back to ACTIVE and moves nothing. An on-chain exit never reaches that queue, because no human reviews a protocol exit: it is accepted at any time, whole or by shares, it cannot be cancelled once made, the wait is the network's own unbonding period rather than a term you set, and the coins are credited only once they have landed back in the customer's own deposit address. Six more scheduled tasks carry that half — batches every two minutes, reward observation every fifteen, alerts every ten, reconciliation hourly, the validator policy every six hours and statements once a day.
The exit fee is priced from the day the customer asked, not the day you decide, so a request that sat in the queue past its own maturity still pays it. Approval is platform-wide, not per pool — and on a fresh install the backend treats the unsaved key as approval required while the settings switch reads off. Save that tab deliberately before launch. The switch governs fixed-rate exits only: an on-chain exit carries no fee, no forfeiture and no approval step for you to set.
One screen answers whether the fixed-rate book can still pay
The admin overview is built around that question. A maturity ladder splits the live book three ways — already matured and unsettled, due inside 30 days, and locked past that — weighted by position count, because principal held in three different tokens cannot be added into one number. Each pool shows what it promises the staker after your admin fee against what it has actually been paying, so a pool advertising 12% with a 20% fee is measured against 9.6% rather than 12%, and it is only flagged once it falls more than 5% below that. The book underneath lists staked principal, rewards owed and platform fees booked one row per denomination, never as a single total. And when a matured position sits more than 24 hours without settling, the page says settlement has stalled — which is how you learn the hourly task stopped, instead of hearing it from a customer. An on-chain pool raises none of these questions, because nothing was promised to measure against. What it raises instead is an incident, on its own console and with a severity rather than a log line: a stuck batch, a lagging observer, a staking wallet under its gas reserve floor, a reconciliation drift, a validator breach, an overdue unbonding, a stale delegation, a slashing with the loss recorded against the pool.
Realised APR is not a figure on every pool. An on-chain pool has no APR to realise at all, and a fixed-rate pool that only settles at maturity — auto-compound, or an end-of-term schedule — never advances an intra-term watermark to measure against, so the row reads Settles at maturity. The pool table and the withdrawal queue are ranked and cut to 24 pools and 10 requests, and the page tells you when it has cut them; every figure above those two lists is a total over the whole table.
- payout schedules per term
- 4
- wallet types a pool can hold
- 3
- permission keys
- 39
- platform settings
- 13
Everything included
80 capabilities, in 8 areas
Every item below exists in the source you receive. Nothing here is a roadmap.
Pools — the product you publish
One pool is one thing a customer can buy — a liability you cap on a fixed-rate pool, a share of a chain balance on an on-chain one.
- Wallet routing per pool: fiat, spot or Ecosystem custody wallets
- Chain selection on Ecosystem pools
- A capacity ceiling in tokens on a fixed-rate pool, decremented atomically so it cannot be oversold
- Minimum and maximum stake per pool
- Admin fee and early-exit fee per fixed-rate pool, each 0–100%; an on-chain pool carries a commission and no exit fee
- Three pool states: active, inactive and coming soon
- One active pool per symbol and wallet type, enforced on create and on update
- Promoted flag and display order for the public list
- Four required disclosure fields on a fixed-rate pool: profit source, allocation, risks and rewards. An on-chain pool's disclosure is generated from its own rows instead, versioned by a hash of its terms, and a stake presented against an old version is refused and shown the new text
- Delete refused while a pool holds live positions; archiving keeps rewards claimable
Terms, rates and the ladder — fixed-rate pools
A fixed-rate pool publishes as many lock terms as you want to price. An on-chain pool publishes none.
- Many lock terms on one pool, sharing one capacity
- Per-term APR, lock period and payout schedule
- Per-term overrides for minimum, maximum, admin fee, exit fee and auto-compound
- A featured term — the rate the pool advertises and the stake form opens on
- The ladder reads shortest to longest, independently of which term is featured
- Preset lengths of 7, 14, 30, 60, 90, 180, 270 and 365 days, plus custom
- Up to 24 terms per pool, one per distinct lock period
- Retire a term as inactive rather than deleting it; the last open term cannot be closed
- A pool with no terms runs on its own single rate and lock period
Rewards, fees and claims — fixed-rate pools
- Four payout schedules: daily, weekly, monthly and end of term
- Simple or compound APR maths, chosen platform-wide
- Auto-compound terms pay principal plus compounded reward in one credit at maturity
- Delta-based accrual: a missed run pays the whole outstanding amount next time
- Every accrual keyed to its period, so no cycle can be credited twice
- Your admin fee taken off each accrual and credited to the Super Admin wallet
- Each gross accrual booked against the platform as money committed to pay
- Unclaimed earning rows; one claim credits every row on a position
- Rewards survive completion of the term and never expire
Positions and exits
The book, and the only queue that can need a decision from you — an on-chain exit never asks for one.
- Nine position states: four on a fixed-rate position — active, pending withdrawal, completed and cancelled — and five more for the on-chain lifecycle: pending delegation, unstake requested, unbonding, withdrawable and failed
- Each fixed-rate position freezes its APR, both fees, payout schedule, auto-compound and term length; an on-chain position freezes the disclosure version it consented to
- Fixed-rate early exits either queue for your approval or settle in the same request; an on-chain unstake is accepted at once, whole or by shares, and cannot be cancelled
- The exit cost is priced from the day the customer asked, not the day you decide
- Approve returns principal net of the fee; reject returns the position to active, with a reason
- Cancel as a separate punitive exit that forfeits unclaimed rewards
- A ledger reversal booked when a cancellation forfeits rewards
- Bulk complete, cancel or approve-exit on up to 100 positions, each in its own transaction
- Admin notes on any position
- Economic fields refused outright by the position edit endpoint
- Delete refused while a position still holds principal
- Idempotent principal return, with capacity restored by the original amount
What the customer uses
- Public landing page: promoted pools, highest APR, short locks, coming soon and live activity
- Pool browser with search, token filter, APR range, sorting and quick filters
- Pool detail page with every term, the disclosures and the pool's own stats
- A rewards calculator quoting one figure per fixed-rate term, on the engine's own formula
- Stake form that opens on the featured term; on an on-chain pool it quotes the network fee, the activation delay and the unbonding estimate, and takes five acknowledgements before anything moves
- Positions dashboard split by active, pending and completed
- Position detail with earnings history: claim and exit on a fixed-rate position, unstake on an on-chain one
- Personal summary: total staked, earned, unclaimed, and a per-token breakdown
- Built-in staking guide page, and a monthly statements screen for on-chain stakers
- Public statistics: locked principal, active stakers and principal-weighted APR
The solvency console
The admin overview answers one question about the fixed-rate book: can you pay what you promised?
- Alert when settlement has stalled more than 24 hours
- Requests awaiting a decision, with the age of the oldest
- Maturity ladder: matured and unsettled, due within 30 days, locked beyond
- Tiles for awaiting decision, due this week, pools past 90% of capacity and pools underpaying
- Pool pressure table ranked by what needs you first, not by display order
- Net-promised against realised APR per pool, with the advertised rate under the rows not flagged
- Book by asset — principal, rewards owed and platform fees, one row per denomination
- Withdrawal queue oldest first, showing the exit cost settlement will actually charge
- Flow counters over 24 hours, 7 days or 30 days
Revenue, analytics and records
- Earnings desk with overview, distribution and history tabs
- Fee income by pool and by type, charted over time
- Four platform earning types: platform fee, early-exit fee, performance fee and other
- Manual bookkeeping entries that deliberately move no money
- A per-pool console with details, that pool's own positions, and analytics
- Pool analytics over four ranges: staked, earnings and distinct stakers per bucket
- Retention by position count, and a cancellation rate
- CSV export from the pool analytics tab
- External venue performance log — date, APR, staked, profit and notes, per pool
- Activity log of every pool, position and distribution action, cron runs marked as system
Running it
- Seven scheduled tasks: one hourly that accrues what is due and settles what has matured, and six the on-chain product runs
- Fixed-rate maturity settlement runs whatever your distribution settings say
- Intra-term distribution switchable, and restrictable to one hour of the day
- An APR accrual catch-up call, with a dry run that writes nothing
- One-off bonus distribution split pro-rata, capped at one per pool per cycle
- Batching, retries and a Super Admin alert when a position keeps failing
- Thirteen platform settings across a Platform, an Earnings and a Compliance tab, with the mode key restricted to the Super Admin role
- 39 permission keys, graded per screen and per action — 20 of them added by the on-chain screens
- Verification gates on opening a position and on taking money out
- In-app notifications on a claim, an exit request and an exit settlement
- Eighteen tables created on boot with no migration to run — seven fixed-rate and soft-deleted, eleven on-chain and not
- Licence
- Addon licence — full source, activated in your platform's extension manager
- Requires
- Bicrypto core. Wallets, users, verification, roles, settings, the cron process and the fee collector all come from core.
- Runs on
- Your existing Bicrypto server, for both products: no extra process and no extra service. A fixed-rate pool puts nothing on a chain at all — no node, no validator, nothing bonded. The on-chain product still adds no service of its own, but it does read and broadcast through the platform's RPC pool, on the same endpoints and the same network environment variable the Ecosystem addon already uses for that chain.
- Storage
- 18 MySQL tables created on boot — no migration to run. Seven carry the fixed-rate product and are soft-deleted; the eleven the on-chain product adds are not.
- Scheduled work
- Seven scheduled tasks. One hourly on the fixed-rate book — accrue what is due, settle what has matured — and six the on-chain product runs: batches, reward observation, alerts, reconciliation, the validator policy and monthly statements.
- Admin surface
- 16 admin screens. Eight fixed-rate — overview, pools, the pool form, the per-pool console, positions, earnings and settings — and eight on-chain, across chains and their activations, staking wallets, batches, validator sets, incidents and compliance.
- Customer surface
- 7 pages — landing, pool browser, pool detail, dashboard, positions and the guide, plus a monthly statements screen that stays empty on a fixed-rate install
- API surface
- 98 endpoints: 20 customer, 78 admin. Five of the customer endpoints and 45 of the admin ones exist only for the on-chain product.
- Access control
- 39 permission keys — 19 for the fixed-rate product, 20 added by the on-chain screens — plus verification gates on staking and on taking money out. The compliance console has no key of its own: the two staking settings keys open it, and behind it every activation declaration, every customer's consent under their name and every monthly statement, so grade those two as customer records.
- Wallet types
- A fixed-rate pool holds fiat, spot or Ecosystem wallets. An on-chain pool is always an Ecosystem pool on a supported chain — the create route writes that wallet type itself.
- Affiliate
- Two seeded referral conditions: a 2% commission when a referred user stakes, and a 3% loyalty bonus on completion, which ships switched off
- Who funds the reward
- On a fixed-rate pool: no validator, nothing bonded, no external yield feed. Each accrual is booked against your treasury as money you have committed to pay, and your real yield source lives outside this product. An on-chain pool inverts this — the network pays, you keep a commission, and nothing about the rate is yours to promise.
- What the on-chain half additionally needs
- Fiat and spot pools need nothing beyond core. A fixed-rate pool set to the Ecosystem wallet type needs the Ecosystem addon so the customer's on-chain wallet exists — a choice you make per pool, not a prerequisite for buying. The on-chain product asks for more, and is refused until it has all of it: the Ecosystem extension installed, enabled and licensed; the Web3 Trading addon, sold as Web3 Wallet & On-Chain Trading, installed, enabled and licensed; the ecosystem key vault unlocked; and at least one chain activated. The engine itself ships in this build. An operator who will only ever stake Solana still needs the Web3 Trading addon, and a Staking licence on its own gives you the fixed-rate product.
- Three operational dependencies
- The cron process must be running or matured positions stay locked past their term, and a Super Admin user must exist or your fees are logged and dropped rather than queued. The on-chain product adds a third: each staking wallet carries a gas reserve floor, set to 0.05 of the chain's own coin when the wallet is created, and the low-gas alarm only fires while that floor is above zero — set it to zero and the wallet that pays for every exit can run dry with nothing said.
- Claiming is a fixed-rate idea
- On a fixed-rate pool accrued rewards sit as unclaimed rows until the customer claims them; only auto-compound terms credit automatically, and only at maturity. An on-chain position has no claim at all — the reward lives in the share price, the claim door answers it with unstake instead, and a customer takes profit by leaving with part of their shares.
- No partial exit on a fixed-rate pool
- A fixed-rate position leaves whole or not at all, and staking more opens another position. There is no flexible pool type — every term is locked for at least one day. An on-chain exit is the other way round: it can be taken by shares, which splits the row, and it cannot be cancelled once it is made.
- Capacity is not editable from the form
- On a fixed-rate pool the Available to Stake input on the pool edit form is inert. Capacity moves only through an explicit signed delta sent to the API, so set it generously at creation. An on-chain pool has no capacity ceiling at all — the model refuses one on it — so the size of that book is whatever your customers stake.
- One exit policy across every fixed-rate pool
- Whether an early exit queues for approval is a platform-wide switch, not a pool field — you cannot run a flexible pool and a term pool with different exit policies side by side. It reaches fixed-rate pools only; an on-chain exit has no fee, no forfeiture and no review, and its wait is the network's, not yours.
Loved by customers
Reviews
No reviews yet. Own it? Share your experience.
Own this product? Sign in to leave a review.
Better together
Bundles containing this product
Get Staking for Bicrypto for less as part of a bundle.
Keep exploring