anon.garden · Technical Documentation

The anon.garden base layer for Zcash Shielded Assets

A full engineering treatment of the three-action asset layer behind anon.garden — issuance, transfer, and burn — over the OrchardZSA protocol, the infrastructure required to run it today on testnet, and a deep catalog of products the layer makes possible.

Document
anon.garden Docs v1.0
Protocol
OrchardZSA
Specs
ZIP 226 / 227 / 230
Target
NU7
Maturity
Alpha · Testnet
Date
June 2026
00

Executive Summary

Thesis · Feasibility · Approach

The objective is a thin, reusable base layer exposing three primitives — issuance, transfer, and burn of custom shielded assets — over Zcash's OrchardZSA protocol, on top of which a family of payment, stablecoin, bridge, and capital-markets products can be assembled. This document establishes that the primitives are buildable on testnet today, specifies the architecture and the implementation path, and catalogs the application surface in depth.

3
Core token actions running end-to-end on the public ZSA testnet
v0.5.0
QEDIT reference tx-tool release · May 2026
2⁶⁴−1
Maximum supply per asset (MAX_ISSUE)
ZEC
Fee denomination for every asset, including custom ones

0.1What is true today

OrchardZSA — specified across ZIP 226 (transfer & burn), ZIP 227 (issuance), and ZIP 230 (the v6 transaction format) — extends the existing Orchard shielded pool so that any user can mint a custom asset that subsequently moves with the same privacy guarantees as ZEC. A feature-complete implementation is live on a public testnet and is fully exercised by QEDIT's zcash_tx_tool, whose reference scenario performs precisely the loop we need: issue an asset, transfer it to another party, then burn it. The full lifecycle works against a single-node Zebra running in regtest, and atomic swaps between assets have been publicly demonstrated.

0.2The shape of the build

We do not build a node or re-implement the cryptography. We wrap the existing Rust transaction-construction machinery (librustzcash, mirrored by the tx-tool's scenario pattern) behind a stable service API — issue / transfer / burn / balance / asset — and pair it with three supporting subsystems: a key-management module (issuance authority is cryptographically distinct from spend authority), a wallet/sync layer that scans the chain and maintains note state, and an asset registry that solves the protocol's deliberate refusal to let asset names travel on-chain. Everything else — payments, payroll, bridges, launchpad — is an application sitting on that boundary.

◆ Central insight

ZSA gives transparent issuance over shielded holding: the existence, issuer, and total supply of an asset are public and auditable, while balances and transfers are private. This single property is what makes the entire product space coherent — it is exactly what wrapped/bridged assets need (verifiable supply against reserves) and exactly what payments and payroll need (confidential amounts). Most of the design work downstream is in managing the seams of that public/private boundary.

0.3What to weigh before committing

Three realities frame every decision in this document, and they are treated explicitly in §7. First, the tooling is alpha — APIs and data structures are expected to break, and the reference tool is not a wallet. Second, the consumer wallet/SDK layer is immature: the node and Rust crates support ZSA, but the light-client indexer and end-user wallet are still hardening, which pushes polished mobile/web products later and favors server-side and back-office products first. Third, ZSA is pre-mainnet and contested — its inclusion in NU7 is the subject of an active coinholder vote, so building on it is, in part, a bet on activation.

01

The ZSA Protocol

What the base layer is standing on

A precise mental model of OrchardZSA is a prerequisite for everything that follows. This section condenses the consensus-relevant mechanics into the parts that shape the service design.

1.1Assets, and the identity that makes them unique

An Asset is a type of shielded note. ZEC is simply the default asset; a Custom Asset is anything else. Each asset is named by a globally-unique Asset Identifier, constructed so that two different issuers can never collide. Uniqueness comes from binding the issuer's public key to a hash of a free-form description string, then deriving — through two more steps — the actual group element that a note carries. That derivation pipeline is the single most important diagram in the protocol:

issuer (ik) 0x00 ‖ ik · 33 bytes asset_desc UTF-8 string BLAKE2b -256 assetDescHash 32 bytes AssetId (issuer, hash) BLAKE2b -512 AssetDigest 64 bytes GroupHashᴾ AssetBase Pallas point ℙ* carried inside every shielded note issuer-bound input user-chosen input / output
FIG 1   Asset-identity derivation. The on-chain identifier is (issuer, assetDescHash); only a 32-byte hash of the description ever touches the chain, never the description text itself.

The consequence worth internalizing: the chain stores a hash of the description, not the description. This was a deliberate revision. It lowers bandwidth, allows arbitrarily long descriptions off-chain, and — most importantly — prevents wallets from naively trusting a name that arrived over the wire. A wallet that sees an unknown asset is forced to look its description up out-of-band before showing anything to a user, which blunts the "anyone can mint a token literally described as USDC" spoofing attack. This requirement is the entire reason the base layer needs an asset registry (§4.7).

1.2Issuance authority, separated from spend authority

Issuance introduces its own key pair: an issuance authorizing key (isk) that signs issuance, and an issuance validating key (ik) that the network checks against. These are derived through a dedicated hardened-only ZIP 32 path (purpose = 227'), entirely separate from the keys that spend notes. The signature scheme is BIP-340 Schnorr over secp256k1 — the same curve family as Bitcoin Taproot, chosen for tooling and hardware compatibility rather than the Pallas/Vesta curves Orchard uses internally. The issuer's on-chain identity is just the encoding of ik.

▣ Why this matters for the build

Because issuance authority is cryptographically distinct from spend authority, the base-layer service can hold or delegate minting rights without ever touching the funds wallet. A compromised issuance key cannot move anyone's balances — it can only mint. This separation is what makes a custodial issuance service, a delegated launchpad, or a future threshold-signed treasury tractable.

1.3Supply, finalization, and the global issuance state

Every node maintains a map from each asset's AssetBase to a triple: its circulating balance (issued minus burned), a one-way final flag, and a reference note. Three consensus rules govern it. Balance may never exceed MAX_ISSUE = 2⁶⁴−1; balance may never go negative (burns are checked against it); and once an asset is finalized, no further issuance of it is ever accepted — the flag cannot revert from 1 to 0. The reference note is a mandatory value-0 note to a well-known default address, inserted the first time an asset is issued, giving every asset a canonical anchor.

This is the mechanism that makes supply publicly auditable — the property bridges and stablecoins depend on. A node (and therefore our service) can answer "how much of asset X exists?" deterministically, even though it cannot see who holds it.

1.4Fees, transactions, and a hard coupling

Fees are paid in ZEC, always — there is no mechanism to pay fees in a custom asset, by design (lifting value out of a shielded transaction for fees would leak information about it). Issuance, transfer, and burn all ride inside the v6 transaction format (ZIP 230). One coupling rule is structurally important: an issuance bundle must be accompanied by at least one OrchardZSA action group in the same transaction — both to derive the issue notes' nullifier-seed and to prevent replay of an otherwise-identical issuance. Issuance cannot stand alone in a transaction.

● Product implication

Every actor in every product — issuer, sender, payroll operator, bridge custodian — needs a small ZEC balance to pay fees. "Onboarding a user" therefore always includes seeding them with dust ZEC, or sponsoring fees on their behalf. This is a recurring UX and treasury line item, not an edge case.

02

System Architecture

The stack, the service, and the data model

The system is a five-layer stack. We own exactly one layer of it — the base-layer service — and consume the rest. Drawing the boundary cleanly is what keeps the products above it simple and the protocol churn below it contained.

2.1Layered architecture

Reading top to bottom: applications speak only to our service; the service speaks to the node through transaction construction and RPC; the node enforces consensus and holds the global issuance state; the network is whichever chain we are pointed at. The only layer that is bespoke is the second — and even there, the heavy lifting (transaction building, proving) is borrowed from librustzcash.

calls ↓ data ↑ LAYER 1 Application products Payments Payroll Bridge Launchpad Wallet UX LAYER 2 Base Layer ✦ we build this Issue/Xfer/Burn API Key Manager Wallet & Sync Asset Registry Supply Indexer Fee / ZEC treasury · sponsorship Selective-disclosure / viewing-key service · webhooks · audit log LAYER 3 Integration Rust crates librustzcash (builder) orchard · zsa1 halo2 proving v6 serialization LAYER 4 Node consensus Zebra (ZSA fork) JSON-RPC :18232 Consensus rules Global issuancestate map LAYER 5 Network regtest (local / cloud) public ZSA testnet → NU7 mainnet (pending activation)
FIG 2   The five-layer stack. Only Layer 2 is bespoke; Layers 3–5 are consumed from the QEDIT/ECC/ZF reference implementations.

2.2Deployment & component view

Concretely, the base-layer service is a long-running Rust process (or a Rust core wrapped by a thin gateway in any language) that holds keys, persists wallet and asset state, and talks to a Zebra node over JSON-RPC. Secrets live in a separate store; for treasury-grade operations that store fronts an HSM or a FROST threshold-signing quorum.

Client Applications web · mobile · server SDKs HTTPS · REST / gRPC BASE-LAYER SERVICE API gateway Tx builder Key manager Wallet / sync Registry Supply idx scheduler · webhooks · audit log · fee sponsorship Key Store isk / spend keys HSM · FROST quorum never leaves enclave sign State Store notes · commitments asset registry supply mirror Postgres / SQLite persist JSON-RPC :18232 Zebra Node — ZSA fork validates v6 tx · maintains global issuance state qedit/zebra-regtest-txv6 P2P regtest (deterministic)  ·  public ZSA testnet (shared)  ·  NU7 mainnet (future)
FIG 3   Deployment topology. Keys are isolated from the service process; persistence holds wallet state, the asset registry, and a mirror of the chain's supply map.

2.3The base-layer service & its API surface

The service collapses the protocol's complexity into a small, stable contract. Internally it owns six concerns; externally it exposes a handful of resources. The contract below is the seam every product builds against — it should change far less often than the alpha crates beneath it.

Method · EndpointActionNotes & consensus touchpoints
POST /assetsIssue (create) a new assetBody: description, supply, finalize, recipients. Emits the mandatory value-0 reference note on first issuance. Returns asset_id + txid.
POST /assets/{id}/issueIssue more of an assetRejected if the asset is finalized. Must be bundled with an Orchard action group.
POST /assets/{id}/finalizePermanently cap supplyOne-way; sets final = 1. Often issued as a final note of value 0.
POST /transfersTransfer asset (shielded)Body: asset_id, from-account, to-address, amount. Builds an OrchardZSA action; amounts are private.
POST /burnsBurn assetChecked against circulating balance; decrements the global supply. The canonical off-board primitive for bridges.
GET /assets/{id}Asset metadata + supplyJoins on-chain supply (from the issuance state) with registry metadata (name, symbol, decimals).
GET /accounts/{id}/balancesPer-asset balancesDerived from the wallet's spendable note set; never leaves the service unencrypted.
POST /accounts · GET /addressesKey & address managementProvisions ZIP-32 accounts; issuance keys on 227', spend keys separate.
GET /supply/{id}Public circulating supplyRead straight from the mirrored issuance state — the proof-of-reserves primitive.
GET /tx/{txid}Transaction statusPending / confirmed / depth; drives webhooks.

2.4Data model

Five core tables carry the service's state. The note store is the wallet; the registry is the off-chain name layer the protocol forces on us; the supply mirror is a local cache of the chain's authoritative issuance map, kept for fast reads and reorg-safe.

schema.sqldata model · illustrative
-- on-chain asset identity + cached supply
CREATE TABLE assets (
  asset_id        BYTES PRIMARY KEY,  -- (issuer, assetDescHash)
  asset_base      BYTES UNIQUE,       -- Pallas point used in notes
  issuer          BYTES,              -- 0x00 ‖ ik (BIP-340)
  finalized       BOOL  DEFAULT false,
  supply_cached   U128,               -- mirror of issued − burned
  created_height  U64
);

-- the wallet: every note we can detect / spend
CREATE TABLE notes (
  commitment   BYTES PRIMARY KEY,
  asset_base   BYTES REFERENCES assets,
  value        U64,
  rho          BYTES, rseed BYTES, diversifier BYTES,
  account_id   U64,
  position     U64,    -- leaf index in note commitment tree
  spent        BOOL DEFAULT false,
  height       U64
);

-- the off-chain name layer the protocol mandates (§4.7)
CREATE TABLE registry (
  asset_id     BYTES PRIMARY KEY REFERENCES assets,
  name         TEXT, symbol TEXT, decimals U8,
  metadata_url TEXT, verified BOOL DEFAULT false
);

CREATE TABLE accounts ( account_id U64 PRIMARY KEY,
  key_ref TEXT, issuance_path TEXT );     -- secrets live in Key Store

CREATE TABLE txs ( txid BYTES PRIMARY KEY,
  kind TEXT, status TEXT, height U64 );   -- issue|transfer|burn

2.5Synchronization & state integrity

The wallet/sync module follows the model proven in the reference tx-tool: it records block hashes and the serialized note-commitment tree, validates on each run that its stored chain head still matches the node, and resumes from the last synced height. Its reorg policy is deliberately blunt and therefore safe — on any detected reorganization or wallet/block inconsistency it wipes derived state (block data, wallet state, notes, tree) and resynchronizes from scratch rather than attempting a partial rewind. On regtest and the ZSA testnet this is cheap; the same code path scales to mainnet, where block-data is bounded by block count (not size) and wallet state grows only with wallet activity.

▲ Design constraint

The supply mirror (assets.supply_cached) is a convenience cache, never a source of truth. Any product that gates value on supply — a bridge proving reserves, a stablecoin reporting circulation — must read the authoritative figure from the node's issuance state at confirmation depth, and must treat the mirror as invalidated across reorgs.

03

Protocol Operations

Issuance · Transfer · Burn · Lifecycle

Each of the three primitives is a v6 transaction with a distinct shape. The sequence flows below trace a request from the application down to consensus and back, naming the checks the node performs — the rules our service must respect or the transaction is rejected.

3.1Issuance

Issuance creates new units of a custom asset. On the very first issuance of an asset, the service must prepend the mandatory value-0 reference note; the issuance bundle must travel with at least one Orchard action group; and the bundle is signed by the issuance authorizing key over the transaction's sighash. Validators verify the signature, refuse any issuance of a finalized asset, enforce the supply ceiling, then compute the note commitments themselves and update the global issuance state.

Issuer App Base Service Zebra Node Chain /Validators issue(desc, supply, finalize, recipients) derive AssetId → AssetBase build IssueAction + value-0 reference note submit v6 tx (IssueBundle + action group) validate: ik sig · final≠1 · Σv ≤ MAX append commitments · update state txid · confirmed asset_id, txid
FIG 4   Issuance flow. Solid = request, dashed = return. The node — not the issuer — computes and inserts note commitments, which is what unlinks later spends from the issuance transaction.

3.2Transfer

Transfer moves existing units between shielded addresses. It is an ordinary OrchardZSA action group: the service selects input notes of the right asset, constructs outputs, computes a per-asset value commitment (the value base is a private input to the proof, which is how a single circuit handles both ZEC and custom assets), produces the halo2 proof, and reveals only nullifiers and output commitments. Amounts, asset type, sender, and receiver are all hidden on-chain.

Sender App Base Service Zebra Node Chain /Validators transfer(asset_id, from, to-addr, amount) select input notes · build action value commitment · nullifiers · halo2 proof submit v6 tx (amounts & asset hidden) verify proof · nullifiers unspent · balance append output commitments txid · confirmed txid  → recipient detects on scan
FIG 5   Transfer flow. The recipient is not notified by the chain; their wallet discovers the incoming note by trial-decryption during sync.

3.3Burn

Burn destroys units and reduces the asset's public circulating supply. It is the canonical off-board primitive: a bridge releases value on the origin chain only after observing a confirmed burn of the wrapped asset on Zcash. The node checks that the burned amount does not exceed the asset's circulating balance, then decrements the global issuance state. Because supply is public, anyone — including a bridge relayer or an auditor — can verify the burn without seeing who burned it.

Holder /Bridge App Base Service Zebra Node Chain /Validators burn(asset_id, amount) build tx with assetBurn {(AssetBase, v)} submit v6 tx check balance ≥ v · balance −= v supply reduced (public) txid · confirmed burn confirmation ⟶ a bridge relayer watches the public supply decrease and releases the locked asset on the origin chain — no private data required
FIG 6   Burn flow. The public, auditable supply decrement is precisely the signal an off-chain bridge or redemption process keys on.

3.4Asset lifecycle

An asset moves through three consensus states. Issuance brings it to life; further issuance, transfer, and burn keep it active; finalization permanently seals supply while still permitting movement and burning. Two invariants hold throughout and can never be violated.

Uninitialisedbalance = 0 · ⊥ Activeissuable · 0 ≤ bal ≤ MAX Finalisedfinal = 1 · sealed first issue + reference note finalize = 1 issue more · transfer · burn transfer · burn INVARIANTS ① balance ∈ [0, 2⁶⁴−1] at all times — burns are rejected if they would drive it negative; issuance is rejected if it would exceed MAX_ISSUE. ② final is monotonic — once set to 1 it can never return to 0. There is no key rotation, so loss of an issuer key is unrecoverable (see §7).
FIG 7   Asset lifecycle. Note that "Finalised" is not "dead" — units still transfer and burn; only new issuance is foreclosed.
04

Implementation

Repos · environments · service wiring · keys

This section is the build manual: the exact components to pull, how to stand up a node locally and in the cloud, how the service wraps the reference tooling, and how the supporting subsystems (keys, registry, supply accounting) are realized.

4.1Components & version pinning

The entire stack is a set of QEDIT forks maintained for NU7. Because everything is alpha and under active, breaking-change review, the single most important operational rule is to pin exact commit hashes, not branches. An unpinned cargo update against these crates will eat days.

ComponentRef to pinRole in the build
QED-it/orchardbranch zsa1 → SHACore OrchardZSA crate: note structure, per-asset value commitment, halo2 circuit.
QED-it/librustzcashZSA fork → SHATransaction construction & serialization; the builder our service calls.
QED-it/zebrazsa-integration-demoZSA-enabled node; ships the regtest Docker image we run.
QED-it/zcash_tx_tooltag v0.5.0Reference tx generator; its scenarios are our copy-paste starting point for issue/transfer/burn.
QED-it/zcash-test-vectorsfork → SHAv6/ZSA test vectors for validating our serialization against the reference.

4.2Local development environment

Two terminals. The first builds and runs a self-contained ZSA Zebra node in regtest (it mines deterministically, so there is no waiting for blocks and no dependence on a public network). The second runs the transaction tool against it. This is the exact path the reference documents, reproduced here as the baseline.

terminal · nodebash
# 1 — build & run the ZSA Zebra node (regtest, RPC on :18232)
git clone -b zsa-integration-demo --single-branch --depth=1 \
  https://github.com/QED-it/zebra.git
cd zebra
docker build -t qedit/zebra-regtest-txv6 \
  -f testnet-single-node-deploy/dockerfile .
docker run -p 18232:18232 qedit/zebra-regtest-txv6
terminal · tx-toolbash
# 2 — one-time setup
cargo install diesel_cli --no-default-features --features sqlite
DATABASE_URL=walletdb.sqlite diesel setup
./zcutil/fetch-params.sh                 # Sapling params

# 3 — run the full lifecycle: issue → transfer → burn (×2)
cargo run --release --bin zcash_tx_tool test-orchard-zsa

# other ready-made scenarios:
#   test-issue-one     minimal: issue a single asset
#   test-three-party   issue → transfer → transfer → burn
# NOTE: reset the node (restart the container) between runs
● From reference tool to product

The tx-tool is explicitly not a wallet and not for production — but its scenario files (src/commands/test_orchard_zsa.rs) are the cleanest worked examples of constructing each transaction type. The documented "create your own scenario" path — copy a scenario, register a new command variant — is exactly the seam from which to lift transaction-building logic into the service.

4.3Wrapping the builder behind the service

The service's three write paths are thin functions over the librustzcash builder, encoding the consensus obligations from §3 so callers never have to. The sketch below is illustrative — APIs in the alpha crates will differ — but it captures the required moves: derive the asset, attach the reference note on first issuance, bundle an Orchard action group alongside any issuance, sign with the issuance key, and broadcast.

base_layer/issue.rsrust · illustrative
pub async fn issue(req: IssueReq, ctx: &Ctx) -> Result<IssueResp> {
    // 1. deterministic identity from issuer key + description
    let asset = AssetId::derive(&ctx.issuer_ik, &req.description);

    let mut b = TxBuilder::new(ctx.network, ctx.anchor());

    // 2. first issuance MUST carry the value-0 reference note
    if !ctx.state.exists(&asset) {
        b.add_reference_note(&asset);          // default addr, v=0
    }
    for r in req.recipients {
        b.add_issue_note(&asset, r.addr, r.amount);
    }
    b.set_finalize(&asset, req.finalize);

    // 3. issuance cannot stand alone — bundle an Orchard action group
    b.add_orchard_action_group(ctx.dust_input()?);

    // 4. sign issuance with isk (BIP-340), spends with spend keys
    let tx = b.build_and_sign(&ctx.isk, &ctx.spend_auth)?;

    let txid = ctx.node.send_raw_transaction(tx).await?;
    Ok(IssueResp { asset_id: asset.encode(), txid })
}

4.4The API contract

Above that core sits the language-agnostic boundary every product consumes. Issuance carries both the on-chain parameters and the registry metadata (which is stored off-chain — see §4.7).

POST /assetshttp · json
// request
{
  "description": "Acme Payroll USD · series 2026-Q3",
  "supply": 1000000000000,        // 1,000,000.000000 @ 6 dp
  "decimals": 6,
  "finalize": false,
  "recipients": [{ "address": "u1acme…", "amount": 1000000000000 }],
  "registry": { "name": "Acme USD", "symbol": "aUSD" }
}
// response 200
{
  "asset_id": "0x00b91f…c2",
  "asset_base": "0x7e…a1",
  "txid": "d41c…9f",
  "reference_note": true,
  "status": "pending"
}

4.5Key management

The service provisions ZIP-32 accounts and derives issuance keys on the dedicated hardened path m / 227' / coin' / 0', kept structurally apart from the spend keys. Three operating postures, escalating with the value at stake:

  • Dev / hot — keys in the service's encrypted key store. Acceptable on regtest and testnet; never for material mainnet value.
  • HSM-backed — the issuance authorizing key (a BIP-340 secp256k1 key) lives in an HSM or enclave; the service requests signatures over the sighash but never holds the secret.
  • Threshold — issuance and/or treasury spend authority split across a FROST quorum (the Foundation's threshold-Schnorr work), so no single operator can mint or move funds. This is the recommended posture for a stablecoin issuer or bridge custodian.
▲ No key rotation

The protocol does not support rotating an asset's issuance key. If an issuer key is compromised the only remedy is to finalize every asset under it and migrate to a new issuer identity (and thus new asset IDs). Treat the issuance key as a long-lived root of trust and protect it accordingly from day one — retrofitting custody after launch is far harder.

4.6The shared cloud testnet

Two complementary targets, and the team should use both in sequence. Begin on a shared regtest node in the cloud for development velocity; add the public ZSA testnet for integration testing under realistic conditions before anything is user-facing.

TargetStrengthsTrade-offs · use when
Shared regtest
qedit/zebra-regtest-txv6
Deterministic; mines on demand (no block-time wait); resettable at will; full control over issuance and chain state; ideal for CI.Not representative of network conditions or other participants. Use for early dev, fixtures, and CI.
Public ZSA testnetShared, realistic, multi-party; closest proxy to mainnet behavior; surfaces sync, fee, and reorg realities.Less control; subject to testnet stability and resets. Use before user-facing milestones.

For CI and self-contained deployments, the tx-tool ships a Docker workflow with a documented persistence-volume layout and a host-network example, plus a multi-container recipe in its CI configuration and a prebuilt image on a public registry (gallery.ecr.aws/j7v0v6n9/tx-tool). A practical shared-testnet topology: one cloud-hosted Zebra regtest node, the base-layer service alongside it, and both developers pointing their local app builds at that service's API — with the exact same commit pins baked into the image.

4.7The asset registry & petname service

Because the chain stores only a hash of an asset's description and the protocol forbids wallets from displaying raw description bytes as a name, a name layer is mandatory infrastructure, not a nicety. The registry maps each asset_id to human metadata and an issuer attestation, and is consumed by wallets to resolve unknown assets safely.

  • Curated default list — a signed, versioned catalog of well-known assets (name, symbol, decimals, logo, issuer signature), shipped as a starting point and verifiable against each asset's issuer key.
  • Petname overlay — clients may add or rename entries locally, so a user's chosen label never silently collides with someone else's asset.
  • Verification gate — when a wallet receives an unknown asset, it resolves the description out-of-band and surfaces a clear "unverified asset" state until the user or a trusted registry confirms it. This is the anti-spoofing behavior the protocol is engineered to force.

4.8Observability & supply accounting

The supply indexer mirrors the node's global issuance state and exposes it via GET /supply/{id}. For products that gate value on supply, this becomes a proof-of-reserves surface: a bridge can publish, continuously and trustlessly, that the wrapped supply minted on Zcash never exceeds the collateral locked on the origin chain. The authoritative figure is always read from the node at a safe confirmation depth and treated as invalidated across reorgs; the mirror exists only to make reads fast.

05

Application Catalog

What the three primitives make possible

Everything below reduces to issuing an asset, moving it privately, and burning it — composed with off-chain logic, custody, and UX. This catalog spans ten domains and forty-plus concrete products, each annotated with why ZSA is the right substrate, the components a build needs, and an honest read on difficulty and risk.

▣ How to read each card

Why ZSA states the specific property that makes Zcash shielded assets a better fit than a transparent chain. Build lists the components beyond the base layer. The buildlow / buildmed / buildhigh pill rates engineering effort over the base layer; the RISK pill rates execution, trust, security, and regulatory exposure combined. A ★ near-term tag marks the most realistic early products given today's tooling.

5.1

Payments & Money Movement

The flagship use case: moving value with confidential amounts. The protocol is push-based and every send costs a small ZEC fee, which shapes what is and isn't practical.

Private Stablecoin Payments
PAY
Send and receive a USD-denominated shielded asset with amounts hidden on-chain — the "private USDC" experience.Why ZSA: confidential balances and transfers with a publicly auditable total supply; impossible to replicate on a transparent ledger.
Build: a stablecoin asset (§5.2) · payment UX · fee sponsorship
buildmedriskmed★ near-term
P2P Shielded Cash App
PAY
Consumer wallet for person-to-person transfers of any registered asset, with contacts and request flows.Why ZSA: Venmo-style social payments without exposing every transaction amount to the public.
Build: mobile wallet · note scanning · registry — gated by light-client maturity
buildmedriskmed
Merchant / Point-of-Sale
PAY
Checkout SDK and terminal that accepts shielded-asset payments, with confirmation webhooks and settlement reporting.Why ZSA: merchants see their own revenue; competitors and the public do not see customer-level volumes.
Build: payment-request protocol · webhook receiver · depth confirmation
buildmedrisklow
Subscriptions & Recurring
PAY
Scheduled recurring payments for SaaS or memberships.Why ZSA: recurring billing without a public record of who pays whom, how much, how often.
Build: scheduler · pre-authorized send mandates (protocol is push, so "pull" must be modeled as scheduled outbound)
buildmedrisklow
Streaming & Micropayments
PAY
Per-second or per-use value streaming for content, APIs, or compute.Why ZSA: usage-metered payments with private consumption patterns.
Build: batching/aggregation layer — per-tx ZEC fee + proving cost make naive micro-payments uneconomic; settle in batches
buildhighriskmed
Cross-Border Remittance
PAY
Send a stablecoin home; recipient cashes out via a local off-ramp.Why ZSA: remittance corridors where transaction privacy protects recipients and amounts from local surveillance.
Build: stablecoin · FX + cash-out partners · compliance per corridor
buildmedriskhigh
5.2

Stablecoins & Real-World Assets

Here the protocol is the easy part and the off-chain layer is the whole game. ZSA gives you mint, supply control, finalization, and auditable circulation; it gives you nothing about reserves, redemption, or legal standing. The rails are not the dollars.

Fiat-Backed Stablecoin
RWA
A USD/EUR stablecoin issued as a shielded asset, backed 1:1 by bank reserves, with mint-on-deposit and burn-on-redemption.Why ZSA: public supply provides continuous proof-of-circulation while holder balances stay private — a property regulators can audit and users benefit from.
Build: reserve custody & attestations · KYC on-/off-ramp · redemption ops · FROST issuance
buildmedriskhigh
Tokenized T-Bills / MMF
RWA
Yield-bearing shielded shares in a money-market or short-term treasury fund.Why ZSA: institutional holders gain position privacy while the fund proves outstanding shares against assets under management.
Build: regulated fund wrapper · NAV/yield distribution · securities compliance
buildhighriskhigh
Gold / Commodity Tokens
RWA
Each unit redeemable for allocated physical gold or a commodity claim.Why ZSA: private holdings of a bearer-like commodity claim with verifiable total issuance against vaulted reserves.
Build: vault custody & audits · redemption logistics · reserve attestation feed
buildmedriskhigh
Crypto-Collateralized Stable
RWA
An over-collateralized stablecoin minted against locked crypto, with liquidation on under-collateralization.Why ZSA: private stable balances — but liquidation logic fights privacy and needs trusted oracles.
Build: price oracle · collateral vault · liquidation engine (hard under shielding) · governance
buildhighriskhigh
5.3

Bridges & Interoperability

Bridging is where ZSA's design intent and its sharpest risks meet. The issue/burn pair maps perfectly onto on-board/off-board, and public supply gives trustless proof-of-reserves. But bridges are the most-exploited primitive in crypto, and the public/private boundary needs deliberate handling.

ORIGIN CHAIN (e.g. Ethereum) BRIDGE OPERATOR ZCASH · OrchardZSA Lock / Unlock Contract USDC held in reserve Relayer + FROST authority watches both chains Base Layer · wrapped asset issue / burn · public supply user locks user burns attest mint verify burn release PROOF-OF-RESERVES wrapped supply on Zcash ≤ collateral locked on origin on-board off-board
FIG 8   Lock-and-mint bridge. The public ZSA supply makes the reserve invariant — minted ≤ locked — continuously verifiable by anyone, which is the strongest argument for bridging to a shielded chain rather than away from one.
Custodial Lock-and-Mint Bridge
BRIDGE
Lock an asset on the origin chain; the operator mints a wrapped shielded version on Zcash; burning redeems.Why ZSA: auditable wrapped supply against locked reserves, with private movement once on-chain.
Build: lock contract · relayer · FROST issuance · reserve attestation · monitoring
buildhighriskhigh
Trust-Minimized Bridge
BRIDGE
Replace the trusted operator with light-client or proof-based verification of origin-chain locks.Why ZSA: same as above, without a custodial honeypot — but a substantial cryptographic build.
Build: on-chain light client / validity proofs · challenge logic · economic security
buildhighriskhigh
Wrapped BTC / ETH / USDC
BRIDGE
Shielded representations of major assets, usable across all the payment and DeFi products in this catalog.Why ZSA: brings external liquidity into a privacy-preserving environment; a private wBTC has no transparent-chain equivalent.
Build: a bridge (above) per source asset · registry entries · liquidity
buildhighriskhigh
Cross-Chain Settlement Rail
BRIDGE
B2B settlement layer that nets and settles obligations privately on Zcash, bridging in/out at the edges.Why ZSA: counterparties settle without revealing bilateral volumes to the market.
Build: bridges · netting engine · multi-party reconciliation
buildhighriskhigh
▲ Bridge deep-dive: the custody & privacy tension

Two structural issues deserve explicit design attention. Custody is the dominant risk: a lock-and-mint bridge concentrates value in the origin-chain contract, and history shows this is where catastrophic losses occur — mitigate with threshold custody (FROST), conservative mint limits, continuous proof-of-reserves, and circuit breakers, and prefer bridging into Zcash (where supply is auditable) over designs that obscure reserves.

Privacy interacts with redemption: mints and burns are public events while transfers are private, so the operator sees on/off-board flow but not what happens in between. Redemption flows must be designed so that proving "I burned, release my funds" does not force users to deanonymize their entire holding. Note the protocol's own caution against issuance schemes that demand redemption to a single fixed address — that pattern leaks linkage and should be avoided.

5.4

Payroll & Treasury

The most realistic first product class, because these are back-office flows that run server-side and do not depend on a polished consumer wallet. Privacy is a genuine feature here — salaries and vendor terms are sensitive by default.

Private Payroll
TREASURY
Pay employees in a stablecoin on a schedule, with individual salaries hidden on-chain.Why ZSA: confidential per-employee amounts — the single most-requested property for on-chain payroll — with no public salary ledger.
Build: scheduler · recipient address book · batch transfers · ZEC fee funding
buildmedrisklow★ near-term
Contractor & Gig Payouts
TREASURY
Mass payouts to large pools of contractors or creators, with per-payee privacy.Why ZSA: platforms pay thousands without publishing a rate card the whole market can read.
Build: bulk-disbursement API · CSV/again ingestion · status reporting
buildmedrisklow
Treasury Management
TREASURY
Hold and move organizational funds under multi-party control with approval workflows.Why ZSA: threshold-controlled treasury where balances and movements are not public, but spending is governed.
Build: FROST signing quorum · approval policy engine · audit log
buildmedriskmed
Expense & Reimbursement
TREASURY
Employee expense advances and reimbursements settled in a shielded asset.Why ZSA: reimburse without exposing individual claim amounts on a public chain.
Build: approval flow · payout integration · receipt reconciliation
buildmedrisklow
5.5

Issuance & Capital Markets

These products lean directly on issuance, finalization, and the registry — and inherit the heaviest regulatory exposure of any category. The protocol mechanics are tractable; securities law is the constraint.

Token Launchpad
MARKETS
Self-serve platform to create, configure, and distribute a new shielded asset — supply, decimals, finalization, vesting.Why ZSA: turns the issuance primitive into a product; finalization caps supply credibly and the registry solves naming.
Build: issuance UX · asset registry · vesting schedules · atomic-swap sale mechanism
buildmedriskmed
Private Equity / Cap Table
MARKETS
Represent company shares as a shielded asset with a confidential register of holders.Why ZSA: a cap table where ownership stakes are private to outsiders yet provably bounded in total.
Build: transfer-restriction logic · KYC gating · securities compliance · investor portal
buildhighriskhigh
Bond / Debt Issuance
MARKETS
Issue debt instruments with scheduled coupon payments to holders.Why ZSA: private holdings of a fixed-income instrument with auditable outstanding principal.
Build: coupon distribution engine · holder snapshot · redemption at maturity
buildhighriskhigh
Fundraising / Token Sale
MARKETS
Run a primary sale that swaps ZEC or a stablecoin for a newly issued asset.Why ZSA: atomic swaps (already demonstrated) settle sales trustlessly; contributor amounts stay private.
Build: sale contract via atomic swap · allowlist · jurisdictional compliance
buildmedriskhigh
5.6

Trading & DeFi

Atomic swaps are already working end-to-end, which makes private trading the most tractable DeFi surface. Pooled/AMM designs are far harder under shielding; order-book and OTC models that settle atomically are the pragmatic path.

Atomic-Swap OTC Desk
DEFI
Negotiated, large-size asset-for-asset swaps that settle in a single atomic transaction.Why ZSA: the swap primitive is demonstrated today; OTC trades settle without leaking size or counterparties to the market.
Build: swap orchestration · off-chain quote/match · settlement monitoring
buildmedriskmed★ near-term
Private DEX / Order Book
DEFI
An exchange with off-chain matching and atomic on-chain settlement of shielded assets.Why ZSA: trade without broadcasting positions; order-book + atomic settle avoids the privacy problems of on-chain AMMs.
Build: matching engine · settlement via atomic swaps · liquidity incentives
buildhighriskmed
Escrow & Conditional Payments
DEFI
Funds released to a recipient on agreed conditions or via a neutral arbiter.Why ZSA: private escrow for trades, freelance milestones, or marketplace settlement.
Build: escrow account logic · condition oracle / arbiter · dispute flow
buildmedrisklow
Collateralized Lending
DEFI
Borrow against deposited shielded assets, with liquidation on under-collateralization.Why ZSA: private positions — but the liquidation and oracle machinery sits in tension with shielding.
Build: oracle · collateral accounting · liquidation (privacy-constrained) · rate model
buildhighriskhigh
5.7

NFTs, Collectibles & Ticketing

An asset issued with supply 1 and then finalized is effectively a unique token; small finite editions extend the idea. The reference note can anchor a metadata pointer. The wrinkle: once issued, ZSA units transfer permissionlessly, so "non-transferable" credentials need explicit design.

Private NFTs / Collectibles
NFT
Unique or limited-edition digital items whose ownership is not publicly visible.Why ZSA: collect and trade without doxxing a wallet's holdings — private provenance for high-value items.
Build: supply-1 + finalize issuance · metadata registry · media hosting
buildmedrisklow
Event Ticketing
NFT
Issue tickets as finite-edition assets; validate at the door; control resale.Why ZSA: transferable tickets with issuer-side anti-scalping controls and private attendee lists.
Build: edition issuance · validation app · resale policy via issuer rules
buildmedrisklow
Membership & Access Passes
NFT
Token-gated membership for communities, software, or physical spaces.Why ZSA: prove membership without revealing identity or the full member roster.
Build: pass issuance · gated-access verifier · renewal logic
buildmedrisklow
Credentials & Certificates
NFT
Diplomas, licenses, or attestations issued to a holder.Why ZSA: holder controls disclosure of credentials rather than them living on a public ledger.
Build: issuer-controlled (non-transferable) design · verification portal · revocation
buildmedriskmed
5.8

Loyalty, Rewards & Vouchers

Closed-loop value where a single issuer mints, users hold, and redemption burns. Low protocol complexity makes this a friendly proving ground, with regulation rising as stored value starts to look like money.

Loyalty Points
LOYALTY
Brand-issued points earned and spent across a program, redeemed by burning.Why ZSA: a clean issuer-mints / user-holds / redeem-burns loop; private balances; finalize for a fixed-supply program.
Build: earn/redeem rules engine · merchant integration · point issuance
buildlowrisklow★ near-term
Gift Cards / Closed-Loop
LOYALTY
Bearer gift value redeemable with a specific merchant or network.Why ZSA: transferable, private bearer value with auditable total liability outstanding.
Build: issuance + redemption (burn) · merchant settlement · balance lookup
buildmedrisklow
Prepaid / Stored Value
LOYALTY
Reloadable prepaid balances for a platform or ecosystem.Why ZSA: private stored-value balances with a provable aggregate float.
Build: top-up rails · spend integration · stored-value compliance
buildmedriskmed
Rewards & Cashback
LOYALTY
Distribute rewards or cashback as a redeemable asset.Why ZSA: reward users at scale without publishing individual reward histories.
Build: distribution engine · eligibility rules · redemption
buildlowrisklow
5.9

Compliance & Enterprise

Zcash's viewing keys turn "private" into "private with selective transparency," which is exactly what regulated institutions need: confidential by default, disclosable to an auditor or counterparty on demand.

Auditable Private Settlement
ENTERPRISE
Inter-company settlement that is private to the market but fully disclosable to auditors.Why ZSA: selective disclosure via viewing keys gives confidentiality plus a compliance escape hatch in one system.
Build: viewing-key disclosure service · audit export · counterparty portal
buildmedriskmed
Proof-of-Reserves Service
ENTERPRISE
Continuously publish that an issuer's on-chain supply is fully backed by attested reserves.Why ZSA: public supply state makes the on-chain half of proof-of-reserves trustless and real-time.
Build: supply indexer (§4.8) · reserve attestation feed · public dashboard
buildmedrisklow
Selective-Disclosure Portal
ENTERPRISE
Let a holder share a scoped, verifiable view of their transaction history with a bank or regulator.Why ZSA: users disclose exactly what is required — nothing more — using incoming/outgoing viewing keys.
Build: viewing-key scoping · verifiable export format · access controls
buildmedriskmed
Compliant Regulated Stablecoin
ENTERPRISE
A stablecoin with issuer-enforced compliance — allowlisting, sanctions screening, disclosure.Why ZSA: private balances with issuer-side controls and auditor visibility — a regulator-acceptable privacy posture.
Build: allow/deny at mint · screening · viewing-key audit · legal framework
buildhighriskhigh
5.10

Niche & Emerging

A long tail where private, finite, auditable tokens unlock something specific. Several of these are strong differentiators precisely because privacy is the point.

Carbon Credits / Environmental
EMERGING
Tokenized carbon credits where retirement is a burn.Why ZSA: auditable total issuance and verifiable retirement, with private holdings between trades.
Build: registry integration · retirement (burn) records · verifier attestations
buildmedriskmed
In-Game / Gaming Assets
EMERGING
Player-owned items and currencies with finite, verifiable editions.Why ZSA: private player inventories and provably scarce items, tradeable across a game economy.
Build: game-server integration · edition issuance · marketplace
buildmedrisklow
DAO Governance · Private Voting
EMERGING
Token-weighted governance where holdings and votes are not publicly exposed.Why ZSA: vote weight derives from private balances — mitigating vote-buying visibility and coercion.
Build: private tally mechanism · snapshot of weights · proposal system
buildhighriskmed
Invoice & B2B Settlement
EMERGING
Tokenized invoices settled privately between businesses.Why ZSA: settle trade obligations without disclosing commercial terms to competitors.
Build: invoice tokenization · settlement flow · reconciliation
buildmedriskmed
Aid & Humanitarian Disbursement
EMERGING
Distribute aid directly to recipients with their amounts and identities protected.Why ZSA: protects vulnerable recipients from surveillance while giving donors an auditable total disbursed.
Build: recipient onboarding · disbursement engine · cash-out partners
buildmedriskmed
06

Prioritization & Roadmap

What to build, in what order, and why

Forty products is a menu, not a plan. Plotting them by strategic value against build complexity sorts the menu into quick wins worth doing now and big bets worth sequencing later — and the dependency structure dictates the order regardless of appetite.

6.1Value vs. complexity

BUILD COMPLEXITY → STRATEGIC VALUE → QUICK WINS BIG BETS LOW PRIORITY HEAVY / DEFER Private Payroll ★ Loyalty Points ★ Atomic-Swap OTC ★ Proof-of-Reserves Private Stablecoin Pay Token Launchpad Merchant POS Private NFTs Ticketing Escrow Fiat Stablecoin Custodial Bridge Trust-min Bridge Compliant Stablecoin Collateralized Lending near-term solid mid-term high-risk big bet
FIG 9   Strategic value against build complexity. The upper-left quadrant — high value, low effort — is where to start; the upper-right is worth pursuing but only after the base layer and a first product are proven.

6.2Dependency structure

Order is not purely a matter of preference — products depend on one another. The chain is:

  • Everything depends on the base layer. Issue/transfer/burn, key management, sync, and the registry are prerequisites for every single product in §5.
  • Payments, payroll, and loyalty depend on an asset existing. For payroll and payments that means a stablecoin (even a test one); for loyalty it can be a self-issued points asset, which is why loyalty is buildable earliest.
  • The launchpad depends on the registry and atomic swaps. It is mostly issuance UX plus the naming layer plus a sale mechanism — all of which the base layer already needs.
  • Bridges depend on custody and a relayer, and unlock the wrapped-asset family. Once a bridge exists, wrapped BTC/ETH/USDC and everything built on them becomes possible.
  • Compliance tooling (viewing-key disclosure, proof-of-reserves) is reusable across all of the above and is worth building early as shared infrastructure rather than per-product.

6.3Phased roadmap

Infra Base layer + registry First product (payroll / stablecoin) Bridge + wrapped assets Launchpad / DEX NU7 mainnet — external, uncertain M0M2 M4M6 M8M10 M12 relative timeline · months from kickoff (illustrative, not committed) P0 P1 P2 P3 P4
FIG 10   Phased roadmap. Phases overlap deliberately — base-layer hardening continues while the first product is built. NU7 activation is an external dependency that gates mainnet, not testnet work.
PHASE 0infrastructure

Stand up the environment

Pin the QEDIT stack, run the regtest node locally and in the cloud, reproduce the issue→transfer→burn scenario, and establish CI against a shared regtest. Exit criterion: both developers can transact ZSAs against the same node.

node + tx-toolCIversion pins
PHASE 1the base layer

Build the service & the registry

Wrap the builder behind the issue/transfer/burn API; implement key management, wallet/sync, the supply indexer, and the asset registry. Add the viewing-key disclosure service as shared infrastructure. Exit criterion: a stable API other code can build on.

service APIregistrykey mgmt
PHASE 2first product

Ship a real, narrow product

Pick one upper-left-quadrant product — private payroll or a private-stablecoin payment demo — and take it end-to-end. Back-office scope avoids the consumer-wallet gap. Exit criterion: a working product a design partner can use on testnet.

★ payrollstablecoin demo
PHASE 3bridge

Bring in external value

Build a custodial lock-and-mint bridge with FROST custody and continuous proof-of-reserves, unlocking wrapped assets. Highest-risk phase — gate it behind security review and conservative limits. Exit criterion: an audited bridge moving a wrapped asset on testnet.

bridgecustodyaudit
PHASE 4composition

Open the platform

With assets, a stablecoin, and a bridge in place, build the launchpad and a private DEX/OTC layer on the now-mature base. Exit criterion: third parties issuing and trading assets through the platform.

launchpadDEX / OTC
07

Concerns & Risk

The honest column

Three of these dominate and deserve naming up front: the tooling is alpha, the consumer wallet layer is immature, and mainnet activation is not guaranteed. None is disqualifying for building now — but each shapes what to build, how to insulate against it, and what to promise.

Activation uncertainty

ZSA's inclusion in NU7 is contested and subject to an active coinholder vote. Building on testnet is sound regardless, but anything that requires mainnet ZSA should be treated as gated on an external decision. Keep the base-layer abstraction portable so the products above it are insulated from how that decision lands.

The wallet / SDK gap

The node and Rust crates support ZSA; the light-client indexer and consumer wallet are still hardening. This is why the roadmap front-loads back-office products (payroll, treasury, settlement) that run server-side and defers polished consumer mobile/web wallets until the client stack matures.

Privacy is a boundary, not a blanket

Issuance, finalization, supply, and burns are public; balances and transfers are private. Most leakage risk lives at that seam — especially in bridge redemption and any flow that correlates a public mint/burn with a private holding. Design redemption to avoid fixed-address patterns, batch where possible, and minimize metadata.

Irreversibility of issuer keys

There is no issuance-key rotation and finalization is permanent. Custody decisions made at launch are effectively unchangeable, so threshold/HSM custody belongs in the design from the first mainnet asset, not as a later retrofit.

7.1Risk register

RiskLikelyImpactMitigation
NU7 activation slips or ZSA is excludedMedHighBuild on testnet; keep the service boundary portable; track the coinholder vote; treat mainnet as an optional milestone, not a dependency.
Alpha crates introduce breaking changesHighMedPin exact commit SHAs; isolate crate churn behind the service; run integration tests against the reference test vectors.
Consumer wallet / light-client immaturityHighMedSequence back-office products first; contribute to / track Zallet + Zaino; build bespoke scanning only where required.
Issuance-key compromise (no rotation)LowHighFROST / HSM custody from day one; documented finalize-and-migrate runbook; least-privilege key access.
Public/private boundary leakageMedMedAvoid fixed-redemption-address patterns; batch mints/burns; minimize on-chain metadata; user education.
Asset-name spoofingMedMedMandatory registry + verification gate; never render raw asset_desc; clear unverified-asset UX.
Bridge exploit / custody lossMedHighThreshold custody; mint caps + circuit breakers; continuous proof-of-reserves; external audit; prefer bridging into Zcash.
Regulatory action (stablecoin / securities)MedHighJurisdictional legal review; compliance hooks (allowlist, screening, viewing-key disclosure); avoid unregistered securities.
Fee / ZEC onboarding frictionHighLowFee sponsorship; seed dust ZEC at onboarding; abstract fees away from the end user.
Off-chain logic bugs (relayer / scheduler)MedMedAudit critical paths; monitoring and alerting; conservative timeouts and idempotency.
Proving cost / throughput at scaleMedMedBatch transactions; async construction; capacity planning; benchmark early on representative loads.
08

Conclusion & Next Steps

Where this leaves us

The three primitives we need are not speculative — they run end-to-end on testnet today, exercised by the reference tooling. The work is to wrap them in a durable service, solve the naming layer the protocol forces on us, and choose a first product that plays to the stack's current strengths rather than its gaps.

The strategic shape is clear from the value/complexity map and the dependency chain: build the base layer and registry first; ship a narrow, high-value, back-office product — private payroll is the strongest candidate — to prove the whole pipeline with a design partner; then sequence the higher-complexity, higher-value bets (bridges and the wrapped-asset family, then the launchpad and private trading) onto a foundation that has already earned trust. Throughout, treat custody, the public/private boundary, and mainnet-activation uncertainty as first-class design inputs, not afterthoughts.

◆ Immediate next steps

1. Stand up the qedit/zebra-regtest-txv6 node locally and on a shared cloud host; pin every crate to a commit SHA.   2. Reproduce test-orchard-zsa against it to confirm the issue→transfer→burn loop.   3. Scaffold the base-layer service API and lift transaction-building from the scenario pattern.   4. Decide the custody model (FROST vs HSM) before any mainnet asset.   5. Build the asset registry.   6. Choose and scope the first product.

A

Appendix & References

Glossary · constants · sources

A.1Glossary

TermMeaning
OrchardZSAThe protocol (ZIP 226 + 227) extending the Orchard shielded pool to support custom shielded assets.
AssetIdAn asset's identity: the pair (issuer key, hash of description). The on-chain identifier.
AssetDigestA 64-byte BLAKE2b digest of the encoded AssetId; an intermediate in deriving the AssetBase.
AssetBaseThe Pallas-curve point derived from the AssetDigest and carried inside every note of that asset.
isk / ikIssuance authorizing key / issuance validating key — BIP-340 Schnorr over secp256k1, on ZIP-32 path 227'.
Reference noteA mandatory value-0 note emitted on an asset's first issuance, providing a canonical anchor.
FinalizationA one-way flag that permanently forbids any further issuance of an asset.
Action groupThe OrchardZSA transaction component carrying shielded spends/outputs; required alongside issuance.
BurnDestruction of asset units, reducing the public circulating supply; the off-board primitive.
Viewing keyA key permitting read-only visibility into transactions — the basis for selective disclosure.
FROSTFlexible Round-Optimized Schnorr Threshold signatures — for splitting issuance/spend authority across a quorum.
regtestA local, deterministic single-node chain mode used for development and CI.

A.2Key constants

2⁶⁴−1
MAX_ISSUE — supply ceiling per asset
227'
ZIP-32 issuance key purpose (hardened)
ZEC
Mandatory fee denomination
v6
Transaction format (ZIP 230)
:18232
Regtest node JSON-RPC port
BIP-340
Issuance signature scheme (secp256k1)

A.3References