Organization Name
How did you learn about Zcash Community Grants
Grant website
Requested Grant Amount (USD)
$25,000
Category
Infrastructure
Project Lead
Name: Akeem Adelanke Role: Project Manager & Developer Onboarding Specialist Background: Experience in developer onboarding, crypto programs, and community ops with NEAR, Creatives DAO, Mintbase, and Arbitrum. Responsibilities: Delivery planning, stakeholder coordination, pilot integrator support, documentation quality, community updates. Social Links: https://x.com/cr8tivesonchain
Additional Team Members
Name: Timilehin Olowu
Role: Full-Stack Developer & Tooling Engineer Background: 4+ years building secure, scalable apps across fintech, AI, and blockchain; author of Methane CLI and Esher developer tools.
Responsibilities: SDK architecture, API design, language binding, developer documentation.
Social Links: LinkedIn: https://www.linkedin.com/in/timilehin-olowu-9a7832271/
Name: Michael Afolabi
Role: Infrastructure & Automation Engineer Background: Focus on AI-assisted infrastructure and secure distributed backends; built Vault (DeFi yield optimizer) and Eclipse (interface for Dimension.xyz).
Responsibilities: frostd packaging, Helm/containerization, CI/CD, observability, staging relay operations.
Social Links: LinkedIn: https://www.linkedin.com/in/ifeoluwa-afolabi-2a8932162 GitHub: Afoxcute · GitHub
Name: Victory Osato
Role: Blockchain Developer Background: Trained 100+ developers and supported multiple dApp launches; deep familiarity with Arbitrum tooling.
Responsibilities: Vault-CLI implementation, end-to-end tests, negative-case scenarios (signer drop/retry), QA support.
Social Links: GitHub: OsatoVicTory (Tory) · GitHub
Project Summary
Threshold Shielded Signing Kit (TSSK) enables threshold spend authorization (t-of-n) for Zcash shielded addresses by packaging a developer SDK based on FROST, a packaged frostd relay, and a reference CLI. It lets wallets and custodians add N-of-M control to Unified Addresses while consuming ZF’s FROST crates and frostd, aligned with Zebra + lightwalletd, and with no zcashd dependencies.
Project Description
Threshold Shielded Signing Kit (TSSK) is a developer toolkit that enables threshold spend authorization (t-of-n) for Zcash shielded addresses using FROST. Today, teams that need multi-party approval often fall back to transparent addresses or single-key shielded wallets. TSSK addresses that gap by providing a small integration layer so wallets and custody systems can add FROST-based co-signing without re-implementing complex flows, consuming ZF’s FROST crates and frostd rather than replacing them
What we will do:
- Upstream alignment: use the ZF FROST crates and the
frostdrelay from ZcashFoundation/frost-tools; where ops/usability improvements are welcome, propose PRs upstream rather than fork
-
SDK (Rust + one minimal binding): High-level APIs for distributed key generation/reshare, threshold signing rounds, and shielded transaction assembly compatible with Unified Addresses (Sapling/Orchard). The SDK wraps established Zcash crates and exposes a clear, documented interface.
-
Ops-hardened relay (frostd package): Production artifacts for the signer coordination relay: authentication/TLS, persistence, metrics/logging, Docker images, a Helm chart, and an operator runbook. The relay forwards end-to-end-encrypted signer messages and does not handle spend keys.
-
Reference CLI (“Vault-CLI”): An auditable tool that demonstrates the end-to-end flow—set up N-of-M keys, derive a Unified Address and viewing key, propose a spend, coordinate signatures via the relay, broadcast, and confirm. It also serves as the project’s test harness.
Stack and compatibility:
Designed to run with Zebra as the node and lightwalletd as the light-client backend (Zaino as it matures), following the documented Zebra path; uses librustzcash / zcash_client_backend for address and transaction handling; no reliance on the legacy zcashd wallet.
Primary users:
-
Wallet teams: add threshold-authorized shielded sends using a focused SDK and example code.
-
Custody providers / PSPs / treasuries: use the CLI for controlled outflows and integrate the SDK when ready.
-
Organizations and communities: hold ZEC in shielded pools with multi-party control.
Goals and measurable outcomes
-
Ship a thin SDK, an ops-ready relay package, and a working CLI with clear documentation.
-
Provide deterministic test vectors and negative-case tests (e.g., signer drop/retry).
-
Publish a recorded end-to-end demo and collect external confirmations of successful runs via issue templates.
-
Support at least one public pilot branch (wallet or custody) within the first 90 days after release.
Scope boundaries
Out of scope: new wallet UI, new indexer, consensus changes, or any dependence on zcashd.
- The design leaves room for future extensions (e.g., additional language bindings or policy modules) without affecting the initial interfaces.
Proposed Problem
-
Limited wallet support and no reusable toolkit: While FROST exists and some projects have integrated it, the ecosystem lacks a Zebra-aligned SDK plus ops package that other wallets and services can adopt quickly, slowing broader support for threshold authorization in shielded flows.
-
Policy mismatch for institutions: Custodians/exchanges/treasuries require dual control and audit trails; without shielded multisig they’re forced into transparent flows or single-key shielded wallets.
-
Single-key = single point of failure: A lost or compromised shielded spend key means total loss; there’s no quorum-based recovery/rotation pattern in shielded workflows.
-
Stack transition gap: The ecosystem is moving to Zebra + lightwalletd (with Zaino maturing), but there’s no drop-in, Zebra-aligned shielded multisig toolkit to adopt.
-
High integration risk: Implementing FROST, DKG, and signer coordination from scratch is specialized, error-prone work; most teams won’t ship it or will ship brittle code.
-
Service on-ramps stall: Many services keep ZEC in transparent flows because they can’t enforce multi-party controls while staying shielded; blocking shielded deposits/holdings policies.
-
No ops playbook: There’s no hardened signer-relay package (auth/TLS, persistence, metrics) or clear runbook for safe threshold signing in production, so pilots don’t progress.
Proposed Solution
The Threshold Shielded Signing Kit is a compact integration kit that adds threshold spend authorization (t-of-n with FROST) to Zcash shielded addresses. It provides a Rust SDK with one minimal binding that handles distributed key generation and resharing, FROST signing for Sapling and Orchard, Unified Address derivation, and shielded transaction assembly; using the Zcash wallet libraries and the FROST crates provided by ZF. There is no dependency on the legacy
To make operations straightforward, the kit packages the signer coordination relay frostd with authentication, TLS, persistence, basic metrics, container images, Helm charts, and an operator guide. The relay forwards encrypted signer messages and never handles spend keys. A reference command line tool called Vault CLI demonstrates the full workflow from forming an N of M group and deriving a Unified Address and viewing key through proposing and co signing a spend, coordinating signatures through the relay, broadcasting, and confirming, and it also serves as a test harness. Together these pieces let wallet and custody teams adopt shielded multisignature with minimal custom work.
Solution Format
It is an open-source software deliverable with code, binaries, and ready-to-deploy ops artifacts. Everything will be versioned and published with reproducible builds.
Deliverables
-
SDK crate in Rust plus one minimal language binding (Python or Node/WASM).
-
Packaged signer relay based on frostd, including container image, Helm chart, configuration examples, and an operator runbook.
-
Vault CLI reference tool that exercises the full threshold signing flow and serves as an end-to-end test harness.
-
Documentation set: developer guide, API reference, quick starts, threat model, and deployment guide.
-
Test assets: deterministic test vectors, negative case scenarios, CI setup, and a recorded end-to-end demo.
-
Release packaging: tagged releases, checksums, and a short maintenance window for fixes discovered during pilot integrations.
Dependencies
Technical
-
Zebra full node and a reachable light-client backend such as lightwalletd; Zaino may be used where available but is optional.
-
Zcash libraries: librustzcash, zcash_client_backend, ZF FROST crates, and the frostd reference relay (all pinned to known-good versions).
-
Rust toolchain/Cargo; OCI-compatible container runtime.
-
TLS certificates for the relay; basic metrics/logging.
-
Testnet access and small amounts of test ZEC.
-
No reliance on the deprecated zcashd wallet or its RPCs.
Resources
-
CI runner for automated tests and reproducible builds.
-
Small VM or Kubernetes namespace to host a staging relay.
-
Code-signing keys for release artifacts.
Collaborations
-
As-needed coordination with Zcash Foundation engineers for FROST versioning guidance.
-
Compatibility check-ins with Zebra/lightwalletd maintainers via public channels (no special support required).
-
One pilot integrator (wallet, custody provider, or PSP) preferred for validation but not required for v1 delivery.
-
Independent light security review focused on SDK usage and relay hardening.
Technical Approach
We will deliver a thin SDK, a packaged signer-relay, and a reference CLI built on maintained Zcash components. The SDK uses librustzcash and zcash_client_backend for Unified Address (ZIP-316) handling and shielded transaction construction, and consumes ZF’s FROST crates for threshold key generation, re-share, and signing. It targets Zebra for node connectivity with lightwalletd as the light-client backend; an optional adapter will support Zaino as it becomes available. No zcashd wallet dependencies are used.
-
SDK architecture: Modules for UA derivation, distributed key generation and re-share, FROST signing for Sapling (RedJubjub) and Orchard (RedPallas), and transaction assembly. A small, documented public API is exposed, plus one minimal language binding for quick adoption.
-
Key generation and signing flow: Default to distributed key generation, with a trusted-dealer mode for test setups. Each partial signature is verified before aggregation. The coordinator relays the rounds, and the SDK returns a single spend-authorization signature suitable for inclusion in a standard shielded transaction.
-
Signer relay operations: Package the reference frostd with authentication and TLS, restart-safe persistence, basic metrics, container images, a Helm chart, and an operator runbook. Messages remain end-to-end encrypted, and the relay never handles spend keys.
-
Security practices: Pin crate versions; rely on upstream constant-time primitives; zeroize sensitive memory where applicable; minimize logs and identifiers; document Tor as an option to reduce metadata exposure.
-
Testing and CI: Deterministic test vectors; end-to-end testnet runs for 2-of-3 and 3-of-5 on Sapling and Orchard; negative cases (signer drop and retry); reproducible builds and cross-platform CI.
-
Packaging and docs: Tagged releases with checksums; SDK and CLI guides, quick starts, a concise threat model, and a recorded end-to-end demo to support pilots.
Upstream Merge Opportunities
Repositories
-
FROST tooling (Zcash Foundation): frostd relay and example CLI.
-
Docs/examples only (no code changes planned): librustzcash, zcash_client_backend, zebra, lightwalletd.
Planned changes
-
frostd (ops-focused, optional): propose additions for authentication, TLS, restart-safe persistence, basic metrics endpoints, container image, Helm chart, and sample configs. Features will be optional or disabled by default to avoid changing current behavior.
-
Documentation/examples: propose small PRs adding multisig usage notes and deployment examples that link Zebra + lightwalletd + a signer relay. No protocol or wallet logic changes.
Ecosystem benefit if merged
-
Lower-friction deployment of a signer relay and clearer examples for integrators.
-
Reusable ops artifacts that reduce one-off packaging across projects.
Coordination
-
Open issues and design notes with FROST maintainers before PRs; follow normal review processes.
-
Submit docs/example PRs to the relevant repos and iterate on maintainer feedback.
Timeline considerations
- File issues early in the project, submit PRs once features are stable, and adjust based on maintainer review cycles. If changes are not accepted upstream, we will keep the ops packaging and guides in our repository without blocking v1 delivery.
Hardware/Software Costs (USD)
$0
Hardware/Software Justification
n/a
Service Costs (USD)
$4,000
Service Costs Justification
-
$3,000 for an independent light security review focused on SDK usage and relay hardening.
-
$1,000 for time-boxed cloud resources: CI minutes, an ephemeral staging relay VM, artifact storage, and hosting the recorded demo.
Compensation Costs (USD)
$21,000
Compensation Costs Justification
Covers engineering, DevOps, and documentation for the SDK, packaged relay, and reference CLI.
-
Rust engineer: ~160 hours at $75/hour = $12,000 (SDK core, Vault-CLI, tests).
-
DevOps engineer: ~100 hours at $70/hour = $7,000 (relay packaging, TLS/auth, Helm, CI).
-
Technical writer/PM: ~20 hours at $100/hour = $2,000 (developer guide, operator runbook, coordination).
Total Budget (USD)
$25,000
Previous Funding
No
Previous Funding Details
No response
Other Funding Sources
No
Other Funding Sources Details
No response
Implementation Risks
-
ZIP-312 draft status
The FROST spend-auth spec is still Draft, so interfaces may shift. Mitigation: keep signing/key-gen modules modular, track ZIP updates, version public APIs, and document any changes. -
Key-generation interoperability
Projects may differ on FROST DKG/reshare conventions. Mitigation: follow ZF/ECC guidance, version key-gen artifacts, supply migration notes and tests. -
Relay security and operations
Misconfiguration could weaken auth/TLS or persistence. Mitigation: ship secure defaults, minimal logs, health checks/metrics, restart-safe storage, and a short operator checklist. -
Participant availability / coordination
Rounds can stall if a signer drops or messages lag. Mitigation: retries, timeouts, round recovery, documented re-share, and clear escalation steps. -
SDK correctness / misuse
Incorrect API use could yield invalid transactions or weak flows. Mitigation: deterministic vectors, negative tests, typed APIs with safe defaults, and a light external review focused on usage. -
Dependency drift (Zebra, lightwalletd, Zaino)
Upstream changes can affect builds/behavior. Mitigation: pin versions, test against a known matrix, keep Zaino optional/behind a feature flag, and publish upgrade notes. -
Performance & UX
Threshold signing adds latency versus single-signer. Mitigation: measure end-to-end timing, document expected round-trip budgets, and provide guidance on batching and signer locality. -
Key-share lifecycle risk:
Loss/exposure of shares remains possible. Mitigation: documented backup/rotation/reshare patterns, zeroize sensitive memory where applicable, and recommend hardware separation. -
Deprecated stack contamination:
Teams might copy legacy zcashd wallet/RPC examples. Mitigation: explicitly forbid zcashd wallet/RPC usage in docs, add CI/static checks in examples, and reference Zebra + lightwalletd paths only.
Potential Side Effects
-
Coordination metadata or logging leaks:
Even with end-to-end encryption, relay timing patterns or verbose logs can reveal sensitive context if operators don’t use TLS, minimal logs, or privacy tooling. -
Relay availability dependence:
If the chosen relay is down or misconfigured, threshold signing pauses and time-sensitive spends may be delayed. -
Quorum and key-share mismanagement:
Setting thresholds too low weakens control; too high increases liveness risk. Poor backup, rotation, or re-share can lock funds. -
Compliance and audit gaps:
Without clear signer-event records and approvals, internal audits and investigations are harder. -
Added latency and resource use:
Multi-party rounds are slower than single-signer flows and the relay consumes CPU, storage, and bandwidth under load. -
False sense of security:
Multisig reduces single-key risk but does not prevent collusion or social-engineering of signers.
Success Metrics
-
Adoption
At least one public pilot branch (wallet, custody, or PSP) using the SDK, and at least ten external end-to-end confirmations submitted via the project’s issue template within 90 days of v1. -
Reliability and correctness
CI matrix covers Linux and macOS, Sapling and Orchard, 2-of-3 and 3-of-5. Thirty consecutive nightly runs with a 100% pass rate, including a reorg simulation test. -
Security
Independent light review completed. Zero high-severity findings remaining after remediation. All medium findings either fixed or documented with mitigations. -
Operations
Staging relay shows at least 99% availability over any continuous 14-day window. Restart recovers state and resumes rounds in under 60 seconds. A basic metrics dashboard is included. -
Performance
In a single-region test, median end-to-end threshold signing time for a 3-of-5 group is three seconds or less, and the 95th percentile is eight seconds or less. Under five concurrent sessions, relay baseline memory is 150 MB or less and CPU usage is at or below one vCPU. -
Developer experience
A new user following the quick start can complete a testnet threshold send in 30 minutes or less. All public APIs are documented with runnable examples. -
Reproducibility and release quality
Tagged releases with checksums are published, a recorded end-to-end demo is available, and reproducible builds run in CI with artifacts attached to releases.
Startup Funding (USD)
n/a
Startup Funding Justification
n/a
Milestone Details
Milestone 1
Amount (USD): $0
Expected Completion Date: 2025-11-20
User Stories
- As a wallet developer, I want a clear SDK/API and data flow so that I can plan integration.
- As a DevOps lead, I want an operations plan for the signer relay so that I can deploy it in staging.
- As a security reviewer, I want a concise threat model so that I can assess risk.
Deliverables
- SDK/API spec for ZIP-316 Unified Address handling, key generation/reshare, threshold signing, and shielded transaction assembly (with request/response schemas).
- Threat model covering trust boundaries, relay metadata, auth/TLS, and key handling.
- Operations checklist and example relay configs (auth/TLS, persistence, metrics).
- Compatibility matrix with pinned versions for Zebra, lightwalletd, FROST crates, and librustzcash/zcash_client_backend.
- README linking all docs; CI skeleton for SDK and relay image.
Acceptance Criteria
- Two reviewers (wallet and ops) complete checklists with no blocking items.
- CI builds the SDK skeleton and the relay container; version pins and docs are linked from the README.
Milestone 2
Amount (USD): $9,000
Expected Completion Date: 2025-12-18
User Stories
- As a wallet developer, I want a working SDK to create keys and sign threshold shielded transactions on testnet so that I can validate feasibility.
- As a QA engineer, I want deterministic vectors and negative tests so that I can verify correctness.
Deliverables
- SDK crate implementing ZIP-316 UA derivation, DKG/reshare, FROST signing for Sapling (RedJubjub) and Orchard (RedPallas), and shielded transaction assembly.
- One minimal language binding (Python or Node/WASM) with runnable examples.
- Unit tests, deterministic vectors, developer docs, and a quick start.
Acceptance Criteria
- A 2-of-3 testnet spend completes using the example.
- Tests and vectors pass on Linux and macOS in CI; public API docs are generated.
Milestone 3
Amount (USD): $7,000
Expected Completion Date: 2026-01-08
User Stories
- As a DevOps lead, I want a packaged signer relay so that I can deploy it with TLS, auth, persistence, and metrics.
- As a signer, I want sessions to survive restarts so that coordination can resume.
Deliverables
- Packaged
frostdrelay with authentication, TLS, restart-safe persistence, metrics endpoints, container image, Helm chart, and sample configs. - Operator runbook and minimal logging guidance.
Acceptance Criteria
- Relay deploys via Helm with TLS and auth; metrics are visible.
- Restart resumes rounds; CI builds the container image and runs a basic security scan.
Milestone 4
Amount (USD): $5,000
Expected Completion Date: 2026-01-22
User Stories
- As an integrator, I want a reference CLI so that I can complete an end-to-end threshold send without writing code.
- As a QA engineer, I want failure scenarios so that I can verify signer drop and retry.
Deliverables
- Vault-CLI demonstrating: create N-of-M, derive a UA and viewing key, propose spend, coordinate signatures via the relay, broadcast, and confirm.
- Negative-case tests (signer drop, retry, idempotent handling), a recorded demo, and a quick-start guide.
Acceptance Criteria
- Following the quick start, a new user completes a 2-of-3 testnet spend.
- Negative tests pass in CI; recorded demo and quick start are published.
Milestone 5
Amount (USD): $4,000
Expected Completion Date: 2026-02-05
User Stories
- As a reviewer, I want an external light security review addressed so that I can trust the release.
- As a pilot team, I want tagged releases with checksums and docs so that I can adopt them in staging.
Deliverables
- Independent light security review focused on SDK usage and relay hardening, plus remediation PRs.
- Tagged v1 releases of the SDK, relay package, and CLI with checksums; final developer and operator docs; upgrade notes.
Acceptance Criteria
- No high-severity findings remain; medium findings are fixed or documented with mitigations.
- v1 artifacts and checksums are published and linked from the README.