Working knowledge

Guide

Everything on this page is the same protocol described normatively on the specification page, told in the order you actually meet it: what an Atomical is, how one is created, how ARC-20 balances move, and where the sharp edges are.

1. The mental model

Most token protocols keep a ledger: an account has a balance, and a message moves it. Atomicals does not. An ARC-20 balance is a set of satoshis. Holding 10000 QUARK means holding a UTXO of 10000 satoshis that the indexer has recorded as colored QUARK. Send those satoshis and the balance goes with them; let them fall into a miner fee and the balance is gone.

Ledger model compared with the colored-sat model Left: a ledger table where addresses have balances and a message updates rows. Right: an atom diagram where satoshis themselves carry token color and moving the satoshis moves the balance. ledger model (BRC-20 style) addressbalance bc1q…a710000 bc1q…f2250 an inscription tells the indexer to edit rows colored-sat model (ARC-20) UTXO 10000 sat spending the sats is the transfer; there is nothing else to update
Fig. 1: two ways to hold a token. In ARC-20 the balance has no separate existence: it is a property of specific satoshis in specific outputs.

Three consequences follow, and they explain almost every surprise people hit:

2. How a mint happens

Every Atomical is created by two transactions.

  1. Commit. You build a taproot script containing an atom envelope: the operation you want (ft, dft, dmt, nft) plus a CBOR payload with your parameters. You pay to the address that script commits to. Nothing is visible yet; the script is only a hash.
  2. Reveal. You spend that output, which forces the script into the witness where indexers can read it. The Atomical is born, its identity fixed to the commit outpoint, its home fixed to output 0 of this reveal.

Two clocks run between them. A general mint must reveal within 100 blocks of its commit; anything requesting a name (a ticker, realm, container, or dmitem) must reveal within 3 blocks. Miss the window and the mint is simply void: the bitcoin moved, the Atomical never existed.

Commit/reveal exists to make name races fair. Because the commit hides your intent, nobody can see that you are claiming +alpha and front-run you; because claims resolve by earliest commit, the person who committed first wins even if someone else reveals sooner.

3. Launching an ARC-20 token

Direct mint (ft)

One transaction pair creates the whole supply at once. The supply equals the satoshi value of the reveal's first output, so a 100000-unit token means paying 100000 satoshis into output 0 and holding them. Simple, immediate, and entirely pre-allocated to you.

Decentralized mint (dft then many dmt)

The deploy declares the shape of the mint and creates no supply at all:

FieldMeaningBounds
request_tickerThe ticker being claimed1 to 21 chars, a-z0-9
mint_amountUnits each claim receives546 to 100000000
max_mintsHow many claims are allowed1 to 21000000
mint_heightFirst block a claim is valid0 to 10000000
mint_bitworkc / mint_bitworkrProof-of-work each claim must satisfy on its commit / reveal txidoptional

Then anyone mints. A claim is valid when it names the ticker, arrives at or after mint_height, pays exactly mint_amount satoshis to its first output, comes before the cap is reached, and satisfies whatever bitwork the deploy demanded. Nothing is reserved, nothing is whitelisted, and claims are processed in block order: it is a public race.

What bitwork actually is

Bitwork is proof-of-work over your own transaction id. A requirement of 1a2b means you must grind your transaction (changing a nonce field in the payload, re-signing, re-hashing) until its txid starts with 1a2b. Four hex characters is roughly 65 thousand attempts on average; each extra character multiplies by 16. The fractional form 1a2b.8 asks for the next digit to be at least 8, giving a half-step of difficulty.

Bitwork is a fairness device, not security: it slows down mass minting so a launch is not instantly drained by one script. In perpetual mode the required difficulty rises automatically after every max_mints claims, so a token can mint forever with steadily increasing cost.

4. How a transfer colors outputs

This is the part worth internalizing. When you spend colored UTXOs, no part of the transaction says where the tokens should go. The indexer decides, by walking a fixed procedure:

  1. Collect. Sum every token's value across all inputs. Two inputs of 500 QUARK are one 1000-unit pool.
  2. Order the tokens. First-in-first-out, by the earliest input index each token appears at.
  3. Fill outputs left to right. The first token fills output 0, then output 1, and so on until its value is exhausted. The next token starts at the output after the last one the previous token touched. OP_RETURN outputs are skipped.
  4. Anything left over burns. Value that no output can hold leaves the supply permanently.

So a transfer is "engineered" by choosing output values. To send 3000 units to a friend and keep 7000, you build output 0 with 3000 satoshis to their address and output 1 with 7000 satoshis to yourself. The order matters more than the addresses.

Since block 848484 the last output a token touches can be partially colored (a 5000-satoshi output carrying 3000 units, the other 2000 satoshis being plain bitcoin). Before that, an output had to be filled exactly or the assignment failed. Use the simulator to see either era behave.

5. Worked transactions

Example A: a clean split

inputs
  0: 10000 sats, colored 10000 QUARK
outputs
  0: 3000 sats -> recipient
  1: 6800 sats -> your change address
fee: 200 sats

result
  output 0 carries 3000 QUARK
  output 1 carries 6800 QUARK
  200 QUARK burn (they went to the miner)

The fee is paid in colored satoshis, so the fee is also paid in tokens. This is unavoidable when the fee comes out of a colored input: to avoid it, add a separate uncolored input to pay the fee, and give the outputs the full 10000 satoshis between them.

Example B: paying the fee from plain bitcoin

inputs
  0: 10000 sats, colored 10000 QUARK
  1: 50000 sats, plain bitcoin
outputs
  0: 3000 sats  -> recipient
  1: 7000 sats  -> your change address
  2: 49800 sats -> your change address
fee: 200 sats

result
  output 0 carries 3000 QUARK
  output 1 carries 7000 QUARK
  output 2 carries no token color
  nothing burns

The token pool is 10000 and outputs 0 and 1 absorb exactly that, in order, so coloring stops before output 2. Output 2 is ordinary change.

Example C: two tokens on one UTXO, separated with split

If a single UTXO carries both QUARK and ATOM (because a previous transaction merged them), a plain spend colors them consecutively in FIFO order, which may not be what you want. The y (split) operation lets each token skip a declared amount of output satoshis before its coloring starts, so you can steer each one onto its own output. NFTs in a split transaction are always forced to output 0, which is a deliberate safety rule.

6. Pitfalls that destroy value

The protocol never rejects a bad transfer. Bitcoin will happily confirm a transaction that burns every unit you own. There is no error, no bounce, no recovery. The only protection is checking the shape before you sign.

Before signing anything that touches an ARC-20 balance: identify which input is colored, confirm the total units, confirm output 0's value, confirm your change output's value, and confirm the two add up to the token total. Run it through the simulator if in any doubt.

7. Names, collections, NFTs

8. Product support matrix

Claims below are limited to what is wired in Bitcoin Universe's own code, verified in the shared protocol capability registry and the corresponding service implementations. Anything not listed is not currently supported in Bitcoin Universe products.

Protocol familyMarketplaceWalletInscribe
ARC-20 Yes view, discover, activity, list, update listing, unlist, buy, make/accept/cancel offer, settle, reconcile Yes view, send, receive Yes deploy, mint, transfer
Atomicals NFTs Yes same action set as ARC-20 Yes view, send, receive Yes mint, transfer
Realms Yes same action set Yes Yes mint, transfer
Subrealms Yes same action set Yes Yes mint, transfer
Atomicals (general objects) Discovery only view, discover, collection, activity, transaction Yes Yes mint, transfer
Containers, dmitems Not a separate registry entry. Container and dmitem objects are indexed and readable through the Atomicals asset service, but no distinct marketplace leaf exists for them.

Marketplace ARC-20 execution runs through an authoritative prepare, sign, finalize flow: listings bind the exact indexed seller outpoint, ticker, and amount, and both listing and buyer-funding checks fail closed if the Atomicals indexer is unavailable rather than falling back to ordinary UTXO data. Settlement is recorded only after the configured confirmation depth (at least one confirmation by default, operator-configurable between 1 and 100).

Verified limits. Two things this documentation will not claim. First, the ARC-20 order book's durability is currently single-host: the engineering record tracks a migration to shared SQL storage as outstanding, so multi-host durability is not yet a supported property. Second, cross-protocol post-confirmation reorg reconciliation for settlement is tracked as an open item, so reorg handling should be treated as operator reconciliation and not as an automatic guarantee. Both are recorded in the marketplace audit log in the Bitcoin Universe core repository.

Live ARC-20 token data and prepared deploy/mint/transfer actions are available in Bitcoin Inscribe; every action is handed to a compatible Bitcoin wallet for review and signing.