Skip to main content

Staking APR on ZIGChain

TL;DR: Staking APR on ZIGChain starts as a nominal rate. Block production adjusts it to actual rewards. Validator commission sets your final return. You can verify every input with on-chain queries.

Overview

The Annual Percentage Rate (APR) is the yearly return on an investment, expressed as a percentage. It answers a simple question: if conditions stay the same, how much could you earn over one year?

On ZIGChain, staking APR applies that idea to bonded ZIG. It shows how much interest your staked assets can earn over a year and helps you judge how profitable staking is.

This guide explains how APR is calculated for ZIGChain, breaking down annual provisions, community tax, bonded tokens ratio, and the difference between nominal and actual APR. You can verify each on-chain input with the CLI queries in this article.

Users staking on ZIGChain see rates derived from these steps. The ZIGChain Hub and validator pages apply the same math. For chain rules see Staking on ZIGChain. For reward splits see the Distribution Module. For token supply context see The ZIG Token.

Key Concepts

  • Nominal APR: Theoretical rate from protocol issuance (inflation or annual provisions) and bonded ratio, after community tax.
  • Actual APR: Nominal APR adjusted for observed versus expected blocks produced per year.
  • Final APR: Actual APR after the chosen validator's commission; shown on validator pages.
  • Validator commission: Percentage of staking rewards the validator keeps before paying delegators.

What Is APR in ZIGChain Staking?

For users staking on ZIGChain, APR reflects the interest earned on bonded assets over a year. The calculation first derives Nominal APR, then adjusts it to obtain Actual APR (reflecting live network conditions), and —on validator pages— Final APR (after that validator's commission).

1) Nominal APR

The nominal APR is the theoretical rate based on protocol issuance (inflation or annual provisions) and staking participation (bonded ratio).

  • Includes: Community tax adjustment
  • Excludes: Real-time block production and validator commissions

There are two equivalent ways to compute Nominal APR:

Inflation form (i)

Nominal APR = (Inflation Rate × (1 - Community Tax)) / Bonded Tokens Ratio

Annual Provisions form (AP)

Nominal APR = (Annual Provisions × (1 - Community Tax)) / Bonded Tokens

These two formulas are equivalent because:

Annual Provisions = Inflation Rate × Total Supply
(AP × (1 - ct)) / Staked = (i × TotalSupply × (1 - ct)) / Staked
= (i × (1 - ct)) / (Staked / TotalSupply)

To fully grasp both formulas, it is essential to understand the following parameters:

ParameterDescription
annual provisionsNumber of ZIG tokens the network mints in one year (ZIG/year).
bonded_tokensTotal ZIG actively staked (bonded).
bonded_tokens ratioPercentage of total ZIG that is actively staked: Bonded / Total Supply.
community_taxPortion of staking rewards for network development and governance. See Distribution Module.
inflation rateAnnual token issuance as a percent of total supply.

Some values may change via governance proposals. Always confirm using the CLI or API.

2) Actual APR

The actual APR is the Nominal APR adjusted by how many blocks were actually produced versus the target. If the network recently produced fewer (or more) blocks than the "expected per year," the realized rewards rate changes accordingly.

The calculation is as follows:

Actual APR accounts for real network conditions, such as block-minting speed:

Actual APR = Nominal APR × (Observed Blocks per Year / Expected Blocks per Year)
FactorDescription
Block time variationsReal block production (Observed) may differ from the target (Expected) due to network conditions and upgrades.

3) Final APR (Per-Validator Display)

The Final APR is the rate a delegator actually earns after the chosen validator's commission.

This is the calculation to obtain it:

Apply the validator's commission:

Final APR = Actual APR × (1 - Validator's Commission)

Since validator commissions vary, users can optimize rewards by selecting validators with lower fees. However, commission is not the only factor to consider:

  • Reliability & Performance – High uptime and secure infrastructure help ensure consistent rewards.
  • Governance Participation – Validators active in governance, aligned with your values.
  • Decentralization – A diverse validator set strengthens security and resilience.

For redelegating between validators see Staking Redelegation on ZIGChain.


Verifiability and Transparency

Anyone can reproduce staking APR with on-chain data on ZIGChain. Use the CLI commands below to read each input for nominal, actual, and final rates. The ZIGChain Hub applies the same formulas to those values. The displayed rate is a fixed computation, not a black box.

Governance can change some parameters over time. Always query current values before you compare rates across days or validators.

Units: On-chain amounts are in uzig.

Annual Provisions

zigchaind query mint annual-provisions --chain-id zigchain-1 --node https://public-zigchain-rpc.numia.xyz

Inflation

zigchaind query mint inflation --chain-id zigchain-1 --node https://public-zigchain-rpc.numia.xyz

Community Tax

zigchaind query distribution params --chain-id zigchain-1 --node https://public-zigchain-rpc.numia.xyz

Bonded Tokens

zigchaind query staking pool --chain-id zigchain-1 --node https://public-zigchain-rpc.numia.xyz

Blocks Per Year (Expected)

zigchaind query mint params --chain-id zigchain-1 --node https://public-zigchain-rpc.numia.xyz

Blocks Per Year (Observed)

note

On the Hub APR calculation, OBSERVED_BLOCKS_PER_YEAR=12,000,000 is used.

RPC=https://public-zigchain-rpc.numia.xyz
CHAIN=zigchain-1
YEAR_SECS=31557600
if command -v gdate >/dev/null 2>&1; then D=gdate; else D=date; fi
OBS=0
for WIN in 100000 50000 20000 10000 5000 2000 1000 500 200 100; do
H=$(curl -s "$RPC/status" | jq -r '.result.sync_info.latest_block_height // 0')
[[ "$H" =~ ^[0-9]+$ ]] || { echo "RPC/status not reachable"; break; }
H0=$(( H>WIN ? H-WIN : 1 ))
T1=$(curl -s "$RPC/block?height=$H" | jq -r '.result.block.header.time // empty')
T0=$(curl -s "$RPC/block?height=$H0" | jq -r '.result.block.header.time // empty')
[[ -n "$T1" && -n "$T0" ]] || continue
t1=$($D -d "$T1" +%s 2>/dev/null || echo 0)
t0=$($D -d "$T0" +%s 2>/dev/null || echo 0)
(( t1>t0 )) || continue
dt=$((t1 - t0))
db=$((H - H0))
OBS=$(( db * YEAR_SECS / dt ))
echo "ObservedBlocksPerYear=$OBS (window=$WIN)"
break
done

Expected output: ObservedBlocksPerYear=XXXXXXXX

Units: On-chain amounts are in uzig.


Conclusion

Staking APR on ZIGChain depends on issuance, bonded ratio, and block production on the live chain. Use the nominal, actual, and final formulas above with current on-chain inputs to compare validators and plan returns.

For step-by-step Hub actions see Staking on ZIGChain Hub and Staking on ZIGChain.

Common Questions

Can Governance Proposals Change Staking APR Inputs?

Yes. Inflation, community tax, and bonded stake can change after governance votes on ZIGChain. Confirm current values with the CLI or API before you trust a quoted staking APR. See Distribution Module for how tax flows to the community pool.

How Do I Verify the Staking APR Shown in ZIGChain Hub?

Run the queries in Verifiability and Transparency on mainnet, testnet, or local nodes. Plug the results into the nominal, actual, and final formulas in this guide. The Hub staking APR should match those on-chain inputs when params are current.

References