← Back to The Bitcoin Observatory

Bitcoin Embedding Protocols

Since 2013, developers have found ways to embed non-financial data into Bitcoin's blockchain. From token protocols to digital art, each approach uses a different part of the transaction structure, with different trade-offs for cost, pruning, and chain impact.

Timeline

Omni Layer

2013/07OP_RETURNLow activity

One of the earliest token protocols on Bitcoin, originally launched as Mastercoin in 2013. Tether (USDT) initially launched on Omni in 2014 before activity later shifted primarily to Ethereum and Tron.

How it works

Omni commonly encodes protocol messages in OP_RETURN outputs using the 4-byte "omni" marker, followed by binary payloads for operations such as send, issue, and trade. Omni-aware nodes index and interpret these messages to track token balances.

Commonly encodes token operations in OP_RETURN outputs using the "omni" magic prefix (hex: 6f6d6e69). Earlier versions used other encoding methods.

💡 During 2017-2018, Omni-related transactions represented a significant portion of all OP_RETURN activity on Bitcoin, largely driven by Tether transfers.

PrunableFungible tokens

Counterparty

2014/01OP_RETURNSome activity

Created XCP tokens through a proof-of-burn process in which roughly 2,100 BTC were sent to an unspendable address. Counterparty enabled token issuance, a decentralized exchange, and other financial primitives on Bitcoin.

How it works

Counterparty protocol messages were embedded in Bitcoin transactions using methods including OP_RETURN and multisig-style encodings. Messages are identified by the "CNTRPRTY" prefix and decoded by Counterparty nodes to execute token operations.

Messages identified by the "CNTRPRTY" prefix (hex: 434e545250525459), embedded via OP_RETURN and historically also multisig-style encodings.

💡 The BTC burned to create XCP was worth roughly $1.8M at the time. At today's prices it would be worth considerably more.

PrunableFungible tokens

Stamps / SRC-20

2023/03Bare MultisigActive

Embeds image data in bare multisig-style output scripts rather than witness data. Unlike Ordinals inscriptions, the encoded data is placed in non-witness transaction outputs; while such outputs remain unspent, they consume UTXO set space rather than prunable witness space. This persistence was a deliberate design goal.

How it works

A transaction creates bare multisig outputs in which some supposed "public keys" actually encode chunks of image data. Stamp-aware indexers reconstruct the asset data from these script elements. While these outputs remain unspent, they occupy UTXO set space on every full node.

Embeds data in bare multisig output scripts (not P2SH-wrapped). Supposed "public keys" in the multisig actually encode chunks of image data.

💡 Stamps emerged partly as a response to discussions in the Bitcoin community about potentially pruning or filtering Ordinals witness data.

UnprunableNon-fungible / data

Ordinals

2023/01/21Witness DataActive

Created by Casey Rodarmor. Introduces "ordinal theory," a convention for assigning serial numbers to individual satoshis, and enables inscribing arbitrary data (images, text, HTML) into the witness field of transactions. Inscription data benefits from the SegWit witness discount: witness bytes count at one quarter the weight of non-witness bytes.

How it works

The inscription is placed inside a Taproot script-path spend. The witness contains an envelope with OP_FALSE OP_IF to create a no-op branch that carries the data. Since it's in the witness, it benefits from the 75% weight discount introduced by SegWit.

Inscribes data inside a Taproot witness script using an envelope: OP_FALSE OP_IF OP_PUSH "ord" [content_type] [data] OP_ENDIF.

💡 The first known inscription (block 774,628) was a pixel art image. Inscription activity grew rapidly, with over a million inscriptions created within the first few months.

PrunableNon-fungible / data

BRC-20

2023/03/08Witness (JSON)Active

An experimental fungible-token convention built on Ordinals inscriptions. Uses JSON payloads with deploy, mint, and transfer operations. Bitcoin's consensus rules do not validate BRC-20 state; off-chain indexers interpret the inscriptions to determine token balances. BRC-20 activity was a major contributor to elevated fees and mempool congestion in mid-2023.

How it works

A BRC-20 operation is an Ordinals inscription, typically with text content containing JSON like {"p":"brc-20","op":"mint","tick":"ordi","amt":"1000"}. External indexers parse these inscriptions, apply the BRC-20 rules, and compute token balances. None of this logic exists in Bitcoin itself.

Ordinals inscriptions, typically with text content containing JSON such as {"p":"brc-20","op":"mint",...}.

💡 BRC-20 is entirely off-protocol: if two indexers disagree on how to interpret the JSON rules, users could see different token balances depending on which indexer they trust.

PrunableFungible tokens

Runes

2024/04/20OP_RETURNActive

A fungible token protocol created by Casey Rodarmor as a simpler, more UTXO-native alternative to BRC-20. Runes launched at Bitcoin's fourth halving block.

How it works

Runes stores a "runestone" message in an OP_RETURN output using compact encoded fields for operations such as etching, minting, and transfers. Token balances are assigned to UTXOs, so transfers happen through normal UTXO spending and creation rather than inscription-indexed account balances.

Stores a "runestone" message in an OP_RETURN output using compact integer-based encoding for token operations.

💡 The simultaneous Runes launch and halving at block 840,000 caused a significant fee spike as users competed to etch the first tokens, with reported fee rates exceeding 1,000 sat/vB.

PrunableFungible tokens
📜

Historical note: Colored Coins (2012–2015)

Colored Coins was the earliest concept for representing tokens on Bitcoin, predating all protocols listed above. Rather than a single protocol, it was a family of incompatible implementations (Open Assets, EPOBC, ChromaWay) that used various techniques, from OP_RETURN markers to transaction output ordering, to "color" specific satoshis as representing real-world assets. Most implementations relied on external metadata servers, making on-chain detection unreliable. Colored Coins saw limited adoption but were historically significant as the first tokenization experiments on Bitcoin, directly inspiring later protocols like Counterparty and Omni. They are not tracked in the Observatory charts due to their ambiguous on-chain footprint and low volume.

Comparison

ProtocolYearEmbedding MethodPrunable?Token TypeStatus
Omni Layer
2013/07OP_RETURNYesFungibleLow activity
Counterparty
2014/01OP_RETURNYesFungibleSome activity
Stamps / SRC-20
2023/03Bare MultisigNoNon-fungibleActive
Ordinals
2023/01/21Witness DataYesNon-fungibleActive
BRC-20
2023/03/08Witness (JSON)YesFungibleActive
Runes
2024/04/20OP_RETURNYesFungibleActive
View Embedded Data Charts

View embedded data charts in the Observatory