Skip to main content

Architecture Details

Crate Details

zns-types -- Core types and validation

ComponentDetails
Name validation3-63 chars, a-z, 0-9, hyphens. No leading/trailing/consecutive hyphens.
Fee calculation3-4 chars = 1 ZEC, 5-7 chars = 0.1 ZEC, 8+ chars = 0.01 ZEC
Memo parsingREGISTER (7 fields, pubkey + signature), BUY (7 fields, escrow format). UPDATE/TRANSFER/LIST/DELIST rejected on-chain.
Ed25519 signatureverify_ed25519_signature(), validate_pubkey_hex(), validate_signature_hex() in signature.rs
Transaction typesTxid, ZnsTransaction, ChainBlock, TransactionTarget (Registrar/Escrow)

zns-chain -- Blockchain data sources

ComponentDetails
ChainSource traitget_latest_height(), get_blocks(from, to)
MockChainSourceIn-memory simulator with tx injection, block mining, escrow tx injection
LightwalletChainSourcegRPC to lightwalletd, dual-UFVK scanning (registrar + escrow)
Trial decryptionSapling and Orchard output decryption
Registrar keysDeterministic from SHA-256("ZNS Registrar v1 - Zcash Naming Service")
Escrow keysFrom ZNS_ESCROW_SEED, retains spending key for payouts

zns-scanner -- Transaction processing engine

ComponentDetails
SQLite DBTables: scanner_state, registrations, operations_log, listings, escrow_payouts, escrow_refunds
REGISTER handlerValidates name, checks not taken, verifies Ed25519 signature, checks fee
Escrow BUY handlerValidates listing, price match, payment amount. Queues payout/refund.
Scanner loopAsync polling (5s), persistent state across restarts
Transaction routingRoutes by (operation, target): REGISTER->Registrar, BUY->Escrow
Deterministic orderingSame-block transactions sorted by txid

zns-api -- REST API server

EndpointMethodResponse
/v1/resolve/{name}GET{name, address}
/v1/names/{name}GETFull details (owner, txids, listing, nonce)
/v1/owner/pubkey/{pubkey}GETAll names owned by pubkey
/v1/statusGET{scanner_height, chain_height, total_registrations}
/v1/marketplace/listingsGETAll active listings
/v1/marketplace/listing/{name}GETSingle listing details
/v1/escrow/payoutsGETPending seller payouts
/v1/escrow/refundsGETPending buyer refunds
/v1/names/{name}/updatePOSTSigned address update
/v1/names/{name}/transferPOSTSigned ownership transfer
/v1/names/{name}/listPOSTSigned marketplace listing
/v1/names/{name}/delistPOSTSigned delisting
/v1/names/{name}/confirm-salePOSTSigned atomic sale
/debug/submit_memoPOSTInject tx (mock only)
/debug/mine_blocksPOSTAdvance chain (mock only)
/debug/inject_escrow_txPOSTInject escrow tx (mock only)

zns-wallet -- CLI wallet tool (identity, signing, escrow commands)

Test Coverage

112 tests pass:

CrateTestsCoverage
zns-types46Name validation (14), memo parsing (22), transaction types (4), Ed25519 (6)
zns-scanner24DB CRUD (12), processor logic (12)
zns-chain8Mock chain (3), registrar keys (2), escrow keys (3)
zns-api20Marketplace flow (10), signed ops (10)

Run: cd zns && cargo test --workspace

Dependencies

DependencyVersionPurpose
zcash_client_backend0.21lightwalletd gRPC, block scanning
zcash_primitives0.26Transaction parsing
zcash_keys0.12Key derivation, unified addresses
zcash_protocol0.7Consensus parameters, memo types
zcash_note_encryption0.4Sapling memo decryption
sapling-crypto0.5Sapling trial decryption
orchard0.11Orchard trial decryption
axum0.8HTTP API framework
rusqlite0.32SQLite database (bundled)
tonic0.14gRPC client for lightwalletd
ed25519-dalek2Ed25519 signatures