Skip to content

Staking

Token holders can stake $ZKC to earn passive staking rewards, as well as participate in governance.

Staking $ZKC using the Boundless Staking Portal

It is recommended to use the staking portal: https://staking.boundless.network. Provers may want to stake using the Boundless CLI, see below.

Staking $ZKC using the Boundless CLI

The Boundless CLI zkc subcommand provides commands to stake, unstake, see the $ZKC token balance of an address. It also provides helper functions to calculate passive staking rewards, and to see details about the current reward epoch. For the full list of commands, run:

boundless zkc --help

Staking $ZKC

To stake $ZKC using the Boundless CLI (make sure to have Foundry installed for cast), first make sure to export the corresponding PRIVATE_KEY variable, and a valid RPC_URL endpoint for Ethereum mainnet:

export PRIVATE_KEY=0x1234...6789
export RPC_URL=https://...

The wallet, represented by PRIVATE_KEY should have a positive $ZKC balance. To check the current balance, run:

boundless zkc balance <ADDRESS>

To stake 100 $ZKC, run:

boundless zkc stake --amount $(cast parse-units 100 18)

To check the current staked amount, run:

boundless zkc get-staked-amount <ADDRESS>

Checking epoch details

To see details about the current epoch, run:

boundless zkc get-current-epoch

which will return the current epoch number:

boundless_cli::commands::zkc::get_current_epoch: Current epoch: 9

To see the end time of this epoch:

boundless zkc get-epoch-end-time 9

which will return the epoch end time:

Epoch 9 end time UTC: 2025-09-15 23:55:35

Calculating/claiming passive staking rewards

To see the current passive staking rewards available for a given address, run:

boundless zkc calculate-rewards <ADDRESS>

To claim rewards for the wallet associated with PRIVATE_KEY, run:

boundless zkc claim-rewards

Staking Rewards

Staking rewards are earned by token holders who have staked $ZKC. These rewards are distributed every reward epoch. $ZKC staking rewards are emitted every reward epoch. Each epoch lasts 2 days, resulting in 182.5 epochs per year.

Emission Rate

The initial supply is 1 billion ZKC. Emissions are divided equally across epochs throughout the year. The annual emission rate decreases over time based on the years since token launch:

  • Year 0: ~7.0% annual
  • Year 1: ~6.5% annual
  • Year 2: ~6.0% annual
  • Year 3: ~5.5% annual
  • Year 4: ~5.0% annual
  • Year 5: ~4.5% annual
  • Year 6: ~4.0% annual
  • Year 7: ~3.5% annual
  • Year 8+: ~3.0% annual (minimum rate)

Emissions Distribution

Emissions occur at the end of each epoch. Every epoch's emissions are allocated to two external contracts for distribution:

Passive Pool

25% of epoch emissions are divided proportionately to stakers. For example, if you stake 10% of the $ZKC in the passive staking pool, you will receive 2.5% of the total emissions i.e. 10% of 25%.

Active Pool

  • A maximum of 75% of epoch emissions are given to provers who have generated proofs during the epoch.
  • Provers receive a reward for proving based on the percentage of proving (this is tracked via the number of cycles) they have carried out during the epoch.
  • Provers must stake $ZKC to be eligible for these rewards. Each prover has a reward cap based on their staked $ZKC. This reward cap is set to staked amount / 15.
    • Therefore if a prover has staked 150 $ZKC, they are eligible to receive a maximum of 10 $ZKC every epoch. If a prover would have received more $ZKC due to their cycle contribution but under-staked $ZKC, the delta remains unclaimed for the epoch; the DAO can choose to distribute it at a later date.
    • The scalar of 15 was chosen to keep provers aligned with the long term success of the protocol while keeping the barrier entry to proving low to keep the market as open as possible. Future work is to be done to make this scalar more dynamic that encompasses these values.

Staking Mechanics

  • Staking locks $ZKC tokens and mints a veZKC NFT representing an active position. Adding further stake increases the ZKC amount for that active position.
  • Initiating withdrawal starts the 30-day withdrawal period and causes governance voting power and staking rewards to drop to 0 immediately. This mechanism prevents governance and reward claim attacks, by ensuring that participants in either are financially aligned to the protocol for at least another 30 days. After thirty days, the withdrawal can be completed. Once withdrawn, the veZKC NFT is burned and the tokens previously staked become unlocked. It is not possible to add stake to a position that has already initiated a withdrawal.
  • For staked $ZKC, governance voting power is calculated based on the percentage stake represented in the total staking pool. For more information, please see Governance. Please note that voting power drops to zero immediately when withdrawal is initiated, ensuring only committed stakers can participate in governance votes.