Skip to content

Season 1 Version 7

Choose a tag to compare

@azmr azmr released this 05 Jun 18:44
· 3 commits to main since this release

Improvements in Version 7

  • Major networking & sync upgrades
    • Revamped congestion control in STP
    • Ported the PoW sync engine onto the new threaded STP model
  • Added the ability to enforce syncing to a specific commit hash:
    • (If you don't have a zebrad.toml file, generate one with zebrad generate > zebrad.toml in your preferred location)
    • In the [state] section, add network_checkpoint_block_hash = "<commit_hash_here>"
    • Run zebrad -c zebrad.toml
  • Added GUI button for copying finality information to clipboard. This is the same information as is provided in the get_tfl_recency_status RPC.

Improvements in Version 6

  • "Online" filter for direct connections: optionally highlight finalizers to whom you have directly connected within a given number of seconds. See below for more details on "BFT Finalizer online status"
  • Peer-to-peer topology for Tenderlink: directly connect to other BFT participants (including attempted NAT traversal).
  • Multiple small fixes.
  • Resizable GUI panels.
image

Improvements in Version 5

GUI

  • Quick jump/sliders for both PoW & PoS chains (1)
  • Better performance from a new text caching layer
  • Volume slider
  • Prettied-up elements

BFT Finalizer online status

In order for users to make intelligent decisions about potential slashing actions, you need diagnostic information available for them to interpret.
Our initial intention for this is to provide multiple pieces of data and give you tools for interpreting it. (The data is also available via a new get_tfl_recency_status RPC for alternative interpretations by community tools.)
In this release we're only including a single consideration: whether or not a finalizer has voted at all at the current height. We have morein the works for future releases and are open to requests.

The UI now provides the ability to "filter" finalizers by determining the criteria for what you want to treat as "online" (2).
By default, the only option: Must have voted at the latest height is enabled. i.e. only those finalizers who have voted at the height your node is currently on will be shown as "online".

With this filter option enabled, there will most likely be some finalizers considered offline.
You can see the total aggregate stake that is "online/offline" in the first bar, and see the status of each individual finalizer in both the second bar and the list of finalizers (3).
Disabling the Must have voted at the latest height requirement will present every finalizer as "online".

There are some additional details provided when hovering over individual finalizers in the list.

image

Upgrade Process (for desktop builds)

If you were previously on V3-V6, then you can just run the executable (the cache is compatible with this version).

If you were only up to V1/V2 follow this process.

  • VERY IMPORTANT: backup your secret.seed. You should be able to find this in a subfolder called zebra_crosslink_workshop_season_one_v2_37482_cache_delete_me in your zebra cache (see "Where do I find my cache?").
  • Download & run the new zebrad executable for your OS. This will create a new cache subfolder called zebra_crosslink_workshop_season_one_v3_ehtedht_cache_delete_me. Close it again after 15 seconds.
  • Copy your secret.seed from the old folder into the new folder (zebra_crosslink_workshop_season_one_v3_ehtedht_cache_delete_me)
  • Rerun your new zebrad executable.
  • You can confirm if this has been successful by checking the transactions pane. Once the wallet has synced past a height where you previously had transactions, you should see them appear (1). You can check how much of the chain the wallet subsystem has synced in the info text at the upper middle of the window (2).
image

TL;DR

Copy your old secret.seed into the newly-created cache directory.

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: Not in this season. However in future they will do.

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)