Coppice / names
implemented · exercised by conformance vectors · not yet deployed — production parameters TBD

Your Zcash address, but readable.

Coppice Names maps short .zec names to Zcash Unified Addresses — with no sidechain, no operator, and no consensus change. Registration authority stays hidden behind zero-knowledge proofs, and the 1 ZEC bond behind every name is always refundable.

alice.zec exact name Coppice Names verify locally u1abc…x9k unified address commit → reveal → refresh lineage a name in — a verified address out
01 — Protocol at a glance

A naming layer Zcash already knows how to carry

Coppice Names is an application protocol, not a new chain. Zcash consensus stays the sole authority for validity, ordering, and spentness; proofs establish hidden ownership; a deterministic reducer turns canonical history into state.

0
consensus changes, sidechains, tokens, or registry operators
1 ZEC
refundable bond behind every active name — owned by the registrant, never burned
~24h
between a name's operation windows (candidate profile; each window is 24 blocks)
~6 mo
lease started fresh by every accepted refresh, under the candidate block timing
02 — Why naming is hard on a privacy currency
Strangers must be able to resolve a name. Ownership must stay hidden. No operator can be trusted with the answers. Most designs let go of one.

A public registry publishes who owns what, and every update becomes identity data. A hosted resolver can hide records, but its answers are claims — a censorship and surveillance point. A consensus-level registry demands a network upgrade and hard-codes name policy into the chain. A mutable local index is only as honest as whoever edited it last.

Coppice Names keeps the chain as the only authority, hides authority behind proofs, and buys speed with local evidence instead of trust.
03 — How it works

Commit, reveal, refresh, release

Bulletins ride inside ordinary Orchard transactions on Zcash. Zero-knowledge proofs carry the private relations; deterministic replay of the canonical chain decides everything public.

commit

Pledge in secret

A commitment hides the name, the target epoch, and the owner. Mempool watchers learn nothing, and a commit is not a reservation.

reveal

Claim in the open

Inside the name's daily window, a proof-carrying reveal opens the commitment and creates the 1 ZEC bond note. Canonical order decides competing claims.

refresh

Update and renew

Changing the address and renewing the lease are one operation — same hidden authority, full new lease. Transfer to another key is impossible by construction.

release

Spend the bond

No release bulletin exists: releasing is an ordinary spend of the bond note. The name then sits out one epoch of cooldown before anyone can claim it.

block height → name window — 24 blocks first canonically valid wins c c+M c+T mature and unexpired: usable by a REVEAL the referenced COMMIT must satisfy M ≤ r − c < T
Hidden ownership

The key that controls the record is never published

Every accepted operation proves, in zero knowledge, that the same hidden Orchard authority controls the bond before and after. The proof is fixed: Halo2 over the Pasta curves, bound into the deployment's verifier identity.

Deterministic state

Every resolver computes the same answer

Lifecycle, lineage, windows, and conflicts come from replaying authenticated Zcash history through one reducer. Two honest resolvers at the same tip cannot disagree — and a proof-valid note can never silently replace accepted state.

04 — Privacy

Hidden by construction, public by necessity

A naming protocol must publish enough for strangers to resolve names. Coppice Names publishes exactly that — and nothing about who holds the keys.

Stays hidden

Authority and note plaintexts

The per-name spending authority is never published. The commit's opening — name, epoch, owner, secret — is visible only to the owner until the reveal. Bond notes are ordinary shielded notes.

Necessarily public

Name, address, schedule, lineage

After the reveal, the name and its Unified Address are public, and operations for one name are linkable. That is the price of resolution without an operator — stated plainly, not hidden.

Lookup privacy

Resolving without asking

Wallets acquire canonical evidence during ordinary synchronization, so resolving a name needs no name-specific remote query — nobody learns which name you looked up.

After termination

A visible gap before reassignment

After expiry or release, the name resolves to nothing for a full epoch of cooldown. Users get a deterministic warning interval before a different record could take the name.

05 — Resolution without a trusted index
A provider answer is never protocol evidence. Resolution replays authenticated history locally.

The wallet retains a rolling window of compact chain evidence during ordinary synchronization and reuses the commitment-tree facts it already maintains. Resolving any exact name then touches only that name's scheduled windows plus one referenced historical commit — not the whole chain, not a third-party API.

Speed comes from derived local evidence, never from promoting an index into authority.
1.85s
measured in-memory replay of a 250,000-block, 688,370-action workload (production path)
99.2%
reduction versus the duplicate-tree reference path on the same workload (239.5 s)
0
unrelated full-transaction fetches during exact resolution, by design
~143MB
rolling compact evidence for a six-month horizon in the measured baseline

Replay benchmarks are isolated in-memory measurements, not end-to-end latency promises; network acquisition, persistence, and live proof workloads remain to be qualified. See the whitepaper's performance section.

06 — Economics

A refundable bond, not a rent

Holding a name costs capital, not fees to an operator. Nothing is burned, nothing is levied, and the two costs of using the protocol play different roles.

CostWhat it isWhere it goesWhat it prices
Bondexactly 1 ZEC per active name Refundable capital locked in the record's own shielded note Back to the owner on release, minus the transaction fee Holding a name active
Transaction feesnormal Zcash policy Ordinary fees for publishing commit, reveal, refresh, and release transactions Miners, under Zcash fee and relay policy Publishing an operation at all

A fixed bond does limit accessibility as ZEC's purchasing power changes — a deliberate, documented limitation.

07 — Status

Built, verified, not yet deployed

The protocol, circuits, reducer, and wallet integration are implemented and pinned by conformance vectors with independent consumers. What remains is assurance and deployment work — listed, not hidden.

Done

Implementation and conformance

Protocol construction, deterministic reducer, REVEAL and REFRESH circuits, exact-name resolver, wallet integration, and a positive conformance artifact verified by independent Rust and Python consumers.

In progress

Independent review and qualification

Formal security definitions and proof sketches, independent cryptographic review, complete adversarial test coverage, and end-to-end deployment qualification are open work. Production parameters and activation height are TBD.

Read the details ↗