Runes

What Are Runes in Bitcoin?

Runes are fungible tokens issued directly on Bitcoin using the Runes protocol. Ordinals creator Casey Rodarmor proposed the new protocol in September 2023, pitching it as a better and simpler alternative to the experimental BRC-20 standard for fungible tokens.

BRC-20 tokens gained a lot of popularity shortly after the Bitcoin token standard was launched in March 2023 by the pseudonymous developer Domo. About three months later, the value of BRC-20 tokens soared, hitting a market cap of $1 billion.

Although the token standard allowed users to create Bitcoin-native fungible tokens for the first time, it also led to the excessive production of “junk” UTXOs, which clogged the network. Rodarmor seeks to solve this issue with a UTXO-based protocol that will prevent the generation of “junk” UTXOs.

Bitcoin uses the UTXO model, where a transaction consists of inputs and outputs. When a transaction occurs, the input is deleted, and an output is generated. The output left behind is referred to as a UTXO, which can be used later in a new transaction. In other words, unspent transaction outputs (UTXOs) are the coins left in a wallet after completing a transaction.

Unlike other fungible token protocols for Bitcoin, Runes doesn’t require off-chain data or a native token to operate. For instance, the Taproot Assets Protocol uses UTXOs but stores asset metadata off-chain. Alternatively, Counterparty, a protocol built on top of the Bitcoin blockchain, requires a native token for some operations and is not UTXO-based.

How Does the Runes Token Standard Work?

Messages on the Runes protocol are known as runestones (not to be confused with the Runestones Ordinals collection). They can etch new tokens, mint existing tokens, and transfer runes from transaction inputs to outputs.

Runestones are held in Bitcoin transaction outputs that begin with OP_RETURN, a special function that stores data on the Bitcoin blockchain. At most, one rune may be included in a transaction.

Creating Rune Tokens

Creating a new Rune token begins with etching, where elements such as name, token supply, number of decimals, and minting terms are defined. The token supply is assigned to a specific UTXO, allowing a single UTXO to contain any amount of any number of Runes, be it a billion, million, or less. UTXOs are used to keep track of the Rune token balances.

struct Etching { 
divisilibility : Option <u8>, 
premine : Option <u128>, 
rune : Option <Rune›, 
spacers: Option <u32>, 
symbol: Option <char>, 
terms: Option <terms>,
}

Minting & Transferring

The next steps after etching are minting and transfer. Minting generates the actual tokens according to the set terms, while Runes tokens are transferred from transaction inputs to outputs using edict messages. The transfer function splits a UTXO into several new UTXOs holding different amounts of runes to send records to recipients.

An edict is made up of a Rune ID block height and transaction index, the output number, and the amount. The Rune ID is used to identify tokens, and it comprises the block in which a rune was etched, as well as the index of the etching transaction stored within that block.

struct Terms { 
amount : Option <u128>,
cap: Option<u128>, 
height: (Option <u64>, Option <u64> ),
offset : (Option <u64›, Option<u64>),
}
struct Edict { 
id : Runeld, 
amount: u128, 
output : u32,
}

Last updated