Shielded OrdinalsHow it works, illustrated

SHORD: Private Holdings, Public Proofs

A Bitcoin-native privacy protocol

← Swipe to see the whole street →

Start here|What SHORD is, and what you actually hold

SHORD is a privacy protocol on Bitcoin: the art stays public, who holds which piece does not. What you hold is a note recording which piece and whose it is; the chain keeps only its fingerprint, the readable note and the keys stay in your own vault, and only your key can spend it.

In the plate

  1. Your vault, on your device: keys, readable notes, proofs.
  2. The envelope: every action rides in a Bitcoin transaction; for the art, in its OP_RETURN (the sign).
  3. The blocks: Bitcoin's record, in order, open to all.
  4. The indexer: checks envelopes by SHORD rules and keeps the ledger; 9F3A on its screen is the ledger's digest (chapter 08).

An ordinary Ordinal belongs to whoever holds the address it sits in, for anyone to see. SHORD parks the art at a NUMS address nobody can spend from and keeps who holds it in notes; in the project's words, "The art of every piece is public. Who holds it is not." Bitcoin checks only the BTC transaction and indexers work out the SHORD ledger by its rules, so a transaction Bitcoin has confirmed can still be rejected by SHORD. The examples in this guide are Shielded Nakas (NAKA) and SHNAKAS, the rune mined by holding one.

Public on chainNot visible on chain
The art and where it sitsWhich piece is whose
A SHORD transaction, its nullifier and ciphertextWhich note was spent, and to whom
A listing's number, price, payoutThe keys and notes in a vault

WarningThe signature your wallet makes to open the web vault yields every key of the vault. Never give it to anyone (chapter 01).

Card 00One private send: where each thing comes from and livesThing · useVaultsBitcoin blocksIndexerKeysspend, readmade from theseed, stay herenever on chainnevertouches themReadable notewhich piece, whosesender makes it,receiver opens itnever on chaincan't read itCommitment cmpublic fingerprintthe sendercomputes itin the envelopeadds it tothe treeCiphertext ctreceiver reads itto the receiver'sview keyin the envelopekeeps itfor scansNullifier nfno double spendcomputed to spendthe old notein the envelopelists itas spentProof πthe send is validthe sender makesit on devicein the envelopechecked, not keptin the ledgerIndexer column: all from the blocks; same chain, same rules, same ledger
Open the card full size

Technical notesThe cards are for checking; skip them and the story still reads. This one follows a private send; in a mint, purchase or claim the receiver makes the new note, the indexer completes its commitment, and no proof is carried. Where the proof parameters come from is in appendix D.

02

Vault|What holding rests on, where the keys come from

Holding means having the keys: whichever note your vault's keys can spend, that piece is yours. A web vault's keys all come from one signature by your wallet, so that signature amounts to the whole vault.

In the plate

  1. The official site: one signed message opens your vault.
  2. The signed sheet: the signature becomes the vault's seed.
  3. Its shadow is a bunch of keys: every key comes from the seed.
  4. The copy, off by the red 0: sign there and it has the keys.
  5. The phone: the seed as 24 words (not a wallet's seed phrase) opens the same vault in the Shielded Vault.

The keys need no backup. Sign again on any device with the same wallet, account and address type and the same vault opens; anything else opens a new, empty one. The notes are in envelopes on chain and the vault finds them by scanning with its keys; for now only the site's indexer lists them all, and the project says the new version will be open source, so your own indexer could too (appendix H).

The shielded address shord1… also comes from the seed and is fine to give out: the site says it is “only needed when someone sends you a piece directly”, and buying and selling don't use it.

The signing box says “Anyone with this signature can move your shielded pieces.” The signature computes the whole vault, which holds not only the pieces but the vault's BTC and the notes you have received.

MythSigning a message without sending money can't cost me anything.

FactThis signature is every key to your vault. Sign it only on the official site, and give it to no one.

Card 01One signature, every keyYour wallet signs this fixed messageOrd Dropz shielded vault key v1 …seed = SHA-256("shord/seed/v1" ‖ sig)Same sig, same vaultsame wallet and accountand same address typeelse a new, empty vaultthe seed gives every key and addressSpend keyspendspends notesView keyviewreads notesReturn keyreturnreclaimsPayout keypayoutper listingVault BTCbtcBTC, changefrom the seed aloneseed + listing nullifierseed + a numberLeaked signature = vault handed overpieces moved, the vault's BTC taken,every piece you have held seenYour wallet's own BTCisn't in itits key stays secret
Open the card full size

Technical notesOn the card, ‖ joins two pieces end to end. Every key is SHA-256(a fixed label ‖ seed …), with labels such as shord/spend and shord/view. The phone's 24 words are this 32-byte seed plus a checksum byte. The shielded address shord1… is the owner key Poseidon(sk) followed by the view key; neither reveals a private key, so it can be given out.

03

Issuing|Rules in the parent, and who gets the mint money

One parent inscription holds a collection's supply, prices and payout addresses. Mints pay by these rules, the indexer checks them, and what doesn't match doesn't count.

In the plate

  1. The tablet: the parent, carved with NAKA's supply and prices.
  2. The mint: A pays, note in hand, and spends a permit coin.
  3. The split: the artist 15,000; the relay its fee and 3 credits.
  4. After: a later tx inscribes the piece as a child, parked at NUMS.

The indexer checks three things in a mint. The number is within supply and not yet minted. Each payout script gets at least what the rules ask; paying more is fine. The tx spends a permit coin, and NAKA's permit coins only the platform can sign. With all three in place the indexer accepts the mint. The minter's vault builds the new note and the indexer completes its commitment.

With the site's default a mint comes with 3 relay credits and costs 25,500 sats, plus the miner fee; the card shows who gets each part. Each credit pays the official relay for one private send, listing or cancel (chapter 04).

NAKA's art isn't on chain up front: the parent holds no pictures, only a hash tree root over every file, and each picture is inscribed after its mint. The parent goes to NUMS after the last child, and then nobody can add one; on 28 October it wasn't there yet (appendix G). The SHNAKAS rune has its own etching and isn't in this parent (How mining works).

MythThe rules are a website setting the project can change at will.

FactThey're carved in the parent inscription for good, and no website setting can change them; the indexer reads only that parent on chain.

Card 02Rules in the parent, payments checked against themParent inscription · the rules on chain (NAKA, in sats)PiecesSupply 3,333File tree root artRootMintMint price 15,000Inscribe fee 3,000Platform fee 0Relay, saleRelay credit 2,500 eachSale fee 2%, at least 1,000KeysMint permit key gateKeyListing lock key lockKeyPayoutsArtist, platform and relay scripts; NAKA: artist = platformThe indexer reads the rules from the parent's transaction, not a websiteMinting one piece (MINT)15,000 → artist3,000 inscription fee → relayDefault 3 × 2,500 → relayPlatform mint fee 0Total 25,500, miner fee extraThe tx spends one permit coinSelling one piece (BUY)Price → seller2%, at least 1,000 → platformPaid by the buyer on tope.g. 100,000: buyer pays 102,000No royalty on NAKAThe tx spends the listing lock
Open the card full size

Technical notesThe collection id in each envelope header is the first 8 bytes of the SHA-256 of the parent's inscription id, and the indexer takes only envelopes carrying it. A permit coin is a Bitcoin output locked to the platform's permit key; each mint transaction spends one, and a batch of up to 20 pieces also spends just one.

04

Storage|Where the art is, and what you bought

What you buy isn't the picture but a note. The picture, once inscribed, sits at the NUMS address where nobody can move it; a change of hands changes the note, never the picture.

In the plate

  1. The art in the NUMS gallery: anyone sees it, nobody takes it.
  2. The keyless lock: this address holds all 3,327 NAKA pieces; no one knows its key, and it has no script (appendix G).
  3. A's note says #4: it points at that piece, which stays in the gallery.
  4. CM on top of the blocks: the note's commitment.
  5. SHNAKAS: the 21 million runes sit at this address too.

The note records which piece, how many relayed actions are left (chapter 04) and whose it is (the owner's public key), plus two random values, ρ and the piece secret s, unrelated to the image.

The note itself never goes on chain. Its fingerprint does, the commitment, which the random values keep from showing the piece or the owner; indexers collect every commitment into a record tree, a public list of every note there has been. A fingerprint can't be turned back into a note, so each comes with a ciphertext locked to the holder's view key; the readable note stays in the vaults that make and receive it.

A mint, purchase or claim shows the number anyway; a private send doesn't, and afterwards outsiders can't tell which piece the new commitment is or whose.

SHNAKAS works the same way: a pouch is a note numbered by pouch, its amount public against that number, so anyone sees what it holds but not whose (How mining works).

MythWhen I buy a NAKA, the image moves into my wallet.

FactThe art stays at the NUMS address. An ordinary wallet won't show it; your holdings are in the SHORD vault.

Card 03One note; on chain, only its commitment and ciphertextWhatThe note: readable only in a vault, never on chainPieceassetIdCreditsticketsOwner keyownerPkRandomρPiece secretsHowinner = Poseidon(ownerPk, ρ, s)cm = Poseidon(assetId, tickets, inner)= commitment: a leafct = Enc(assetId, tickets, ρ, s)= ciphertext (view key)Private send: the sender's vault computes cm and ct, and adds a proofMint, buy, claim: receiver gives inner, ct; indexer computes cmWhereEnvelopecm or inner, plus ctBitcoin blockpublic for goodthe tree takes only cm: a leaf
Open the card full size

Technical notesThe record tree is 20 levels deep, holds up to 1,048,576 notes and only grows: each new note adds a leaf, and a spent note's leaf stays. A spend's proof rests on a tree root from the last 100 blocks and shows only that the note is in the tree, not which leaf; whether it was already spent, the indexer checks against the nullifier list (chapter 04).

05

Transfer|A private send, and what the chain shows

Anyone can check that a private send is valid and its note not spent twice, but not which note was spent or who got it.

In the plate

  1. The old note, crossed out: void once the send is accepted.
  2. The envelope: in the newest block, the car with the letter.
  3. The spent list: first digits, red is new; a repeat is refused.
  4. B's key: the view key opens the ciphertext; a new note appears.

A sends #4 to B's shielded address (shord1…) or name (bob.naka, appendix J). A's vault computes the old note's nullifier, writes B a new note encrypted to B's view key, and proves the old note is in the tree and A's and the new one is the same piece, never saying which. A pays the miner fee to send it, or the official relay sends it for one relay credit or the site's prepaid relays (chapter 08, appendix I04).

Only once the proof checks out and the nullifier is new does the indexer record it and add the new commitment to its tree, so a second spend is refused; and since no one can match a nullifier to a leaf, no one knows which note was spent. B's vault opens the ciphertext; once its commitment matches the tree's, the note is B's. The ciphertext is written to B's view key: A's vault writes it by the rules, and B's vault opens it at the next scan (appendix H).

A whole SHNAKAS pouch is sent just like a piece. Giving part takes two steps: split it into 2 to 16 pouches, then send one. A split shows the pouch number and new sizes, not whose they are (appendix I07).

A private send collects no money, so in a trade whoever goes first trusts the other; to swap both at once, use a listing (chapter 05).

MythA private send hides everything, even that I sent it.

FactThe chain shows a note was spent and, if you paid the fee yourself, which wallet sent it.

Card 04A private send: one envelope, each part to its placeA's old note · #4✗B's new note · #4Nullifier nfA's spend keyCommitmentB's owner keyCiphertextB's view keyProof πin A's vaultHeadnf · 32 Bcm' · 32 Bepk + ct · 120 Bπ · 256 BIndexerspent listIndexerinto the treeB's vaultdecrypts itIndexerchecked onlyAll four in one OP_RETURN envelope (public v1 format, 462 bytes)Not to scale; not drawn: tree height 4 B, credits spent and bought 1 + 2 BProof π: old note in tree, A's key, same piece, not which; binds the bodyNothing is recorded until all checks pass; #4 is only in the two vaultsPouch split: SPLIT envelope, in the witness; pouch number, sizes public
Open the card full size

Technical notesThe indexer never marks the old leaf spent, because that would tie this spend to the transaction that made the leaf. It records a nullifier instead, worked out from ρ and the owner's spend key. Leave out the key and private sends give themselves away: the new note's ρ comes from the old nullifier, which is public, so anyone could compute the new note's nullifier in advance and, note after note, chain every move of the piece.

06

Trading|What a listing reveals, and the platform's role

A NAKA listing shows number, price and payout; a lock decides where the piece goes. The platform holds the key: it can close the listing, not take the piece or the money.

In the plate

  1. The price tag: number and price in a block, for all to see.
  2. The lock: a 330-sat output, its key on the platform's board.
  3. The buyer: price to the seller, plus 2% (at least 1,000 sats).
  4. The hourglass: the seller's way out after 1,008 blocks.
  5. CLOSED: lock spent, no sale; the seller must claim it.

A listing (LIST) gives up the seller's nullifier and makes the lock in the same transaction. Once it's accepted the piece has no spendable note; how the lock is spent decides the next one (next page).

The payout address can be a vault address, the wallet or one typed in (bc1p, bc1q and 3… have all sold); the price must clear its dust limit.

A purchase (BUY) spends the lock and pays in one transaction, and the buyer makes the new note. The platform signs the lock only for a correct payment, the protocol document says: at 1,000,000 sats the seller must get at least that and the platform at least 20,000, or the indexer rejects the purchase.

A cancel (CLAIM): the platform spends the lock and the seller signs the reclaim with the return key, in one transaction if they like. Without the platform, the seller can spend the lock alone at 1,008 blocks. A lock spent with no sale closes the listing, and the seller can claim it straight away, with no 1,008-block wait.

MythA confirmed payment means a completed purchase.

FactThe payment goes into a block, then the indexer checks it against the listing; it's a sale once accepted and the new note is in your vault.

Card 05One lock, three ways outSeller's noteLISTListing record + lockthe seller's note is spent · number, price public · art at NUMSBuyer pays in fullplatform signs onlya correct paymentBuyer's new noteBUYCancel via the platformseller signs theclaim, same tx allowedSeller's new noteCLAIMWay out: 1,008 blocks onseller spends italone, then claimsSeller's new noteCLAIMWho can spend this lockplatform key: any timeseller: after 1,008 blocksthe note returns by CLAIMLock spent, no sale: the listing closes; the seller claims at onceThe price goes to the seller's address; the buyer adds 2% (at least 1,000 sats)
Open the card full size

Technical notesThe lock is a P2TR output with two ways to spend it: the platform's key by the key path, at any time, and the seller's return key by the script path, once the lock is 1,008 blocks old. Spending it gets the platform only the sats inside (330 in every lock the official relay builds; the protocol sets no amount). The piece comes back only with a claim signed by the return key, which comes from the seller's seed and this listing's nullifier, so the platform can't derive it.

07

05 Trading · continued

Ownership flow|Transactions and envelopes

The last page showed a listing's three ways out; this one walks #4 from mint to sale, then shows why a mempool envelope can't be changed and who can stop a purchase before it's mined.

This is NAKA's on-chain listing. Others now list off chain until the sale; on 27 October the project said Nakas won't change.

Flow 01#4 from mint to sale: each transaction and envelopeMint · MINT envelopeCarries the number, A's inner and ciphertext; spends a permit coinA's notePrivate send · TRANSFER envelopeGives up A's nf (spent); carries B's cm, ciphertext, proofB's noteListing · LIST envelopeGives up B's nf; carries number, price, payout, return key, proofSame tx makes the lock (330 sats)Listing record: no spendable note meanwhileNumber · price · payout script · return key · lock positionPurchase · BUYSpends the lock (platform signs)Carries C's inner, ciphertextPays the price, plus the feeCancel or claim · CLAIMLock: platform or 1,008 blocksCarries B's new inner, ciphertextSigned with the return keyC's note (sold)B's new note (back)Lock spent without a valid purchase: the listing closes, the seller claims laterThe listing id is the nf given up at listing; the lock records no ownership
Flow 02An envelope in the mempool: readable, not changeableNullifier, proof, price and payout script are public: three ways to tamper① Edit the envelopeSwap receiver, pricecm, hbody are publicinputs; redo needs skProof fails, rejectedOld note still good② Race it as isCopy into another txBoth may be mined;the earlier countsSame resultLater nf repeats③ Swap in a purchaseNo proof; spends lockPlatform signs one txA lock spends onceCan't be rewrittenOne purchase at mostRedo a proof: spend key. Sign a claim: return key. Both stay with the holderSends, listings, claims can move as is; buy and mint signatures fit one tx

Before a purchase is mined, who can stop it

WhoHowResult
BuyerBefore it confirms, spends the same input again in a higher-fee transaction (RBF)If that confirms first, the purchase can't be mined and the listing stays; the buyer pays only the new fee
PlatformSpends the listing lock first with its keyIf that confirms first, the purchase can't be mined and costs the buyer nothing; the listing closes and the seller claims
SellerCan't before the lock is 1,008 blocks old (a cancel needs the platform); after that, can spend the lock and race the purchaseWhichever confirms first: the seller's closes the listing and reclaims; the purchase's sells
Anyone elseCan't change your envelope (chart above); racing for the same listing takes another purchase the platform signedA lock spends once: at most one purchase succeeds
A minerLeaves the purchase outOther miners may still mine it
08

Proving|Holding proofs, and what each one gives away

The vault makes the proof; note and keys stay home. Uses differ in where it goes and whether the note moves: votes go to the vote service, Prove to the site, the note untouched; a base reward claim goes on chain and renews the note.

In the plate

  1. The proof card: all #46 hands over; the note stays in the safe.
  2. The checklist: SNAP (in the snapshot), VALID (proof holds).
  3. The ballot box: choice and proof go to the vote service, off chain.
  4. The tag board: the vote service's public log, a row per vote.
  5. The listing: #4 listed later; its nullifier matches the red row.

Votes follow a snapshot: each NAKA held at its block gets one, even if sold later. The proof uses the spend circuit but spends nothing; each published vote carries a tag made from the nullifier, so anyone can check the tally. The tag matches nothing until the note is spent; a listing then shows the number too.

Snickets can vote too, no NAKA needed: no proof, the vault just signs for the platform, and Snickets voted don't come back (appendix I06).

A base reward claim goes on chain: the envelope turns the old note into a new one plus a SHNAKAS pouch, nullifier and commitment public, piece hidden. The bonus is a separate signed envelope showing the number; late and batch claims in appendix I06.

The Prove button runs another circuit, the holder proof: it goes to the site's verifier, your wallet as claimant, showing only a root, an event id and a de-duplication mark, not even the nullifier. It shows the note is in the tree, not that it is unspent: a sold note's leaf stays, so the newest root still proves it.

MythVoting or pressing Prove spends my NAKA.

FactNeither touches the note or the chain; a base claim renews it, and mining carries on (chapter 07).

Card 06Three uses, and what each hands overSite votespend circuitProvesAn eligible note held at the snapshotHands overChoice and proof, nullifier insideThe noteNot spent, not on chainEdgeOnce spent, its public tag shows the voteBase rewardspend circuitProvesA week-long note is in the eligibility treeHands overOn chain: nullifier, new commitment, proofThe noteNormal claim: spent, replaced by a new oneEdgeNumber hidden, nullifier publicHolder proofholder circuitProvesI know a tree note's data and its keyHands overProof and claimant, via the Prove buttonThe noteNot spent, not on chainEdgeDoesn't check it unspent: old leaves stayThe bonus is a separate BONUS envelope: a signature, no proof, number publicTally and tags match the public log; proofs aren't public, eligibility only sampled
Open the card full size

Technical notesThe holder proof's de-duplication mark is Poseidon(s, context, 13). The context comes from the collection, purpose and claimant, so a piece proves once per event, and with the claimant inside, a copied proof is no use to anyone else. A vote's tag is a different thing, made from the nullifier, topic and round: it is where the match above comes from.

09

Mining|Holding a NAKA mines SHNAKAS; why a transfer breaks the week

SHNAKAS pays by whole weeks of 1,008 blocks: a note held from a week's start to its end earns that week's share. Shares wait on the books until a claim makes them pouches.

In the plate

  1. A bell post every 1,008 blocks; between two of them is week 3.
  2. The transfer: A's letter lands mid-week, where B's note starts.
  3. The crossed-out coins: week 3's share, for neither A nor B.
  4. C and the chest: held all week; a claim collects the share.

The plate shows chapter 04's transfer, confirmed mid-week 3: A's old note is spent in that block, short of the week's end; B's new note starts there, not at its start; so week 3 counts for neither. Earlier weeks stand: A keeps weeks 1 and 2, and B counts from week 4.

Listing, cancelling and sending to yourself (adding relay credits is one) spend the old note and break the week too. A base claim spends it too, but the same transaction returns the piece to your vault and the indexer adds the new note to that week's tree, so mining goes on. Bonuses, repricing, votes and holder proofs don't touch it.

Eligibility says whether a week counts, the weight how much: 100% to start, extra for a high trait floor or a low number, up to 400%. The rules are on chain, so anyone gets the same figures (appendix I07); the Naka Sigil extension shows each piece's week. Listed and unminted pieces hold shares nobody can claim.

Shares can pile up unclaimed; the base needs no number, the bonus needs it shown. Rewards run to block 1,050,324 and claims stay open 52 weeks more, to 1,102,740; the next page follows a claim.

MythList or sell, and your full weeks are gone too.

FactFull weeks stay claimable, even after a sale; listed weeks earn nothing, and earning resumes after the reclaim.

Card 07A week is 1,008 blocksWeek 1Week 2Week 3Week 4971,700972,708973,716974,724975,732✓ counts ✗ notA's old noteB's new noteC's note✓✓✗✗✓✓✓✓✓the transfer confirms in this blockA week is yours if you held from its start until after its endExcept: a new note from a reward claim keeps the week1,008 blocks, 266,640 a week, 78 weeks; week 3 is blocks 973,717–974,724
Open the card full size

Technical notesEligibility is just two block heights: the block that created the note is no later than the week's start, and the block that spent it is after its end (or it's unspent). Weights follow the listings every block, so a trait floor's change moves the bonus. The weeks' block ranges are in appendix E.

10

07 Mining · continued

How mining works|From etching to pouches

The shares saved up on the last page become pouches only when claimed. In SHORD, SHNAKAS is a collection of numbered pouches, each one exact amount, not pieces; the 21 million runes went to the NUMS address at the etching and never move, and pouches don't turn back into them. Flow chart 03 follows one claim.

Flow chart 03One claim: how a share becomes a pouchEtching transaction · block 970,251All 21 million SHNAKAS go to NUMS (a premine, in rune terms)Nobody can spend from it, so these runes never move againRules inscription · SHNAKAS, a rune collectionNames the etching; a collection of numbered pouches, one amount each3 fixed pouches and 78 weekly pools: 20,798,160, under 21 millionStart of each week · the eligibility treeThe indexer makes the week's tree from NAKA notes held at its startNotes a claim gives back that week join this treeClaim · REWARD envelopeProof: in this week's treeNullifier unseen: never spentSame tx: new note, mining goes on100% base share, a new pouchOptional · BONUS envelopeNumber shown, signed, note unspentOne more pouch for the bonusShares nobody can claimListed: no spendable noteUnminted: there is no noteAfter block 1,102,740: no claimsNo pouch: never issuedThe 201,840 left unassignedwill never be issued eitherPouches: amount public, holder private; split, send, list or burnPouches don't turn back into the runes at NUMS, which stay put either wayA normal claim; late claims and several weeks at once: appendix I07

How the totals add up

The flow chart follows one claim; all claims together, set beside the ceiling and the rules, make this table. The ceiling was fixed at the etching, each week's pool is in the on-chain rules inscription, and the issued total adds up the pouches in the site's ledger.

FigureWhere it comes fromSHNAKAS
CeilingAll of it went to the NUMS address at the etching; the site calls it the ceiling, “the most that can ever exist”21,000,000
Most the rules issue3 fixed pouches of 80, plus 78 weeks of 266,640; the rules assign the other 201,840 nowhere20,798,160
IssuedBy block 974,323: 987 pouches, 506 base (74,989.91) and 481 bonus (92,265.79); the 3 fixed pouches unminted167,255.70
Never issuedListed weeks' and unminted numbers' shares nobody can claim, and whatever is unclaimed at the deadlinenot counted here
BurnedPouches burned for Snickets go to an address nobody can spend from; the ledger can't tell whichthe site's token page
CirculatingIssued minus burned, as the site's token page counts itthe site's token page

Why it's called the ceiling

At the etching all 21 million went to NUMS, which rune terms call a premine. But nobody can spend from NUMS, so this premine belongs to no one and only caps the total of pouches; this guide follows the site and calls it the ceiling.

MythThe shares nobody claimed were burned.

FactA burn is an issued pouch that can never be spent again, as when burned for Snickets. An unclaimed share never becomes a pouch, so the ledger never had it: “whatever is never claimed is never issued”, the site says.

11

Verification|Who keeps the ledger, and can you check it?

The ledger is worked out from the Bitcoin blocks by an indexer under fixed rules, and the site's is no exception. To check it, replay the blocks with your own indexer and compare digests with the site's at the same block. For now the public code lags the site's rules, so the check is partial.

In the plate

  1. Blocks arrive in order, their heights on the cars.
  2. Two indexers, the site's and one you run yourself.
  3. Same rules, same block, same digest; 9F3A is its start.
  4. The printed tape: each machine's own ledger and checkpoints.

An indexer reads block by block and records each SHORD envelope that passes the rules. No clock or server takes part, so the same rules and parameters give anyone the same result.

Each indexer keeps its own ledger, checkpointed every few blocks; a restart resumes from the newest good one, or from the start block.

Checking means comparing digests at the same block. On 11 October the public code's replay matched the site's at block 970,879. Today the site's rules are newer: the public code recognises only six message types, the later rewards, off-chain listings and splits aren't public yet, and its tree now differs from the site's (appendix H).

The relay's envelopes can be checked without an indexer: since 29 October it has sent from the wallet the site's status interface names (bc1pr5vsx…5hcp73), and a block explorer shows every one. Appendix I08 has the payout address in the rules.

MythThe indexer holds the whole ledger, so it knows who holds each piece.

FactIt holds only commitments, nullifiers and ciphertexts, so after a private send it can't tell a note's piece or owner. Only the recipient's vault can open the ciphertext.

Card 08What the indexer checks, what the digest coversA private send: its proof is checked with public data, no private keysReadBlockEnvelopeVerifyRoot in last 100nf never seenProof checks outRecordMark nf spentAdd the new cmKeep ciphertextUpdateThis block'sroot and leavesAny check fails: refused, nothing changesOn its machine: tree · nfs · ciphertexts · mints · listings · checkpointsReorg: back to a checkpointnn+1n+1′n+2checkpointn+1′: a new block, same heightDigest v1 coversroot, leaves · nfs · mintedlistings: state, piece, credits, priceLeaves outciphertexts · txids · lockspayout scriptsCompare full digests at the same block: same height, same hashGiven the same Bitcoin chain, rules, verification key and start height
Open the card full size

Technical notesA checkpoint spares a restart the early blocks. It is used only if its rule hashes, the roots rebuilt from it and its last 12 blocks still check out; otherwise an older one is tried. After a reorg the indexer rereads from one still on chain, serving the old ledger meanwhile.

12

Quick answers

Ten things people often ask that the chapters don't spell out, from sending to the money, the pouches and the safety of your keys. The full list, by topic, is in appendix K.

QHow long does a private send take, and how does the other side know it arrived?

AThrough the official relay, envelopes wait to go out in a batch, then the transaction confirms and the indexer accepts it. Paying the fee yourself skips the batch. Nothing notifies the receiver: the note has arrived when their vault syncs and shows it.

QI sent a private transfer to the wrong address. Can I undo it?

ANo. Once the envelope is on chain, the old note is spent. A shielded address has no checksum, so a typo usually still makes a "valid" address, and the piece goes where nobody can open it. Paste the address, and check its start and end before sending.

QCan I send BTC or another inscription straight to the NUMS address to make it private?

ANo. An ordinary transfer creates no SHORD note, and nobody has the key to what you send there, so it stays there.

QIf I copy my note data, or open the vault on two devices, can I spend it twice?

ANo. One note has one nullifier, and the indexer accepts only the first spend. A later one paid with other BTC can still confirm, and its miner fee is wasted.

QWhere is the BTC after a sale?

AAt the payout address you chose when listing: on the vault's Bitcoin page for "private address", to withdraw anywhere, or straight to the connected wallet or the address you typed.

QCan the SHNAKAS I claim go into an ordinary rune wallet or market?

ANo. What you claim are pouches in the SHORD ledger; the 21 million runes went to the NUMS address at the etching, which nobody can spend from, and pouches don't turn back into runes. Appendix I07 has what pouches can do.

QThe art is locked at NUMS, so what do I need to keep safe?

AWhat's locked is the Bitcoin output the art sits on; ownership lives in the SHORD ledger and follows your vault's keys, so those keys are what to keep safe (chapters 01, 03).

QMy unlock signature leaked. Does signing again, or a new PIN, help?

ANo. The same wallet and address give the same signature and keys. To change vaults, open a new one with another wallet address and send your notes there privately.

QWhat if my view key leaks?

AWhoever has it can open the ciphertexts written to you, past and future, and see which notes you received, but without the spend key can't move them.

QWhat is the trusted setup, and does it affect my piece?

AOne-time random numbers used to make the proving keys. NAKA's were made by the team alone, and they can't take the piece from your vault; a multi-party ceremony is planned for the next collection (appendix D).

13

Trading and safekeeping

In SHORD your keys decide, and every step is final once it's on chain. Check these before you act and your assets stay safely yours.

  • Use your bookmarked official site and check the address before signing the unlock message, which is for the official site only: never give it to anyone.
  • After you pay, the sale is done only when the BTC confirms, the indexer accepts it and a new note appears in your vault.
  • Private deals move BTC and note separately, with no lock holding either side: trade only with people you trust and have them confirm it in their vault (escrow: appendix K).
  • Fees vary: NAKA charges the buyer 2% (min. 1,000 sats), no royalty; Trollbox and others, 1% plus 1% royalty.
  • If you want a week's reward, don't list, cancel or transfer during that week, and don't send to yourself either.
  • The web vault opens from your wallet, and the same wallet and payment address always reopen it: keep the wallet's phrase safe. The Shielded Vault app has its own 24 words, not UniSat's or any wallet's; write them on paper, no screenshots.
  • Pieces and pouches go to the private address, BTC to the Bitcoin page's; inscriptions or runes sent there are spent as BTC. The QR code and link that move a vault to a phone are the vault: don't share them, and never open a vault link someone sends you, or what you put in is theirs.
  • Prepaid relays live only in the browser that bought them: use them up before switching devices or clearing data. Relay credits in a note go with the piece to the buyer.
The cast: A is #2, B #0, buyer C #21, and #4 the piece bought and sold; visitors #12, #14, #42; in the museum #15, #1, #3; minting #7; showing a proof #46; running indexers #37, #49.

This edition: 3 November 2026. Live data from 28 October; the relay rechecked 2 November, the project's posts on X to 2 November, the site's vault, market and lounge on 3 November. Code: public commit 3cdbdfdf (12 October) and the site client (SHA-256 57457629…, read 28 October, unchanged 3 November). Every claim's source and check date, and later changes, are under Sources; the appendix is on the web only. The booths' Ord Dropz logo is redrawn in pixels from the official icon; the eyes in the window are this guide's own.

14

Appendix

A Terms B Operations C Notes and messages D Parameters E Rewards F Live indexers G Common address H On chain I Chapter notes J Names K Questions

This appendix is for looking things up, and you can skip it on a first read. It follows the archived live product and client; figures marked "public v1" come from v1 in the public code repository.

A Terms

Each term says who makes it and where it lives: private keys and readable notes stay in a vault, never on chain; what goes in an envelope sits in the Bitcoin blocks for anyone to read; what an indexer keeps, anyone can recompute from the blocks.

TermWhat it means here
VaultThe program on your device that keeps your keys and readable notes (the web vault or the phone app); encryption, decryption and proofs happen there. A web vault's keys all come from one signature (chapter 01)
IndexerA program that reads Bitcoin block by block, checks envelopes against SHORD's rules and keeps the ledger on its own machine; anyone can run one (chapter 08)
RelayA service that pays the miner fee and puts your envelope on chain. The official relay charges prepaid relay credits; without a relay you can pay and broadcast yourself (chapter 04). Its payout address is in the collection's rules; since 29 October it sends from a new wallet (appendix I08)
satsBitcoin's smallest unit: 1 BTC = 100,000,000 sats
NoteThe data that carries the right to a piece: piece number, relay credits, the owner's public key, the random ρ and the piece secret s. The readable note stays in the vault, off chain; the chain holds only its commitment and ciphertext. Spending it takes the owner's spend key
Shielded address (shord1)shord1 followed by 128 hex characters, 64 bytes decoded: the first 32 are the owner key Poseidon(sk), the last 32 the view key. Others use it to write a note to you and encrypt its ciphertext; your own mints, purchases and claims don't need it. A public address shows nothing about the vault, since every commitment mixes in fresh randomness (appendix I01)
Shielded nameAn ordinary inscription with content {"p":"shord","op":"name",…}, pointing a name like bob.naka at a shielded address. First come, first served; the target is fixed for good; acceptance never looks at it (appendix J)
EnvelopeAll the bytes of one SHORD message, written in a transaction's OP_RETURN output (large ones split into a tapscript). A fixed 15-byte header: SHORD (5 bytes), version (1), type (1), collection id (8); then the body laid out per type; types that carry a proof end with 256 bytes of proof. A private transfer's body is anchor 4, nullifier 32, new commitment 32, credits spent 1, credits bought 2, one-time key 32, ciphertext 88: 462 bytes in all; a listing is 359 plus the payout script, a purchase 201, a claim 264, a mint 173. Types 1 transfer, 2 mint, 3 list, 4 buy, 5 claim, 6 batch mint; the live site adds 7 to 12: rewards, bonuses, off-chain listings and splits
Commitment cmThe note's public fingerprint, computed from its contents and random values, so nobody can tell the piece from it. In a private transfer the sender's vault computes it and puts it in the envelope. In a mint, purchase or claim the envelope carries inner, and the indexer completes cm from the public number and credits
Inner fingerprint innerA fingerprint of the readable note minus its number and credits (owner public key, ρ, s). At a mint, purchase or claim the receiver publishes only this, and the indexer adds the public number and credits to get the commitment
Record treeEach indexer adds every commitment as a leaf, in chain order, and keeps the tree on its own machine. Depth 20, append-only; any replay of the blocks builds the same tree
Merkle rootOne value that stands for the whole record tree. Indexers record the root after every block; a proof cites one of them, and a path shows a leaf is in the tree
Nullifier nfComputed by the vault from the spend key when a note is spent, and published in the envelope. Each note has exactly one; indexers keep the ones they've seen as a list and reject any that comes twice
Ciphertext ct and ephemeral key epkThe writer of a note encrypts its readable form to the receiver's view key and puts it in the envelope. Every encryption uses a fresh ephemeral key, so a private key can't regenerate the same ciphertext, but it can always be read from the blocks again
Relay credits (tickets)The prepaid broadcasts a note carries; they travel with the piece, to the next owner on a send or a sale ("Credits stay with the piece", says the site). Bought per piece on the site at 2,500 sats each, paid at once to the relay payout address fixed in the collection's rules for the relay's miner fees; the protocol has no way to give it back. Each private send, listing or cancel handed to the relay uses one; one you broadcast yourself, paying the fee, can use none. The project announced on 19 October that credits would no longer be sold, old ones still working; in the 28 October archive NAKA still had them on (creditsOff false), with 3 bundled into each mint by default; on 3 November the site's config was the same, and every market listing shows how many it carries
Prepaid relaysA second thing the site sells, under the vault's Relays tab: 2,500 sats each, an action needing as many as the day's network fee takes. The browser makes the secret, pays in BTC and the site blind-signs it; it is kept in the browser that bought it, under the current vault, and any piece's private send, listing or cancel can use one (a purchase pays the BTC price from a wallet or the vault's BTC). The blind signature keeps the site from telling who bought it; there is no wallet popup and no input of yours on chain. It isn't in the note or derived from the seed, so the same vault on a phone doesn't have it; use it up before switching browsers or clearing data. The site lists it beside the note's credits, the connected wallet and the vault's BTC as ways to pay the network fee
SeedThe source of every vault key. The web vault computes it from your signature on the unlock message; the phone app shows it as 24 words. No code in the client uploads it
Spend key sk and view keyBoth derived from the seed and kept only in the vault. The spend key spends notes; the view key opens the ciphertexts sent to you
NUMSA public key nobody knows the private key for. The address where the art sits uses it and has no script path
PoseidonThe hash used here for fingerprints: commitments and nullifiers. Chosen because it is cheap inside zero-knowledge circuits
hbodyOne value computed from a message's body (ciphertext, price, payout script, return key and so on) and fed into the proof's public inputs; change one byte of the body and the proof fails. The indexer computes it; it isn't written in the envelope
Event id context and mark ctxNfThe two values of a holder proof: context is computed from the collection, the purpose and the claimant; ctxNf = Poseidon(s, context, 13) is computed from the piece secret s: one mark per piece per context. A private send keeps s and so the mark; another claimant or purpose gives another mark, so it doesn't mean once per piece per event (appendix E)
Witness and proofThe witness is the secret input for a proof and never leaves the vault. The proof is what a verifier checks: a transfer's or listing's proof goes in the envelope for indexers, who don't keep it, and the original stays in the block; votes and holder proofs go to their own verifiers, off chain
Listing lockA BTC output created by the listing transaction (330 sats when the official relay builds it; indexers check its script, not its amount), located by txid:vout, spendable once. A cancel spends it with the platform's signature; without a valid purchase in the same transaction the piece doesn't move, and the seller takes it back with CLAIM. The seller's return key can also spend it once it has 1,008 confirmations
Listing recordWhat an indexer writes down when it accepts a listing: number, credits, price, payout script, return key and where the lock is. Kept on the indexer's machine
Return keyA key derived from the seed and this listing's nullifier, one per listing, written into the listing lock; a cancel or an escape signs CLAIM with it to take the note back
Permit coinA Bitcoin output locked to the platform's key; every mint spends one, which is why minting needs the platform's signature
Parent and child inscriptionsThe parent is an Ordinals inscription holding the collection's rules; each minted piece is inscribed by the platform as its child (the inscribing transaction spends the parent and names it in a tag); the hash tree root of every art file, artRoot, sits in the parent
What carries an envelopePublic v1 writes the envelope into a transaction's OP_RETURN output; the current client can also split it into a tapscript and send it as a commit and a reveal transaction
Eligibility tree and snapshotA reward claim uses the record tree as it stood at a week's boundary, its leaves fixed: that week's eligibility tree; a vote decides eligibility at a round's snapshot height
Reward note, pouchA note the ledger creates at a claim, which the site calls a pouch: its number and size are public, its holder isn't. The rune itself stays put at the NUMS address, and pouches don't turn back into it (How mining works)
SnicketsPoints from burned SHNAKAS, one for one, whole tokens only, one pouch per burn; kept on the platform's books; they buy GTD spots and votes
Shielded # (global number)The number the site's market and Staking pages show: SHORD collections are numbered one after another, NAKA from 0 to 3,332, so it equals the piece number; COMMEMORATIVE COINS start at 3,333 and Trollbox at 3,833. The Staking page's "Shielded numbers under 1K, 100 and 10" bonus is, for NAKA, the piece number
State digestA value indexers compute over chosen state fields to compare with each other. Public v1 covers the tree root and leaf count, the nullifiers, the mints, and each listing's nullifier, state, number, credits and price, not ciphertexts, payout scripts or locks
CheckpointVerified state an indexer saves now and then to resume from after a restart. A cut or edited file is refused, and the indexer falls back to an older one or replays from the start. To be sure the content came from the chain, the direct way is to replay the blocks yourself
ReorgBitcoin's longest chain replaces its last few blocks, and the transactions in them go back to unconfirmed; the indexer returns to a checkpoint still on the best chain and rereads, so records it just accepted can be withdrawn

B What each operation checks and reveals

OperationWhat is checkedWhat becomes public, and what to watch
Create a collectionThe parent inscription fixes supply, fees, payout scripts and so on; artRoot pins the art filesRules and art are public. Whether later inscriptions were completed has to be checked separately
Mint oneThe number is within supply and unminted, the permit input and payment are rightNumber, payment and new commitment are public. NAKA also needs a permit signature
Batch mint (MINTN)Up to 20 pieces in public v1, payment checked for the whole batchAlready-minted numbers are skipped; the indexer issues no refunds
Receive and holdThe vault scans locally, recomputes commitments and nullifiers, and checks whether a note can be spentThe vault's latest scan is what counts; an old record doesn't show you still hold it. Holding carries no fee
Private transferProves the right to spend, the same piece, and an unused nullifierNormally neither the number nor the old leaf is public. The sender's vault writes the ciphertext by the rules; the circuit doesn't check it
Add relay creditsbuy has to match the payment; the circuit computes the new creditsOne NAKA credit costs 2,500 sats, paid to the relay payout address fixed in the rules, bc1phcjk…3t3cuy, and not refunded. Topping up by sending to yourself on the site breaks that week's reward
Use a relayThe published proof or signature fixes the content, so a relay only broadcasts itThe relay pays on chain, so your wallet doesn't show. Credits are redeemed by the official relay; if it doesn't send in time, you can pay and broadcast yourself
Prepaid relaysBought from the site with BTC, blind-signed, kept in the browser that bought themOne is handed over per relayed action; the blind signature keeps the site from telling who bought them; use them up before switching browsers or clearing data (appendix A)
Broadcast yourselfYou build, sign and broadcast the BTC transactionThe inputs you pay from are public. A stale proof just needs redoing; the asset doesn't expire
Old-style listing (LIST, used by NAKA)Spends the old note, binds number and price in the proof, creates a listing lock (330 sats from the official relay)Number, price, payout script, return key and credits are public. The payout script can be an address of any type (appendix I05). A cancel spends the lock with the platform's signature; the piece doesn't move with it
Off-chain listing (LIST3)The listing signature stays off-chain and goes on-chain with the purchase; a listing lasts at most 4,032 blocksUsed by Trollbox and COMMEMORATIVE COINS (1% fee, 1% royalty); the site's front end may add a payout fee of up to 20,000 sats. The project says NAKA won't switch
BuyThe listing is valid, the right lock is spent, the seller gets the full price, the fee is paid on topThe buyer pays the fee on top and prepares the new note; the indexer's acceptance is what counts (chapter 05)
CancelSpend the lock to close the listing, then sign CLAIM with the return keyCanceling right away needs the platform to spend the lock. Both steps can share one transaction; if only the listing is closed, a second transaction takes the note back
Escape after timeoutAfter the 1,008-block relative lock, the seller's script pathCounted from the block that confirms the lock; signed with the return key, the fee paid by the seller
BTC income and withdrawalSign ordinary UTXOs at vault-derived addresses, handle fees and changeEach sale pays a fresh address derived from the seed and the listing, so no address is reused; they are ordinary Bitcoin addresses
Restore a vaultThe same seed, the matching rules and verification parameters, a local scan and a spent checkFor the web vault, the same wallet and payment address signing the same signature give the same seed. Notes derived from reward claims must be recognized too
Claim base rewardsEligibility tree and spend proof, whole weeks, no double claimsA normal claim spends the old note and gives back a new one that continues it, the held weeks carrying on; the base claim needs no number
Claim bonus, batch claimsBound to the earlier claim; number, week range and amounts are checkedThe bonus reveals the number, the amount and that the piece wasn't listed or moved since the first claimed week; the pouch stays tied to the piece, and the fee wallet is on the transaction. A batch may take a commit and a reveal transaction
Split a pouchThe current client checks 2 to 16 parts, each above zero, summing to the wholeThe original number, credits and each amount are public. There is no merge operation for now
Holder proofThe public holder circuit checks that the note is in the tree, and derives a per-event tag, ctxNfProves the note is in the tree, not that it is unspent; the scope of deduplication depends on how context is defined (appendix E)
Private votingThe site's vote: pick the eligible notes at the round's snapshot height (held at the snapshot, even if spent since), make a proof on your device with the spend circuit, the topic, round and choice hashed into it, and hand the choice and the proof to the voting serviceNothing goes on chain and the note stays. The service gets the choice and the proof's public inputs, this note's nullifier among them. It publishes each vote's tag and choice, so anyone can check the tally (chapter 06, appendix I06)
Failure, retry, reorgTell apart submitted, broadcast, in mempool, BTC-confirmed and protocol-acceptedCheck the original transaction first so you don't pay twice. After a reorg, state can roll back

Privacy boundaries: what each step leaves behind

SHORD hides the link between a piece and its owner, and between one note and the next, not the Bitcoin transactions. The number is the one identifier that stays public: when #N was bought and by which paying address, and when and at what price it was listed. What SHORD can't prove either way is that today's seller is the last buyer, because a private send in between carries no number.

StepSeen on chain or by the other sideNot seen
MintPaying address, number, amountNothing, all public
Private sendA spend: nullifier, ciphertext; self-broadcast adds the paying addressWhich note, which piece, to whom
ListingNumber, price, payout script, return keyHands changed since, or not
PurchaseBuyer's paying address, who got what, numberWhom the buyer sends it to later
Cancel, claimThe lock spent, the claim signatureWhose the new note is
Base rewardEnvelope on chain: nullifier, new commitmentNumber, holder
BonusNumber and amount, tied to its pouchVault address
Split a pouchThe pouch and each new pouch: number, sizeWho holds the new pouches
Snickets (to the platform)The burned pouch and its s; Snickets are kept on the platform's books under the Snickets keyNo Snickets record on chain
Vote (to the service)Choice and nullifier; each vote's tag is publicWhich note, until spent
Holder proof (to the verifier)Root, context, dedup tag; the site's button adds the claimant (your connected wallet's address)Which note, which piece
RelayThe relay sees your requestNo paying address of yours on chain
Shielded nameName and address; self-inscribing adds the payerWhat the vault holds

What keeps you private

Three things to keep in mind

C Notes, proofs and on-chain messages

A note is written (assetId, tickets, ownerPk, rho, s). Here tickets means the relay credits the note carries, not the note itself. The spend circuit uses these relations:

ownerPk = Poseidon(sk)
inner   = Poseidon(ownerPk, rho, s)
cm      = Poseidon(assetId, tickets, inner)
nf      = Poseidon(sk, rho, 7)

A normal transfer keeps assetId and the piece secret s; the new randomness is rhoOut = Poseidon(nf, 11), and the sender's vault computes the new commitment cmOut and puts it in the envelope. In a mint, purchase or claim, the receiver's vault publishes only inner and a ciphertext, and the indexer completes the commitment from the public number and credits. Credits follow ticketsOut = ticketsIn - spend + buy. A receiving (shielded) address holds the owner key Poseidon(sk) and the view public key, and a normal ciphertext is 88 bytes.

The circuit's public inputs are root, nf, hbody, cmOut, spend, buy, mode, assetIdPub and ticketsPub. mode 0 is a transfer and mode 1 a public listing. hbody binds the proof to the message body. The indexer obtains root and computes hbody from the message and its own state; they aren't two fields copied as they are into the envelope.

A public v1 envelope header holds the SHORD marker, version, type and cid, 15 bytes in all. Transfers and listings carry a 256-byte proof; BUY and CLAIM have their own rules for checking, locks and return signatures. The live client adds more types: rewards 7 to 10, LIST3 11 and SPLIT 12, so the six public types don't cover everything that runs today.

D Parameters and common mix-ups

Where the pieces come from. Every component SHORD uses has a public paper or standard; the table lists them. It shows the established cryptography SHORD builds on; SHORD's own circuits and code have no public third-party audit report yet.

ComponentSourceWhat it does in SHORD
Groth16 proofsGroth, "On the Size of Pairing-based Non-interactive Arguments", EUROCRYPT 2016; implemented with snarkjs on the BN254 curveSpend and holder circuits
Poseidon hashGrassi et al., "Poseidon: A New Hash Function for Zero-Knowledge Proof Systems", USENIX Security 2021; circomlibCommitments, nullifiers, owner key, note tree
Notes, commitment tree, nullifiersZerocash (Ben-Sasson et al., IEEE S&P 2014) and the Zcash protocol specificationComparable in structure; SHORD's public code and documents don't cite them
Note encryptionX25519 (RFC 7748), ChaCha20-Poly1305 (RFC 8439), key = SHA-256("shord/note/v1" ‖ shared secret ‖ one-time public key)The note written to the recipient
Bitcoin scriptsBIP340 Schnorr signatures, BIP341 Taproot, BIP342 Tapscript; relative timelocks BIP68 and BIP112 (CHECKSEQUENCEVERIFY)Listing lock, return-key signature, the 1,008-block escape
Web vaultECDSA message signing, usually deterministic per RFC 6979; the 24 words encode the 32-byte seed with the BIP39 word list, without BIP39's PBKDF2Seed from the signature, recovery words

E Rewards and holding

The on-chain plan: start anchor 971,700; week 1 is blocks 971,701 to 972,708; a nominal 266,640 SHNAKAS a week for 78 weeks; claims close at block 1,102,740. The denominator counts all 3,333 catalogue numbers, and weights change every block. Personal eligibility, accrual, amounts already claimed and the final circulating supply each need their own count.

The 78 weekly pools plus three fixed pouches of 80 at the start total 20,798,160. Listed and unminted pieces take a share nobody can claim, so it is never issued; the site says “whatever is never claimed is never issued” (How mining works).

The public holder circuit proves that a note is in the record tree, deduplicated per event. Two things to know when using it. First, it doesn't check that the note is unspent: the tree only grows, so after a sale the old leaf is still there, and the former holder can still prove with the newest root; the protocol document's "verifiers accept only the last 6 blocks' roots" limits how old a root may be, and old leaves stay inside new roots. Second, deduplication is per piece: the tag ctxNf = Poseidon(s, context, 13) comes from the piece secret s, which a private send keeps, so only one of sender and receiver can use it; a sale renews s, so seller and buyer can each prove once. The site's voting uses not this circuit but the spend circuit; see appendix B.

With different claimant accounts in context, a copied proof stops working; deduplication is split across those contexts too, so it doesn't mean each piece can be used only once across a whole event.

F How live indexers stay consistent

Align network, collection, rules version, verification key, start height and block hash, then compare state. An indexer checks messages in chain order, each type its own way: transfers and listings for the anchored root, the nullifier and the proof, purchases for spending the lock and paying correctly, claims for the return-key signature. Commitments, spent markers, listings and rewards are kept separately. Reaching the same height is only where comparison starts; you also need to know what a digest covers. Public v1 leaves out ciphertexts, payout scripts and locks, so matching digests mean the covered parts match. The live interface also has a separate rewards digest. The site's status interface gives the height and digest but no block hash; the public API Ord Dropz hosts gives both. On 3 November 2026 the two digests matched at block 974,394, but Ord Dropz runs both, so that isn't independent verification.

What an indexer keeps on its machine: every leaf of the record tree, the root and leaf count after every block, the nullifiers it has seen, the mints, the listings and their locks, and the accept or reject record of every envelope. Proofs aren't kept; the originals are in the blocks. It doesn't know which piece a note is after a private transfer, or whose a note is. A checkpoint stores verified intermediate state, and a restart continues from it. On a reorg, the indexer goes back to the shared history and replays. Incremental sync continues from a cursor, and wallets scan locally to recognize their ciphertexts. naka-sigil's public material shows how it reads the official API, cross-checks heights, validates reward tables and drops data after a reorg.

The live rules are newer than the public repository. This guide explains them from the live collection data, state, client and on-chain records. A full independent replay needs the matching rules and parameters; count differences from an older version can't settle questions about the live mechanism.

G The shared address and the evidence

bc1prykz5vxt6lgr2tu56np35slhvlc77s7hlajr3qucsrkqwhvp48mq5grvgr

This address holds NAKA's inscribed child pieces and the 21 million SHNAKAS sent here at the etching; pieces from Trollbox and other SHORD collections sit here too. The parent inscription isn't here, and it isn't the balance address of anyone's private notes.

How it was checked: the NUMS construction was recomputed. In all 26 of NAKA's child inscription transactions, the number of outputs to this address equals the number of inscriptions in the transaction, 3,327 in total. In the SHNAKAS etching, the Runestone's premine of 21 million points at output 1 and was unspent when read on 28 October 2026. This is a count of outputs, not a sat-by-sat Ordinals replay.

The signature warning applies only to how the official unlock message is derived. It doesn't carry over to other signatures or to vault keys created separately. Raw responses, hashes and the full scope of checks are under Sources.

H What lives on chain, and what you can do yourself

People often ask how much of their assets and the ledger lives on chain, and what they can do without the site's servers. The answers below come from the public code at 3cdbdfdf and the official client saved on 28 October 2026.

QuestionAnswerEvidence
What is on the chainIn public v1 every SHORD message sits in an OP_RETURN output of a Bitcoin transaction; the current client can also split an envelope into a tapscript and send it as a commit and a reveal transaction, which is how batch reward claims go out. Transfers and listings carry a nullifier and a proof, and a transfer also carries the new commitment. Mints, purchases and claims carry inner, and the indexer completes the commitment. In public v1 every message that creates a new note also carries an ephemeral public key and an 88-byte ciphertext; the new NAKA notes a batch claim gives back have none of their own (below), while the pouch carries oneThe envelope format in the public code (envelope.mjs); the client for the newer types
Who keeps the ciphertextsThey travel with the Bitcoin blocks; every node that keeps full blocks has them. The project doesn't hold them separatelySame
Can a private key regenerate a ciphertextNo. The sender encrypts with a fresh ephemeral key each time, and the receiver can only open it. There's no need to keep it either: it can be read from the blocks again at any timeThe client's encryption makes a new ephemeral key on every call
Can the keys alone recover every holdingPer the client's code, yes, given the full list of notes. The vault tries to open each one; the new NAKA notes a batch claim gives back have no ciphertext of their own and take their random values from the previous note; the pouch carries its own ciphertext. Today only the official indexer can give the full list: one you run from the public code lists notes from the six public message types, not those from rewards, splits and the other newer types, until those rules are published. The notes themselves are on the chain, not in the project's keeping; what is missing is an open indexer that knows all 12 message types. The official client (the JS the browser downloads) already parses all 12, so an indexer completed from it can list them allThe client's scan: decrypt when there's a ciphertext, otherwise derive from the previous note, then check the commitment
What if a ciphertext is written wrongThe site's client encrypts by the rules, so it doesn't happen there. With third-party software that writes a wrong ciphertext, neither the circuit nor the indexer checks it, and the receiver's vault can't find that note. Market sales, claims and mints are written by the receiver, so they can't go wrong this wayPROTOCOL-v1.md, "Still open"
Can you replay the whole ledger yourselfFor the six message kinds the public code knows, yes, today; rewards (7–10), off-chain listings (11) and splits (12), added later on the live site, have no public implementation yet. The project has said on X that the indexer will be fully open-sourced, after which anyone can replay the envelopes on chain. One comparison: at block 973,352 the site counted 9,882 notes and the public code 8,678, the difference coming from the new kinds it doesn't know yet. The reward weights' rules and trait tables are on chain in the SHNAKAS rules inscription (tiers, number bonuses, how traits with no listing are graded, floors counting only listings of at least 546 sats on five script types; appendix I07), with the ledger's listings and sales as input, so any indexer can work out the same weights block by blockThe public code defines six kinds; both sides' state records
Do two indexers always agreeWith the same rules version, parameters, start height and chain, acceptance depends only on blocks, with no clocks, randomness or server data, so they agree. An independent replay matched the official digest at block 970,879 on 11 October 2026. Only different rules versions part ways, so a comparison starts with the rules versiondocs/STATUS.md in the public repository
Where the BTC for relay credits goesPaid when the credits are bought, straight to the relay payout address fixed in the collection's rules (appendix I08), and spent on the relay's miner fees; the note counts broadcasts, redeemed by the official relay. Without a relay you can pay the fee yourselfPROTOCOL-v1.md payment rules, NAKA's parent inscription, the site's status
Is anything kept only in your browserOnly the site's prepaid relays, kept in the browser that bought them (appendix A); use them up before switching browsers. Pieces and notes aren't in the browser, and the note's relay credits travel with the pieceThe site's vault page script: shielded_relays_v1 local storage, /tokens/build, /tokens/mint, /relay
What an indexer has to storeThe record tree, the nullifier list, mints, listings and every block's root, with checkpoints now and then. All of it can be recomputed from the blocks; with no usable checkpoint it replays from the start blockindexer.mjs and checkpoint.mjs in the public code
What sits on the platform's serversThe relay's queue; the platform's signing keys for the mint gate coins and the listing locks (mints and purchases are signed by the platform); the artwork list of unminted pieces; the computed reward-weight table (its rules are on chain and anyone can recompute it block by block; this guide didn't recheck the values block by block)relayer, docs/STATUS.md, client code
What you can do without the site's serversHolding is unaffected. With a complete ledger state and a matching client, rules and proving key, you can build a private transfer yourself and broadcast it with your own fee. The proving key (spend.zkey, spend.wasm) is downloaded from the site, the verification key is in the public repository; keep a copy if you want to prove offline (appendix K). Mints and purchases are signed by the platform for now, which the founder describes as a launch-stage guard for stopping a bug in time, to be removed in the next update (appendix K); a seller can also reclaim a listing alone after 1,008 blocks. A full replay of the ledger waits for the indexer to be fully open-sourcedPROTOCOL-v1.md, the "Running without Ord Dropz" table

What you must keep safe is the wallet, or the 24 words. The web vault comes from your wallet: the site asks the wallet for an ECDSA signature on the fixed message and says "The same wallet always opens the same vault." That holds when the wallet signs the same bytes every time: the signing libraries Bitcoin wallets use sign deterministically (RFC 6979), and only an identical signature gives the same seed. So keep the wallet's own recovery phrase, and remember which payment address you connected with. On the phone app it's the 24 words, which are the vault's seed; a web vault can be imported into the app and written down the same way.

Keeping data on chain is a trade-off. Transactions are larger, and a few pools skip OP_RETURN outputs above 83 bytes, so a transaction waits for another pool. Ciphertexts stay on chain, so keep the view key as safe as the spend key: it can read the notes written to you, though it can't move them.

I Technical notes, chapter by chapter

The full version of the technical notes under each chapter's card: why the design is this way, and what the protocol does when something goes wrong.

00 Start here|What SHORD is, and what you actually hold

Bitcoin doesn't know SHORD. To it, an envelope is just data (OP_RETURN in public v1; the current client can also put it in a tapscript): miners include it without reading it. Which envelopes are valid, and what the record tree looks like, is decided by indexers checking each one against SHORD's rules. So Bitcoin can confirm a transaction that SHORD still rejects.

Everything in an envelope is public, but never a readable note. A private transfer carries only fingerprints, a nullifier, a ciphertext and a proof; mints, purchases and listings also show what they must, such as the number, price and payout script. The indexer column is all computed from the blocks, so no indexer needs trusting. Checking for yourself takes matching rules and parameters and the full block data, ideally from your own Bitcoin node.

Who computes a commitment depends on the action. In a private transfer the sender's vault computes it and puts it in the envelope, and the proof shows it holds the same piece as the old note. In a mint, purchase or claim the receiver builds the new note, the envelope carries only inner and a ciphertext, and the indexer completes the commitment from the public number and credits.

Proofs are Groth16: an indexer checks them with public verification parameters fixed in the code and the envelope's data, never a private key. Their trusted setup is covered in appendix D.

01 Vault|What holding rests on, where the keys come from

The site asks the wallet for an ECDSA signature on the fixed message: UniSat's signMessage in ecdsa mode, Xverse's ECDSA protocol, both with the payment address you connected. Seed = SHA-256("shord/seed/v1" ‖ signature). The message is VAULT_KEY_MESSAGE in the site's engine, four lines: "Ord Dropz shielded vault key v1", "Signing this unlocks your Shielded Ordinals vault on Ord Dropz.", "ONLY sign this on ord dropz. Anyone with this signature can move your shielded pieces.", "It does not move any bitcoin.". The last line means the wallet you connected; the vault's own BTC addresses come from the seed too, and whoever has the signature can take that BTC.

The seed gives the spend key and the view key. Each listing's return key and sale-proceeds address come from the seed and that listing's nullifier. The vault's own BTC addresses are numbered, and listing coins and bonus claims have keys of their own. All of it is deterministic: given the same signature (the site says the same wallet always opens the same vault), signing again on a new device brings it all back, and sale-proceeds addresses can be matched against the sales record.

The view key and the spend key are separate: the view key alone shows the notes sent to you but can't move them. The web vault's signature gives both, which is why it amounts to the whole vault.

The shielded address shord1… is one more thing the seed gives: after shord1 come 128 hex characters, 64 bytes decoded, the first 32 the owner key ownerPk = Poseidon(sk), the last 32 the view key (x25519). It is used only when someone else builds a note for you: in a private send of a piece or a SHNAKAS pouch, the sender puts ownerPk into the new note's inner fingerprint, inner = Poseidon(ownerPk, ρ′, s), and computes the commitment, so only the holder of the matching sk can later prove "this is mine"; then encrypts the ciphertext to your view key with a one-time key, so your vault can read it. Notes from a mint, purchase, claim or reward are built by your own vault with your own keys and need no address. The owner key is a one-way hash of the spend key, so publishing it reveals nothing of sk; the view key is separate, so handing it over lets someone read but not spend. The address is public, and a name (appendix J) points at it. Privacy doesn't come from hiding it: every note's commitment mixes in fresh randomness, so pieces sent to one address leave commitments with nothing in common, and each ciphertext uses a fresh one-time key, so nobody can tell which view key it was written to. The sender is the exception: a private send keeps the piece secret s. When you next spend the note, your nullifier is published in the envelope, and the next note's ρ = Poseidon(nullifier, 11) comes from it (the circuit requires both). The sender never needs your nullifier: it takes each envelope's published nullifier and new commitment, adds s, the number and an address it guesses, and checks for a match. So when you claim a base reward, or send the piece privately to an address it knows, it can match the commitment, until a sale, or an on-chain listing taken back, gives the piece a new s (appendix K).

The phone app's 24 words are the 32-byte vault seed plus a checksum byte. A web vault can be imported into the app and its 24 words written down.

The prepaid relays the site sells (appendix A) don't come from the seed: the browser makes the secret and the site blind-signs it, so they live only in the browser that bought them, and the same vault on a phone has none.

02 Issuing|Rules in the parent, and who gets the mint money

The rules are a JSON object in the parent inscription's content (p = shord, v = 1 or 2): supply, the file tree root artRoot and content type, mint price, platform mint fee, inscription fee, sale fee, relay credit price, three payout scripts, the permit key gateKey and the listing-lock key lockKey, with optional 2-of-3 co-signers and a proof-parameter hash. An indexer is pinned to one parent and reads the rules from its reveal transaction; the collection id cid in every envelope header is the first 8 bytes of the hash of the parent's id, and envelopes for other collections are ignored.

Checking a mint: the number is within supply and unminted; the payment is summed per payout script and each script gets at least what the rules demand; the transaction spends one permit coin, a P2TR(gateKey) output. Only the platform can sign that coin, so minting depends on it; a MINTN batch takes at most 20 in public v1, minted numbers are skipped and nothing is refunded. The new note is built by the minter, the envelope carries only inner and a ciphertext, and the indexer computes the commitment from the public number and credit count.

The art files: the parent holds no image, only artRoot. After a mint the platform inscribes the file as a child of the parent (ord's rule: the inscribing transaction spends the parent and names it in the parent tag), with the piece number in its metadata; for one number the earliest child counts. Whether a file matches artRoot can be checked only with the manifest of every piece, which isn't published yet; piece #0's child carries no number, and the public code pins its Merkle path. The parent is parked at NUMS only after the last child is inscribed; on 28 October 2026 it wasn't at the NUMS address (appendix G).

The split: in NAKA's rules mintPrice 15,000 goes to the artist script, mintFee is 0, inscribeFee 3,000 and ticketPrice 2,500 go to the relay script, saleFeeBps 200 with saleFeeMin 1,000 goes to the platform script, and there is no royalty. The artist script and the platform script are the same script (archived collection.json). Rules v2 add a resale royalty to the artist script, at most 10%; a v1 indexer can't read a v2 parent, and NAKA is v1, so no royalty will be added to it.

03 Storage|Where the art is, and what you bought

The commitment is computed in two layers: ownerPk = Poseidon(sk), inner = Poseidon(ownerPk, ρ, s), cm = Poseidon(piece, credits, inner). Two layers serve mints, purchases and claims: the piece and credits are public then anyway, so the receiver hands over only inner and the indexer completes cm without a proof.

In a mint, purchase or claim, ρ and s are fresh random values. In a private transfer the new ρ′ comes from the old note's nullifier (chapter 04) and s stays the same. Each change of hands changes the owner key or ρ, so the commitment is completely different. s, the piece secret, is replaced on a sale, mint or claim; holder proofs use it to stop double counting (appendix E).

The record tree is 20 levels deep, up to 1,048,576 leaves, and indexers record its root after every block. To spend a note, the proof cites a root from the last 100 blocks to show "my note is in this tree" without saying which leaf.

Relay credits are inside the commitment too, so normally nobody can see how many you have left. But the number bought at a mint or purchase is public, and a listing shows the note's remaining credits. Each spend, the circuit checks that new credits equal old credits minus those spent plus those bought, and never go below zero.

04 Transfer|A private send, and what the chain shows

Why not simply mark the old note as spent? On chain a note is only a leaf in the tree. If a spend named its leaf, anyone could tie the spend to the transaction that created that leaf and follow the piece from buyer to buyer.

The nullifier is a second fingerprint of the same note: nf = Poseidon(sk, ρ, 7). A note has exactly one, and an indexer rejects any nullifier it has seen, which stops double spends. Nobody can match it to a leaf; the proof shows it belongs to some note in the tree that the spender owns.

Why use the spend key? In a private transfer the new note's ρ′ = Poseidon(nf, 11) comes from the old note's nullifier, which is public, so anyone can work it out, the sender most of all, having written the note. If the nullifier came from ρ alone, anyone could compute the new note's nullifier in advance, wait for it on chain and string the piece's moves together. Mixing in the spend key, which only the holder has, stops that (the circuit's comment: "only the owner can compute it"). The 7 and the 11 just keep the uses apart. Because ρ′ is fixed by the old note, a sender also can't forge two notes with the same nullifier.

Can a nullifier be grabbed? The envelope sits in the mempool for anyone to read, nullifier and proof included. But a nullifier isn't a key, only a public tag: the proof's public inputs hold it, the new commitment and the body hash hbody (ciphertext, credits and the rest), so changing any of them breaks the proof, and a new proof needs the spend key. All anyone can do is put the same envelope, unchanged, into a transaction of their own with a higher fee and get it mined first. The result is the same: the old note is spent, the new one is the receiver's, and the later copy fails on its nullifier. A listing envelope is no different: price, payout script and return key are in hbody, so racing it only lists the seller's piece on the seller's terms, with the racer paying for the lock. A purchase envelope has no proof, but its transaction must spend the listing lock, and the platform signs only the purchase it has checked.

You can send without a relay: set the credits spent to 0 and pay the miner fee yourself. The cost is that the paying BTC is public: anyone can see which wallet sent a SHORD transaction, though not which note or to whom. Paying from BTC unlinked to you removes that link; the site's own "self send" uses the wallet you connected. A relay pays for you and puts the envelopes it has gathered into one transaction in random order; the official relay's status reports a five-minute window (batchWindowMs = 300000); the public relayer code defaults to ten minutes and sends each batch at a random 0.5 to 1.5 times the window, and whether the official relay draws the same way isn't public. A relayed transaction is paid from the relay's own wallet, so the credit fees it takes in become the miner fees and listing locks it pays for others (it moved to a new wallet on 29 October; see 08 in this appendix). The project's October long post on X has a section called "CREDITS GONE": "Same update kills relay credits. No more buying tickets to do private actions. Your vault's own bitcoin pays the network fee, same as any wallet. Old credits still work if you have them, nobody loses anything. Prepaid relays stay as an option for people who want the extra privacy. The platform never pays for anything, which is what keeps it honest." What goes is the per-piece sale of credits; the relay and prepaid relays stay, and the vault's own BTC pays the network fee by default. In the 28 October archive NAKA's config still had creditsOff false, so credits were still on; the site's config on 3 November is the same, every market listing shows its credits, and each SHNAKAS pouch carries one. Paying the network fee from the vault's BTC puts that input in the envelope's transaction; a vault's BTC mostly comes from listing payouts, whose addresses are written in the listings, so for more privacy use the relay or prepaid relays.

The relay credits written into notes are a prepaid fee to the official relay. They travel with the piece: on a send or a sale they go with the note to the next owner, so a seller's unused credits end up with the buyer. The BTC is paid to the relay when you buy them; the note counts broadcasts, redeemed by the official relay. Anyone can run the public relay code, paying the miner fee themselves to relay for others. Prepaid relays: appendix A.

05 Trading|What a listing reveals, and the platform's role

The listing lock is a P2TR output with two ways to spend it. The platform's lockKey uses the key path, at any time. The seller's return key uses the script path, once the lock has 1,008 confirmations. The return key is derived from the seed and this listing's nullifier, so only the seller can compute it.

With every block, an indexer checks which coins each transaction spends, whether or not it carries a SHORD envelope. When a listing lock is spent, it looks for a valid purchase in the same transaction: the right payments and this very lock. If there is one, it's a sale and the buyer gets the new note. If not, the listing becomes "closed": the piece has no note for now, and only the seller can take it back.

So when the lock is spent in a transaction without a valid purchase, the listing closes, and the piece waits for the seller to sign a CLAIM with the return key, which turns it into a new note for the seller; only the seller can make that signature. Every lock the official relay builds holds 330 sats. The money never passes through the platform either: a purchase pays the seller's address directly.

The lock holds no nullifier: it is a P2TR output whose internal key is the platform's lockKey and whose script leaf is "1,008-block relative timelock + the seller's return key". The listing record is filed under the listing's nullifier and keeps the number, credits, price, payout script, return key and the lock's position. A claim envelope carries the inner fingerprint and ciphertext of the seller's new note, signed over its whole body with the return key; the indexer checks the signature and completes the commitment from the record's public number and credits. The return key comes from the seed and this listing's nullifier, so the platform can't compute it.

What the platform's signature covers: the public code's co-signer signs a listing lock with SIGHASH_DEFAULT, which commits to every input and output of the transaction, checks the transaction on its own indexer first, and remembers what it has signed so it won't sign a second sale of the same piece. NAKA uses a single platform signature, made on the platform's server; whatever the signature type, a lock can be spent only once on Bitcoin, so only one purchase can stand.

The platform's signature is used in two places: signing a purchase, and spending the lock for a cancel. Neither brings the piece to the platform: if the lock is spent without a sale, the listing closes and the seller claims; if no cancel is signed, the seller waits until the lock has 1,008 confirmations, spends it alone and claims in the same transaction. In a normal cancel the platform's spend and the seller's claim share one transaction, and the listing goes straight to "claimed".

A purchase carries no anchor and no proof, so it can't expire in the mempool. A cancel is the spending of that lock.

The payout address can be of any type. The site's "Another address" option hands the address you type to a Bitcoin node interface (validate-address) and takes the output script back, so anything the node accepts works; the public protocol document's size table for the listing envelope uses P2WPKH (bc1q, 381 bytes) and P2TR (bc1p, 393 bytes) as its examples. The envelope format only requires a seller script of 1 to 80 bytes, and the indexer adds one check: the price must clear that script's dust line (330 sats for P2TR; 294 for any v0 script, bc1q and P2WSH alike; 546 for the rest); at the sale, payments are summed per script. As of 29 October 2026 (height 973,703) the site's state held 5,233 listings: 4,622 paying a bc1p, 311 a 3… P2SH and 300 a bc1q, none a P2WSH or a legacy 1… address, and all three kinds have sold. A typed address ties the listing to it just as the connected wallet does, and the site warns when one address serves several listings, since anyone can group them as one seller's; the "private address" is a fresh P2TR derived from the seed and this listing's nullifier, which only the vault can compute.

06 Proving|Holding proofs, and what each one gives away

The site's vote (archived client) uses the spend circuit, not the holder circuit: eligible notes are picked at the round's snapshot height, held at the snapshot even if spent later; the proof's hbody binds "ordz-vote-v1", the collection, the topic, the round and the choice; the choice and the proof's public inputs go to the voting service, and those inputs include this note's nullifier. The site's script on 3 November still does this, and adds one tag: tag = Poseidon(nullifier, SHA-256("ordz-vote-tag-v1" ‖ topic ‖ round)), one per note per round. The service de-duplicates on it and lists every vote's tag, choice and time in a "public tag log". The vote page says the service "sees a one-time tag per Naka per round, never the piece or the vault", and at voting time that holds: before a note is spent, its nullifier matches nothing on chain. Public tags let anyone check the tally, with one trade-off: once a note is spent, its nullifier is in an envelope on chain, and computing the tag from it shows how that note voted; a listing's nullifier sits beside its piece number, so for those the piece is known too. Checked on 3 November against the site's ledger at height 974,323: of 1,463 votes in round 1's public log, 888 can be computed from nullifiers already public, 38 of them from listings with their numbers; in round 2, 82 of 774, 8 with numbers (counts only, no pieces recorded; script tools/vote_tag_check.mjs). The code that checks eligibility, de-duplicates and tallies runs on the voting service's server; its public records can be checked like this: round 2's public tag log has 774 votes, their count per choice matches the topic's totals and no tag repeats; the 82 votes that match a public nullifier were all spent after the snapshot block 973,899, so they were eligible; the other 692 have nullifiers still off chain and the proofs aren't published, so by design they can't be checked (script tools/vote_round_check.mjs, archive of 3 November).

The vote page is the Naka Council. It is choosing the next collection to launch, in brackets whose winners meet in a final. Every Naka held at the snapshot block is one vote, whoever holds it now; one bought after the snapshot votes in the next round. Naka votes can be against too, and one option is "none of these for now".

Since 2 November Snickets can vote too (appendix I07), against as well as for, and without a Naka. No proof is involved: the vault signs a request with its Snickets key, naming topic, round, choice, for or against, the number of votes and the price, which the platform quotes; the page puts one vote at "what a base Naka earns in a week, live", and Snickets spent on votes are gone for good. Snickets votes have a public log too, with votes, direction and price but no key; Snickets are kept on the platform's books by key, so one vault's burns, spots and votes sit in one account.

A reward claim (the archived client's buildReward) also uses the spend circuit, with the week's eligibility root and the original note as inputs, and the reward envelope it builds (type REWARD) goes into a Bitcoin transaction: the original note's nullifier, a new commitment, a proof and the ciphertext of the pouch. It spends the original note, gives you a new NAKA note and adds a reward note; the indexer adds the new NAKA note to the week's eligibility tree, which is why chapter 07 still counts the week. A batch claim (REWARD2) takes up to 200 at once, and the new notes it gives back carry no ciphertext of their own, each derived from the previous note. Bonus claims (BONUS, BONUS2) write the number in the clear and use a signature, not a proof. A nullifier that has claimed can't claim again; after a sale you can still claim, late, the weeks held in full before it.

The public code's Holder circuit: public inputs are the root, an event id context and the mark ctxNf = Poseidon(s, context, 13); the circuit only checks that the leaf is in the tree and computes ctxNf, and never looks at the nullifier. The tree only grows, so a sold note can still prove, as appendix E says. The protocol document's "accept only the last 6 blocks' roots" limits how old a root may be; old leaves stay inside new roots, so it doesn't replace a check that the note is unspent. De-duplication holds within one context; with another purpose or claimant the same note proves again. v1 published the nullifier, so the note could be recognised the day it was listed; v2 keeps it private, an improvement; this "v2" is the circuit's second version, unrelated to rules v2 in a parent inscription.

What each use hands over, side by side:

UseProofGoes toOn chainOld notePublic
Site voteSpend circuitVoting serviceNoUntouchedChoice, public inputs (nullifier included); a public log of each vote's tag
Base reward claimSpend circuit, eligibility rootBitcoin transactionYesSpent, new note givenNullifier, new commitment, proof, pouch ciphertext
Bonus claimSignatureBitcoin transactionYesTied to the last claimNumber, holding
Holder proof (public code)Holder circuitOff-chain verifierNoUntouchedRoot, event id, mark
Private send (for comparison)Spend circuitBitcoin transactionYesSpentNullifier, new commitment, ciphertext, proof

07 Mining|Holding a NAKA mines SHNAKAS; why a transfer breaks the week

Week w is blocks S_w + 1 to S_w + 1,008, starting from S_1 = 971,700, 1,008 blocks a week. A note counts for a week when the block that created it is no later than the week's start and the block that spent it is later than the week's end, or it hasn't been spent.

A transfer, or a send to yourself, spends the old note and creates a new one; a listing spends the old note, and the cancel (CLAIM) creates the new one. Either way the old note doesn't last to the end of the week and the new one didn't exist at its start, so the week counts for neither. The new note from a normal reward claim is the exception: the indexer adds it to that week's eligibility tree (the week's carry in the site's state), so the week still counts. A bonus envelope only signs and issues a pouch; it spends no note and creates none.

The weight rules are in the on-chain SHNAKAS rules inscription: a base of 100%; a trait whose floor reaches 1.25, 1.5, 2 or 3 times the collection floor adds 25%, 50%, 75% or 100%; numbers 0–9, 10–99 and 100–999 add 200%, 100% or 50%, the highest only; a cap of 400%. Floors count only listings of 546 sats or more with one of five payout script types. A trait with no listing adds 100% if it has at least 20 pieces, and is rated from its sales record if it has fewer (62 and 106 traits in the 27 October snapshot). Every input is a listing or a sale in the ledger, so any indexer can compute the same weights block by block; the weight table the site hands its client only saves each one the work. On 27 October the project said the other collections move to instant listings and Nakas stay as they are, so NAKA's listings stay on chain and anyone can still run these numbers (NAKA's off-chain listings were still switched off in the site's config on 3 November). The "Shielded #" on the site's market and Staking pages is a global number that starts at 0 with NAKA, so it equals the piece number, and "Shielded numbers under 1K, 100 and 10" is this number bonus.

Each week's 266,640 is shared by weight across all 3,333 numbers. Shares for the weeks a piece is listed or unminted go unclaimed; full weeks held before a listing can still be claimed. A base claim needs no number, only proof that you held a note for the whole week in the eligibility tree. A bonus claim shows the number and the holding. In the site's vault the page is called Staking: nothing to lock or sign, and a piece received or bought counts from the following week. One claim settles every week so far, so the fee is per claim, not per week, and no relay credit is used. The confirmation for showing a piece spells it out: the number goes on chain for good, so anyone sees that this piece claimed and how much; those SHNAKAS stay linked to the piece, even after you sell them; it shows the piece wasn't listed, sold or sent from the first claimed week; the wallet paying the fee is on the transaction, and if you minted or bought the piece with your main wallet and haven't sent it privately since, these claims can be linked to that wallet; showing several pieces close together hints they share a holder.

Rewards are pouches in the SHORD ledger, not runes sent to your wallet. How pouches come about, why an unclaimable share isn't a burn, and how the totals add up are on the How mining works page.

Claimed SHNAKAS sit in the vault as pouches; a pouch's number and size are public, its holder isn't. A pouch can be sent whole, or split into 2 to 16 smaller ones, paid with your own bitcoin. The protocol lets a split write some of the new pouches straight to others, but the vault's Split keeps them all for you, and giving one away takes a second send; only burning into Snickets and depositing into Naka Lounge do it in one step. The project says the pouch market opens on 6 November: list, buy, and sweep up to 10 at once. A pouch can also be burned into Snickets, one for one, arriving two blocks later, for GTD spots in new collections and for votes (appendix I06). Burned SHNAKAS can't be spent by anyone, and Snickets are kept on the platform's books, not on chain.

By the site's text and SHNAKAS config on 3 November, splitting, sending and burning pouches are open to everyone, while listing and buying go first to a few testers with an access code, opening fully on 6 November. Pouches list instantly (listings3 is on): nothing is on chain until a sale, and price changes and cancels are immediate; a vault's first listing makes one 330-sat listing coin from its BTC. Buyers compare the price per token and get the whole pouch; the platform fee is 2%, at least 330 sats. A burn takes whole tokens from one pouch, with the fee paid from the vault's BTC, not relayed. A GTD spot is one spot, one code, one mint: the code looks like GTD-XXXX-XXXX-XXXX-XXXX, works from any wallet, and anyone holding it can use it. The confirmation says Snickets aren't returned if you don't mint, while the "My GTD codes" note says a code unused by the end of its phase gives its Snickets back; the two texts differ, so go by the site's word at the time.

Naka Lounge (play.ord-dropz.xyz) is the project's limited-time No-Limit Hold'em, with SHNAKAS as chips. The lounge is a vault of its own, apart from yours: deposited SHNAKAS go to its shielded address and it holds them (the page calls it the box), and it sends cash-outs back itself. Your vault connects as the player account: the lounge gets a player account worked out from the vault, plus the vault's shielded address and its BTC address; by the vault's own words cash-outs go only to that shielded address, and the lounge can't move anything in the vault. A deposit is a split: the amount comes off one pouch and goes to the lounge's shielded address, the same transaction paying a little of the vault's BTC to the lounge's fee address, including the fee for a later cash-out. The split is recognisable on chain: the pouch numbers and amounts are public, and the payment to the lounge was 3,330 sats in all 21 deposits up to 3 November, so it reads as a lounge deposit, though not whose. The page shows what the box holds against what it owes. The project says every card is locked in before the deal and checked on your device, and that the rake (5% of hands that see a flop, at most 2 big blinds) is saved and burned. While you play, the lounge holds those SHNAKAS, and a withdrawal sends them back to your shielded address.

Burning into Snickets sends the whole pouch privately to a burn address, or one of the pouches of a split: after shord1 comes SHA-256("Shielded Ordinals SNICKETS burn v1" ‖ 0 ‖ Snickets public key), first byte zeroed, as the owner key, then your own view key. A normal owner key is Poseidon(sk); this number comes from no one's sk, and spending it would take a Poseidon preimage, so a burned pouch can't be spent. The vault then signs a request to the platform with the envelope's hash and what opens the burned part (for a whole pouch its number, credits and s; for one pouch of a split, that pouch's ρ and s), and the Snickets arrive two blocks later; the platform checks and books them on its server. The Snickets key comes from the seed (SHA-256("shord/snickets" ‖ seed)) and signs balance checks, burns, GTD codes and votes; one vault always has the same one.

08 Verification|Who keeps the ledger, and can you check it?

How a private send is checked (public code, indexer.mjs): first the root it anchors to must be from the last 100 blocks and older than this one, then its nullifier must be unseen, then the proof must verify. Only then are the nullifier recorded and the new commitment and ciphertext taken in; if any check fails the envelope is logged as refused and the ledger doesn't change. After each block the indexer saves that block's root and leaf count.

Digest v1 is a SHA-256 over a fixed summary of the state: the tree root, the leaf count, the sorted nullifiers, the minted numbers, and each listing's nullifier, state, number, credits and price. It leaves out ciphertexts, txids, payout scripts and lock positions, so a matching digest means only those parts match.

Checkpoints: now and then an indexer saves its whole state to a file with the hashes of its rules and verification key and the last 12 block hashes, then seals it. On loading it rebuilds the tree, checks every block's root and the digest, and uses the file only if those 12 blocks are still on the best chain. If anything fails, it falls back to an older file or replays from the start.

Reorgs: when blocks at the tip are replaced, the indexer goes back to the latest checkpoint still on the best chain, or replays from the start if there is none, and keeps serving the old state until it reaches the tip again.

What happens when rules differ? The public code rejects message types it doesn't know, so those notes never enter its tree. From that block on its roots differ from the official ones, and any later transfer or listing proof that cites a root from after the split fails for it. So compare rules versions before digests.

Checking the relay: until 29 October the official relay's address matched in three places. The parent inscription's relayerPayoutScript is 5120be2563233bb4feb149c3a6111f67a2ec5061991921d97406c78ca48614fefe43, which decodes to bc1phcjkxgemknltzjwr5cg37eaza3gxrxgey8vhgpk83jjgv987leps3t3cuy; the site's status interface gives the same relayer.address; and every transaction that address sends has one shape: its own change as input, one OP_RETURN starting with SHORD (PUSHDATA2, two to four hundred-odd bytes), a 330 sats lock paid to a fresh address when it is a listing, and the rest back to itself as change. On 29 October 2026 it had 5,517 transactions and a balance of about 0.018 BTC; the 1.27 BTC it has received includes its own change, so it isn't net income. That day (blocks 973,769 to 973,777) it moved its whole balance, in a few transactions, to bc1pr5vsx…5hcp73 (first fe200a20…, last 83409f79…), and has held nothing and sent nothing since; the status interface's relayer.address became the new wallet, whose transactions keep the old shape: its own coin in, one OP_RETURN starting with SHORD, a 330 sats lock for a listing. The payout script in the rules is in the parent inscription, can't change, and is still the old address.

J Shielded names

A shielded name points a memorable name, ending in .naka or .shield, at a shielded address (shord1…). Type bob.naka when sending, and the wallet looks up the address and writes the note to it as usual. The protocol doesn't require the wallet to show you that address; to check it yourself, use the lookups in the table below. The envelope still carries what the address gives; no name appears on chain. Names are metadata outside the protocol: indexers never look at them when accepting a transfer or a listing. What follows rests on src/v1/names.mjs in the public code at 3cdbdfdf, docs/API.md and the site's interface.

QuestionAnswer
What a name is; does inscribing it yourself countAn ordinary ord inscription, JSON or plain text, with content {"p":"shord","op":"name","name":"bob.naka","to":"shord1…"} of at most 400 bytes. No parent, no signature, no fee rule: one you inscribe yourself in this format counts exactly as one the site inscribes. The indexer reads the inscriptions of every transaction in every block and takes any that pass, whoever made them and whatever they paid; the site's interface and one running the public code publish the same digest, so they hold the same names
Who gets itFor each label (the part before the dot) only the earliest valid inscription counts: block height first, then transaction order in the block, then inscription order in the transaction; later ones never count. A label is unique across both endings: once bob.naka is taken, bob.shield can't be used
FormatLowercase letters, digits and hyphens, 3 to 20 characters, no hyphen at either end or two in a row; the address must be shord1 plus 128 hex digits (owner key and view key). Labels that would pass for the platform or a wallet, such as admin, support, official, orddropz, shord, naka, vault, unisat or xverse, are reserved for nobody; the full list is RESERVED_LABELS in names.mjs, 35 labels
From which blockMainnet names count from block 969,800; earlier inscriptions are not names. Every names index starts there, which is why they agree
Can it be re-pointedNo. The target is fixed in the inscription; the code has no update, renewal or cancel, and names don't expire
Can it be moved, traded or burnedThe name inscription is an ordinary inscription: it can be sent, sold or burned. But the indexer reads it once, in the block it was inscribed, and never follows it again; the code says moving or selling it never changes where it points, and burning it doesn't either. Buying someone's name inscription won't let you receive with it: what the name does doesn't move with it
What the index keeps, and can it be queriedEach indexer keeps a table on its machine: name → address, inscription id and block, and the names of each address. Queries: /names/bob.naka for the address, /names/of/shord1… for the names, /names?after= for the whole list, /names/info for height, count and digest (the public API needs a key for all but /names/info). Running tools/names-indexer.mjs --lookup bob.naka yourself works too
After changing vaultsThe name still points at the old address. A web vault rebuilt from the same wallet and payment address keeps its address and the name keeps working; a new vault needs a new name, and the old one still sends to the old address
Who resolves it, and can you trust thatThe wallet asks a names index. Anyone can build one from the blocks with tools/names-indexer.mjs from the public code, with no account and no project server; an index publishes a running digest, and two at the same height with the same digest hold the same names. Glancing at the address the wallet shows before sending is the plainest check against a wrong answer
PrivacyThe link between a name and a shielded address is public, but the address shows nothing of what the vault holds. Inscribing it yourself ties the paying wallet to the name; the site instead inscribes it for you a block after you pay, from an unrelated coin, as the public code's status document records for dub.naka
The site todayOn 30 October 2026 the site's names interface showed names open, a fee field of 2,500, endings .naka and .shield, and 533 names up to block 973,831, with the same digest on the site's interface and the public one

K Common questions

The questions asked most in discussions and in the community, by topic. Each answer gives the conclusion first; the chapter or appendix in brackets has the detail.

Pieces and the vault

I bought a NAKA. Where is the art, and what do I hold?

The art, once inscribed, stays at the NUMS address, which nobody can spend from. You hold a note in your vault naming the piece and your owner key, spent only with your spend key. An ordinary wallet won't show it; the SHORD vault does (chapter 03).

My unlock signature leaked. What happens, and does signing again help?

The signature is the whole vault (chapter 01). The same wallet and address always give the same signature, so signing again doesn't help; open a new vault from another wallet address and send your notes there privately.

What is the Shielded Vault, how do I install it, and what if I forget the PIN?

It is what ord-dropz.xyz/wallet opens: a vault you open with a PIN. You can make a new one (fresh 24 recovery words, empty), or import the web vault by signing with UniSat or Xverse, using the exact wallet, account and address type you minted or bought with; another one opens a different, empty vault. After the import the wallet isn't needed. There is no app store: add it to the home screen from Safari on an iPhone, download the package on Android, or install it from Chrome or Edge on a computer. A forgotten PIN can't be recovered; remove the vault and restore it from the 24 words, or import it again from UniSat or Xverse. The code and link that move a web vault to a phone are the vault itself, good once and for five minutes: no photos, no chats. Don't open a vault link someone sends you; it opens their vault, and what you buy or deposit is theirs (appendix I01).

Do I keep my pieces if I change computer or phone?

Yes. Signing again with the same wallet and payment address opens the same web vault, and the 24 recovery words open it in the Shielded Vault, on a phone or in a browser. Notes sit in envelopes on the chain and come back with a scan; only prepaid relays live in the old browser, so use them up first (chapter 01, appendix A).

Can the same vault on my phone use prepaid relays bought in my desktop browser?

No. A prepaid relay's secret is made at random by that browser and blind-signed by the site; it lives in that browser and doesn't come from the seed, so the phone has none. The blind signature keeps the site from knowing who bought it. Relay credits are different: they sit in the note on the chain and travel with the piece (appendix A, appendix H).

What is the fixed text the web vault signs, and is a signature random and safe enough to be the seed?

The text is in the site's engine, four lines: "Ord Dropz shielded vault key v1", "Signing this unlocks your Shielded Ordinals vault on Ord Dropz.", "ONLY sign this on ord dropz. Anyone with this signature can move your shielded pieces.", "It does not move any bitcoin.". The wallet signs it with ECDSA, seed = SHA-256("shord/seed/v1" ‖ signature), and every key comes from the seed (appendix I01). The signature depends on the wallet's private key and this text; without that key nobody can compute or forge it, so the seed is as hard to guess as the wallet key, which is enough cryptographically. The thing to watch is not randomness but that one wallet and one address always produce the same signature: the signature is the whole seed, and once given away it can't be taken back or changed. The last line, "It does not move any bitcoin", is about the wallet you connected; whoever has the signature can still take the vault's own BTC.

What if another site asks me to sign the same text?

The same payment address signing this text with ECDSA gives the same signature, which hands over your whole vault: the copy booth of chapter 01. For a web vault this signature is the only source of its keys, and the 24 recovery words are the same seed written another way, so giving the signature away gives the vault away. The Shielded Vault app can also make a vault from a random seed, but that is a different, brand-new vault: other address, other keys, empty, and the pieces in your old vault don't move to it. After a leak, changing keys means making a new vault and sending each piece to it privately and withdrawing the BTC to it; until then everything is still in the old vault, open to whoever has the signature.

Can I take a piece out to an ordinary Ordinals wallet and sell it elsewhere?

No. Once inscribed the inscription stays at the NUMS address, whose private key nobody has, so nobody can move it (chapter 03). Other markets and explorers can see the inscription, but it never leaves; who holds it is recorded only in notes on the SHORD ledger, so it trades only where that ledger is read, today Ord Dropz. The founder says that after the next update anyone can run the indexer and trade Nakas on their own site.

Privacy

A listing shows number, price and payout address. Where is the privacy?

Nobody "matches up" the payout address by amount: it is written in the listing, and the buyer's paying address is public too. What SHORD hides is the link between notes: whether the piece changed hands between two public steps, and to whom, can't be proved (appendix B).

Does it take a private send to break the link?

A private send only means nobody can prove that today's seller is the last buyer; the number's public trail stays. What keeps a purchase and a later sale apart is that neither address is tied to you: buy with unrelated BTC, sell to a "private address" (appendix B).

How do I stay most private?

A fresh "private address" for each payout, envelopes through the relay, unrelated BTC to buy, proceeds left in the vault and then withdrawn to an unrelated address, base rewards only. What shows more: payouts to the connected wallet, broadcasting with your own fee, one payout address across several listings, bonus claims (the number shows, and the pouch stays tied to the piece), and votes (matched once the note is spent) (appendix B).

Will paying network fees from the vault's BTC cost privacy?

Yes. The paying input shows in that envelope's transaction; a vault's BTC mostly comes from listing payouts, whose addresses are written in the listings, so it ties the envelope to that listing. Prepaid relays keep the extra layer (appendix I04).

What is the "public key" in a shielded address? A hash? The same key that spends bitcoin?

A shielded address is shord1 plus 64 bytes. The first 32 are the owner key ownerPk = Poseidon(sk), a one-way hash of the spend key, not a point on an elliptic curve, used only inside the proof circuits; the last 32 are the view key, an x25519 public key used only for encryption. Neither is a key that signs bitcoin transactions. The keys that sign bitcoin transactions in the vault (its bitcoin addresses, listing return keys, sale payout addresses) are separate secp256k1 keys, hashed from the seed under their own labels like the spend and view keys, and knowing one gives none of the others; the wallet you signed with is another key again (appendix I01).

The address holds my view key, and a name publishes it. Can anyone use it to see what I hold?

No. What is public is the view public key, not the view secret key. The public key only lets people encrypt to you, like a lock anyone can snap shut and only you can open. Each ciphertext uses a one-time key; with only your view public key and that one-time public key nobody can compute the shared secret needed to decrypt, so nobody can tell which ciphertexts are yours. The commitments on chain mix in the piece secret s and a random value; without s, your owner key can't be tested against any leaf. A send on its way to you is no different: the relay gets only the envelope's bytes, and once mined outsiders see just a new commitment. No site or API can look an address up either: the official API and the public indexer serve every note with no owner attached, and the vault downloads them all and tries each one locally with the view key (the public code's view.mjs: so the server never learns which notes belong to whom); the only lookup by address is for shielded names (/names/of/). The exception is whoever sent you the piece privately; see the next question.

After I send a piece privately, can I still follow it? When does that stop?

For a while, until s is renewed. A private send keeps the piece secret s, and the new ρ′ = Poseidon(nf, 11) comes from the nullifier published in the envelope; the circuit requires both. s is not public: only those who held the piece since s was last renewed know it, and the sender is one of them. It can't compute your nullifier and doesn't need to: each time you spend the note, its nullifier is published in the envelope, and the next note's randomness comes from that published nullifier. Taking each envelope's nullifier and new commitment, with s, the number, the credits and an address it guesses, it can check for a match: when you claim a base reward (spending the old note for a new one of your own) it can tell the piece is still yours and in which week; if you send it privately to an address it knows, such as any public shielded name, it can match that too; a send to an address it can't guess doesn't match. s is renewed only when the new owner builds the new note itself: the buyer at a sale, the seller when taking back an on-chain listing, the minter at a mint; splitting a SHNAKAS pouch also gives every new pouch a fresh s. A private send or a base reward claim keeps it, and an off-chain listing cancelled before any sale leaves nothing on chain and keeps it too. One sale, or one on-chain listing taken back, ends the trail. Outsiders never know s and are not affected (appendix I01).

Notes sent to one address look unrelated. How do I find mine, and prove they are mine?

Finding uses the view key: the vault tries to decrypt every ciphertext on chain, and the ones that open are yours, holding the number, credits, ρ and s. Checking is a recomputation: your owner key with that ρ and s gives a commitment, and if it matches a leaf, that note is yours. When you spend it, the proof says "I know sk, ρ and s, their commitment is in this tree and the nullifier comes from them", without saying which leaf. Outsiders can't match notes because of s and the randomness; only you can prove because of the spend key.

The vault's "Prove" button: who gets the proof?

Ord Dropz's own verifier, /holder/verify. The button first asks you to connect a wallet, "to name who the proof is for": the wallet's payment address becomes the claimant and goes into the context with the collection and the purpose holder-demo. The browser builds the proof with the holder circuit and sends it, with the purpose and the claimant address, to the site; once checked, the dialog says "Verified: you hold a piece of this collection. The verifier did not learn which one.". Nothing goes on chain and nothing else happens: for now it is a demo, and the hint says Discord roles and whitelists "will use" it. "Without revealing your wallet" means the proof doesn't reveal your vault or the piece; the request uses your connected wallet's address to say whom the proof is for. Since the context includes the claimant, one piece can prove again for another wallet address (appendix E).

Trading and listings

Can "Another address" be a bc1p or a bc1q?

Either, or a 3… address. The protocol keeps it as a 1-to-80-byte output script and only asks that the price clears its dust line; bc1p, bc1q and 3… listings have all sold (chapter 05, appendix I05).

The 330-sat listing lock is moved with no envelope. Is the piece lost?

No. Each block, the indexer checks which transactions spend a listing lock; without a valid purchase in the same one, the listing closes, and the seller signs a claim with the return key to get a new note. Only the platform can spend the lock at any time, the seller after 1,008 blocks; the lock holds no nullifier (appendix I05).

Does listing hand ownership to the 330-sat lock?

No. The listing envelope gives up the seller's nullifier and the note is spent; each indexer records the listing (number, price, payout script, return key, lock position). The lock records no ownership; how it is spent decides who gets the next note (Ownership flow).

How does the indexer check a purchase's payments?

Against its own listing record: the transaction spends the recorded lock, the listing is still active, the seller's payout script gets at least the price and the platform at least its fee. All of it was fixed at listing, so a buyer can't change it (appendix I05).

What if someone changes the receiver of a private send?

The receiver is inside the new commitment, and the commitment and body are proof inputs, so the proof fails and the envelope is rejected; the nullifier isn't recorded and the original note still works (Ownership flow).

If someone copies my envelope and sends it, is that a fee bump for me?

No. A bump speeds up your own transaction; a copy puts the same bytes in another transaction they pay for. The two don't conflict and both may be mined; the indexer takes the one earlier on chain and rejects the later one for its repeated nullifier. The result is unchanged; your own transaction's fee is simply wasted. Purchases and mints need the platform's signature on their transaction and can't be copied (Ownership flow).

What if two people buy the same piece at once?

Both purchases must spend the same lock, and Bitcoin lets only one be mined; the other is void as a whole and pays nothing (Ownership flow). Each needs the platform's signature on that transaction: the public co-signer won't sign a second one while the first is pending ("this listing is already being bought or cancelled"), and what NAKA's platform does isn't public.

A purchase is on its way into a block. Who can stop it?

The buyer, by spending the same input in a higher-fee transaction first; the platform, by spending the lock first, which closes the listing; the seller can't before the lock is 1,008 blocks old (a cancel needs the platform), and after that can spend the lock first (Ownership flow).

The nullifier is public in the mempool. Can someone grab it?

No. The proof binds the nullifier, the new commitment and the envelope body; change a byte and it fails, and a new proof needs the spend key. At most someone mines the same envelope first, and the receiver still gets the note (appendix I04, Ownership flow).

I sent a piece to the wrong address. Can I take it back?

No. Once the envelope is on chain and the nullifier recorded, the old note is spent; there is no undo. A shielded address has no checksum: the wallet checks only the shord1 prefix, the length and that the first half is a valid field element, so a mistyped character usually still makes a "valid" address, and the piece goes to an address nobody can open, for good. Copy and paste addresses and check both ends before sending; with a name, check where it points first, using the lookups in appendix J. A right address whose owner just isn't using the vault is fine: the note stays on chain, and the owner's vault finds it whenever the seed is opened.

How long does a private send take, and how does the recipient know?

Through the official relay, envelopes are gathered and sent in batches; its status shows when the next batch goes (appendix I04). Then the transaction needs a block and the indexer's acceptance, and the piece appears when the recipient's vault syncs and finds the ciphertext. Broadcasting yourself, paying the fee, skips the batch. Nothing notifies the recipient: the new note in their vault is what counts (appendix I04).

After a private send, can I prove it to the recipient or a third party? In an OTC deal with an escrow, how does the escrow know the seller really sent the NAKA or SHNAKAS to the buyer?

Yes, by checking the maths rather than taking the buyer's word. The simplest sign is the new note in the buyer's vault; to guard against a buyer who denies it, the escrow asks the seller for the new note's details: the transaction id, the number (for SHNAKAS, the pouch id), the credits and the piece secret s. The escrow takes the owner key from the buyer's shielded address, reads the nullifier nf from that transaction's envelope, and computes cm = Poseidon(number, credits, Poseidon(owner key, Poseidon(nf, 11), s)). If it equals the envelope's new commitment, and the indexer has that commitment on record (the site's /state lists it with its transaction), the new note can be spent only with the buyer's spend key, and the seller can't take it back; a SHNAKAS pouch's size is public by its id. The check uses only public data and the numbers the seller hands over, and none of the buyer's keys. The site does exactly this when it burns a whole SHNAKAS pouch into Snickets: it hands the pouch number, credits and s to the platform to check (appendix I07). The seller can produce them later too: the old note was written to them, their vault can open it again, and the nullifier comes from their spend key.

How to get these details: the site shows no s, and none of the API routes its pages use signs for a user or exports a proof. The way that works goes through the vault's seed: the site's engine (the script the vault page itself downloads, open to anyone) has the functions that turn a seed into every key and open, one by one, the notes the public ledger holds for you. On their own computer the seller takes the vault's 24 recovery words to get the keys, loads the site's public ledger (/state for NAKA, /rewards/rune/state for SHNAKAS) and scans their notes, spent ones included; the old note whose nullifier equals the one in that transfer's envelope gives the number, the credits and s to hand over, the credits adjusted by what the transfer spent and bought. The escrow recomputes the new commitment with the Poseidon of the public repository, with none of the seller's keys.

This step uses the 24 recovery words, so take great care: the words are the whole vault: leak them once and the pieces and the vault's BTC can be taken, and they can't be changed, only replaced by a new vault and moving everything over one by one. If it has to be done: only on a computer you control, offline if you can; never type the words into a web page, a form, a chat or a tool someone else gave you; let no one, escrow included, do it for you, and hand over only these details. The web vault's unlock signature is the same: any web page can ask your wallet to sign that unlock message, and signing it hands over the vault, so sign it nowhere but the official site. Without full confidence, route through the escrow as below, or rely on the new note appearing in the buyer's vault.

Three things to know. First, these details don't cover whether the ciphertext is right: the circuit doesn't check it, and the buyer's vault finds the note by opening it. The site's client always encrypts correctly; against a deliberately broken one, these details give the buyer all the data needed to spend the note, but the site's vault only lists notes whose ciphertext opens and the archived pages have no import, so it would take a tool of one's own. Second, a SHNAKAS pouch sent straight to the other side in a split leaves the seller's engine without that pouch's ρ and s, so the details can't be given afterwards; with an escrow, split to yourself to the agreed amount first, then send that whole pouch privately. Third, once s is handed over, the escrow can follow the piece as the seller can, until s is renewed (previous question). The other way is to route through the escrow: the seller sends to the escrow's shielded address, the escrow sees it in their own vault and passes it on once paid; one more send, and the escrow knows s just the same. No zero-knowledge proof that keeps s back exists today; it would need a new circuit. The site's "prove" button proves you hold some piece of the collection, not which, and doesn't check it's unspent, so it doesn't help here. Wait a few confirmations before releasing the money, in case of a reorg (appendix I04).

Once my BTC payment confirms, have I bought it?

The indexer's acceptance decides: it's a sale once accepted and a new note appears in your vault (chapter 05).

Where is my BTC after a sale?

At the payout address chosen when listing: on the vault's Bitcoin page for "private address", straight to the connected wallet or the typed address otherwise (chapter 05).

The relay

Is bc1phcjk…3t3cuy the project's relay address, and why so many envelope transactions?

It is the official relay's payout address in the rules: credit and inscription fees come in, and the relay spends them on users' miner fees and listing locks, which is why the chain is full of envelopes it sent. Since 29 October the relay sends from a new wallet, the one the status interface names (chapter 08, appendix I08).

How do relay credits and prepaid relays differ?

Credits sit in the note and travel with the piece, 2,500 sats each, bought per piece. Prepaid relays are a separate voucher from the site's Relays tab, kept in this browser; any piece's private send, listing or cancel can use them, as many as the day's network fee takes. A purchase is paid by the buyer in BTC and isn't among the uses the site lists (appendix A).

Do relay credits follow the piece or the vault?

The piece; unspent credits go to the buyer on a sale (appendix A).

What are the ways to pay a network fee?

The site lists four: the piece's relay credit, the connected wallet, the vault's own BTC, a prepaid relay. Credits and prepaid relays leave no paying address of yours on chain (appendix A).

Has the project dropped the relay?

No. The "CREDITS GONE" section of the founder's 19 October post stops the sale of credits, keeps old ones working, makes the vault's BTC the default for network fees and keeps prepaid relays for extra privacy. On 3 November NAKA's credits were still on, and every market listing shows how many it carries (appendix I04).

Mining and weights

What do I have to do to mine SHNAKAS?

Nothing. A NAKA unlisted in your vault counts every block, and each full week can be claimed on the vault's Staking page. Listing, cancelling or a transfer breaks that week; a piece received or bought counts from the next week (chapter 07).

What does a bonus claim make public?

The number goes on chain for good: anyone sees the piece claimed, how much, and that it wasn't listed or moved since the first claimed week, and the pouch stays tied to the piece even after you sell it. The fee wallet is on the transaction; if you minted or bought the piece with your main wallet and haven't sent it privately since, the claim links to that wallet. A base claim does none of this (appendix I07).

What is the Naka Lounge, and how are deposited SHNAKAS kept?

The project's limited-time Hold'em with real SHNAKAS as chips. The lounge is a vault of its own: a deposit splits a part off a pouch and sends it to the lounge's address, the lounge holds it while you play, apart from your vault, and a withdrawal sends it back to your vault's address. The page publishes the box's balance and what it owes; the rake is collected and burned; the lounge can't touch what is in your vault (appendix I07).

Can a third party plug into the Naka Lounge or the vault, to build games and apps that move assets?

Not into the official vault. Its "connect" and one-step deposit accept only the official play.ord-dropz.xyz and lounge-api.ord-dropz.xyz, fixed in the vault's code; a request from any other site gets "is not the Naka Lounge. Nothing was shared."; and the Prove button makes proofs only for the site's own purposes. Building one means writing your own software that receives and sends the assets, in one of two shapes. One is a wallet: users make a new vault in your software, the keys stay on their own device, and they send pieces or pouches over privately from the official vault; the assets stay in their own hands, provided the wallet itself can be trusted. The other is like the lounge, pooling several people's assets (a table, a prize pool): a note has one owner key and the protocol has no note held jointly, so the app has to run a vault of its own that players send their assets to and get them back from. The app's keys never leave it, but the players have handed their assets to it, so it should show what the box holds against what it owes; nor is there a one-step deposit, players type the address themselves. How far either can go today is in this section's questions on building your own wallet or market and on the site's engine and proving keys: the public repository has no code that builds transactions and no wallet, the proving keys come only from the site, and the SHNAKAS split and claim messages are not public yet, so those can only follow the site's engine. Reading data, or sending rewards to someone's shielded address, needs nobody else's assets. Being asked to sign the vault's fixed text on another site, or to import your recovery words, is not a permission: it hands over the whole vault (appendix I07).

Does the project compute the reward weights?

It doesn't have to. The rules are in the on-chain SHNAKAS rules inscription and the inputs are the ledger's listings and sales, so any indexer can compute the same weights block by block; the table the site hands its client only saves work (appendix I07).

Will NAKA move to off-chain listings too?

On 27 October the project said no: the other collections move to instant listings, and Nakas stay as they are. Listings stay on chain, so anyone can still compute the weights block by block (appendix I07).

Where can I see each piece's weight and output?

The rules are in chapter 07 and appendix I07, public on chain for anyone to compute; for ready-made figures there is the Naka Sigil extension, as estimates.

Shielded names

How does a shielded name work?

It is an ordinary inscription saying "bob.naka points at shord1…". Only the earliest inscription of a name counts; the wallet looks up the address and sends as usual, and no name appears on chain (appendix J).

Does a name I inscribe myself in the right format count?

Yes. There is no fee rule and no check of who inscribed it: valid content and a free label make it count exactly like one the site inscribes (appendix J).

If the name inscription is moved or burned, does the name still work?

Yes, and it points at the same address. The indexer reads a name once, in the block it was inscribed, and never follows the inscription again (appendix J).

What is a shielded address, and when is it used?

shord1… followed by the owner key Poseidon(sk) and the view key. It is needed only when someone else sends to you privately; your own mints, purchases and claims use your vault's keys and no address (appendix I01).

Can one shielded address receive other collections?

Yes. The address comes from the seed alone, with no collection in it; every envelope starts with its collection id, so one address receives Nakas, SHNAKAS pouches and any later shielded collection, and a name points at it all the same (appendix I01).

If one address receives several pieces, can the chain tell?

No. Each new note's commitment mixes in fresh randomness, so they have nothing in common, and each ciphertext uses a fresh one-time key, so it names no recipient. A public address isn't a public holding (appendix I01).

Can a name be transferred or sold?

The name inscription can be moved or sold, but its target is fixed: moving or selling it changes nothing, and there is no way to re-point it. Buying someone's name won't let you receive with it (appendix J).

What happens to my name if I change vaults?

It still points at the old address. A web vault rebuilt from the same wallet and payment address keeps its address and the name works; a new vault needs a new name (appendix J).

What does getting a name make public?

The link between the name and your shielded address is public, but it shows nothing of what the vault holds. Inscribing it yourself ties the paying wallet to it; the site inscribes it for you from an unrelated relay coin (appendix J).

Security limits

What is the trusted setup, and does it affect my piece?

Groth16 proving keys are made with one-time random numbers that are discarded afterwards; those numbers are the setup secret. NAKA's were made by the team alone, and the public code pins the key's hash as e7dbcdb0…e788; whoever kept them could add a note under an existing number, but couldn't take the piece from your vault, and real notes still spend. A multi-party ceremony is planned for the next collection (appendix D).

Can any holder forge?

No. Only someone holding that setup secret can: whoever ran the setup, or anyone who copied it from that machine. Everyone else has only the public proving and verification keys, and a proof from them needs a real note in the tree and its spend key, so they can only spend what is theirs; making a false statement pass without the secret is computationally out of reach.

How would an extra note show?

The sign visible on chain is two live listings of the same number at once. In the site's state on 29 October, none of its 5,233 listings showed it.

The project says the next update removes "a key of ours". Is that the setup secret?

No. The "TRAINING WHEELS OFF" section of the founder's 19 October post is about the platform's signing key in the trading flow: it has been in the loop since launch so that, if anyone found a bug, the platform could stop it before holders were hurt; the next update removes it, and listings, price changes and cancels stay off chain until a sale. It governs whether mints and purchases need the platform's signature, which is a different matter from the proving keys. The plan for the setup is in the official status document: a public multi-party ceremony before the next collection, with the new verification key's hash pinned in that collection's parent.

How would the keys move to ceremony-made ones?

A new collection's parent pins the new verification key's hash, and an indexer whose key doesn't match refuses to run; inscriptions can't change, so everyone running an indexer accepts only that key. NAKA's verification key is pinned in the indexer code (src/v1/collections.mjs), so changing it means upgrading indexers together from some block on; with the circuit unchanged, existing notes spend with the new proving key. The public documents currently plan the ceremony for the next collection.

Is a multi-party ceremony sound?

Yes, and it is the usual way to remove a single person's secret from Groth16. Each contributor mixes randomness in on their own machine, and the final key depends on all of it, so as long as one person destroys their share, nobody can forge. Every step leaves a record that anyone can verify with the script, from the phase-1 file and the circuit to the final key; the last step mixes in the hash of a Bitcoin block whose height was announced in advance, so even the last contributor can't steer the result. Three things to keep in mind: contributors should be different people, and the surest way is to take part yourself or through someone you trust, then find your contribution hash in the record; the circuit's own constraints are a matter for audits, not the ceremony; and a ceremony protects the collections that use its keys.

How do I take part in the multi-party ceremony? When, and what do I do?

Sign-up and dates will come from the project; the public documents say "before the next collection". By the script it is a relay: the coordinator makes the starting key from the circuit and the phase-1 file (init) and hands it, with the record transcript.json, to the first contributor; each contributor runs node ceremony/ceremony.mjs contribute spend --name "Name" on their own machine, which mixes operating-system randomness with anything they type, uses it once in memory, and writes the next key and their contribution hash; they pass the new key and the record on. The spend and holder circuits each get a round, and the end mixes in the hash of a Bitcoin block whose height was announced in advance. To check fairness yourself: note your contribution hash when you take part; afterwards download the whole record, compile the circuit yourself and run verify, confirming the chain is valid and your hash is in it; then check that the new collection's parent pins a spendVkeyHash equal to the final verification key's hash. As long as your own randomness really was discarded, nobody can forge.

At a purchase, what do I check before signing?

The site builds the payment transaction and you sign it in your wallet. The wallet lists every output: the seller's address and amount should match the listing, with the platform fee as a separate line; sign once they do. An off-chain listing's price is signed by the seller in advance, binding the coin the listing uses and the payment to the seller (appendix I05).

Decentralisation and checking

Can I scan my notes back and replay the ledger myself?

The notes are in envelopes on the chain, so scanning them back depends on no one; how far a replay goes today is in chapter 08 and appendix H, and reward weights follow the on-chain rules, not the site's table.

What is 9F3A on the indexer's screen on the cover?

A stand-in for the first digits of a state digest. Two indexers agree on what the digest covers when their digests match at the same block (chapter 08).

I'm a developer. How far can I build my own wallet or market today?

The public repository is MIT-licensed and holds the indexer, the relayer, the co-signer, the ceremony script, the circuits and the verification keys: you can run your own indexer and check it against the official digest, with no key and no limit, or run a relay. There are two ready interfaces. The site's own (shielded-api.ord-dropz.xyz/api/shielded, the one its vault uses) needs no key today and serves the listings and the whole state, with unpublished limits. The hosted API Ord Dropz runs separately needs a key; see the next question. The site wallet's engine and proving keys can be downloaded but aren't in the public repository and carry no license; see the one after. A NAKA mint or purchase is signed by the platform on that transaction, so sales happen on the site for now; and the public code knows six message types, while the live rewards, off-chain listings and splits aren't public yet (appendix H). The founder says that once the next update removes the platform's key, anyone can run the indexer and trade Nakas on their own site, and the full code will then be open-sourced.

How do I get a key for the hosted API, and what does it add?

On the Ord Dropz Discord, verify a wallet with /verify, then run /apikey; the key is shown once. Without a key the hosted API (shielded-public-api-production.up.railway.app, running the public repository's indexer) answers only /status, /collections, /names/info and /health, at 30 units a minute per network address. With one you get 60 units a minute and 5,000 a day, and these routes: /listings for what is on sale, /state for the whole public state (what scanning your own notes needs, 20 units in full), /collection for the rules as inscribed, /pieces for which child inscription is which piece with traits and the art check, /registry for every shielded collection found on chain, /c/<collection>/… for other collections, /names for the full name list, /names/<name> for the address a name points at, and /names/of/<address> the other way. That lets you build a market page, listing alerts or a wallet scan without running an indexer, and check where a name points before sending (the site's own /names/<name> only says whether a name is taken). It grants no power: it is all public chain data, it moves nothing, and your own indexer gives the same. The key is issued to a verified wallet; keep it on your own server, never in a web page or an app you hand out.

Where do I download the site wallet's engine and proving keys, and what are they for?

Under the site interface's /engine/, directly in a browser or with curl: shielded-browser.js (the engine, 567,545 bytes), spend.wasm and spend.zkey (the spend circuit's calculator and proving key, about 2.5 MB and 6.3 MB), holder.wasm and holder.zkey (the holder circuit, about 2.4 MB and 5.6 MB). The vault page downloads the same files when it opens. They serve three purposes. Reading: how keys come from the signature, what text is signed and what is sent to the site are all in the engine, and much of appendix I01 and appendix K was checked by reading it. Checking: exporting the verification key from spend.zkey with snarkjs and hashing it gives exactly e7dbcdb0…e788, the hash the public code pins for NAKA; holder.zkey matches the repository's verification key too; and the proving keys record a single phase-2 contribution (appendix D). Keeping: the public repository has verification keys but no proving keys, and without spend.zkey and spend.wasm no proof can be made, so keep a copy if you want to prove offline (appendix H). The engine carries no license, so ask the project before reusing it; reading it needs no keys, and don't give your seed to a copy of unknown origin.

Terms

What is in an envelope?

All the bytes of one SHORD message, in a transaction's OP_RETURN: a 15-byte header (SHORD, version, type, collection id), a body laid out by type, and for types with a proof a closing 256-byte proof. A private transfer is 462 bytes (appendix A).

What does a commitment hold, who computes it, and where is it kept?

cm = Poseidon(number, credits, inner), inner = Poseidon(owner key, ρ, s). In a private send the sender's vault computes it and proves it; at a mint, purchase or claim the receiver gives inner and the indexer completes it. It goes into the block with the envelope and becomes a leaf in every indexer's record tree (chapter 03, appendix I03).

What is inner?

The inner fingerprint: a hash of the note's fields other than number and credits (owner key, ρ, s) (appendix A).

What are the characters on the NF board in plate 04?

The first digits of nullifiers, the red one just added; a nullifier seen again is rejected (chapter 04).