Protocol experiment · Bitcoin L1

DUST-20 on Bitcoin

Native fungibility without transfer inscriptions. Each token unit is a dyed dust UTXO — 546 sats by default — tracked by indexers and wallets that aggregate colored outputs.

Introduction

DUST-20 is an experiment in improving fungibility directly on Bitcoin. Instead of inscribing a new transfer event for every move, token state lives in ordinary UTXOs whose satoshi values are “dyed” with a deploy/mint inscription.

The goal: make Bitcoin-native transfers of fungibles practical by linking the dust limit (546 sats) to a token unit — so moving tokens is just moving sats in a transaction, with balance state derived from colored UTXOs.

Replaces the legacy GitBook. This page is the canonical Universe documentation. The old dust-20.gitbook.io site is deprecated.

Core concept

Three ideas define the protocol:

Unit = dust sats

One token unit defaults to 546 sats — Bitcoin’s standard dust threshold.

Colored UTXOs

Mint inscriptions lock amt × unit_sats into an output. Those sats carry the token.

Transfer = split UTXO

Send dyed sats to a receiver and change back to yourself. No new inscription required.

Deploy Mint (+ padding) Dyed UTXO Split / transfer TX Indexer balance

A DUST-20 indexer or compatible wallet aggregates all UTXOs colored for a given tick and computes balances — similar in spirit to rune or BRC-20 indexing, but the transfer layer is pure Bitcoin.

Operations

D

deploy

Define ticker, max supply, sats per unit, and optional per-mint cap.

M

mint

Inscribe JSON with amt and matching sats padding on the output.

T

transfer

Spend a dyed UTXO; pay network fees from a separate, non-colored UTXO.

Deploy

Deploy inscribes token metadata. The demo ticker dust has likely reached max supply — use a new tick for new experiments.

deploy inscription JSON
{
  "p": "dust-20",
  "op": "deploy",
  "tick": "dust",
  "supply": "1000000",
  "unit_sats": "546",
  "max_sats": "546000000"
}
KeyRequiredDescription
pyesProtocol identifier — always dust-20
opyesOperation: deploy
tickyesToken ticker (not limited to 4 bytes)
supplyyesMaximum token supply
unit_satsyesSatoshis representing 1 token unit (typically 546)
max_satsyessupply × unit_sats — total satoshis for the token
lim_satsnoMax sats per mint inscription (e.g. UniSat’s ~50,000 sat cap → 546 × 91 = 49,686)

Mint

Mint inscribes an amount of tokens and locks the corresponding satoshis into the inscription UTXO. The inscription output value must equal the sats field.

mint inscription JSON (UniSat 50k cap example)
{
  "p": "dust-20",
  "op": "mint",
  "tick": "dust",
  "amt": "91",
  "sats": "49686"
}
Sats in item must match sats in the JSON. When inscribing, set the inscription output to exactly amt × unit_sats (here: 91 × 546 = 49,686 sats). Wallets that enforce a per-inscription cap require amt × unit_sats ≤ lim_sats from deploy.
KeyRequiredDescription
pyesdust-20
opyesmint
tickyesToken ticker from deploy
amtyesToken amount to mint; must respect lim_sats if set
satsyesOutput padding: amt × unit_sats

Transfer

A mint inscription creates a UTXO with dyed sats. To move tokens, spend that UTXO in a normal Bitcoin transaction — split the colored value between receiver and change. Pay miner fees from a non-colored UTXO.

Worked example

You hold a mint UTXO of 91 tokens with 49,686 sats padding. Transfer 10 tokens:

unit_sats = 546
transfer_amt = 10
receiver_output = 10 × 546 = 5,460 sats → receiver wallet
change_output = 49,686 − 5,460 = 44,226 sats → your wallet
fees = paid from a separate cardinal UTXO

Indexers detect the split, update balances, and wallets can offer merge/split helpers to consolidate dyed UTXOs — all without new inscriptions.

Balance & indexing

DUST-20 balance state is not stored in a single inscription chain. Indexers and wallets:

  1. Parse deploy and mint inscriptions for a tick
  2. Track UTXOs whose value matches dyed sat rules for that token
  3. Update balances when those UTXOs are spent (transfers, merges, splits)
  4. Expose aggregate balances per address — similar to a UTXO-based token ledger

Universe Inscribe classifies dust-20 inscriptions in portfolio and search; full merge/split and marketplace flows are integrated via the Tap Wallet stack.

Tools & links

Bitcoin Universe is adopting DUST-20 with indexer support, deploy/mint/transfer, merge/split, marketplace, and wallet integration.

Quick reference

RuleDetail
Protocol field"p": "dust-20"
Default unit546 sats per token
Mint output valueMust equal sats in JSON
Transfer mechanismBitcoin TX splitting dyed UTXO; fees from cardinal UTXO
Balance sourceSum of dyed UTXOs per address (indexer)
LLM docsllms.txt