For the complete documentation index, see llms.txt. This page is also available as Markdown.

How Rewards Work (NAV / share price)

PrimeStaking V3 is a fully on-chain, ERC-4626 staking vault. Rewards are not paid through a manual claim flow. They are embedded directly in the psXDC share price. This page explains how the rate accrues and how the NFT boost layer sits on top.


Two layers of yield

                base yield (~4.5%)               boost slice (up to ~1.5%)
                       │                                  │
                       ▼                                  ▼
   shares × NAV(t) appreciation     +     Synthetix-style accumulator
   (every psXDC holder gets this)         (only XDC NFT holders get this)
Layer
Where it lives
Who earns it
How you receive it

Base NAV

PrimeStakedXDC_V3_2 vault share price

Every psXDC holder

Automatic: share price rises as validator rewards accrue. No claim.

NFT Boost

XdcNftStakingVault Synthetix accumulator

Only NFTs that have psXDC shares staked inside them

Claimed from the NFT detail page in the app.


Base layer: share-price growth

When XDC validator rewards flow back into the vault, totalAssets() increases while the total share supply stays the same. The vault's exchange rate (totalAssets / totalShares) goes up, so every psXDC share becomes worth more XDC.

V3.2 permanent-ledger model. In V3.2 the operations manager credits rewards through a dedicated reward lane (distributeRewards), which raises the share price for every holder. Rewards accrue at any backing level - there is no "fully backed" gate. An optional, hard-capped protocol fee (0% by default, max 20%) can be skimmed per distribution. The share price only ever moves up through this lane; there is no code path that writes it down outside of a rate-limited, risk-manager-only validator-loss report.

Aspect
Detail

Target APY

~4.5%

Mechanism

Exchange rate appreciation

When you receive it

The rate steps up when the operations team distributes the period's masternode rewards into the vault (distributeRewards(), roughly monthly, sized to the 4.5% target on average TVL)

User action required

None. There is no "claim rewards" button

Example. Stake 1,000 XDC when the exchange rate is 1.00. You receive 1,000 psXDC shares. Six months later the rate is 1.025. You burn your 1,000 shares and the vault returns 1,025 XDC. Your 25 XDC of yield was inside the price the whole time.

This is the same model used by Aave aTokens, Compound cTokens, and Lido wstETH.


NFT boost: additional slice for stakers

XDC NFTs stack a second yield on top of the base NAV. The protocol's XdcNftBoostHarvester periodically pushes XDC into the NFT vault via notifyBoost. That XDC is converted to psXDC v3 shares inside the vault and parked as boostReserve. A Synthetix-style accumulator distributes the reserve to staked NFTs in proportion to their weight:

Component
Effect on weight

stakedShares

More psXDC staked inside the NFT → bigger slice

rarityMultiplier

Plentiful (lowest) → Handcrafted (highest); set at mint, immutable

level

0–20, derived from how much psXDC is staked under the NFT against admin-set thresholds (merging changes rarity, not level)

lockBonus

Added when the NFT is locked, sized by the chosen lock tier (30/90/180/365 days). Ends automatically when the lock expires and can be renewed by re-locking.

When you claim from an NFT, the accumulator settles your pending boost and pays it out in psXDC shares (the app claims as psXDC; the contract can also unwrap to XDC on request).

Aspect
Detail

Target APR band

~0.25% (Plentiful unlocked) → ~1.5% (Handcrafted locked)

Mechanism

notifyBoost(x) increments rewardPerWeightStored; each NFT's earned = info.shares × (rewardPerWeightStored − info.rewardIndex) × weight / 1e18

When you receive it

When you call claim on the NFT

User action required

Yes: claim from the NFT detail page, or it settles automatically on any other state-changing action (stake more, lock, merge, withdraw)

The boost cadence depends on how often the operator feeds the accumulator (target: monthly, ~1.5% p.a. on the staked total); see Boost Harvester (technical) for the full picture and payment history.


Combined targets

Position
Base NAV (floor)
+ Boost slice (when flowing)
Combined target

Plain psXDC (no NFT)

~4.5%

None

~4.5%

psXDC inside an unlocked NFT

~4.5%

~0.25%

~4.5% → ~4.75%

psXDC inside a locked NFT

~4.5%

up to ~1.5%

~4.5% → up to ~6%

The floor for every staked psXDC (whether you hold it directly, in an unlocked NFT, or in a locked NFT) is the base ~4.5%. That layer is automatic. The boost slice (~0.25% → ~1.5%) is an additional stream that depends on harvester cadence and your NFT's weight; when the stream is paused or sparse, you continue to earn the base.

The exact boost slice depends on your NFT's rarity, level, and lock status relative to the rest of the vault, and on how much boost the operator has pushed. The vault publishes BoostNotified events so the UI can show the realised boost APR (boost paid since launch, annualised, capped at the marketed band) alongside the static targets.


Why no claim button for liquid staking

The V2 product distributed rewards by having the owner periodically call notifyRewardAmount and required users to call claim to collect their share. V3 removes both:

  • No notifyRewardAmount + claim cycle: the operations manager distributes the period's validator rewards into the vault (distributeRewards, roughly monthly) and the exchange rate updates for every holder at once.

  • No claim: your reward is already inside the share. When you redeem the share, you receive both the principal and the accrued reward in one transaction.

The boost layer keeps its claim flow because it is a separate XDC stream layered on top of the share, not an internal accrual.

→ Understanding Share Price → V2 vs V3: What Changed

Last updated