{"generator":"tools/build.mjs","warning":"Generated file. Run `npm run generate` after editing the data model.","version":"1.1.0","origin":"https://bitcoinuniverseio.github.io/dust-20/","count":229,"entries":[{"u":"./","t":"Overview","h":"DUST-20","s":"DUST-20 binds every token unit to an exact number of satoshis. Deploy and mint are inscriptions, movement is an ordinary Bitcoin spend. Specification, decoder, test ve...","k":"Overview A token unit is an exact number of satoshis.","w":6},{"u":"./#summary","t":"Overview","h":"What DUST-20 is","s":"DUST-20 binds every token unit to an exact number of satoshis. Deploy and mint are inscriptions, movement is an ordinary Bitcoin spend. Specification, decoder, test ve...","k":"Overview","w":2},{"u":"./#availability","t":"Overview","h":"Availability in Bitcoin Universe","s":"DUST-20 binds every token unit to an exact number of satoshis. Deploy and mint are inscriptions, movement is an ordinary Bitcoin spend. Specification, decoder, test ve...","k":"Overview","w":2},{"u":"./#shape","t":"Overview","h":"The shape of the protocol","s":"DUST-20 binds every token unit to an exact number of satoshis. Deploy and mint are inscriptions, movement is an ordinary Bitcoin spend. Specification, decoder, test ve...","k":"Overview","w":2},{"u":"./#audience","t":"Overview","h":"Who this is for","s":"DUST-20 binds every token unit to an exact number of satoshis. Deploy and mint are inscriptions, movement is an ordinary Bitcoin spend. Specification, decoder, test ve...","k":"Overview","w":2},{"u":"./#entry","t":"Overview","h":"Entry points","s":"DUST-20 binds every token unit to an exact number of satoshis. Deploy and mint are inscriptions, movement is an ordinary Bitcoin spend. Specification, decoder, test ve...","k":"Overview","w":2},{"u":"specification.html","t":"Specification","h":"Normative specification","s":"The normative DUST-20 specification: numbered rules DUST-2.1 to DUST-9.8 covering carrier, integer encoding, identifiers, deploy, mint, allocation, burn and indexer se...","k":"Specification Numbered rules, encoding, identifiers, operations and state transitions.","w":6},{"u":"specification.html#scope","t":"Specification","h":"1 Scope and conventions","s":"The normative DUST-20 specification: numbered rules DUST-2.1 to DUST-9.8 covering carrier, integer encoding, identifiers, deploy, mint, allocation, burn and indexer se...","k":"Specification","w":2},{"u":"specification.html#carrier","t":"Specification","h":"2 Message carrier","s":"The normative DUST-20 specification: numbered rules DUST-2.1 to DUST-9.8 covering carrier, integer encoding, identifiers, deploy, mint, allocation, burn and indexer se...","k":"Specification","w":2},{"u":"specification.html#integers","t":"Specification","h":"3 Integer encoding","s":"The normative DUST-20 specification: numbered rules DUST-2.1 to DUST-9.8 covering carrier, integer encoding, identifiers, deploy, mint, allocation, burn and indexer se...","k":"Specification","w":2},{"u":"specification.html#identifiers","t":"Specification","h":"4 Identifiers","s":"The normative DUST-20 specification: numbered rules DUST-2.1 to DUST-9.8 covering carrier, integer encoding, identifiers, deploy, mint, allocation, burn and indexer se...","k":"Specification","w":2},{"u":"specification.html#deploy","t":"Specification","h":"5 Deploy","s":"The normative DUST-20 specification: numbered rules DUST-2.1 to DUST-9.8 covering carrier, integer encoding, identifiers, deploy, mint, allocation, burn and indexer se...","k":"Specification","w":2},{"u":"specification.html#mint","t":"Specification","h":"6 Mint","s":"The normative DUST-20 specification: numbered rules DUST-2.1 to DUST-9.8 covering carrier, integer encoding, identifiers, deploy, mint, allocation, burn and indexer se...","k":"Specification","w":2},{"u":"specification.html#allocation","t":"Specification","h":"7 Allocation and movement","s":"The normative DUST-20 specification: numbered rules DUST-2.1 to DUST-9.8 covering carrier, integer encoding, identifiers, deploy, mint, allocation, burn and indexer se...","k":"Specification","w":2},{"u":"specification.html#burn","t":"Specification","h":"8 Burn","s":"The normative DUST-20 specification: numbered rules DUST-2.1 to DUST-9.8 covering carrier, integer encoding, identifiers, deploy, mint, allocation, burn and indexer se...","k":"Specification","w":2},{"u":"specification.html#indexing","t":"Specification","h":"9 Indexer semantics","s":"The normative DUST-20 specification: numbered rules DUST-2.1 to DUST-9.8 covering carrier, integer encoding, identifiers, deploy, mint, allocation, burn and indexer se...","k":"Specification","w":2},{"u":"specification.html#anatomy","t":"Specification","h":"10 Transaction anatomy","s":"The normative DUST-20 specification: numbered rules DUST-2.1 to DUST-9.8 covering carrier, integer encoding, identifiers, deploy, mint, allocation, burn and indexer se...","k":"Specification","w":2},{"u":"specification.html#transitions","t":"Specification","h":"11 State transitions","s":"The normative DUST-20 specification: numbered rules DUST-2.1 to DUST-9.8 covering carrier, integer encoding, identifiers, deploy, mint, allocation, burn and indexer se...","k":"Specification","w":2},{"u":"specification.html#invalidity","t":"Specification","h":"12 Invalidity conditions","s":"The normative DUST-20 specification: numbered rules DUST-2.1 to DUST-9.8 covering carrier, integer encoding, identifiers, deploy, mint, allocation, burn and indexer se...","k":"Specification","w":2},{"u":"reference.html","t":"Reference","h":"Reference","s":"Complete DUST-20 reference: every field with type, byte length, constraint and provenance, the formula set, fee and size considerations, limitations and a five-part im...","k":"Reference Field ledger, formulas, fee and size, limitations, checklist.","w":6},{"u":"reference.html#operations","t":"Reference","h":"Operations","s":"Complete DUST-20 reference: every field with type, byte length, constraint and provenance, the formula set, fee and size considerations, limitations and a five-part im...","k":"Reference","w":2},{"u":"reference.html#fields","t":"Reference","h":"Field ledger","s":"Complete DUST-20 reference: every field with type, byte length, constraint and provenance, the formula set, fee and size considerations, limitations and a five-part im...","k":"Reference","w":2},{"u":"reference.html#formulas","t":"Reference","h":"Formulas","s":"Complete DUST-20 reference: every field with type, byte length, constraint and provenance, the formula set, fee and size considerations, limitations and a five-part im...","k":"Reference","w":2},{"u":"reference.html#fees","t":"Reference","h":"Fee and size","s":"Complete DUST-20 reference: every field with type, byte length, constraint and provenance, the formula set, fee and size considerations, limitations and a five-part im...","k":"Reference","w":2},{"u":"reference.html#limitations","t":"Reference","h":"Limitations","s":"Complete DUST-20 reference: every field with type, byte length, constraint and provenance, the formula set, fee and size considerations, limitations and a five-part im...","k":"Reference","w":2},{"u":"reference.html#checklist","t":"Reference","h":"Implementation checklist","s":"Complete DUST-20 reference: every field with type, byte length, constraint and provenance, the formula set, fee and size considerations, limitations and a five-part im...","k":"Reference","w":2},{"u":"reference.html#reconciliation","t":"Reference","h":"Where sources disagree","s":"Complete DUST-20 reference: every field with type, byte length, constraint and provenance, the formula set, fee and size considerations, limitations and a five-part im...","k":"Reference","w":2},{"u":"reference.html#open","t":"Reference","h":"Open questions","s":"Complete DUST-20 reference: every field with type, byte length, constraint and provenance, the formula set, fee and size considerations, limitations and a five-part im...","k":"Reference","w":2},{"u":"how-it-works.html","t":"Guide","h":"Guide","s":"A plain-language walkthrough of DUST-20: what a deploy fixes, what a mint creates, how units follow satoshis through a spend, worked examples, and which Bitcoin Univer...","k":"Guide The lifecycle in plain language, with the arithmetic shown.","w":6},{"u":"how-it-works.html#lifecycle","t":"Guide","h":"The lifecycle","s":"A plain-language walkthrough of DUST-20: what a deploy fixes, what a mint creates, how units follow satoshis through a spend, worked examples, and which Bitcoin Univer...","k":"Guide","w":2},{"u":"how-it-works.html#deploy","t":"Guide","h":"Reading a deploy","s":"A plain-language walkthrough of DUST-20: what a deploy fixes, what a mint creates, how units follow satoshis through a spend, worked examples, and which Bitcoin Univer...","k":"Guide","w":2},{"u":"how-it-works.html#mint","t":"Guide","h":"Reading a mint","s":"A plain-language walkthrough of DUST-20: what a deploy fixes, what a mint creates, how units follow satoshis through a spend, worked examples, and which Bitcoin Univer...","k":"Guide","w":2},{"u":"how-it-works.html#worked","t":"Guide","h":"Worked transactions","s":"A plain-language walkthrough of DUST-20: what a deploy fixes, what a mint creates, how units follow satoshis through a spend, worked examples, and which Bitcoin Univer...","k":"Guide","w":2},{"u":"how-it-works.html#support","t":"Guide","h":"Support matrix","s":"A plain-language walkthrough of DUST-20: what a deploy fixes, what a mint creates, how units follow satoshis through a spend, worked examples, and which Bitcoin Univer...","k":"Guide","w":2},{"u":"transactions.html","t":"Transactions","h":"Transactions","s":"How DUST-20 units follow satoshis through a Bitcoin spend: the ordinal first-in-first-out mapping, partial sends, colored change, merges, fee separation, and an intera...","k":"Transactions Ordinal sat flow, colored change, merges and the constructions that burn.","w":6},{"u":"transactions.html#mapping","t":"Transactions","h":"The mapping","s":"How DUST-20 units follow satoshis through a Bitcoin spend: the ordinal first-in-first-out mapping, partial sends, colored change, merges, fee separation, and an intera...","k":"Transactions","w":2},{"u":"transactions.html#anatomy","t":"Transactions","h":"Transaction anatomy","s":"How DUST-20 units follow satoshis through a Bitcoin spend: the ordinal first-in-first-out mapping, partial sends, colored change, merges, fee separation, and an intera...","k":"Transactions","w":2},{"u":"transactions.html#simulator","t":"Transactions","h":"Allocation simulator","s":"How DUST-20 units follow satoshis through a Bitcoin spend: the ordinal first-in-first-out mapping, partial sends, colored change, merges, fee separation, and an intera...","k":"Transactions","w":2},{"u":"transactions.html#scenarios","t":"Transactions","h":"Worked scenarios","s":"How DUST-20 units follow satoshis through a Bitcoin spend: the ordinal first-in-first-out mapping, partial sends, colored change, merges, fee separation, and an intera...","k":"Transactions","w":2},{"u":"playground.html","t":"Decoder","h":"Decoder and conformance runner","s":"Decode a DUST-20 payload field by field, validate it against the numbered specification rules with exact integer arithmetic, and run the published test vectors. Runs e...","k":"Decoder Paste a payload. Every rule is checked in your browser.","w":6},{"u":"playground.html#decoder","t":"Decoder","h":"Payload decoder","s":"Decode a DUST-20 payload field by field, validate it against the numbered specification rules with exact integer arithmetic, and run the published test vectors. Runs e...","k":"Decoder","w":2},{"u":"playground.html#builder","t":"Decoder","h":"Deploy and mint builders","s":"Decode a DUST-20 payload field by field, validate it against the numbered specification rules with exact integer arithmetic, and run the published test vectors. Runs e...","k":"Decoder","w":2},{"u":"playground.html#runner","t":"Decoder","h":"Conformance runner","s":"Decode a DUST-20 payload field by field, validate it against the numbered specification rules with exact integer arithmetic, and run the published test vectors. Runs e...","k":"Decoder","w":2},{"u":"conformance.html","t":"Test vectors","h":"Test vectors","s":"The published DUST-20 conformance vectors: valid and invalid payloads, the expected outcome of each, the issue code a reader must emit, and the numbered rule the case...","k":"Test vectors Valid and invalid cases with expected outcomes and the rule each one exercises.","w":6},{"u":"conformance.html#summary","t":"Test vectors","h":"Vector summary","s":"The published DUST-20 conformance vectors: valid and invalid payloads, the expected outcome of each, the issue code a reader must emit, and the numbered rule the case...","k":"Test vectors","w":2},{"u":"conformance.html#vectors","t":"Test vectors","h":"The vectors","s":"The published DUST-20 conformance vectors: valid and invalid payloads, the expected outcome of each, the issue code a reader must emit, and the numbered rule the case...","k":"Test vectors","w":2},{"u":"conformance.html#scenarios","t":"Test vectors","h":"Transaction scenarios","s":"The published DUST-20 conformance vectors: valid and invalid payloads, the expected outcome of each, the issue code a reader must emit, and the numbered rule the case...","k":"Test vectors","w":2},{"u":"conformance.html#codes","t":"Test vectors","h":"Issue codes","s":"The published DUST-20 conformance vectors: valid and invalid payloads, the expected outcome of each, the issue code a reader must emit, and the numbered rule the case...","k":"Test vectors","w":2},{"u":"indexer.html","t":"Indexing","h":"Indexer semantics","s":"Implementing a DUST-20 reader: the six-stage pipeline, the allocation record, confirmation and pending state, mempool coverage, reorganization handling and the event c...","k":"Indexing Confirmation, mempool, reorganizations and what a reader must publish.","w":6},{"u":"indexer.html#pipeline","t":"Indexing","h":"The pipeline","s":"Implementing a DUST-20 reader: the six-stage pipeline, the allocation record, confirmation and pending state, mempool coverage, reorganization handling and the event c...","k":"Indexing","w":2},{"u":"indexer.html#allocation","t":"Indexing","h":"The allocation record","s":"Implementing a DUST-20 reader: the six-stage pipeline, the allocation record, confirmation and pending state, mempool coverage, reorganization handling and the event c...","k":"Indexing","w":2},{"u":"indexer.html#confirmation","t":"Indexing","h":"Confirmation and pending","s":"Implementing a DUST-20 reader: the six-stage pipeline, the allocation record, confirmation and pending state, mempool coverage, reorganization handling and the event c...","k":"Indexing","w":2},{"u":"indexer.html#reorg","t":"Indexing","h":"Reorganizations","s":"Implementing a DUST-20 reader: the six-stage pipeline, the allocation record, confirmation and pending state, mempool coverage, reorganization handling and the event c...","k":"Indexing","w":2},{"u":"indexer.html#contract","t":"Indexing","h":"Event contract","s":"Implementing a DUST-20 reader: the six-stage pipeline, the allocation record, confirmation and pending state, mempool coverage, reorganization handling and the event c...","k":"Indexing","w":2},{"u":"universe.html","t":"Universe support","h":"Bitcoin Universe support","s":"The recorded Bitcoin Universe capability state for DUST-20: read-only marketplace availability, the exact mutation gate, ownership and settlement statements, the first...","k":"Universe support You can view DUST-20. You cannot trade it. Here is exactly why.","w":6},{"u":"universe.html#state","t":"Universe support","h":"Recorded state","s":"The recorded Bitcoin Universe capability state for DUST-20: read-only marketplace availability, the exact mutation gate, ownership and settlement statements, the first...","k":"Universe support","w":2},{"u":"universe.html#actions","t":"Universe support","h":"Marketplace actions","s":"The recorded Bitcoin Universe capability state for DUST-20: read-only marketplace availability, the exact mutation gate, ownership and settlement statements, the first...","k":"Universe support","w":2},{"u":"universe.html#surfaces","t":"Universe support","h":"Product surfaces","s":"The recorded Bitcoin Universe capability state for DUST-20: read-only marketplace availability, the exact mutation gate, ownership and settlement statements, the first...","k":"Universe support","w":2},{"u":"universe.html#why","t":"Universe support","h":"Why it is read-only","s":"The recorded Bitcoin Universe capability state for DUST-20: read-only marketplace availability, the exact mutation gate, ownership and settlement statements, the first...","k":"Universe support","w":2},{"u":"safety.html","t":"Security","h":"Security considerations","s":"DUST-20 security considerations for holders and builders: key hygiene, output role review, colored change, fee funding, stale outpoints, reader disagreement, untyped o...","k":"Security What destroys a balance, and what stops it.","w":6},{"u":"safety.html#model","t":"Security","h":"Threat model","s":"DUST-20 security considerations for holders and builders: key hygiene, output role review, colored change, fee funding, stale outpoints, reader disagreement, untyped o...","k":"Security","w":2},{"u":"safety.html#controls","t":"Security","h":"Controls","s":"DUST-20 security considerations for holders and builders: key hygiene, output role review, colored change, fee funding, stale outpoints, reader disagreement, untyped o...","k":"Security","w":2},{"u":"safety.html#before","t":"Security","h":"Before you sign","s":"DUST-20 security considerations for holders and builders: key hygiene, output role review, colored change, fee funding, stale outpoints, reader disagreement, untyped o...","k":"Security","w":2},{"u":"safety.html#report","t":"Security","h":"Reporting a vulnerability","s":"DUST-20 security considerations for holders and builders: key hygiene, output role review, colored change, fee funding, stale outpoints, reader disagreement, untyped o...","k":"Security","w":2},{"u":"glossary.html","t":"Glossary","h":"Glossary and FAQ","s":"Plain definitions of satoshi, dust, UTXO, colored output, cardinal input, backing, outpoint, allocation, offset, ordinal flow, burn, mempool, RBF, reorg and PSBT, plus...","k":"Glossary Terminology, and the questions people actually ask.","w":6},{"u":"glossary.html#glossary","t":"Glossary","h":"Glossary","s":"Plain definitions of satoshi, dust, UTXO, colored output, cardinal input, backing, outpoint, allocation, offset, ordinal flow, burn, mempool, RBF, reorg and PSBT, plus...","k":"Glossary","w":2},{"u":"glossary.html#faq","t":"Glossary","h":"Frequently asked questions","s":"Plain definitions of satoshi, dust, UTXO, colored output, cardinal input, backing, outpoint, allocation, offset, ordinal flow, burn, mempool, RBF, reorg and PSBT, plus...","k":"Glossary","w":2},{"u":"changelog.html","t":"Changelog","h":"Changelog","s":"Version history for the DUST-20 specification document: what was added, what was resolved, and which statements changed provenance label.","k":"Changelog What changed in this document, and when.","w":6},{"u":"changelog.html#history","t":"Changelog","h":"Version history","s":"Version history for the DUST-20 specification document: what was added, what was resolved, and which statements changed provenance label.","k":"Changelog","w":2},{"u":"specification.html#DUST-2.1","t":"Specification","h":"DUST-2.1 Deploy and mint are inscription content","s":"A DUST-20 deploy or mint is the content of a Bitcoin inscription. There is no OP_RETURN carrier, no separate script template, and no auxiliary transaction field. A rea...","k":"DUST-2.1 Message carrier","w":4},{"u":"specification.html#DUST-2.2","t":"Specification","h":"DUST-2.2 Content is UTF-8","s":"Inscription content is decoded as UTF-8. Content that is not well-formed UTF-8 is not a DUST-20 message.","k":"DUST-2.2 Message carrier","w":4},{"u":"specification.html#DUST-2.3","t":"Specification","h":"DUST-2.3 Content larger than 4096 bytes is not a candidate","s":"A reader considers content of at most 4096 bytes. Larger content is not evaluated as DUST-20.","k":"DUST-2.3 Message carrier","w":4},{"u":"specification.html#DUST-2.4","t":"Specification","h":"DUST-2.4 Content is exactly one JSON object","s":"Content must parse as a single JSON object. Nothing may follow the closing brace except insignificant whitespace. Trailing content makes the message ambiguous and is r...","k":"DUST-2.4 Message carrier","w":4},{"u":"specification.html#DUST-2.5","t":"Specification","h":"DUST-2.5 Every value is a JSON string","s":"The object is flat and every value is a JSON string. Nested objects, arrays, numbers, booleans and null are rejected. JSON numbers cannot carry values above 2^53 exact...","k":"DUST-2.5 Message carrier","w":4},{"u":"specification.html#DUST-2.6","t":"Specification","h":"DUST-2.6 Duplicate keys are rejected","s":"A key that appears more than once is rejected rather than resolved last-wins or first-wins. Two readers must never be able to disagree about which value applied.","k":"DUST-2.6 Message carrier","w":4},{"u":"specification.html#DUST-2.7","t":"Specification","h":"DUST-2.7 Raw control characters are rejected","s":"A raw character below U+0020 inside a JSON string makes the content invalid. Escaped sequences that decode to control characters are still subject to the ticker rules...","k":"DUST-2.7 Message carrier","w":4},{"u":"specification.html#DUST-3.1","t":"Specification","h":"DUST-3.1 Positive quantities match /^[1-9][0-9]*$/","s":"supply, unit_sats, max_sats, amt and sats are strict positive decimal strings. A leading zero, a leading plus or minus, whitespace, a decimal point, a thousands separa...","k":"DUST-3.1 Integer encoding","w":4},{"u":"specification.html#DUST-3.2","t":"Specification","h":"DUST-3.2 Optional caps match /^(0|[1-9][0-9]*)$/","s":"lim_sats is a strict non-negative decimal string. The single character \"0\" is valid and means no per-mint limit.","k":"DUST-3.2 Integer encoding","w":4},{"u":"specification.html#DUST-3.3","t":"Specification","h":"DUST-3.3 Satoshi fields are bounded by the money supply","s":"unit_sats, max_sats, lim_sats and sats may not exceed 2,100,000,000,000,000 satoshis, the total that will ever exist. A payload can be internally consistent and still...","k":"DUST-3.3 Integer encoding","w":4},{"u":"specification.html#DUST-3.4","t":"Specification","h":"DUST-3.4 Unit quantities are bounded by 2^128 - 1","s":"supply and amt may not exceed 340,282,366,920,938,463,463,374,607,431,768,211,455. This is the atomic ceiling the production indexer enforces on token quantities.","k":"DUST-3.4 Integer encoding","w":4},{"u":"specification.html#DUST-3.5","t":"Specification","h":"DUST-3.5 Arithmetic is exact integer arithmetic","s":"An implementation must evaluate supply × unit_sats and amt × unit_sats with exact integers. A 64-bit float loses precision above 2^53, which is well inside the satoshi...","k":"DUST-3.5 Integer encoding","w":4},{"u":"specification.html#DUST-4.1","t":"Specification","h":"DUST-4.1 p is the literal string dust-20","s":"Content whose p field is absent or is anything other than the seven bytes dust-20 is not a DUST-20 message. There is no case tolerance, no alias, and no versioned vari...","k":"DUST-4.1 Identifiers","w":4},{"u":"specification.html#DUST-4.2","t":"Specification","h":"DUST-4.2 op is deploy or mint","s":"Exactly two operation values exist. Any other value, including transfer, is rejected.","k":"DUST-4.2 Identifiers","w":4},{"u":"specification.html#DUST-4.3","t":"Specification","h":"DUST-4.3 tick is 1 to 64 UTF-8 bytes in NFC form","s":"The ticker must already be in Unicode Normalization Form C, and its UTF-8 encoding must be between 1 and 64 bytes. Length is measured in bytes, not code points, so a m...","k":"DUST-4.3 Identifiers","w":4},{"u":"specification.html#DUST-4.4","t":"Specification","h":"DUST-4.4 tick excludes control characters, whitespace and / ? # \\","s":"These characters are excluded so a ticker identity is always safe to place in a path or query without escaping, and so two tickers cannot look identical in a log line.","k":"DUST-4.4 Identifiers","w":4},{"u":"specification.html#DUST-4.5","t":"Specification","h":"DUST-4.5 Identity is the NFC form folded to lower case","s":"Two tickers are the same ticker when their NFC forms are equal after lower-case folding. DUST, dust and Dust are one identity. Comparison must happen on the folded ide...","k":"DUST-4.5 Identifiers","w":4},{"u":"specification.html#DUST-4.6","t":"Specification","h":"DUST-4.6 The original spelling is preserved for display","s":"An implementation stores the folded identity for comparison and the spelling as written for display. Replacing the display form with the folded form loses information...","k":"DUST-4.6 Identifiers","w":4},{"u":"specification.html#DUST-5.1","t":"Specification","h":"DUST-5.1 The key set is exact","s":"A deploy contains exactly p, op, tick, supply, unit_sats and max_sats, and may contain lim_sats. A missing required key and an unrecognised extra key both reject the w...","k":"DUST-5.1 Deploy","w":4},{"u":"specification.html#DUST-5.2","t":"Specification","h":"DUST-5.2 supply is the permanent unit ceiling","s":"supply is the total whole units that may ever be minted for this ticker. It cannot be raised, lowered or reissued by any later message.","k":"DUST-5.2 Deploy","w":4},{"u":"specification.html#DUST-5.3","t":"Specification","h":"DUST-5.3 unit_sats is the permanent backing ratio","s":"unit_sats is the exact number of satoshis that back one unit, for the entire life of the ticker. There is no default: a deploy that omits unit_sats is rejected, and 54...","k":"DUST-5.3 Deploy","w":4},{"u":"specification.html#DUST-5.4","t":"Specification","h":"DUST-5.4 max_sats equals supply × unit_sats","s":"max_sats is a redundancy check, not an independent quantity. A deploy whose max_sats differs from the exact product by even one satoshi is rejected rather than correct...","k":"DUST-5.4 Deploy","w":4},{"u":"specification.html#DUST-5.5","t":"Specification","h":"DUST-5.5 max_sats may not exceed the money supply","s":"A deployment whose total backing exceeds 2,100,000,000,000,000 satoshis can never be fully minted, so it is rejected at deploy time rather than at the mint that would...","k":"DUST-5.5 Deploy","w":4},{"u":"specification.html#DUST-5.6","t":"Specification","h":"DUST-5.6 lim_sats is an optional per-mint satoshi cap","s":"When absent or \"0\", one mint may take the entire supply. When present and positive it may not exceed max_sats, and every mint must satisfy sats ≤ lim_sats. The equival...","k":"DUST-5.6 Deploy","w":4},{"u":"specification.html#DUST-5.7","t":"Specification","h":"DUST-5.7 The first valid deployment of an identity wins","s":"Once a valid deployment exists for a folded ticker identity, every later deployment of that identity is rejected. Ordering is by block height, then transaction index w...","k":"DUST-5.7 Deploy","w":4},{"u":"specification.html#DUST-5.8","t":"Specification","h":"DUST-5.8 There are no decimals","s":"DUST-20 balances have zero decimal places. No decimals field exists, and supplying one rejects the payload under DUST-5.1.","k":"DUST-5.8 Deploy","w":4},{"u":"specification.html#DUST-6.1","t":"Specification","h":"DUST-6.1 The key set is exact","s":"A mint contains exactly p, op, tick, amt and sats. There are no optional mint fields.","k":"DUST-6.1 Mint","w":4},{"u":"specification.html#DUST-6.2","t":"Specification","h":"DUST-6.2 A mint resolves exactly one accepted deployment","s":"The mint names a ticker; the reader folds it to its identity and finds the accepted deployment for that identity. A mint for an identity with no accepted deployment is...","k":"DUST-6.2 Mint","w":4},{"u":"specification.html#DUST-6.3","t":"Specification","h":"DUST-6.3 amt is a positive whole number of units","s":"amt is a strict positive decimal string. A mint of zero units does not exist, and neither does a fractional one: there are no decimals, so the smallest possible mint i...","k":"DUST-6.3 Mint","w":4},{"u":"specification.html#DUST-6.4","t":"Specification","h":"DUST-6.4 sats equals amt × unit_sats","s":"The satoshis a mint declares are the units it creates multiplied by the resolved deployment ratio. sats is never inferred from amt: omitting it rejects the payload.","k":"DUST-6.4 Mint","w":4},{"u":"specification.html#DUST-6.5","t":"Specification","h":"DUST-6.5 sats respects the deployment per-mint cap","s":"When the resolved deployment declares a positive lim_sats, a mint whose sats exceeds it is rejected in full.","k":"DUST-6.5 Mint","w":4},{"u":"specification.html#DUST-6.6","t":"Specification","h":"DUST-6.6 Mints stop at the declared supply","s":"Previously minted units plus amt must not exceed supply. There is no partial fill: a mint that would cross the ceiling is rejected in full rather than trimmed to the r...","k":"DUST-6.6 Mint","w":4},{"u":"specification.html#DUST-6.7","t":"Specification","h":"DUST-6.7 The carrying output holds exactly sats satoshis","s":"Three numbers must agree: the deployment ratio, the sats field in the JSON, and the real value of the Bitcoin output carrying the inscription. A one-satoshi difference...","k":"DUST-6.7 Mint","w":4},{"u":"specification.html#DUST-6.8","t":"Specification","h":"DUST-6.8 The inscription sits at satoshi offset 0 of that output","s":"The mint inscription must begin at the first satoshi of the output that carries it. Padding that shifts the inscription away from offset 0 invalidates the mint.","k":"DUST-6.8 Mint","w":4},{"u":"specification.html#DUST-6.9","t":"Specification","h":"DUST-6.9 The carrying output must not already hold an allocation","s":"A mint cannot be layered on top of an output that already carries a DUST-20 allocation. Two allocations claiming the same satoshis would make ownership undecidable.","k":"DUST-6.9 Mint","w":4},{"u":"specification.html#DUST-7.1","t":"Specification","h":"DUST-7.1 No transfer message exists","s":"DUST-20 uses inscriptions only for deploy and mint. An inscription whose op is transfer is invalid, moves nothing, and must not be treated as a transfer by any impleme...","k":"DUST-7.1 Allocation and movement","w":4},{"u":"specification.html#DUST-7.2","t":"Specification","h":"DUST-7.2 An allocation is an outpoint, an identity, a ratio, an amount and an offset","s":"The offset is the satoshi position at which the allocation begins inside its output. Without it the next spend cannot be computed, so an implementation that stores onl...","k":"DUST-7.2 Allocation and movement","w":4},{"u":"specification.html#DUST-7.3","t":"Specification","h":"DUST-7.3 Satoshis map input to output in ordinal first-in-first-out order","s":"Lay every input value end to end in input index order to form one satoshi range, and every output value end to end in output index order to form another. The n-th sato...","k":"DUST-7.3 Allocation and movement","w":4},{"u":"specification.html#DUST-7.4","t":"Specification","h":"DUST-7.4 A unit survives only when its whole block lands in one supported output","s":"Each unit is a contiguous block of unit_sats satoshis inside the allocation span. It survives where that entire block falls inside a single output the reader can attri...","k":"DUST-7.4 Allocation and movement","w":4},{"u":"specification.html#DUST-7.5","t":"Specification","h":"DUST-7.5 Output order is protocol-significant","s":"Allocation is positional. Moving an output, changing its value, or inserting one changes which satoshis land where and therefore which units survive. Reordering output...","k":"DUST-7.5 Allocation and movement","w":4},{"u":"specification.html#DUST-7.6","t":"Specification","h":"DUST-7.6 Allocations merge when identity and ratio match","s":"Several allocations of the same ticker identity can be combined into one output, provided every contributing unit lands whole inside it. Allocations of different ident...","k":"DUST-7.6 Allocation and movement","w":4},{"u":"specification.html#DUST-7.7","t":"Specification","h":"DUST-7.7 A partial send requires an explicit colored change output","s":"Spending an allocation of 91 units and sending 10 requires a second output holding at least 81 × unit_sats satoshis, positioned so each unit fits whole. Omitting that...","k":"DUST-7.7 Allocation and movement","w":4},{"u":"specification.html#DUST-7.8","t":"Specification","h":"DUST-7.8 Miner fees are funded from cardinal inputs","s":"Satoshis that become the fee are past the end of the output range, so any units they carried are destroyed. A builder adds an ordinary bitcoin input to pay the fee and...","k":"DUST-7.8 Allocation and movement","w":4},{"u":"specification.html#DUST-8.1","t":"Specification","h":"DUST-8.1 Units paid as fees are burned","s":"Satoshis that fall past the last output become the miner fee. Any whole unit inside that range is destroyed.","k":"DUST-8.1 Burn","w":4},{"u":"specification.html#DUST-8.2","t":"Specification","h":"DUST-8.2 Units sent to an unattributable output are burned","s":"When a reader cannot attribute an output to a supported address, units landing in it are destroyed rather than held in an unknown state.","k":"DUST-8.2 Burn","w":4},{"u":"specification.html#DUST-8.3","t":"Specification","h":"DUST-8.3 Units split across an output boundary are burned","s":"A unit is atomic. If its block of unit_sats satoshis straddles two outputs, no fraction survives in either.","k":"DUST-8.3 Burn","w":4},{"u":"specification.html#DUST-8.4","t":"Specification","h":"DUST-8.4 Burns are recorded in supply accounting","s":"A burn decreases total and circulating supply by the burned amount and increases burned supply by the same amount. Minted supply is unchanged: a burn does not free sup...","k":"DUST-8.4 Burn","w":4},{"u":"specification.html#DUST-8.5","t":"Specification","h":"DUST-8.5 A burn is silent on Bitcoin","s":"The transaction confirms normally. No node, no wallet and no block explorer flags it. Only a DUST-20 reader knows anything was destroyed.","k":"DUST-8.5 Burn","w":4},{"u":"specification.html#DUST-9.1","t":"Specification","h":"DUST-9.1 Every event carries a stable source event id","s":"An event is identified by an id that does not change between observations of the same chain fact. Downstream consumers deduplicate on it.","k":"DUST-9.1 Indexer semantics","w":4},{"u":"specification.html#DUST-9.2","t":"Specification","h":"DUST-9.2 A confirmed event carries complete block placement","s":"An event marked confirmed must carry block height, block hash, transaction index and event index. Partial placement is rejected: an event either has a full position in...","k":"DUST-9.2 Indexer semantics","w":4},{"u":"specification.html#DUST-9.3","t":"Specification","h":"DUST-9.3 A pending event carries no block placement","s":"An event marked pending must not carry a height, hash, transaction index, event index or a non-zero confirmation count. Mixing the two states hides whether a balance i...","k":"DUST-9.3 Indexer semantics","w":4},{"u":"specification.html#DUST-9.4","t":"Specification","h":"DUST-9.4 Wallet deltas balance per operation","s":"For a transfer the wallet deltas sum to zero. For a mint they sum to the minted amount, and for a burn to the negative of the burned amount. Each delta must equal its...","k":"DUST-9.4 Indexer semantics","w":4},{"u":"specification.html#DUST-9.5","t":"Specification","h":"DUST-9.5 A deploy carries no economic effect","s":"A deploy event states metadata only. It carries no amount, no sender, no receiver, no wallet deltas and no supply movement. Supply appears when units are minted, not w...","k":"DUST-9.5 Indexer semantics","w":4},{"u":"specification.html#DUST-9.6","t":"Specification","h":"DUST-9.6 Reorganizations are replayed, not patched","s":"On a reorganization a reader emits invalidations newest first, reverses ledger mutations, restores allocations that had been marked spent, removes allocations the orph...","k":"DUST-9.6 Indexer semantics","w":4},{"u":"specification.html#DUST-9.7","t":"Specification","h":"DUST-9.7 Coverage is declared, not assumed","s":"A reader publishes its coverage as complete, partial or unavailable alongside a checkpoint of network, height, hash, finalized height and observation time. A consumer...","k":"DUST-9.7 Indexer semantics","w":4},{"u":"specification.html#DUST-9.8","t":"Specification","h":"DUST-9.8 Mempool coverage is partial","s":"The production indexer reports partial coverage precisely because it has no exhaustive mempool feed with a stable pending lifecycle and disappearance handling. Unconfi...","k":"DUST-9.8 Indexer semantics","w":4},{"u":"reference.html#fields","t":"Reference","h":"Field p","s":"Exactly \"dust-20\". Content whose \"p\" is not the literal dust-20 is not a DUST-20 message and is ignored.","k":"p","w":3},{"u":"reference.html#fields","t":"Reference","h":"Field op","s":"Exactly \"deploy\" or \"mint\". Any other operation value is rejected. No transfer or burn inscription exists.","k":"op","w":3},{"u":"reference.html#fields","t":"Reference","h":"Field tick","s":"Unicode NFC text, 1 to 64 UTF-8 bytes, with no control characters, whitespace, or the URL delimiters / ? # \\. The identity of a ticker is its NFC form case-folded to l...","k":"tick ticker symbol token name","w":3},{"u":"reference.html#fields","t":"Reference","h":"Field supply","s":"Strict positive decimal string matching /^[1-9][0-9]*$/, at most 2^128 - 1. Total whole units that may ever be minted for this ticker.","k":"supply","w":3},{"u":"reference.html#fields","t":"Reference","h":"Field unit_sats","s":"Strict positive decimal string, at most Bitcoin’s monetary supply of 2,100,000,000,000,000 satoshis. The exact number of satoshis that back one unit for the entire lif...","k":"unit_sats unit sats unitsats backing ratio sats per unit","w":3},{"u":"reference.html#fields","t":"Reference","h":"Field max_sats","s":"Strict positive decimal string that equals supply × unit_sats and does not exceed 2,100,000,000,000,000. Rejected unless it equals supply × unit_sats exactly, computed...","k":"max_sats max sats maxsats total backing","w":3},{"u":"reference.html#fields","t":"Reference","h":"Field lim_sats","s":"Optional strict non-negative decimal string, at most max_sats. Omitted or \"0\" means no per-mint limit. When present and greater than zero, every mint of this ticker mu...","k":"lim_sats lim sats limsats mint limit per-mint cap","w":3},{"u":"reference.html#fields","t":"Reference","h":"Field amt","s":"Strict positive decimal string matching /^[1-9][0-9]*$/, at most 2^128 - 1. Whole units to create. Rejected if previously minted units plus amt would exceed supply.","k":"amt amount quantity units","w":3},{"u":"reference.html#fields","t":"Reference","h":"Field sats","s":"Strict positive decimal string that equals amt × unit_sats of the resolved deployment. Rejected unless it equals amt × unit_sats, and unless the Bitcoin output carryin...","k":"sats","w":3},{"u":"reference.html#formulas","t":"Reference","h":"max_sats = supply × unit_sats","s":"Total backing is supply multiplied by the satoshis behind one unit.","k":"deploy","w":1},{"u":"reference.html#formulas","t":"Reference","h":"sats = amt × unit_sats","s":"The satoshis a mint declares are the units it creates multiplied by the unit size.","k":"mint","w":1},{"u":"reference.html#formulas","t":"Reference","h":"output_value = sats","s":"The Bitcoin output that carries the mint inscription must hold exactly the declared satoshis.","k":"mint","w":1},{"u":"reference.html#formulas","t":"Reference","h":"mint_unit_cap = floor(lim_sats ÷ unit_sats)","s":"A satoshi cap per mint implies a whole-unit cap per mint.","k":"deploy","w":1},{"u":"reference.html#formulas","t":"Reference","h":"input_units = surviving_units + burned_units","s":"Units leaving an input either land whole inside a supported output or are burned. Nothing else can happen to them.","k":"transfer","w":1},{"u":"reference.html#formulas","t":"Reference","h":"output_backing = units_in_output × unit_sats","s":"Every output carrying units must hold at least the satoshis those whole units occupy, positioned so each unit fits entirely inside it.","k":"transfer","w":1},{"u":"reference.html#formulas","t":"Reference","h":"fee = sum(inputs) - sum(outputs)","s":"The miner fee is whatever the transaction does not pay out. Any colored satoshi that falls into that gap is burned, so fees must be funded by ordinary bitcoin.","k":"transfer","w":1},{"u":"reference.html#fees","t":"Reference","h":"Payload size is small and nearly constant","s":"A deploy payload is typically 110 to 130 bytes of JSON and a mint is 60 to 70 bytes. Both sit in the witness, so they are discounted to one weight unit per byte. Paylo...","k":"fee size cost","w":1},{"u":"reference.html#fees","t":"Reference","h":"Backing is locked capital, not a fee","s":"A mint of 100 units at 546 satoshis per unit puts 54,600 satoshis into an output and keeps them there for as long as you hold the units. Sizing a deployment is a decis...","k":"fee size cost","w":1},{"u":"reference.html#fees","t":"Reference","h":"unit_sats below the relay dust threshold is valid but unspendable","s":"DUST-20 permits any positive unit_sats, and a reader will accept it. Bitcoin nodes will not relay an output below the standard dust threshold for its script type, whic...","k":"fee size cost","w":1},{"u":"reference.html#fees","t":"Reference","h":"Colored change adds an output, and outputs cost more than payload bytes","s":"A safe partial send needs a receiver output, a colored change output, a cardinal change output and at least one cardinal input. Budget for that shape rather than for t...","k":"fee size cost","w":1},{"u":"reference.html#fees","t":"Reference","h":"Never let the fee come out of backing","s":"A wallet that subtracts the fee from the largest output will silently shrink a colored output, move the colored span, and burn units. Fee funding must come from cardin...","k":"fee size cost","w":1},{"u":"reference.html#fees","t":"Reference","h":"Consolidate deliberately, not automatically","s":"Merging allocations of one identity into a single output is valid and reduces future fees. Automatic consolidation that treats colored outputs as ordinary change will...","k":"fee size cost","w":1},{"u":"reference.html#limitations","t":"Reference","h":"Validity is an interpretation, not consensus","s":"Bitcoin does not know DUST-20 exists. Every balance is one reader’s conclusion from applying these rules to the chain. Two readers that differ on a rule will differ on...","k":"limitation constraint","w":1},{"u":"reference.html#limitations","t":"Reference","h":"Most transfer behaviour is settled by one implementation","s":"The legacy specification documents deploy and mint and one colored-UTXO transfer example. Ordinal flow, burn conditions, ticker identity and output ordering are settle...","k":"limitation constraint","w":1},{"u":"reference.html#limitations","t":"Reference","h":"Holding units immobilises bitcoin","s":"Backing is real bitcoin sitting in an output. A large supply at a large unit_sats can require more bitcoin than the deployer expects, and DUST-5.5 rejects a deployment...","k":"limitation constraint","w":1},{"u":"reference.html#limitations","t":"Reference","h":"Units are indivisible and non-fractional","s":"There are no decimals. A holder cannot send half a unit, and a unit that cannot be placed whole in an output is destroyed rather than rounded.","k":"limitation constraint","w":1},{"u":"reference.html#limitations","t":"Reference","h":"There is no reliable unconfirmed view","s":"The production indexer declares partial coverage: no exhaustive mempool feed, no stable pending lifecycle, no disappearance handling. Applications must not present unc...","k":"limitation constraint","w":1},{"u":"reference.html#limitations","t":"Reference","h":"Trading DUST-20 inside Bitcoin Universe is not available","s":"Marketplace availability for DUST-20 is read-only. Listing, buying, offers and settlement are all unavailable until a typed authoritative ownership resolver exists. Se...","k":"limitation constraint","w":1},{"u":"reference.html#limitations","t":"Reference","h":"Replacement can change the outcome","s":"Replace-by-fee can alter the output layout, which changes where colored satoshis land. A replacement can burn units the original would have preserved, so state must be...","k":"limitation constraint","w":1},{"u":"glossary.html#term-satoshi","t":"Glossary","h":"Satoshi","s":"The smallest unit of Bitcoin, one hundred-millionth of a bitcoin. Satoshis are indivisible, which is why every DUST-20 amount is a whole number.","k":"satoshi","w":3},{"u":"glossary.html#term-dust","t":"Glossary","h":"Dust","s":"A Bitcoin output so small that nodes will not relay it, because spending it would cost more in fees than it is worth. The usual threshold for a common output type is 5...","k":"dust","w":3},{"u":"glossary.html#term-utxo","t":"Glossary","h":"UTXO","s":"An unspent transaction output: a discrete piece of bitcoin with an amount and an owner. Bitcoin has no account balances; a wallet balance is the sum of its UTXOs.","k":"utxo","w":3},{"u":"glossary.html#term-outpoint","t":"Glossary","h":"Outpoint","s":"The address of a specific output, written as a transaction id and an output index, such as txid:0. It is how an allocation is identified.","k":"outpoint","w":3},{"u":"glossary.html#term-colored-output","t":"Glossary","h":"Colored output","s":"An output whose satoshis an indexer interprets as carrying token units. Bitcoin itself sees an ordinary output; the colour exists only in the interpretation.","k":"colored output","w":3},{"u":"glossary.html#term-cardinal-input","t":"Glossary","h":"Cardinal input","s":"An ordinary bitcoin input carrying no token allocation. Cardinal inputs are what you use to pay miner fees without disturbing colored satoshis.","k":"cardinal input","w":3},{"u":"glossary.html#term-backing","t":"Glossary","h":"Backing","s":"The satoshis that stand behind a quantity of units, equal to units × unit_sats. Backing is not a price, it is the physical space the units occupy in a transaction.","k":"backing","w":3},{"u":"glossary.html#term-unit-sats","t":"Glossary","h":"unit_sats","s":"The number of satoshis that back one unit, fixed at deploy time and unchangeable afterwards. Every later calculation depends on it.","k":"unit_sats unit sats unitsats backing ratio sats per unit","w":3},{"u":"glossary.html#term-deploy","t":"Glossary","h":"Deploy","s":"The inscription that creates a ticker and fixes its supply and satoshi backing rule.","k":"deploy","w":3},{"u":"glossary.html#term-mint","t":"Glossary","h":"Mint","s":"The inscription that creates units, in an output whose value equals the declared satoshi backing exactly.","k":"mint","w":3},{"u":"glossary.html#term-colored-change","t":"Glossary","h":"Colored change","s":"The output that receives the units you did not send. Omitting it does not keep those units, it burns them.","k":"colored change coloured change token change change output","w":3},{"u":"glossary.html#term-allocation","t":"Glossary","h":"Allocation","s":"An indexer’s record that a specific span of satoshis inside a specific output represents a number of units of a ticker.","k":"allocation","w":3},{"u":"glossary.html#term-offset","t":"Glossary","h":"Offset","s":"Where an allocation begins inside its output, measured in satoshis from the start of that output. Without the offset, the next spend cannot be computed.","k":"offset","w":3},{"u":"glossary.html#term-ordinal-flow","t":"Glossary","h":"Ordinal flow","s":"The first-in-first-out rule that decides which satoshis in the outputs correspond to which satoshis in the inputs. DUST-20 uses it to follow units through a spend.","k":"ordinal flow fifo first in first out sat flow sat tracking","w":3},{"u":"glossary.html#term-burn","t":"Glossary","h":"Burn","s":"The destruction of units, caused by their satoshis being paid as fees, sent somewhere unattributable, or split so that no whole unit fits in an output. There is no bur...","k":"burn burnt burned destroyed lost tokens","w":3},{"u":"glossary.html#term-mempool","t":"Glossary","h":"Mempool","s":"The waiting area for broadcast but unconfirmed transactions. DUST-20 mempool coverage is partial, so unconfirmed state is not a safe basis for an irreversible decision.","k":"mempool","w":3},{"u":"glossary.html#term-rbf","t":"Glossary","h":"RBF","s":"Replace-by-fee: resubmitting a transaction with a higher fee. Because the replacement can have a different output layout, it can burn units the original would have pre...","k":"rbf","w":3},{"u":"glossary.html#term-reorg","t":"Glossary","h":"Reorg","s":"A chain reorganization, where confirmed blocks are replaced by a different branch. An indexer must roll allocations back and replay the new branch.","k":"reorg reorganization reorganisation chain rollback","w":3},{"u":"glossary.html#term-psbt","t":"Glossary","h":"PSBT","s":"A partially signed Bitcoin transaction: the unsigned transaction your wallet shows you before you approve it. It is your last chance to check every output role.","k":"psbt","w":3},{"u":"glossary.html#faq","t":"Glossary","h":"Do I need 546 satoshis per unit?","s":"No. 546 is the most common example because it matches Bitcoin’s usual dust threshold, but unit_sats is whatever the deploy declares. Never assume 546 when a payload om...","k":"faq question","w":2},{"u":"glossary.html#faq","t":"Glossary","h":"Why is there no transfer inscription?","s":"Because the satoshis themselves carry the units. Spending them moves the units, so a separate message would be redundant and could disagree with the transaction that a...","k":"faq question","w":2},{"u":"glossary.html#faq","t":"Glossary","h":"What happens if I forget the colored change output?","s":"The units you meant to keep are burned. Bitcoin will confirm the transaction normally and nothing warns you. This is the single most expensive mistake in DUST-20.","k":"faq question","w":2},{"u":"glossary.html#faq","t":"Glossary","h":"Can I pay the miner fee from my token backing?","s":"No. Satoshis that go to the fee are gone, and any units they carried are burned. Always add a separate ordinary bitcoin input to fund the fee.","k":"faq question","w":2},{"u":"glossary.html#faq","t":"Glossary","h":"Are DUST-20 amounts divisible?","s":"No. Balances have zero decimal places, and a unit only survives a spend if its whole block of unit_sats satoshis lands inside one output.","k":"faq question","w":2},{"u":"glossary.html#faq","t":"Glossary","h":"What if two people deploy the same ticker?","s":"The first valid deployment wins. Tickers are compared after Unicode NFC normalization and lower-case folding, so \"DUST\" and \"dust\" are the same ticker.","k":"faq question","w":2},{"u":"glossary.html#faq","t":"Glossary","h":"Is a balance from an indexer authoritative?","s":"It is one service’s interpretation of Bitcoin, not consensus. Check its source, coverage and observation height, and treat disagreement between two indexers as a block...","k":"faq question","w":2},{"u":"glossary.html#faq","t":"Glossary","h":"Is this documentation a specification?","s":"No. It documents the legacy DUST-20 specification and the behaviour of the Bitcoin Universe production indexer, labelling every statement with which of the two support...","k":"faq question","w":2},{"u":"conformance.html#deploy-valid","t":"Test vectors","h":"Valid deploy","s":"Every field is a strict decimal integer string and max_sats equals supply × unit_sats.","k":"deploy-valid Deploy accept DUST-5.1","w":1},{"u":"conformance.html#deploy-no-limit","t":"Test vectors","h":"Valid deploy with lim_sats omitted","s":"lim_sats is optional. Omitting it means there is no per-mint cap.","k":"deploy-no-limit Deploy accept DUST-5.6","w":1},{"u":"conformance.html#deploy-zero-limit","t":"Test vectors","h":"lim_sats of \"0\" means no cap","s":"Zero is explicitly \"no limit\", not a cap of zero satoshis.","k":"deploy-zero-limit Deploy accept DUST-3.2","w":1},{"u":"conformance.html#deploy-arithmetic-mismatch","t":"Test vectors","h":"Arithmetic mismatch in max_sats","s":"max_sats must equal supply × unit_sats exactly. Being one satoshi low usually means the builder used floating-point arithmetic.","k":"deploy-arithmetic-mismatch Deploy max_sats_mismatch DUST-5.4","w":1},{"u":"conformance.html#deploy-missing-max-sats","t":"Test vectors","h":"Deploy missing max_sats","s":"max_sats is required. Earlier documentation reported this as an unreconciled compatibility split; the current implementation rejects the payload rather than deriving t...","k":"deploy-missing-max-sats Deploy missing_field DUST-5.1","w":1},{"u":"conformance.html#deploy-unknown-field","t":"Test vectors","h":"Deploy carrying an unknown field","s":"Operations declare exact key sets. An unknown field is rejected, not ignored, so one payload cannot be read two ways.","k":"deploy-unknown-field Deploy unknown_field DUST-5.1","w":1},{"u":"conformance.html#deploy-leading-zero","t":"Test vectors","h":"Malformed integer with a leading zero","s":"Integers are strict decimal strings. \"0546\" is not in strict form even though it parses.","k":"deploy-leading-zero Deploy bad_integer DUST-3.1","w":1},{"u":"conformance.html#deploy-float","t":"Test vectors","h":"Fractional unit_sats","s":"Satoshis are indivisible. Decimal points are rejected outright.","k":"deploy-float Deploy bad_integer DUST-3.1","w":1},{"u":"conformance.html#deploy-zero-supply","t":"Test vectors","h":"Zero supply","s":"supply must be a positive integer. Zero and negative values are rejected.","k":"deploy-zero-supply Deploy bad_integer DUST-3.1","w":1},{"u":"conformance.html#deploy-negative","t":"Test vectors","h":"Negative unit_sats","s":"A minus sign is not part of a strict DUST-20 integer.","k":"deploy-negative Deploy bad_integer DUST-3.1","w":1},{"u":"conformance.html#deploy-exceeds-money","t":"Test vectors","h":"Backing exceeds Bitcoin’s monetary supply","s":"max_sats of 10,000,000,000,000,000 exceeds the 2,100,000,000,000,000 satoshis that will ever exist. The arithmetic is self-consistent but unbackable.","k":"deploy-exceeds-money Deploy exceeds_money_supply DUST-5.5","w":1},{"u":"conformance.html#deploy-limit-above-max","t":"Test vectors","h":"lim_sats greater than max_sats","s":"A per-mint cap larger than the entire backing is contradictory.","k":"deploy-limit-above-max Deploy lim_sats_above_max DUST-5.6","w":1},{"u":"conformance.html#deploy-tick-whitespace","t":"Test vectors","h":"Ticker containing whitespace","s":"Tickers exclude whitespace, control characters and the URL delimiters / ? # \\ so an identity is always addressable.","k":"deploy-tick-whitespace Deploy bad_tick DUST-4.4","w":1},{"u":"conformance.html#deploy-duplicate-ticker","t":"Test vectors","h":"Redeploying an existing ticker","s":"Identity is the NFC form folded to lower case, so \"DUST\" is the same ticker as \"dust\". The first valid deployment wins.","k":"deploy-duplicate-ticker Deploy duplicate_deployment DUST-5.7","w":1},{"u":"conformance.html#mint-valid","t":"Test vectors","h":"Valid mint with matching output","s":"sats equals amt × unit_sats, and the observed output value equals sats.","k":"mint-valid Mint accept DUST-6.7","w":1},{"u":"conformance.html#mint-case-insensitive-tick","t":"Test vectors","h":"Mint naming the ticker in a different case","s":"The mint resolves against the folded identity, so casing does not prevent resolution.","k":"mint-case-insensitive-tick Mint accept DUST-4.5","w":1},{"u":"conformance.html#mint-sats-mismatch","t":"Test vectors","h":"Declared sats do not match the deployment ratio","s":"100 units at 546 satoshis is 54,600, not 54,000.","k":"mint-sats-mismatch Mint mint_sats_mismatch DUST-6.4","w":1},{"u":"conformance.html#mint-output-mismatch","t":"Test vectors","h":"Output value differs from declared sats by one satoshi","s":"The payload is internally consistent, but the real Bitcoin output holds 54,599 satoshis. The mint is invalid and cannot be repaired after broadcast.","k":"mint-output-mismatch Mint output_value_mismatch DUST-6.7","w":1},{"u":"conformance.html#mint-limit-violation","t":"Test vectors","h":"Mint exceeds lim_sats","s":"55,146 satoshis exceeds the declared per-mint cap of 54,600.","k":"mint-limit-violation Mint mint_exceeds_limit DUST-6.5","w":1},{"u":"conformance.html#mint-exceeds-supply","t":"Test vectors","h":"Mint exceeds remaining supply","s":"999,950 units are already minted, so only 50 remain. The mint is rejected in full rather than partially filled.","k":"mint-exceeds-supply Mint mint_exceeds_supply DUST-6.6","w":1},{"u":"conformance.html#mint-no-deployment","t":"Test vectors","h":"Mint for a ticker that was never deployed","s":"A mint must resolve exactly one accepted deployment. Without it there is no unit size to check against.","k":"mint-no-deployment Mint deployment_missing DUST-6.2","w":1},{"u":"conformance.html#mint-missing-field","t":"Test vectors","h":"Mint missing the sats field","s":"sats is required. It is never inferred from amt, even though the ratio is known.","k":"mint-missing-field Mint missing_field DUST-6.1","w":1},{"u":"conformance.html#mint-zero-amount","t":"Test vectors","h":"Mint of zero units","s":"amt must be a positive integer.","k":"mint-zero-amount Mint bad_integer DUST-6.3","w":1},{"u":"conformance.html#unknown-operation","t":"Test vectors","h":"Unknown operation","s":"Only deploy and mint exist. Any other op is rejected.","k":"unknown-operation Reader bad_operation DUST-4.2","w":1},{"u":"conformance.html#transfer-inscription","t":"Test vectors","h":"A transfer inscription","s":"No transfer inscription is valid. Movement happens by spending the satoshis that carry the units. Earlier documentation listed an official transfer payload as an open...","k":"transfer-inscription Reader bad_operation DUST-7.1","w":1},{"u":"conformance.html#wrong-protocol","t":"Test vectors","h":"A different protocol identifier","s":"Content whose p is not dust-20 is not a DUST-20 message.","k":"wrong-protocol Reader bad_protocol DUST-4.1","w":1},{"u":"conformance.html#non-string-value","t":"Test vectors","h":"A numeric JSON value","s":"Every value must be a JSON string. A bare number is rejected because JSON numbers cannot carry large integers exactly.","k":"non-string-value Reader not_flat_strings DUST-2.5","w":1},{"u":"conformance.html#duplicate-key","t":"Test vectors","h":"A repeated field","s":"A duplicate key is rejected rather than resolved last-wins, because two readers would otherwise disagree about the amount.","k":"duplicate-key Reader duplicate_key DUST-2.6","w":1},{"u":"conformance.html#trailing-content","t":"Test vectors","h":"Trailing content after the object","s":"Content after the closing brace makes the message ambiguous and is rejected.","k":"trailing-content Reader trailing_content DUST-2.4","w":1},{"u":"conformance.html#nested-object","t":"Test vectors","h":"A nested object","s":"A payload is a flat object of strings. Nesting is rejected.","k":"nested-object Reader not_flat_strings DUST-2.5","w":1},{"u":"conformance.html#not-json","t":"Test vectors","h":"Content that is not a JSON object","s":"Inscription content must parse as a single JSON object.","k":"not-json Reader not_object DUST-2.4","w":1},{"u":"universe.html#state","t":"Universe support","h":"Marketplace availability is read-only","s":"DUST-20 mutations are unavailable until a typed authoritative ownership resolver replaces the retired address-only legacy flow.","k":"marketplace trade buy sell list offer settle read-only","w":5},{"u":"safety.html#secrets","t":"Security","h":"Never share a recovery phrase or private key","s":"No DUST-20 application needs your seed phrase or private key. An app can prepare an unsigned transaction without them. Leave immediately if a site asks for either.","k":"security critical","w":2},{"u":"safety.html#review","t":"Security","h":"Review every output role before signing","s":"Before the wallet prompt appears you should be able to see the receiver, the units and satoshis going to them, your colored change, the ordinary bitcoin funding the fe...","k":"security critical","w":2},{"u":"safety.html#colored-change","t":"Security","h":"Missing colored change is a stop sign","s":"If you are sending part of an allocation and no colored change output is present, the remainder does not stay yours in any predictable way: some whole units land in wh...","k":"security critical","w":2},{"u":"safety.html#fee-inputs","t":"Security","h":"Keep fee funding separate from colored inputs","s":"Fund the miner fee from ordinary bitcoin. If the fee is taken out of colored backing, the colored range shifts and units can be destroyed even though the transaction c...","k":"security high","w":2},{"u":"safety.html#stale-utxo","t":"Security","h":"Revalidate outputs immediately before building","s":"A selected output may have been spent since the screen loaded. A marketplace listing is discovery data, not proof that an output is still unspent. Re-check at build ti...","k":"security high","w":2},{"u":"safety.html#indexer-disagreement","t":"Security","h":"Treat source disagreement as a blocking error","s":"If two readers describe the same output differently, do not pick the friendlier answer. Show the conflict, block the irreversible step, and keep redacted evidence for...","k":"security high","w":2},{"u":"safety.html#ambiguity","t":"Security","h":"Do not downgrade an ambiguous construction to a warning","s":"Unexplained satoshi differences, mixed-ticker selections and unattributable outputs are failures. Silently filling in a field, rounding a satoshi value, or assuming an...","k":"security high","w":2},{"u":"safety.html#untyped-proof","t":"Security","h":"Never settle value on an untyped ownership answer","s":"A boolean \"still available\" response proves nothing about amount, owner, schema or freshness. This is the recorded reason DUST-20 marketplace mutations are unavailable...","k":"security high","w":2},{"u":"safety.html#retry","t":"Security","h":"Never blindly retry an uncertain broadcast","s":"Keep the transaction id and known status. Disable repeat submission until someone has inspected the transaction. A duplicate broadcast can spend the same colored input...","k":"security medium","w":2},{"u":"safety.html#reorg-awareness","t":"Security","h":"Remember that confirmed is not permanent","s":"A reorganization can remove a confirmation and change which transaction actually spent an output. Track confirmation depth and invalidate derived state when the chain...","k":"security medium","w":2},{"u":"indexer.html#pipeline","t":"Indexing","h":"Observe: Ingest raw chain events","s":"Read complete blocks with input values, output values and output addresses, plus authoritative inscription identity. Record the transaction, output, inscription associ...","k":"indexer pipeline","w":1},{"u":"indexer.html#pipeline","t":"Indexing","h":"Normalize: Parse strictly and keep failures visible","s":"Apply the flat-string-object reader, exact key sets and strict integer parsing. Keep parse failures as recorded invalid events rather than dropping them into an unexpl...","k":"indexer pipeline","w":1},{"u":"indexer.html#pipeline","t":"Indexing","h":"Resolve: Resolve deployment and history","s":"Fold the ticker to its identity, apply first-deploy-wins, and check the mint against the resolved unit size, the per-mint cap and remaining supply. Do not guess when t...","k":"indexer pipeline","w":1},{"u":"indexer.html#pipeline","t":"Indexing","h":"Materialize: Create allocation records with position","s":"An allocation is an outpoint, a ticker identity, an amount, a unit size and a satoshi offset inside that output. The offset is not optional bookkeeping, it is what mak...","k":"indexer pipeline","w":1},{"u":"indexer.html#pipeline","t":"Indexing","h":"Propagate: Follow satoshis through each spend","s":"Concatenate input values into one range and output values into another, intersect each allocation span with each output, keep only whole units, and record the differen...","k":"indexer pipeline","w":1},{"u":"indexer.html#pipeline","t":"Indexing","h":"Reconcile: Roll forward and roll back","s":"Track block association so a reorganization can invalidate newest first, reverse mutations, restore spent allocations, remove orphaned ones and replay the replacement...","k":"indexer pipeline","w":1}]}
