QBIT-20 — SPECIFICATIONBACK TO QBIT-20

QBIT-20. THE SPECIFICATION.

Version 1 — 28 October 2026. A convention, not a contract. If two indexers follow these rules, they agree. If they do not, there is no on-chain arbiter.

The Markdown file is the canonical source: QBIT20_SPEC.md. This page is the same text, rendered for reading.


01WHAT QBIT-20 IS

QBIT-20 is an inscription convention on Qbit. A JSON object is written to an OP_RETURN output. An indexer reads those objects back in block order and maintains balances. The chain stores text. It does not know ticks, supplies, or balances.

This is not Ordinals. There is no Taproot, no commit / reveal envelope, no sat binding, and no sat numbering on Qbit. Do not apply Bitcoin BRC-20 assumptions here.

02RECORD FORMAT

A record is a UTF-8 JSON object, written as the single data push of one OP_RETURN output. The field p must be exactly "qbit-20", case-sensitive. "QBIT-20", "qrc-20" and "brc-20" are different protocols and are ignored. A tick is exactly 4 characters, uppercase letters A–Z or digits 0–9.

Amount fields (max, lim, amt) are strings of decimal integers. No decimals, no signs, no separators, no leading zeros — except the string "0" itself. "02100" is not a valid amount.

Field dec must be exactly "8". A deploy with any other dec is not a valid deploy; the indexer ignores it.

If a transaction carries more than one OP_RETURN output, the indexer reads the first one. The rest are ignored. Unknown fields are ignored. Malformed JSON is ignored. An invalid record never fails the transaction; the indexer simply skips it.

03OPERATIONS

Deploy. The first valid deploy for a tick, in block order, is canonical. Later deploys of the same tick are ignored. max is the total supply. lim is the amount of one mint. dec is "8". A deploy does not mint anything. It only opens the tick.

{"p": "qbit-20", "op": "deploy", "tick": "QORD", "max": "210000000", "lim": "2100", "dec": "8"}

Mint. Valid only after the tick is deployed. amt must equal lim, except for the final remainder mint, where amt must equal max minus the amount already minted, and must be greater than zero. Minting stops when cumulative minted reaches max. Overshoot is ignored. The minted amount is credited to the available balance of the sender address — the first input address of the mint transaction, as read by the indexer. Minting opens at deploy height + 60 blocks (about 1 hour at ~60 s per block). Mints recorded before that height are ignored.

{"p": "qbit-20", "op": "mint", "tick": "QORD", "amt": "2100"}

Transfer — one step. There is no inscribe-then-send two-step flow and no transferable state. Balances have a single column: available. The receiver is the first non-OP_RETURN output address of the same transaction. If there is no such output, the transfer is ignored. The sender is the first input address of the transaction, the same definition as for mint. The sender must hold at least amt in available at the time the indexer processes the block. Otherwise the transfer is ignored. On a valid transfer the indexer moves amt from the sender's available to the receiver's available. The receiver output carries 10,000 bits. Those bits belong to the receiver. They are not a fee and they are not burned. The amount is a wallet-side convention, not a protocol rule, and the indexer does not check it — but it must sit above the chain's P2MR dust threshold (about 2,800 bits at the default dust relay fee), because a fee-paying transaction containing any dust output is rejected by the mempool.

{"p": "qbit-20", "op": "transfer", "tick": "QORD", "amt": "2100"}

04PARAMETERS — FIRST TOKEN

05ANTI-SWEEP RULES

These rules are indexer rules, not consensus rules. A transaction that breaks them is still valid on chain; its record is ignored. They exist so one script cannot take the whole supply in minutes, and so a small mint is still finishable.

Why these numbers: at 20 valid mints per block and ~60-second blocks, 100,000 mints take at least 5,000 blocks — about 3.5 days — even under full demand. The per-address caps bound any single actor to at most 210,000 tokens, 0.1% of supply, without many addresses. The delayed open exists because the deployer knows first; an hour is the smallest honest head start to give everyone else. The fixed amount removes the advantage of splitting one mint into many dust mints, or stuffing a large amount into a single mint.

06INDEXER BOUNDARIES

Order is block height, then transaction order inside the block. Mempool order does not count. Unconfirmed records are preview only. On a reorg, the indexer rolls back to the common ancestor and replays. Only confirmed blocks are final for deploy, mint and transfer.

The indexer must read full transactions, including OP_RETURN outputs. Address-only APIs are not enough. If two indexers disagree, there is no on-chain arbiter. Publish the indexer version and the rule set alongside any balance, so anyone can replay the chain and check the answer. A record that is valid JSON but breaks a rule is ignored, not rejected — the transaction stays on chain.

07WHAT THIS DOES NOT PROMISE

Experimental. No audit. No value, no market, no listing, no future development is promised. A QBIT-20 record is text on a chain. Holding a balance in an indexer is not holding a token on chain. Broadcast is irreversible.

08REFERENCE

EXPERIMENTAL. NO AUDIT. IRREVERSIBLE.