Applied Zcash

Basic

Concepts

A shielded payment has a small set of parts: notes, actions, memos, keys and addresses. This page gives each part in a few lines. All other pages use these words.

Notes

A note holds value. Each note has a recipient, a value and a random seed rseed. The chain keeps a commitment to the note, cmx. The commitment keeps the recipient and the value secret.

A wallet spends a note with its nullifier. Consensus accepts each nullifier one time. Thus, each note can be spent one time only.

Pools

A pool is a set of notes with one protocol. Zcash has these pools:

Ironwood
The newest shielded pool. It uses the Orchard protocol. Use it for new apps.
Orchard
The first pool of the Orchard protocol. The Ironwood pool replaces it.
Sapling
An older shielded pool.
Transparent
A public pool. All values and addresses are visible, as in Bitcoin.

This site uses the Orchard protocol. The pages say "Ironwood pool" when the pool is important.

Actions and bundles

An action holds one spend and one output. A bundle holds the actions of one transaction in one pool. A bundle has two actions or more. The builder adds dummy spends and dummy outputs to fill the actions.

Outsiders see the number of actions. The real spends and outputs stay secret.

Memos

Each output carries a memo of 512 bytes. The memo is in the note ciphertext. The recipient can read the memo. The sender can read it with the outgoing viewing key. ZIP 302 sets the format. A text memo is UTF-8 text.

A transparent address has no memo.

Keys

One seed gives all the keys of a wallet. Each key in this list comes from the key above it, and has less power.

KeySpendSee payments inSee payments outMake addresses
Spending keyYesYesYesYes
Full viewing keyNoYesYesYes
Incoming viewing keyNoYesNoYes

See Watch-only keys.

Addresses

An address tells a wallet where to send a note. A unified address (ZIP 316) holds one receiver for each pool that the recipient accepts. The wallet of the sender selects the best receiver.

One key gives many addresses. Only the holder of a viewing key can link these addresses. See Address per customer.

Trial decryption

The chain keeps the recipient of each note secret. Thus, a wallet must try to decrypt each action with its incoming viewing key. This is trial decryption. Each action on the chain adds work for each wallet. See Polite actions.

Payment requests

ZIP 321 sets a URI for a payment request. The URI holds the address, the amount and the memo. A wallet reads the URI from a link or a QR code. See Payment links.

Demo: look into an address

Type or paste a Zcash address. The demo decodes it with the zcash_address crate, compiled to WebAssembly. It shows the network, the receivers and the memo support. The first address is the donation address of this site.

Parts

The WASM module is loading.