The Stable is the Aesthetic bitcoin · ordinals

When a dev tells you that something is weird and hard and they have to change behavior that users rely on, the correct response is somewhere between "Cool story, bro." and "Wah, wah, wah, are the bits being mean to you?". Developers serve users, not the other way around.

For this and other reasons, the ord developers recommit to the stability and predictability of inscription numbers, and will not pursue renumbering.

As someone who people in the ordinals community mysteriously pay a lot of attention to, I see myself as having two distinct roles with regards to proposals such as the great renumbering.

One is to have and propose things that I think are good ideas. This will continue, and I don't see any particular reason to self-censor. In other words, the unfettered blog posts will continue. The community needs to understand that these are proposals only, and that I have had and will continue to have wacky ideas.

The other role is as one of the people who helps make decisions about what to implement in ord, the ordinals reference implementation. Raph, as lead maintainer, has the final say, but he hasn't stopped listening to my wacky ideas, so I still have some influence. Those decisions must be made with respect to the userbase of ord and the greater ordinals community.

When I first decided to propose renumbering, I knew that it had to meet a very high bar. Changes to ord and to ordinals must be Pareto improvements, changes to the status quo that leave everyone better off, or extremely close to it. Changes cannot create winners and losers, even if the benefit to the winners might be greater than the harm to the losers.

After reading discussion on GitHub and Twitter, lurking in many a Twitter space, and discussing it with many people, it's clear that the great renumbering does not meet that very high bar, and is better off consigned to the dustbin of history.

A couple of the arguments that I personally found most persuasive:

What does this mean, practically?

Inscriptions are both a technical artifact, and an artistic technology. Technical considerations must contend on equal footing with aesthetic considerations.

Inscription numbers are here to stay.


Runes bitcoin

I'm not sure creating a new fungible token protocol for Bitcoin is a good idea. Fungible tokens are 99.9% scams and memes. However, they don't appear to be going away any time soon, similar to the way in which casinos don't appear to be going away any time soon. Creating a good fungible token protocol for Bitcoin might bring significant transaction fee revenue, developer mindshare, and users to Bitcoin. Additionally, if this protocol had a small on-chain footprint and encouraged responsible UTXO management, it might serve as harm reduction compared to existing protocols. At least one of which, BRC-20, is already quite popular, and has the undesirable consequence of UTXO proliferation.

When comparing existing fungible token protocols, there are a few important ways in which they differ:

Comparing existing fungible token protocols for Bitcoin:

What would a simple, UTXO-based fungible token protocol with a good user experience for Bitcoin look like? Here's one, called "runes", because it sounds cool.

Overview

Rune balances are held by UTXOs. A UTXO can contain any amount of any number of runes.

A transaction contains a protocol message if it contains an output whose script pubkey contains an OP_RETURN followed by a data push of the ASCII uppercase letter R. The protocol message is all data pushes after the first.

Runes input to a transaction with an invalid protocol message are burned. This allows for future upgrades that change how runes are assigned or created from creating situations where old clients erroneously assign rune balances.

Integers are encoded as prefix varints, where the number of leading ones in a varint determines its length in bytes.

Transfer

The first data push in a protocol message is decoded as a sequence integers.

These integers are interpreted as a sequence of (ID, OUTPUT, AMOUNT) tuples. If the number of decoded integers is not a multiple of three, the protocol message message is invalid.

ID is encoded as a delta. This allows multiple assignments of the same rune to avoid repeating the full rune ID. For example, the tuples:

[(100, 1, 20), (0, 2 10), (20, 1, 5)]

Make the following assignments:

The AMOUNT 0 is shorthand for "all remaining runes".

After processing all tuple assignments, any unassigned runes are assigned to the first non-OP_RETURN output, if any.

Excess assignments are ignored.

Runes may be burned by assigning them to the OP_RETURN output containing the protocol message.

Issuance

If the protocol message has a second data push, it is an issuance transaction. The second data push is decoded as two integers, SYMBOL, DECIMALS. If additional integers remain, the protocol message is invalid.

An issuance transaction may create any amount, up to 2^128 - 1 of the issued rune, using the ID 0 in assignment tuples.

SYMBOL is a base 26-encoded human readable symbol, similar to that used in ordinal number sat names. The only valid characters are A through Z.

DECIMALS is the number of digits after the decimal point that should be used when displaying the issued rune.

If SYMBOL has not already been assigned, it is assigned to the issued rune, and the issued rune receives the next available numeric rune ID, starting at one.

If SYMBOL has already been assigned, or is BITCOIN, BTC, or XBT, then no new rune is created. Issuance transaction assignments using the 0 rune ID are ignored, but other assignments are still processed.

Notes

When displaying UTXO balances, the native bitcoin balance of a UTXO can be displayed with rune ID zero and the symbol BITCOIN, BTC, or XBT.

No attempt is made to avoid symbol squatting, to keep the protocol simple. One possible, but still simple, technique to avoid symbols squatting would be to only allow assignment of symbols above a certain length, with that length decreasing over time, before eventually reaching zero and allowing all symbols. This would avoid short, desirable symbols being assigned in the early days of the protocol, and encourage competition for desirable symbols later on, when such competition might be meaningful.

Hand Wringing

Should such a thing exist? I don't know. It's about as simple as possible, does not rely on off-chain data, does not have a native token, and fits nicely into Bitcoin's native UTXO model. Such a scheme might draw users from other schemes with worse on-chain footprints, and bring developer and user mindshare to Bitcoin, encouraging them to adopt Bitcoin itself.

On the other hand, the world of fungible tokens is a near totally irredeemable pit of deceit and avarice, so it might be a wash.


The Great Renumbering bitcoin · ordinals

Inscription numbers are numbers assigned to inscriptions in the order in which they are created, starting at zero for the genesis inscription.

When inscription numbers were originally added to ord, the Ordinals wallet and explorer that powers ordinals.com, they were intended to be stable and never change.

However, now that we have more experience with the protocol, that seems less tenable and has undesirable consequences, as maintaining stable inscription numbers is a challenge in the face of changes to the inscription protocol.

Consider a simple case, an update that allows multiple inscriptions to be created in a single transaction.

The inscription numbers assigned by an implementation that recognizes multiple inscriptions in a single transaction would differ from those assigned by an implementation that does not.

The former implementation would see T1, creating two new inscriptions, and T2, creating a single new inscription, and assign inscription numbers N, N+1, and N+2, the latter implementation would assign inscription number N to the first and only inscription it recognized in T1, and N+1 to the inscription in T2.

There are many such updates that we would like to make or have made which would introduce discrepancies like these, including:

We've been able to make these changes and keep inscription numbers stable using what I've now come to think of as a regrettable hack: cursed inscriptions. Whenever ord indexes an inscription which would not be recognized by an earlier version, it assigns a negative inscription number. This keeps old inscription numbers stable, while still recognizing new inscriptions.

Cursed inscriptions and negative inscriptions numbers have a number of downsides:

In light of the above, I propose that we make inscription numbers permanently unstable, and bless all cursed inscriptions, both retroactively and on an ongoing basis. Cursed inscription numbers would be folded into the main sequence, and, going forward, inscription numbers should not be used in URLs, which is already the case for ord, and inscription numbers would be de-emphasized on /inscription pages.

This would substantially simplify the ord codebase, make it easier to produce an implementation that assigns the same sequence numbers, and make future protocol changes easier.


Inscribing Mainnet art · bitcoin · ordinals

ord version 0.4.0 has been released. Inscriptions are finally ready for Bitcoin mainnet.

Inscriptions

Inscriptions are digital artifacts native to the Bitcoin blockchain. They are created by inscribing sats with content using ord, and can be viewed with the ordinals explorer. They do not require a separate token, a side chain, or changing Bitcoin.

Inscriptions are created by including content, like an image, text, SVG, or HTML, in an inscription transaction. The content is included in the transaction witness, which normally contains signatures and other data proving that a transaction is authorized.

Along with the content, the inscription transaction contains a content type, also known as a MIME type, identifying the type of content to be inscribed.

When mined, the inscription is made on the first sat of the first output of the transaction, permanently and inexorably marking it, distinguishing it from its fellows. It is no longer just a sat, it is an intertwined component of the long and confusing tale that is human art and culture.

Using ordinal theory, the unspent output containing an inscribed sat can be found, and its movements and ownership tracked across time and transactions, allowing inscriptions to traded, gifted, bought, and sold.

This allows inscriptions quite native to Bitcoin. They can be sent to normal bitcoin addresses, in normal bitcoin transactions, and benefit from timelocks, multisig, and all the rest of Bitcoin's infrastructure. To avoid losing them, a wallet that holds inscriptions must perform sat control, the sizing and alignment of transaction inputs and outputs that controls the destination of individual sats, but aside from that, transactions that transfer inscriptions are quite mundane.

Digital Artifacts

Inscriptions are digital artifacts, and digital artifacts are NFTs, but not all NFTs are digital artifacts. Digital artifacts are NFTs held to a higher standard, closer to their ideal. For an NFT to be a digital artifact, it must be decentralized, immutable, on-chain, and unrestricted. The vast majority of NFTs are not digital artifacts. Their content is stored off-chain and can be lost, they are on centralized chains, and they have back-door admin keys. What's worse, because they are smart contracts, they must be audited on a case-by-case basis to determine their properties.

Inscriptions are unplagued by such flaws. Inscriptions are immutable and on-chain, on the oldest, most decentralized, most secure blockchain in the world. They are not smart contracts, and do not need to be examined individually to determine their properties. They are true digital artifacts.

ord 0.4.0

ord is an open-source binary written in Rust, and developed on GitHub. It implements an ordinal wallet, which can create and transfer inscriptions, and a block explorer. There are public mainnet, signet, and testnet instances.

ord is experimental software, and comes with no warranty or guarantees. ord 0.4.0, the latest release, has been tested carefully, and can now be used to make inscriptions on mainnet, and that those inscriptions will not break due to a future protocol change.

Three mechanisms exist to introduce opt-in changes to the protocol, without breaking existing inscriptions: Versioning, optional fields, and mandatory fields.

Inscriptions can contain a version field. The inscription parser will ignore inscriptions with an unrecognized version. This allows introducing fundamental changes to inscriptions, without disrupting existing inscriptions.

Additionally, fields can be marked as optional or mandatory, which determines how an inscription parser treats an unrecognized field. Unrecognized optional fields are ignored but the inscription is normally, while unrecognized mandatory fields render the whole inscription invalid.

Individual features that can be safely ignored if unsupported can be introduced as optional fields, while features that must be supported in order in order to understand an inscription can be introduced as mandatory fields.

Inscriptions are not finished, but this flexibility gives us confidence that future improvements can be made opt-in and non-disruptive.

Let markets and bazaars where rare sats and inscriptions are traded grow and flourish, and may their wares never crack or vanish.

What's missing?

Inscriptions have many unique benefits and features, but they have not yet reached feature parity with other NFT implementations.

Two key features are missing: provenance and decentralized markets.

Provenance is the ability to determine the author of an inscription, or its membership in a set of inscriptions all created by the same person. We have a design that accomplishes this, and its implementation is tracked in issue #783. A transaction creating a new inscription, X, may include an existing inscription, P, in its inputs, which is returned back to the owner in its outputs. Since only the owner of P could have made this transaction, this identifies P as the parent of X. This mechanism is flexible, and can be used to identify an inscription as being created by an individual, or to identify an inscription as being a member of a larger collection. Furthermore, this mechanism is recursive. You can create in inscription that represents your identity, and use that inscription as the parent of an inscription that itself is used as the parent inscription for a collection.

For inscriptions be valuable, there must be venues where they can be bought and sold. We have a sketch for decentralized and trustless offers to buy and sell using partially-signed transactions, and its implementation is tracked in issue #802. The owner of an inscription may offer it for sale by publishing a transaction that includes it as an input, and containing an output that pays to them the sale price. Any third party can take such a transaction, add their own input of at least the sale price, add an output sending the inscription to themselves, and finalize it by broadcasting it to be mined. Offers to buy are similar.

What's next?

Inscriptions have been designed to be native to the web. Inscriptions are byte strings, identified with a content type, and so can be displayed in a browser. HTML, CSS, JavaScript, SVG, MP3, PNG, and JPEG, are supported by the ordinals explorer.

Inscription content is sandboxed so that it cannot make outgoing web requests. However, in the future, this sandboxing will be relaxed to allow inscriptions to use the content of other inscriptions. This will allow for the development of an a modular, on-chain ecosystem of remixing and composition. This is tracked in issue #1082.

Inscriptions are unnamed and untitled, but we hope to give artificers the ability to give their inscriptions globally unique, human-readable names. This is tracked in issue #794.

The future of inscriptions is bright. We hope not only to reach feature parity with other NFT implementations, but to surpass them.


Single Word Seed Phrases bitcoin

Ord Alpha bitcoin · ordinals

We just released ord version 0.1.0!

ord is an ordinal number wallet and the index that serves ordinals.com.

This release of ord is by no means complete, but it now supports making ordinal-aware transactions on mainnet using the ord wallet send command thanks to @raphjaph, and boasts much faster indexing thanks to @callmeier.

ord wallet send

The ord wallet commands interact with an existing Bitcoin Core wallet using Core's RPC interface, and this release features a new send subcommand that constructs an ordinal-aware transaction to send a particular ORDINAL to a recipient's ADDRESS:

ord wallet send ORDINAL ADDRESS

We write extensive tests alongside every feature, but bugs can always slip through, and the project as a whole is still immature, so restrictions apply when using ord wallet send with Mainnet wallets.

ord wallet send will refuse to interact with a Mainnet wallet with a name other than ord, which does not start with ord-, to encourage users to explicitly mark wallets as being intended for use with ord.

Using bitcoin-cli wallet commands with an ord wallet risks spending your rarest and most exotic sats, and using ord wallet commands with your main wallet risks doxing your main stash if you assocaite a spicy ordinal with your identity.

Index Optimization

ord must build and maintain an index that maps transaction outputs to ordinal ranges. ord 0.1.0 now exploits the fact that many UTXOs are spent soon after they're created, and uses an in-memory cache to avoid huge numbers of database insertions and retrievals. ord uses the redb database, which is already quite fast, but using an in-memory cache avoids reads from and writes to redb's B-tree, which are more expensive than the in-memory cache's hashmap.

Backwards Compatibility

ord is still alpha-quality software, so breaking changes are inevitable, but starting with version 0.1.0, we'll indicate when breaking changes are included in a release by bumping the minor version number (0.x.0).

Try it out!

Check out ord 0.1.0 and let us know what you think! ord is CC-0-licensed open-source software developed on GitHub.


Bitcoin Chaosnet bitcoin

Ideas for a new Bitcoin testnet:

One of Bitcoin's core features is that coins have real-world value. A testnet with coins that have no value doesn't reproduce dynamics essential to Bitcoin, and doesn't encourage real-world use.


Sending Ordinals on Signet bitcoin · ordinals

Raph and I have been working hard on ord, the ordinal block explorer and wallet, and have just finished the initial version of the ord wallet send ORDINAL ADDRESS command, which makes a transaction sending ORDINAL to ADDRESS.

Ordinal-aware Bitcoin transactions are rather tricky, and must attend to a number of considerations:

This requires a great deal of stressful fiddling with transaction input and output size and order, and a great deal of checks for edge cases. You can see all the gory details in the transaction builder.

All that fiddling has paid off, and today we made three transactions on signet:

ord wallet send will hopefully be much easier to use compared to using bitcoin-cli to manually construct ordinal-aware transactions. Give it a shot and let us know what you think!


Ordinal Theory bitcoin · computers · internet · cryptocurrency · ordinals

I've been working on a numbering scheme for satoshis that allows tracking and transferring individual sats. These numbers are called ordinals, and constitute a numeric namespace for Bitcoin. Satoshis are numbered in the order in which they're mined, and transferred from transaction inputs to transaction outputs in first-in-first-out order. More details are available in the BIP.

Ordinals don't require a separate token, another blockchain, or any changes to Bitcoin. They work right now.

Ordinals can be represented in a few ways:

With raw notation, like so 1905530482684727°. The number is the ordinal number, and the "°" is the Romance language ordinal symbol.

With decimal notation, like so 738848.482684727°. The first number is the block height, and the second is the index of the ordinal within the block.

With degree notation, like so 0°108848′992″482684727‴. We'll get to that in a moment.

A block explorer is available at ordinals.com. You can explore recent blocks, and look up ordinals by number, decimal, degree, or name.

Arbitrary assets, such as NFTs, security tokens, accounts, or stablecoins can be attached to Ordinals.

Ordinals is an open-source project, developed on GitHub. The project consists of a BIP describing the ordinal scheme, an index that communicates with a Bitcoin Core node to track the location of all ordinals, a wallet that allows making ordinal-aware transactions, a block explorer for interactive exploration of the blockchain, and functionality for minting ordinal NFTs.

Rarity

Since ordinals can be tracked and transferred, people will naturally want to collect them. Ordinal theorists can decide for themselves which sats are rare and desirable, but I wanted to provide some hints.

Bitcoin has periodic events, some frequent, some more uncommon, and these naturally lend themselves to a system of rarity. These periodic events are:

This gives us the following rarity levels:

Which brings us to degree notation, which unambiguously represents an ordinal in a way that makes rarity easy to see at a glance:

A°B′C″D‴
│ │ │ ╰─ Index of sat in the block
│ │ ╰─── Index of block in difficulty adjustment period
│ ╰───── Index of block in halving epoch
╰─────── Cycle, numbered starting from 0

Ordinal theorists often use the terms "hour", "minute", "second", and "third" for A, B, C, and D, respectively.

Now for some examples. This ordinal is common:

1°1′1″1‴
│ │ │ ╰─ Not first sat in block
│ │ ╰─── Not first block in difficutly adjustment period
│ ╰───── Not first block in halving epoch
╰─────── Second cycle

This ordinal is uncommon:

1°1′1″0‴
│ │ │ ╰─ First sat in block
│ │ ╰─── Not first block in difficutly adjustment period
│ ╰───── Not first block in halving epoch
╰─────── Second cycle

This ordinal is rare:

1°1′0″0‴
│ │ │ ╰─ First sat in block
│ │ ╰─── First block in difficulty adjustment period
│ ╰───── Not the first block in halving epoch
╰─────── Second cycle

This ordinal is epic:

1°0′1″0‴
│ │ │ ╰─ First sat in block
│ │ ╰─── Not first block in difficulty adjustment period
│ ╰───── First block in halving epoch
╰─────── Second cycle

This ordinal is legendary:

1°0′0″0‴
│ │ │ ╰─ First sat in block
│ │ ╰─── First block in difficulty adjustment period
│ ╰───── First block in halving epoch
╰─────── Second cycle

And this ordinal is mythic:

0°0′0″0‴
│ │ │ ╰─ First sat in block
│ │ ╰─── First block in difficulty adjustment period
│ ╰───── First block in halving epoch
╰─────── First cycle

If the block offset is zero, it may be omitted. This is the uncommon ordinal from above:

1°1′1″
│ │ ╰─ Not first block in difficutly adjustment period
│ ╰─── Not first block in halving epoch
╰───── Second cycle

Supply

Total Supply

Current Supply

At the moment, even uncommon ordinals are quite rare. As of this writing, 745,855 uncommon ordinals have been mined - one per 25.6 bitcoin in circulation.

Names

Each ordinal has a name, consisting of the letters A through Z, that get shorter the larger the ordinal is. They could start short and get longer, but then all the good, short names would be trapped in the unspendable genesis block.

As an example, 1905530482684727°'s name is "iaiufjszmoba". The name of the last ordinal to be mined is "a". Every combination of 10 characters or less is out there, or will be out there, some day.

Exotics

Ordinals may be prized for reasons other than their name or rarity. This might be due to a quality of the number itself, like having an integer square or cube root. Or it might be due to a connection to a historical event, such as ordinals from block 477,120, the block in which SegWit activated, or ordinal 2099999997689999°, the last ordinal that will ever be mined.

Such ordinals are termed "exotic". Which ordinals are exotic and what makes them so is subjective. Ordinal theorists are are encouraged to seek out exotics based on criteria of their own devising.

Archaeology

A lively community of archaeologists devoted to cataloging and collecting early NFTs has sprung up. Here's a great summary of historical NFTs by Chainleft.

A commonly accepted cut-off for early NFTs is March 19th, 2018, the date the first ERC-721 contract, SU SQUARES, was deployed on Ethereum.

Whether or not ordinals are of interest to NFT archaeologists is an open question! In one sense, ordinals were created in early 2022, when I finalized the Ordinals specification. In this sense, they are not of historical interest.

In another sense though, ordinals were in fact created by Satoshi Nakamoto in 2009 when he mined the Bitcoin genesis block. In this sense, ordinals, and especially early ordinals, are certainly of historical interest.

I personally favor the latter view. This is not least because the ordinals were independently discovered on at least two separate occasions, long before the era of modern NFTs began.

On August 21st, 2012, Charlie Lee posted a proposal to add proof-of-stake to Bitcoin to the Bitocin Talk forum. This wasn't an asset scheme, but did use the ordinal algorithm, and was implemented but never deployed.

On October 8th, 2012, jl2012 posted a scheme to the the same forum which uses decimal notation and has all the important properties of ordinals. The scheme was discussed but never implemented.

These independent inventions of ordinals indicate in some way that ordinals were discovered, or rediscovered, and not invented. The ordinals are an inevitability of the mathematics of Bitcoin, stemming not from their modern documentation, but from their ancient genesis. They are the culmination of a sequence of events set in motion with the mining of the first block, so many years ago.