# 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/