← Agent Trust Network · Deep Dive · Staking & Rewards

Staking: every rule
lives in the contract

Staking is the audit network's economic base: capital delegated to an audit node backs the responsibility that node carries. This deep-dive walks through every on-chain rule — how the multiplier is computed, what top-ups and extensions really cost, why exit has friction, and how yield settles second by second. All parameters are production values, and every example is recomputed at the contract's integer precision.

Stake floor300 ZKP · uncapped
Lockup7–365 days
Multiplier1.0x–2.4x
Effective APY5%–12%
Cooldown15 days

/01 — Staking Mechanics

Delegating, boosting, extending,
and exiting

Staking is pure delegation: audit nodes post no bond of their own. ZKP holders delegate to an activated node, and each address may back only one node at a time. The stake is also literal capacity — every 100,000 ZKP staked across the network brings one more test agent online for the audit fleet.

ParameterValueNotes
Initial delegation300–30,000 ZKPThe 30,000 cap binds only the first call — top-ups are uncapped, so the total position can grow past it
Minimum top-up≥ 300 ZKPAfter top-ups the total position may exceed 30,000 ZKP
Lockup7–365 daysContinuous, precise to the second — no tiers
Multiplier range1.0002x–2.4xSet jointly by amount and lockup on a continuous curve
Multiplier reference cap30,000 ZKPStake above it earns yield but adds no further boost — effective APY tops out at 12%
Unstake cooldown15 daysNo yield while cooling; top-ups and extensions frozen
Delegation rule1 address : 1 nodeSwitching nodes requires a full exit first

1.1The multiplier: one continuous curve, two pricing dimensions

The moment a delegation lands, the contract computes the position's effective multiplier from amount and lockup — the factor that will scale its yield. The formula is a single line:

multiplier = 1.0 + 1.4 × min(amount, 30000) / 30000 × min(lockup, 365d) / 365d

Multiplying two normalized ratios means size and time are priced together, continuously. Only a large stake locked long gets near the 2.4x peak; a small stake locked long, or a large one locked briefly, lands somewhere in between. There is not a single step anywhere on the curve — so there is no tier boundary to camp on. And 30,000 ZKP is a reference point, not a deposit cap: stake above it keeps earning on the full amount, it simply holds the multiplier at its peak, so effective APY tops out at 12%.

Multiplier Curve — multiplier vs. lockup days
How the multiplier grows with lockup (7–365 days) at three stake sizes · hover for values
30,000 ZKP15,000 ZKP5,000 ZKP
1.00x1.25x1.50x1.75x2.00x2.25x2.50x7d90d182.5d270d365d2.40x1.70x1.23x
View data table
Lockup30,000 ZKP15,000 ZKP5,000 ZKP
7 days1.0268x1.0134x1.0044x
90 days1.3452x1.1726x1.0575x
182.5 days1.7000x1.3500x1.1166x
270 days2.0356x1.5178x1.1726x
365 days2.4000x1.7000x1.2333x
Example — 01 · First delegation10,000 ZKP × 365 days

Alice delegates 10,000 ZKP to node N with a 365-day lockup:

multiplier = 1.0 + 1.4 × (10000/30000) × (365/365)
= 1.0 + 1.4 × 0.3333…
= 1.4666x (contract integer precision: 14666 bps)
Unlock time
delegation time + 365 days
Effective APY (base 5%)
5% × 1.4666 = 7.33%

The multiplier is fixed at the moment of delegation; it is recomputed with the same formula only when the position changes (top-up / extension / partial withdrawal).

1.2Adding stake: a weighted start time tops the commitment back up

When stake is added mid-lock, the contract does not change the lockup duration. Instead it moves the position's start time forward — the new start is the amount-weighted average of the old start and the present moment:

newStart = (oldStart × oldAmount + now × addAmount) / (oldAmount + addAmount)

unlock = newStart + lockup // start moves forward ⇒ unlock is pushed later
multiplier = f(newTotal, lockup) // recomputed immediately on the new total

The intuition: fresh capital has not served the days already passed, so it drags the position's clock toward the present, by exactly its share of the new total. The added funds get the higher multiplier on the full amount at once, and in exchange the whole position locks a little longer. If the top-up happens after unlock, the start simply resets to now and the lockup restarts.

Example — 02 · Topping up mid-lockDay 100, +20,000 ZKP

Continuing: Alice's 10,000 ZKP has been locked for 100 days when she adds 20,000 ZKP (total 30,000):

  • New start = (day 0 × 10000 + day 100 × 20000) ÷ 30000 = day 66.67
  • Unlock = 66.67 + 365 = day 431.67 (was day 365 — pushed 66.67 days later)
  • New multiplier = 1.0 + 1.4 × (30000/30000) × (365/365) = 2.4x (up from 1.4666x)

For contrast — had Alice waited until day 300 to make the same top-up: new start = (0 × 10000 + 300 × 20000) ÷ 30000 = day 200, pushing the unlock to day 565. The same multiplier jump, at the cost of 200 extra days locked.

The closer to unlock a top-up lands, the further the start is dragged back and the longer the added commitment — "sprint in at the end and skim the high multiplier" simply does not exist in the math.

1.3Extending: only future commitment is priced

Extending a lockup is also two lines — but the choice of baseline carries the design. The new effective lockup equals the added period plus the time not yet served, and the clock resets to now:

newLockup = addPeriod + remaining // remaining = original lockup − time elapsed
newStart = now // clock resets; unlock moves later by exactly addPeriod
multiplier = f(amount, newLockup) // priced on "remaining + added", capped at 365 days

Note that the multiplier is recomputed from the remaining commitment, not the historical total: the days already served have already paid out at their higher multiplier, second by second. From the moment of extension, the contract pays only for the time you are still willing to lock. It also means the 365-day cap constrains "remaining + added" — long-term delegators can roll their commitment forward again and again near unlock.

Example — 03 · ExtendingDay 200, +90 days

Bob holds 30,000 ZKP locked for 365 days (multiplier 2.4x). On day 200 he extends by 90 days:

  • Remaining = 365 − 200 = 165 days; new effective lockup = 90 + 165 = 255 days
  • Start resets to day 200; unlock = 200 + 255 = day 455 (exactly 90 days later than before)
  • New multiplier = 1.0 + 1.4 × 1.0 × (255/365) = 1.978x

The drop from 2.4x to 1.978x is not a penalty: the first 200 days of 2.4x yield have already settled. From now on Bob's outstanding commitment is 255 days, and 1.978x is exactly that commitment's fair price on the curve. Had he extended after unlock instead (say 180 days on day 400), everything restarts cleanly: lockup 180 days, multiplier 1.6904x.

1.4Exiting: three steps, and cooling means silence

Exit is split into three actions, each with explicit constraints:

Unstake Flow — three steps
  • Initiate. Allowed only once the position is unlocked (now ≥ start + effective lockup). Initiation must move the entire available balance into cooldown at once — no "unstake a little now, top the queue up later".
  • Cooldown — 15 days. Cooling tokens leave the effective stake immediately: yield stops and they no longer count toward the node's trust capacity. The whole position is frozen against top-ups and extensions. Cooldown is a one-way quiet period.
  • Withdraw. After the cooldown matures, funds can be withdrawn — in parts if desired. When the position reaches zero, all state is erased and the address is free to delegate to any node. If a remainder stays (when cooldown covered only part of the position), the multiplier is recomputed on what remains.

Run the shortest path and a full round trip bottoms out at 22 days — 7 days of minimum lockup plus 15 of cooldown. A 365-day delegator's full cycle is 380 days. Exit is slow on purpose: the speed at which capital can leave caps how fast the network's audit responsibility can shrink. Section 3 comes back to this.

/02 — Reward Mechanics

Per-second accrual,
a multiplier on commitment

The return on locking is settled by StakingRewards, independently of the vault. There is no global emission curve — every address carries its own ledger: accruing by the second, settling lazily, and checking solvency at claim time.

2.1The yield algorithm

effectiveStake = position amount − cooling amount // cooling stake earns nothing
effectiveAPY = baseAPY × multiplier // base 5% × boost, hard-capped at 20%
rewards = effectiveStake × effectiveAPY × secondsElapsed / secondsPerYear

The base APY is currently 5% (governable, parameter ceiling 100%). The 1.0x–2.4x multiplier range spreads effective APY across 5% to 12%; the separate 20% hard cap does not bind under current parameters — it is a fuse for future base-APY increases. Accrual is lazy: instead of pushing every account every block, the contract settles accrued yield at the old amount and multiplier right before any state change (delegate, top-up, extend, initiate, withdraw, claim), then applies the new state. No operation can swallow or inflate a single second of past yield.

Example — 04 · A full year of accountingcontinues Examples 01 / 02

Finishing Alice's story: she delegates 10,000 ZKP for 365 days on day 0 (1.4666x) and tops up 20,000 on day 100 (jumping to 2.4x):

PhaseEffective stakeEffective APYDurationYield
Days 0–10010,000 ZKP5% × 1.4666 = 7.33%100 days200.82 ZKP
Days 100–36530,000 ZKP5% × 2.4 = 12%265 days2,613.70 ZKP
Total (365 days)365 days2,814.52 ZKP

Figures recomputed at contract integer precision (effective APY floored in basis points: 733 bps / 1200 bps). At the instant of the top-up, the first 100 days had already settled at 1.4666x — the multiplier jump applies only to the future.

2.2The reward pool: fully isolated from principal

Reward funds live in StakingRewards' own balance, funded by a treasury role and physically separated from user principal in the vault — nothing that happens to yield can ever touch principal. Accrued liabilities accumulate unconditionally and are publicly readable, so pool balance minus liability is a solvency gauge anyone can check; a negative gap means underfunding, visible at a glance. Claims transfer only after the contract verifies the balance is there. The yield promise rests on an auditable ledger, not on a promise.

2.3The full life of a stake

All of the rules above, folded into one picture — entering by delegation, cycling through top-ups and extensions, going quiet in cooldown, and leaving by withdrawal:

Life of a stake, animated: delegate, add, and extend revolve around the position state; once unlocked, a 15-day cooldown leads to withdrawal, with the multiplier engine and reward settlement running throughout
Fig. 01 — Life of a stake: delegate → add / extend → cooldown → withdrawAnimated / Lanshu Style

/03 — Design Rationale

Why it is built this way:
six trade-offs

These seemingly strict rules are not scattered engineering choices — they are facets of a single stance: capital prices commitment, evidence prices trust, and the two are never interchangeable.

Rationale — 01

A continuous multiplier curve, not tiers. Every tier boundary is an arbitrage point: a delegation camped just under the "91-day tier" and one just over it make nearly identical commitments yet receive different treatment. A continuous curve gives every extra day locked and every extra token staked its exact marginal price — no breakpoints, no games around breakpoints, and no patch rules needed to plug them.

Rationale — 02

Weighted-average start, not reset and not free-riding. For mid-lock top-ups there are only two "simple" options: re-lock the whole position (punishing existing capital and deterring growth) or let new capital inherit the old stake's remaining lockup (late top-ups skim the high multiplier and the incentive collapses). The weighted start is the exact middle: new capital drags the clock toward the present in precise proportion to its share, making the multiplier jump and the added lockup a strict exchange. Both games disappear at once.

Rationale — 03

Extensions price the remainder — the future, never the past. Days already served have been paid, second by second. If extensions re-priced from historical total length, the same history would be paid twice. Pricing "remaining + added" keeps the multiplier always equal to the fair price of "how long you are still committing from this moment" — no rewards for the past, only prices for the future.

Rationale — 04

Initiate in full + 15-day cooldown + no yield while cooling. If partial initiation were allowed, the rational strategy would be queueing a token amount in cooldown while the rest keeps earning until the last moment — arbitraging away the time cost of exit. Full initiation makes exit a serious decision; halting yield during cooldown removes the last residue of "earn while you queue". For the network, the 15-day friction means a node's trust capacity cannot evaporate instantly — capital can only leave as fast as audit responsibility can shrink in an orderly way.

Rationale — 05

The 30,000 ZKP reference cap: capital buys capacity, not voice. Stake above the reference cap earns yield on the full principal but adds no further boost — the yield incentive stays linear for large capital, while the multiplier, a quantity with the flavor of weight, is pinned at the cap. This continues the trust layer's principle: capital decides how much responsibility a node can carry; it never decides how much an audit conclusion weighs.

Rationale — 06

One address, one node. Delegation here is not passive yield-farming. It is a vote of support that grants responsibility capacity to a named node. Single delegation keeps that signal legible: every ZKP under a node corresponds to one deliberate choice, and pulling it out requires the full exit path. That cost is what makes the signal worth believing.