180 views
# Zenith 2025 Proposal ## Pitch The continuous evolution of the Zcash ecosystem has brought new capabilities like multi-signature wallets and hardware wallet integration, and Zenith is a great platform to bring these features to users. ## Applicant Background [Vergara Technologies](https://vergara.tech/) has been building applications that leverage the Zcash blockchain since 2022. We are the creators of: - [ZGo](https://zgo.cash/), the Zcash point-of-sale app - [Zenith](https://vergara.tech/zenith), the full-node wallet for Zebra[^1]. - [Zcash-Haskell](https://vergara.tech/products/zcash-haskell.html), the Haskell library for interacting with Zcash. ## Opportunity As the ecosystem develops new capabilities, the Zenith full-node wallet can be a great platform to showcase these features with a user-friendly interface. Zcash wallets that leverage multi-party signature schemes (multisigs) are now possible thanks to the Zcash Foundation's developments in FROST[^2] and open new possibilities and use cases for the ecosystem. Zcash wallets that leverage hardware wallets to secure keys are now possible thanks to the work performed by the Keystone Wallet team and Electric Coin Co. team[^3]. ## Proposed Solution As a [full-node](https://vergara.tech/faq.html#fullnode) wallet, Zenith aims to provide our users as much of the Zcash functionality as is technically feasible. We propose to enhance Zenith to support FROST multisig wallets by adding: - Functionality to create new multisig Zcash wallets using distributed key generation. - Functionality to initiate and complete a multisig transaction. We also propose to enhance Zenith to support the Keystone hardware wallet for storage of private keys. ## Technical Approach ### FROST Multisig We propose enhancing Zenith to use the Cwtch protocol[^4] as the broadcast channel to handle FROST ceremonies. This protocol has the following features: - Peer-to-peer - End-to-end encrypted - Routed through Tor[^5] ```graphviz digraph G { label="MultiSig Communication" fontname="Helvetica,Arial,sans-serif" node [fontname="Helvetica,Arial,sans-serif"] rankdir="LR"; overlap=prism; subgraph cluster_1 { label="Zenith 1"; node [shape=block, fillcolor=orange, style=filled] z1 [label="Wallet 1"] node [shape=ellipse, fillcolor=white, style=filled] c1 [label="Cwtch peer"] graph[style="solid", color=blue]; } subgraph cluster_2 { label="Zenith 2" node [shape=block, fillcolor=orange, style=filled] z2 [label="Wallet 2"] node [shape=ellipse, fillcolor=white, style=filled] c2 [label="Cwtch peer"] graph[style="solid", color=blue]; } subgraph cluster_3 { label="Zenith n" node [shape=block, fillcolor=orange, style=filled] z3 [label="Wallet n"] node [shape=ellipse, fillcolor=white, style=filled] c3 [label="Cwtch peer"] graph[style="solid", color=blue]; } node [shape=ellipse, fillcolor=cyan, style=filled] tor[label=Tor] c1 -> tor; c2 -> tor; z1 -> c1; z2 -> c2; z3 -> c3; c3 -> tor; } ``` With these features, Zenith's user interface can simplify the distributed key generation ceremonies by abstracting the communication and distribution of the public components of the FROST process. ```sequence Title: Distributed Key Generation participant Alice as A participant Alice's Zenith as Az participant Bob's Zenith as Bz participant Bob as B note over A: gathers participants\naddresses A ->> Az: start Key Generation Az -->> Bz: request to join ceremony Bz ->> B: notify of request B ->> Bz: approve request Bz -->> Az: joins ceremony note over Az: waits for all\nparticipants note over Az: creates Round 1 note over Bz: creates Round 1 Az -->> Bz: Alice's Round 1 package Bz -->> Az: Bob's Round 1 package note over Az,Bz: compute Round 2 Az -->> Bz: Alice's Round 2 package Bz -->> Az: Bob's Round 2 package note over Az,Bz: compute Round 3 Bz ->> B: notify completion Az ->> A: notify completion note over Az,Bz: store address as UFVK ``` This design also allows Zenith to simplify the user's experience during signing ceremonies: ```sequence Title: Multi-party signature participant Alice as A participant Alice's Zenith as Az participant Bob's Zenith as Bz participant Bob as B A ->> Az: prepares unsigned transaction Az -->> Bz: Tx details Bz -> B: notify of signature request B -> Bz: approve signature Bz -->> Az: SigningCommitments note over Az: collect all\n commitments note over Az: create\nSigning Package Az -->> Bz: Sigining Package note over Bz: produce\nSignature Share Bz -->> Az: Signature Share note over Az: collect shares note over Az: aggregate shares note over Az: broadcast\nsigned transaction Az ->> A: notify success Az -->> Bz: notify success Bz ->> B: notify success ``` ### Keystone Wallet Integration Leveraging the `librustzcash` Rust crates, we shall enhance our Haskell library with the functionality to use Partially Created Zcash Transactions(PCZTs). Zenith shall have a new account type that will have the capability to use the Zcash features of the Keystone hardware wallet to sign transactions, while having Zenith's features to scan and broadcast transactions directly through Zebra. ## Execution Risks - Significant changes to the `librustzcash` Rust crates could potentially increase the development timeline. - Testnet availability during the NU7 upgrade can potentially impact the development timeline. ## Unintended consequences None identified. ## Budget | Item | Estimate | |------|---------:| |Hardware | $300.00| |Software | $5,000.00| |Development | $86,400.00 | |**Total** | **$91,700.00** ### Hardware Two Keystone 3 Pro hardware wallets, for $300. ### Software The Cwtch protocol software is free and open-source, however we would like to donate $5,000 to the [Open Privacy Research Society](https://openprivacy.ca/) in recognition of their effort in creating this privacy-preserving protocol. This would be paid in ZEC. ### Development We are estimating 960 person-hours at $90/hour for a total development cost of $86,400 ## Schedule ```mermaid gantt title Zenith Full Node Wallet 2025 dateFormat YYYY-MM-DD axisFormat %b todayMarker off excludes weekends section MultiSig FROST Haskell Imp.: a1, 2025-03-01, 10d Cwtch Haskell Imp: a2, after a1, 15d ZenithSign: a3, after a2, 20d Address derivation: a4, 2025-04-15, 10d Tx creation: a5, after a4, 10d Documentation: a6, after a5, 10d Milestone 1: milestone, a7, after a6, 0d section Keystone Integration Air-gap system review: b1, 2025-06-01, 10d Keystone comm implementation: b2, after b1, 25d PCZT implementaion: b3, after b2, 20d Documentation: b4, after b3, 10d Milestone 2: milestone, 2025-09-01 ``` [^1]: Zebra: https://zebra.zfnd.org/ [^2]: FROST: https://frost.zfnd.org/ [^3]: Introducing Zashi-Keystone Wallet Integration for Shielded ZEC: https://electriccoin.co/blog/drumroll-please-introducing-zashi-keystone-hardware-wallet-integration-for-shielded-zec/ [^4]: Open Privacy Research Society: Cwtch https://cwtch.im/ [^5]: The Tor Project: https://www.torproject.org/