Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add applications to BIP #127

Merged
merged 7 commits into from
Feb 10, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
86 changes: 83 additions & 3 deletions bip.mediawiki
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ For the purposes of the assignment algorithm, the coinbase transaction is consid

Underpaying the subsidy does not change the ordinal numbers of satoshis mined in subsequent blocks. Ordinals depend only on how many satoshis could have been mined, not how many actually were.

At any given time, the output in which an ordinal resides can be identified. The public key associated with this output can be used to sign messages, such as ownership challenges, concering to the ordinals it contains. The specification of a standardized message format for such purposes is deferred to a later BIP.
At any given time, the output in which an ordinal resides can be identified. The public key associated with this output can be used to sign messages, such as ownership challenges, concerning to the ordinals it contains. The specification of a standardized message format for such purposes is deferred to a later BIP.

Ordinal aware software should not mix outputs containing meaningful ordinals with outputs used for other purposes to avoid inadvertent loss of valuable ordinals, or privacy leaks allowing links between funds. For this reason, ordinal aware software using BIP-32 hierarchical deterministic key generation should use a key derivation path specific to ordinals.

Expand Down Expand Up @@ -111,7 +111,7 @@ Ordinals are as granular as possible, as bitcoin is not capable of tracking owne

''Privacy: Ordinal numbers are public and thus reduce user privacy.''

The appllications using ordinal numbers required them to be public, and reduce the privacy of only those users that decide to use them.
The applications using ordinal numbers required them to be public, and reduce the privacy of only those users that decide to use them.

''Fungibility: Ordinal numbers reduce the fungibility of Bitcoin, as ordinals received in a transaction may carry with them some public history.''

Expand Down Expand Up @@ -147,6 +147,86 @@ Since any ordinal can be sent to any address at any time, ordinals that are tran

Ordinal numbers are fully backwards compatible and require no changes to the bitcoin network.

== Applications ==

=== Accounts and Authentication ===

Ordinal numbers can serve as the basis for account and authentication schemes. The account issuer associates a newly created account with an ordinal number in an output controlled by the account owner. The account owner can then log in and take actions related to the account by signing messages with the private key associated with the public key associated with the output that contains the account ordinal. This key is only known to the account owner, preventing unauthorized access.

By transferring the ordinal to a new output, the owner can rotate their private key, or transfer the account to a new owner. Transferring an ordinal requires creating a transaction signed by the current outputs private key, preventing unauthorized transfer of accounts.

=== Colored Coins ===

Ordinals can be used as the basis for colored coin schemes. Unlike other colored coin schemes which use additional outputs or require manipulation of other parts of a transaction, ordinal-based colored coin schemes can take advantage of the full range of available script types, and other base-layer bitcoin features.

=== Compatibility with Existing and Envisaged Applications ===

Ordinals are compatible with many current and planned applications.

==== Covenant Compatibility ====

Since ordinals are borne by outputs, they can be encumbered by covenants. [https://github.com/bitcoin/bips/blob/master/bip-0119.mediawiki BIP-119] specifies OP_CTV, which constraints outputs by pre-committing to a spending transaction template. This template commits to the number, value, and order of spending transaction outputs, which allows constraining how specific ordinals are spent in future transactions.

==== Lightning Network Compatibility ====

Lightning Network channels can be created with inputs whose ordinals are colored coins, for example colored coins honored for redemption by a stablecoin issuer. These channels can be used to conduct instant, low-fee USD-denominated off-chain payments, and would require only modest changes to existing Lightning Network nodes.

On channel close, fees would have to be paid by child-pays-for-parent, to avoid paying stablecoin ordinals as fees.

==== RGB Compatibility ====

[https://rgb-org.github.io/ RGB] is a proposed scheme for using sequences of single-use seals to define state transitions of off-chain, client-side-validated state machines, for example smart contract platforms. Such chains of single-use seals could be addressed by an ordinal contained in the output that starts the chain of single-use seals.

==== State Chain Compatibility ====

[https://github.com/RubenSomsen/rubensomsen.github.io/blob/master/img/statechains.pdf The state chain proposal] facilitates off-chain transfer of whole outputs, which could contain ordinals with specific meanings, for example stable coins or NFTs, allowing off-chain transfer of such digital assets.

=== The DNS ===

The DNS root of trust could be defined not as a specific set of public keys, but as a specific set of ordinals, which would allow for easy key rotation and updates to the set.

=== Name Services ===

A scheme, not described in this document, could be used to assign names to ordinals based on their number. These names could then be used as account names. Many such names would be gibberish, but many would be human readable. A scheme which enumerated strings of the ASCII characters `a` through `z` would assign as names all length-10 and shorter permutations of these characters.

=== NFTs ===

An artist can issue an NFT by signing a message containing a hash of a work of art that they have created, along with the number of a particular ordinal. The owner of that ordinal is the owner of that NFT, allowing ownership to be proven, and the NFT to be bought and sold, and otherwise change hands.

Such NFTs could be used for art, in-game assets, membership systems, or any other kind of digital asset.

The signed message, which may contain arbitrary attributes and metadata, is not sensitive and can be widely disseminated and replicated, to ensure it is not lost.

Scarcity of such NFTs can be guaranteed by including in the NFT messages the total number of NFTs to be issued. If this promise is violated, the set of issued NFTs serves as an easy-to-verify fraud proof that the issuance limit was exceeded.

A judicious NFT issuer will create a new private key to sign a new set of NFTs and destroy it afterwards, to ensure the limited nature of the NFT set. Multi-party-computation can be used to provide additional assurances that overissuance cannot occur.

=== PKI ===

Instead of individual public keys serving as roots of trust for PKI systems, individual ordinals could be used, allowing for key rotation.

=== Rare Sats ===

Ordinal numbers are unique, which might encourage collectors and speculators to collect particular ordinals. Examples of potentially collectable ordinals include:

* The first ordinal in a block, difficulty adjustment period, or halving epoch.
* Ordinals consisting only of a single repeating digit.
* Ordinals with a large number of 8s, commonly held to be a lucky digit.
* Low ordinals mined early in bitcoin's history.
* Ordinals that were part of unusual blocks or transactions.

=== Reputation Systems ===

Ordinal numbers can serve as the basis for persistent reputation systems, for example one of Lightning Network node operators. Unlike the current system of associating reputation with public keys, an ordinal-based reputation system allows for key rotation and reputation transfer.

=== Stablecoins ===

A stablecoin issuer could promise to allow redemption of a range of ordinals for one United States dollar each, minus the price of one satoshi times the number of satoshis so redeemed. Such ordinals could be transacted on-chain and on a slightly modified Lightning Network, as well as other layers.

=== Voting and DAOs ===

A DAO or other organization may decide to allocate voting rights proportionally to ownership of a predetermined range of ordinals. Voting rights can thus be made transferable, and voting may be conducted by signing messages using public keys associated with the outputs holding vote-bearing ordinals.

== Reference implementation ==

This document, along with an implementation of an ordinal index that tracks the position of ordinals in the main chain, is available [https://github.com/casey/ord here].
Expand All @@ -162,4 +242,4 @@ For aliases, an implementation of short on-chain identifiers, see BIP 15.
TODO: Everyone who helped. All remaining errors are my own.

[0] With the exception of being word #1405 in the BIP-39 Portuguese word list. Me perdoe!
[1] 7303780 is the decimal representation of the ascii string 'ord'.
[1] 7303780 is the decimal representation of the ASCII string 'ord'.