Skip to content

Version 15

Latest

Choose a tag to compare

@azmr azmr released this 13 Oct 22:22

Version 15 Changes

Network Upgrade

This release includes a network upgrade at PoW height 55,296 (expected UTC evening of Thursday 15th October 2026).
It include 3 main changes:

  • Fixing a BFT edge case where multiple proposals for the same round could cause finalizers to stall. They were not be able to change the proposal they were tracking and required manually restart.
  • The model by which active finalizers get issuance reward was not as intended and had odd incentives. This has now been corrected to the intended design.
  • Bond creation is now enforced to be power-of-10 values

Wallet & staking RPCs

Reminder that there are helpful RPCs:

get_wallet_ufvk

  • get the UFVK for your wallet

wallet_staking_positions

  • You can ask for a complete list of your staking positions with current values including earned rewards.
    • This takes no parameters and returns two lists: your active stakes, grouped by the finalizer each one backs, and stakes that have finished unstaking and are ready to withdraw. Each entry shows the amount originally staked, its latest value including rewards, and the transaction and block height that created it.

get_tfl_recency_status

  • It takes no parameters and returns your node's current place in the voting process, plus finality status for each finalizer: when your node last heard anything new from them, whether it has heard from them directly, and how they have been voting.

wallet_staking_action

  • The wallet builds, signs, and broadcasts the transaction for you, and replies with its transaction id once it has been sent, or an error if it couldn't be built (for example, not enough spendable funds).

  • It takes a single object parameter with exactly one of these four shapes:

{ "CreateNewDelegationBond": { "amount_zats": 500000000, "target_finalizer": "<hex>" } }
{ "RetargetDelegationBond":  { "bond_key": "<hex>", "target_finalizer": "<hex>" } }
{ "BeginDelegationUnbonding": { "bond_key": "<hex>" } }
{ "WithdrawDelegationBond":  { "bond_key": "<hex>" } }
  • Parameters:

    • amount_zats: amount to stake, in zatoshis (1 ZEC = 100,000,000 zats).
    • target_finalizer: the finalizer's public key - 64 hex characters. These are the keys that wallet_staking_positions uses to group your active stakes.
    • bond_key: the key identifying one of your existing bonds - copy the pk field of a position returned by wallet_staking_positions.
  • Note that withdrawing is two steps: BeginDelegationUnbonding starts the unbonding period, and once the position appears under withdrawable in wallet_staking_positions, WithdrawDelegationBond returns the funds to your wallet.

  • Example:

curl -X POST -H "Content-Type: application/json" -d \
'{ "jsonrpc": "2.0", "method": "wallet_staking_action", "params": [{ "BeginDelegationUnbonding": { "bond_key": "d0a1…44c2" } }], "id": 1 }' \
http://127.0.0.1:8232
  • (The address:port matches the value in zebrad.toml > [rpc] > listen_addr)

  • On success the result is a JSON string containing the txid and the decoded staking action that was sent.

About This Software

What is Crosslink?

Crosslink is an upgrade to Zcash being developed by Shielded Labs. It builds on Proof-of-Work by adding a finality gadget that provides an additional layer of security and protection against rollbacks. All economic activity and block validation continue to occur on the PoW chain, with the finality gadget running in parallel to anchor blocks and prevent chain reorgs. It strengthens the network by adding an additional layer of protection without replacing PoW as the foundation of Zcash’s consensus.
Crosslink also improves decentralization by expanding participation beyond miners, introducing two additional roles in the network: finalizers and stakers.

What is our objective with this first season?

We are kicking off "Season 1" as the first in our line of incentivized feature-nets. Some goals of our incentivized feature-nets include:

  • Enable hands-on learning and early participation
  • Test Crosslink under realistic conditions
  • Improve user experience
  • Refine the design and implementation
  • Understand how the network performs at a larger scale over an extended period of time
  • Identify and prioritize the most important areas of the Crosslink implementation to improve in the short term
  • Progress toward production readiness

ZEC Rewards

Participants can earn cTAZ (Crosslink TAZ) based on their activity, and this will later be used to allocate real ZEC!

The cTAZ block rewards are evenly distributed between miners and stakers. In this season each block will result in:

  • 5 cTAZ to the miner
  • 5 cTAZ to stakers on the active roster, weighted by their stake
  • 1.25 cTAZ to a Dev Fund controlled by Shielded Labs that’s used to support broader participation in the feature net

At the end of each season, real ZEC will be distributed on a pro rata basis based only on the amount of cTAZ each participant earned through mining or staking.

Only cTAZ earned from block rewards is eligible. For example, if you mine or stake and earn cTAZ, that amount determines your share of the ZEC payout. If you receive cTAZ from a faucet, from Shielded Labs, or from another participant and simply hold it, it does not count. Rewards are based on what you earn by participating, not what you hold.

Season 1 has been allocated 25 ZEC, which is 5% of the total 500 ZEC allocation for the feature-nets. The amount will increase as the feature nets mature.

During the feature-net, we will host nodes that mine coins into a cTAZ faucet wallet intended to be withdrawn by participants. The cTAZ allocated to the Dev Fund will be held in a wallet controlled by Shielded Labs and used to support broader participation, including enabling community members to stake and potentially funding the cTAZ faucet. Any cTAZ rewarded to the Dev Fund wallet is not eligible to receive ZEC, as Shielded Labs will not be a recipient of ZEC rewards.

How does Crosslink work?

Proof-of-Stake Finalization

Crosslink adds a proof-of-stake finalization layer on top of Zcash's existing proof-of-work chain. A set of validator nodes called finalizers participate in a BFT (Byzantine Fault Tolerant) consensus protocol to vote on blocks. Once a supermajority of finalizers agree that a block is valid, the block becomes finalized: it is permanently confirmed and can never be reversed by a chain reorganization.

  • Staking: Anyone can stake their coins to a finalizer by locking some coins in a delegation bond and delegating that bond to the finalizer.
  • Stake determines voting power: The more coins staked to a finalizer, the more voting power it has in BFT consensus.
  • Rewards: As new proof-of-work blocks are mined, each delegation bond earns a share of the newly-issued block subsidy proportional to its share of total stake, growing in value over time.
  • Redelegation: Stakers can move their delegation bonds between finalizers at any time, choosing which finalizers to trust and reward with voting power.
  • Privacy: Because delegation bonds are created and withdrawn using shielded funds, finalizers and other observers are unable to see who is staking coins, only how many coins are staked to each finalizer.
  • By staking, you become a Protocol Guardian, deciding who gets to finalize blocks and holding them accountable for honest participation in Zcash!

"Staking Day"

Staking actions (staking, unstaking, and withdrawing) are only allowed during recurring windows called "Staking Days." These windows are called "days" for convenience but are determined by proof-of-work block height.

Staking Days are necessary to protect user privacy. Staking actions are grouped into defined time windows rather than allowing continuous actions. This helps protect user privacy by reducing the ability to link actions to specific users based on timing, while also improving security by introducing structured periods that make the system easier to monitor and defend.

In production, Crosslink will operate in fixed 5-day epochs, with 1 of those being “Staking Day”. For the testnet, these time windows are shortened to make participation faster while maintaining the same underlying design.

For the Crosslink Season 1 feature-net:

  • Every 150 blocks, a new Staking Day begins.
  • The staking window lasts for 70 blocks, then closes.
  • After the window closes, you must wait for the next cycle to perform staking actions.
  • You cannot perform multiple staking actions on the same bond within 1 Staking Day.

As a result of these rules, any coins you place in a delegation bond during a Staking Day cannot be spent until you first unstake them on a later Staking Day and then withdraw them on a third Staking Day. This prevents stakers from briefly staking to influence finalization and then immediately withdrawing their coins and rewards.

The desktop application will announce when a Staking Day begins and ends. You can also see the Staking Day boundaries in the block visualizer.

Retargeting Exception

Retargeting an existing delegation bond to a different finalizer can be done at any time; it is not restricted to Staking Day. This allows stakers to quickly respond to misbehaving finalizers by redirecting their stake to honest finalizers.

How do I get started?

Mobile (wallet)

The latest build & usage instructions are available here

Desktop (miner, finalizer, wallet, node)

Download the relevant executable from the bottom of these release notes, then follow the videos below.
These videos show the installation process for the different operating systems (which remains the same as the previous workshop, our Milestone 4c Workshop).

Mac

Mac installation video

Linux

Linux installation video

Windows

Windows installation video

How do I become a miner?

  • When you open the desktop application, by default you will start CPU-mining to your wallet once your node has synced.
  • Currently there is no built-in monitoring for how close to the network tip you are synced. When looking at the visualizer, you can distinguish that you are still syncing because blocks will arrive at the tip in batches, rather than one-at-a-time.
  • If many people are trying to mine at once, you may be out-competed by others mining more quickly, so there is no guarantee of success.
  • You can experiment with GPU-/ASIC-mining with the normal Zebra approach, however this is not guaranteed to work.

How do I stake?

Crosslink standardizes staking amounts into fixed increments (for example, 1, 10, 100, 1,000, etc.). This reduces the ability to infer individual behavior based on unique stake sizes while still allowing the network to verify overall participation.

In the desktop GUI application, during a Staking Day (see above):

  • (Ensure you have some cTAZ in your local wallet)
  • Copy a finalizer identity from the list on the right-hand panel (or a source you trust)
    • Click the copy icon to the left of the finalizer identity to copy it to clipboard
  • Hit the "Stake" button on the left panel
  • Click "Paste Identity" to paste the copied finalizer identity from the clipboard
  • Click an amount to stake some cTAZ

How do I become a finalizer?

Mental model

  • The desktop application comes ready to finalize - it will generate a finalizer identity the first time it starts up.
  • If anyone (including you) stakes to that finalizer identity, it will be added to the prospective finalizers.
  • If your finalizer is in the top 100 for the amount staked to it, it will become an active participant in finalizing blocks.

Practical steps

In the desktop GUI application, during a Staking Day (see above for an explanation):

  • (Ensure you have some cTAZ in your local wallet)
  • Copy your finalizer identity from the top of the right panel by clicking the "Copy Identity" button
  • Hit the "Stake" button on the left panel
  • Click "Paste Identity" to paste the copied finalizer identity from the clipboard
  • Click an amount to stake some cTAZ

How do I unstake and withdraw?

To unstake:

During a Staking Day:

  • (Ensure you have a bond that is staked)
  • Hit the "Edit Stake" button on the left panel
  • Choose a staked bond to unstake from the Staked Bonds list
  • Click the chain-link icon on the left to unstake

To withdraw:

During a Staking Day:

  • (Ensure you have a bond that has been unstaked)
  • Hit the "Edit Stake" button on the left panel
  • Choose a withdrawable bond to withdraw from the Withdrawable Bonds list
  • Click the money icon on the left to withdraw

How do I redelegate stake?

At any time:

  • (Ensure you have a bond that is staked)
  • Copy a finalizer identity from the list on the right-hand panel (or a source you trust)
    • Click the copy icon to the left of the finalizer identity to copy it to clipboard
  • Hit the "Edit Stake" button on the left panel
  • Choose a staked bond to unstake from the Staked Bonds list
  • Click the four-arrows icon on the left to retarget
  • Click "Paste Identity" to paste the copied finalizer identity from the clipboard
  • Hit "Retarget" to retarget

Community/contact

FAQ

Q: How do I get cTAZ to start staking?
A: When you open the desktop application, you will begin CPU-mining cTAZ to your wallet by default. You can also receive cTAZ from the faucet or from other participants.

Q: Is there a minimum amount I need to stake?
A: The smallest amount available to stake in the desktop application UI is 0.01 cTAZ.

Q: How do I use the faucet?
A: There is a "Receive cTAZ" button in the bottom-right of the desktop application UI.

Q: Can I stake at any time?
A: Staking, unstaking, and withdrawing are only allowed during Staking Day windows (see above). However, you can retarget your existing stake to a different finalizer at any time.

Q: How do I know when it's Staking Day?
A: The desktop application will play an announcement and show a visual notification when Staking Day begins and ends. The block visualizer also shows Staking Day boundaries.

Q: Can I lose my staked coins?
A: No. Your coins remain yours while staked; they are locked in a delegation bond but not at risk of being lost. You can always unstake and withdraw them.

Q: Do I need to keep the application running to earn staking rewards?
A: All stake delegation bonds will earn rewards. You do not need to keep the application running to maintain your stake, but if you are also running a finalizer, it needs to be online to participate in finalization.

Q: What happens if my finalizer goes offline?
A: Your staked cTAZ remains delegated. The finalizer will stop participating in finalization until it comes back online, but your funds are not lost. You can retarget your stake to a different finalizer at any time, or unstake during the next Staking Day and withdraw on the following Staking Day.

Q: Can I stake to multiple finalizers?
A: Yes. Each time you stake, a separate delegation bond is created. You can have bonds delegated to different finalizers at the same time.

Q: Can I be both a miner and a staker?
A: Yes. The desktop application mines by default, and you can stake at the same time. Mining and staking are independent.

Q: Do finalizers earn any commission?
A: Yes! 10% of the PoS issuance is reserved for active finalizers.

Q: Where do I find my cache?
A: This depends on your OS. By default:

  • Linux: /home/<USER>/.cache/zebra (aka ~/.cache/zebra)
  • MacOS: /Users/<USER>/Library/Caches/zebra
  • Windows: C:\Users\<USER>\AppData\Local\zebra (aka %LOCALAPPDATA%\zebra)

Q: Why can't I copy to/paste from my clipboard?
A: If you're on Linux, you probably need to install xclip.
If you're just looking to get your finalizer key, it will be available in the first couple of pages of terminal output on startup.
You should be able to find it either manually or by searching for "zfin" (as the ID's prefix).