ZRC20 · zrc-20 standard● LiveZcash mainnetdeploy · mint · transferFair mintsKeys stay local
Specification · draft

How ZRC-20 works

ZRC-20 borrows its shape from BRC-20 on Bitcoin. The chain carries text and nothing else. Everyone replays the same operations in the same order and arrives at the same balance sheet. There is no contract, no gas, and no consensus change — Zcash itself never learns that a token exists.

deploy

one Zcash transaction

Claims a ticker and fixes its supply forever. The first valid deploy wins.

{
  "p": "zrc-20",
  "op": "deploy",
  "tick": "ZORD",
  "max": "21000000",
  "lim": "1000"
}
  • tick1–8 characters, case-insensitive
  • maxtotal supply in whole units
  • limmost that can be minted at once (defaults to max)

mint

one Zcash transaction

Issues units against a deployed ticker until the supply runs out.

{
  "p": "zrc-20",
  "op": "mint",
  "tick": "ZORD",
  "amt": "1000"
}
  • amtabove zero and at or under the per-mint limit
  • the last mint before the cap fills partially

transfer

one Zcash transaction

Moves a balance in a single operation — no commit-and-reveal step.

{
  "p": "zrc-20",
  "op": "transfer",
  "tick": "ZORD",
  "amt": "500"
}
  • amtmust be covered in full by your balance
  • the recipient is the address paid by the same transaction

How balances are counted

Operations are applied strictly in the order they land on-chain. A deploy for a ticker that already exists does nothing. A mint above the per-mint limit does nothing. A transfer larger than your balance does nothing. Operations that fail these checks are still shown here, but marked inert, so the history stays honest.

Where this differs from the draft

The published draft puts operations inside shielded memos that an indexer reads with a published viewing key. This app writes them transparently instead, because the wallet in your browser is a transparent one. Operations here are public and anyone can index them. Authorisation comes from the address that signs the transaction, exactly as BRC-20 works.