Shielded Labs: Crosslink Deployment Updates

Hi all,

A quick update on the past few weeks:

  • We’ve completed a first pass at the scoping definition for the project which describes the high level product goals, rationale, and some trade-offs.
  • Drilling down a level to the implementation and deployment engineering work, we’ve completed a first pass at high level engineering deliverables.
  • Additionally we’ve continued to interview some good candidates and I’m pretty pleased with the quality of applicants were getting. My ideal is that our engineering team would grow from just me (currently part time) to 2-4 engineers, hopefully with the first starting in January. However, as always with hiring, there’s no guarantee about timing.

I’d like to call out one piece of the engineering deliverables that has emerged and continuing to evolve:

Our goal is for the deployment to succeed successfully to production (assuming community support) and then to see real users benefiting from the changes. How to assess how successful that is can be especially tricky, since our team ultimately will just put out tools and it’s up to the ecosystem and users to use them. Our approach to staying accountable and achieving our goal of actual usage is to engage early with strategic partners which represent a range of stake holders, and to rely on their feedback pre-deployment to measure if we’re on track for real world usage.

To make that clearer with examples: we want to hear from wallet dev teams, aspiring validator users, high quality centralized exchanges, bridging protocol teams, etc… if they are satisfied with the direction and maturity of Crosslink Deployment well before mainnet activation.

So stay tuned, we’ll be formalizing those stakeholder partner relationships down the road.

See you at the Arborist call!

18 Likes

Oh, an in-progress item is that I’ve started attempting to replicate the zebra CI for a new fork at GitHub - ShieldedLabs/zebra-crosslink: Zcash - Zebra Crosslink Prototype 🦓 . It is much more sophisticated than I anticipated!

I’m looking for any “intro guide / tour” help with any Zebra CI experts. We’ll probably only use a subset during our prototype phase.

I’ll bring this up in Arborist today.

8 Likes

Hey folks! Shielded Labs is fresh off of our offi-site in Colorado and after much discussion and deliberation, we are proud to present our official roadmap for Crosslink development.

Please take time to review the following details and let us know if you have any questions, comments, or suggestions.

Cross-posted from: Crosslink Roadmap Q1 2025 - Shielded Labs


Shielded Labs Roadmap

Shielded Labs is committed to building Crosslink, a hybrid PoW/PoS consensus algorithm for Zcash. The first phase is the development of a complete implementation, which we are targeting for completion within 12 months. The second phase will be to productionalize it. We estimate that this second phase will take an additional 9 months. However, the exact timeline for this will depend heavily on external dependencies beyond our control.

Before we submit Crosslink to be scheduled into a Network Upgrade, we aim to have complete end-to-end functionality, including wallets, on a working testnet, which allows community members to test key features, including hybrid-consensus, staking, delegation, and more.

Throughout development, we will remain continually engaged with the ecosystem, incorporating near-constant feedback to refine our work. Even early, incomplete versions of the prototype will be structured to demonstrate partial functionality and showcase features as they are developed.

We have assembled a world-class engineering team consisting of former ECC and Equilibrium

members, as well as young engineers with deep experience in compiler/debugger design and operating systems.

Given the potential impact of Crosslink, we are allocating the majority of our engineering resources to this initiative. Staking ZEC shifts sell-pressure from mining pools to buy-pressure from validators, which may positively influence market dynamics. It also increases decentralization by enabling broader participation that allows more users to engage with the network and earn rewards. Additionally, Crosslink introduces economic finality, which enhances security and unifies deposit times across exchanges and bridges. Beyond these immediate benefits, Crosslink also lays the foundation for future scalability improvements.

We view Crosslink as critical to the success of Zcash and are excited to develop it alongside other complementary protocol improvements.

Challenges and Trade-Offs

Bringing Crosslink to life requires navigating three main tensions:

  1. Speed vs. Quality: Delivering quickly while maintaining security and stability.
  2. Greenfield Development vs Upstream Compatibility: Building new infrastructure while ensuring it aligns with Zebra and existing Zcash tooling.
  3. Flexibility vs. Structure: Exploring design possibilities without introducing unnecessary complexity or delays.

To balance these, we are implementing the following development strategies:

  • Leveraging existing tooling: Our prototype will use Malachite, a Rust crate that implements Tendermint BFT.
  • RegTest mode: Use RegTest whenever possible to quickly simulate potential network events and receive fast feedback.
  • Practice “Vertical Slice” methodology: Deliver incremental, functional components at each milestone rather than large overarching updates.
  • Breaking changes: During the prototype development process, we may rework functionality, code, database schema, and serialization formats as needed to refine the overall design efficiently and avoid unnecessary technical debt.

The Vertical Slice

As we develop Crosslink, our goal is to ensure that even partially implemented versions remain accessible for developers and community members to interact with and test.

In addition to delivering code we will also regularly:

  1. Work on ZIPs related to Crosslink, soliciting early feedback from ZIP editors well before they reach maturity.
  2. Draft upstream PRs to run the full suite of ZcashFoundation/Zebra tests to benefit from the Zebra team’s testing infrastructure while coordinating on scheduling and resource constraints.
  3. Modify external dependencies such as librustzcash and zcash-devtool in Crosslink-prototype specific code forks.
  4. Update the Zebra and/or TFL books as needed.
  5. Review our documentation, design, and direction with engaged ecosystem partners, such as wallet developers, exchanges, consensus service providers, bridge and DEX developers, and more. If you are interested in becoming a stakeholder, please reach out to us!

Early Upstream PRs

In order to minimize technical integration risk for Crosslink and contribute to upstream codebases, we will seek to distill and submit generally useful, non-Crosslink specific portions of our code as early pull requests to Zebra maintainers and other open source project maintainers whenever possible.

Ideally this will benefit upstream projects (regardless of Crosslink’s status or functionality) and also ensure that once Crosslink is ready for upstream adoption, its code will be submitted in small, more focused increments that are easier to integrate.

Additionally, we see this as a good way to encourage ongoing collaboration and feedback with upstream projects, which will keep design discussions active and ensure smoother integration when Crosslink is ready for adoption.

The Roadmap

We expect to develop a complete implementation in roughly 12 months, though estimates inevitably become less certain over time.

Please note that we are coining the term “finalizer” in place of the term “validator.” In Crosslink, hybrid-consensus nodes finalize blocks, but do not validate transactions.

Milestone 1: Placeholders and Processes

This initial milestone will provide the code structure and minimal functionality with no consensus modifications.

Status: In Progress

Estimate: 1 month

Goals:

  • Establish baseline engineering practices.
  • Create a placeholder Crosslink task alongside the other Zebra tasks.
  • Establish release engineering (CI/CD).
  • Establish a workable bidirectional collaboration process with upstream Zebra maintainers.
  • Create and/or potentially update applicable RPC calls.
  • Create a prototype fork of zcash-devtool for exercising light-client functionality from the commandline.
  • Create the initial placeholder draft documentation in the Zebra book, and a top-level ZIP draft.

Milestone 2 - Disconnected BFT

This milestone will introduce BFT functionality, although Zcash’s existing consensus will be completely unaltered. In this milestone, BFT uses a “Proof-of-Authority” (PoA) roster (ie: a manually configured set of finalizer nodes) without any staking semantics. This ensures both PoW and BFT are operating in our prototype without any awareness of the BFT consensus within the existing PoW functionality. The BFT protocol will do “soft” finalization of PoW blocks, meaning a best effort will be made even though PoW will not respect this finalization status. This will be useful for testing one direction of consensus crosslinking, and will enable the introduction of “Mainnet Shadowing Mode”. Already at this stage we will be releasing a version of the software for testers to try at home.

Estimate: 2 months

Goals:

  • Integrate the Malachite Rust crate, a running version of Tendermint BFT that does not yet interact with the PoW chain.
  • Create what we’re calling “Mainnet Shadowing Mode” where nodes can theoretically

connect to mainnet with our code running (read-only).

  • Add RPC calls, logging, and cli support for querying finality status and issuing warnings when finality stalls.

Milestone 3 - PoW Consensus

This milestone includes the first modification of PoW consensus to respect the assured finality provided by the BFT protocol. The BFT protocol will still use a PoA roster with no staking semantics. In this milestone, PoW block headers and block validity rules are modified, but the transaction semantics remain unchanged from mainnet Zcash. This enables full testing of the Crosslink consensus, minus all of the staking semantics.

Estimate: 3 months

Goals:

  • Modify PoW block structure for Crosslink support.
  • Modify the PoW block validity rules to reject any rollback of the most recent final block.
  • Feature complete “Finality Status” RPC calls.
  • Implement a “contingency mode” where the PoW chain continues with coinbase-only transactions in the event of a PoS finality outage.

Milestone 4 - Staking Transaction Semantics

This milestone introduces new transaction functionality to enable all of the staking operations, such as new finalizer node registration, delegations, PoS roster selection, rewards issuance, roster evictions, and slashing. This milestone also introduces lightwallet support via the lightwalletd/zaino protocol which can be exercised by our zcash-devtool prototype.

Estimate: 4 months

Goals:

  • Implement transaction semantics and modify transaction data.
  • Finalize a rough tokenomics design including delegation, payouts, and potential slashing.
  • Add delegation support to zaino and zcash-devtool to demonstrate “full stack” functionality for delegation.

Milestone 5 - Pre-Productionization, Tech Debt, Final Refactoring

In Milestone 4, our aim is a feature complete implementation. However, from our experience we anticipate unknown challenges in the design or implementation leading up to Milestone 4, so we are adding Milestone 5 to address any of those unforeseen issues prior to transitioning to production design and code. This is also the right time for governance decisions about Crosslink, such as when to activate it, prior to the Productionization Phase.

Estimate: 2 months

Goals:

  • Tie up any loose ends in terms of both tech debt and unknown unknowns. Essentially this is a buffer milestone.

Productionization Phase

After Milestone 5, we will transition from the Prototype Phase to the Productionization Phase. “Productionization” refers to all effort necessary to make Crosslink ready and safe for mainnet activation. This phase requires careful coordination with other Zcash protocol developers.

Estimate: 9 months

Goals:

  • Design specification, ZIP finalization.

  • Merging functionality with other protocol changes slated for the same upgrade.

  • Working with wallets, staking providers, and other ecosystem participants to prepare their products for activation.

  • Security Proof & Analysis, Security Audits of the Design and Implementation.

… and likely more. We will work to clarify the roadmap of the Productionization Phase prior to the completion of Prototype Milestone 5.

Please let us know if you have any questions, comments, or feedback. We’ll continue to provide regular updates to the community as development progresses.

17 Likes

Update: Milestone 1 Complete

Shielded Labs is happy to announce that we have completed Milestone 1 on the above Crosslink roadmap. We started in early March and made the official announcement on yesterday’s Arborist call, which puts us 1 week ahead of schedule :partying_face:

Demo: Finality by Fiat

In our demo, finality is simply set via an RPC call. The intention of this milestone was to get our hands dirty with Zebra and its constellation of tooling, and perform the full “Vertical Slice” described in the roadmap around this RPC call.

Here’s what it looks like in practice:

  • 0:00 Clockwise from the bottom left is Zcash Devtool, Zaino, and Zebra. Each of them have a bit of Crosslink sprinkled into their functionality.
  • 0:06 Zaino starts.
  • 0:31 zcash_devtool set-finality is run, which triggers Zaino to forward the parameters to Zebra. Note the log lines in zebra: “final set to… etc” about halfway up the page.
  • 0:51 The same command is run again with a different block hash, demonstrating a finality change.
  • 1:01 Idempotency is demonstrated by running the second command two more times. Zebra takes no action because there is no state change.
  • 1:13 Finally, a finality rollback is attempted by sending the first hash again. This is rejected, and Zebra produces an error message.

Links and references

  • The main branch at our ShieldedLabs/zebra-crosslink fork contains the code for this, available to try via cargo run.
  • There is now a placeholder for the ZIP Draft. It’s not much right now, but you can expect to see it come alive as the milestones progress.
  • We landed one pull request upstream to Zebra. While this PR is more related to Shielded Lab’s NSM work, it was made with the intention to test-drive our process and start to build a relationship with the upstream teams.

Finally, we have begun outreach to ecosystem partners such as wallet developers. More to come!

24 Likes