Skip to main content

External References and Specs

Why This Chapter Exists

Bookmark this page. Every other chapter cites it. The course's claim to authority is only as strong as these references, so they are listed together so you can audit them in one place.

Primary documents to read alongside the code. Items are grouped by which onboarding file they support.

General

File 01 (Architecture)

File 02 (zebra-chain)

File 03 (Cryptography)

  • Sapling paper: Hopwood, Bowe, Hornby, Wilcox-O'Hearn, 2016.
  • Orchard book: https://zcash.github.io/orchard/.
  • Halo2 book: https://zcash.github.io/halo2/.
  • BLS12-381 paper and the bls12_381 Rust crate.
  • Jubjub paper and the jubjub Rust crate.
  • Pasta curves (Pallas + Vesta): https://github.com/zcash/ pasta_curves.
  • Sinsemilla: Orchard book chapter on the hash.
  • Pedersen: Sapling spec section 5.4.7.
  • BLAKE2 RFC 7693. Watch the personal string usage everywhere.
  • RedJubjub and RedDSA: ZIP-200 plus the redjubjub and reddsa crates.
  • Ed25519 ZIP-215 strict verification: see ed25519-zebra README.
  • Equihash: Biryukov and Khovratovich, "Equihash: Asymmetric Proof- of-Work Based on the Generalized Birthday Problem".

File 04 (Consensus and State)

  • ZIP-244 for sighash and authdigest.
  • ZIP-216 for jubjub canonical encoding (relevant to verifier correctness).
  • Zebra RFC 0002 Parallel Verification.
  • Zebra RFC 0004 Asynchronous Script Verification.
  • Zebra RFC 0005 State Updates.
  • Zebra RFC 0006 Contextual Difficulty Validation.
  • Zebra RFC 0007 Tree States.
  • Zebra RFC 0010 V5 Transaction.
  • Zebra RFC 0012 Value Pools.
  • Bitcoin developer reference for context on the block, header, and Merkle conventions Zcash inherits.

File 05 (Network and Rpc)

File 06 (zebrad and Tower)

File 07 (Testing, Build, Ci)

People and Channels

A Final Note

The Zcash spec is the authoritative source. Where the spec and the code disagree, the spec wins unless the disagreement is itself a ratified consensus rule (in which case the spec is updated). When in doubt, raise the question on Discord or as a zips PR. The Zebra maintainers are responsive and the spec authors are accessible.

Spec Pointers

All references in this chapter are themselves spec pointers. See the body.

Exercises

  1. Open the Zcash protocol spec PDF and find the section that defines the value commitment. Cite the section number.
  2. Identify one ZIP that is referenced by Zebra source code today and locate the file that implements it.
  3. Find one piece of upstream documentation in book/ that disagrees with the source. Note it for a future PR.