OP_DROPProtocol

Reference

Reference

The operational half of the protocol: what an indexer must do with the chain, what an OP_DROP transaction costs, and everything that can go wrong.

Terminology

Terms, with the field names an API uses
TermAPI fieldMeaning
Carrier marker-The fixed ASCII string bip110-op-drop at the head of every leaf. Never a user-facing name.
Protocol identifierpThe string op-drop in every payload. The public name.
Leaf scriptscriptHexThe tapscript revealed in the reveal witness.
Control blockcontrolBlockHexThe 33-byte Taproot proof that the leaf belonged to the spent output.
Anchoranchor{txid}:0. Output 0 of the reveal. Its address owns the event; spending it settles a transfer.
OwnerownerThe address of output 0 of the reveal transaction.
AvailableavailableConfirmed units usable in a new transfer.
ReservedtransferableConfirmed units held by an unsettled transfer. The interface word is "reserved"; the API field is transferable.
TotaltotalAlways available + transferable. Never stored separately.
Event ideventId{txid}:i{vin}:w1 for a reveal, {txid}:s{vin}:{transferEventId} for a settlement.
Minted supplymintedThe sum of all credited mint amounts for a ticker.
Remainingremainingmax - minted.
HolderholdersAn address whose available or reserved balance for a ticker is non-zero.

Indexer semantics

Confirmation

Determinism

Mempool

The ledger never includes mempool activity. There is no such thing as an unconfirmed OP_DROP balance.

The reference indexer can separately track a submitted transaction id so an interface can tell a user where their transaction is. That tracking reports one of three chain states and always carries the same warning.

Provisional tracking states
StateMeaningEffect on balances
mempoolThe transaction is known to the node but is in no block.None
minedIt is in a block that has not reached the confirmation depth.None
finalizedIt is in a block at or beyond the confirmation depth.Applied by the ledger

The warning attached to every provisional record is exact: "Does not affect balances until finalized." Tracking records are retained for a bounded period and are not part of the ledger.

Reorg behaviour

A confirmed OP_DROP result can change if the block containing it is replaced. That is a property of Bitcoin, not a defect in the protocol.

Fee and size

Where the bytes go

A reveal transaction's weight is base bytes × 4 + 2 + witness bytes, and virtual size is that weight rounded up to the next whole vbyte. The leaf script and the control block sit in the witness, so they cost a quarter of what the same bytes would cost in an output.

Measured reveal sizes, one script-path input and one P2TR output
OperationPayloadLeaf scriptBaseWitnessWeightvsize
deploy drop73 B177 B94 B278 B656 WU164 vB
mint 100054 B158 B94 B259 B637 WU160 vB
transfer 25057 B161 B94 B262 B640 WU160 vB
largest deploy101 B206 B94 B307 B685 WU172 vB
Reveal fee for a mint at 160 vB
Fee rateReveal fee
1 sat/vB160 sat
5 sat/vB800 sat
15 sat/vB2,400 sat
40 sat/vB6,400 sat

What the table leaves out

Standardness and relay

An OP_DROP transaction is an ordinary Taproot script-path spend. No node has any concept of OP_DROP, which is both the reassuring part and the risky part.

Limitations

  1. One JSON object per leaf. No batching of events into a single reveal.
  2. 256 bytes per data push, which the token payload never approaches but which forces small chunks for the media attachment.
  3. Tickers are exactly four lowercase alphanumeric characters. There is no longer form and no namespace.
  4. No decimals. Every quantity is a whole number of units.
  5. No self-mint mode. The carrier will encode self_mint, the ledger always rejects it.
  6. Two transactions minimum, three for a completed transfer.
  7. Output 0 is load bearing in both the reveal and the settlement, which makes the protocol sensitive to how a wallet orders outputs.
  8. Only one transfer per transaction. Competing transfers are all rejected.
  9. The payload is invisible until the reveal, so intent cannot be read from the mempool at commit time.
  10. The payload lives in witness data, which a pruned node discards. Recovering an old payload requires an archival node or an indexer copy.
  11. No third-party support. Nothing outside Bitcoin Universe indexes, displays, or trades OP_DROP.
  12. Tickers are unreserved and first-come. A deploy can be front-run by anyone watching the mempool for your commit and reveal.
  13. Strict serialization means a small encoder bug produces confirmed transactions that change nothing, and the fee is still spent.
  14. Lifecycle is experimental. The rules may change, and a change would be published in the changelog before it is deployed.

Security considerations

For anyone creating events

For anyone building an indexer or a decoder

For anyone consuming an OP_DROP API

Implementation checklist

Work down this list. Each item is testable against the test vectors.

Encoder

Decoder

Indexer