Notes On a Chain

An Ordinals Documentation Repository

Compiled by MattInCT

Version 1.1

Introduction

Welcome to Notes On a Chain, an Ordinals documentation repository.

Since its inception in 2009, Bitcoin revolutionized the way we perceive money. With its decentralized nature, bitcoin has established itself as the most relevant and dominant cryptocurrency. It's widespread adoption, global recognition, and substantial market capitalization make it the benchmark against which all other cryptocurrencies are measured. Bitcoin's enduring presence and influence serve as a catalyst for innovation.

Andreas Antonopoulos, a well-respected Bitcoin advocate, while emphasizing the fundamental principles and elegant design of Bitcoin, expressed the beauty of Bitcoin's simplicity with its focus on a single core purpose.

"Bitcoin is beautifully engineered because it is designed to do one thing and one thing only: send money. It doesn't try to be all things to all people. It doesn't compromise on its fundamental principles. It's a robust, elegant solution that empowers individuals to transact in a decentralized and permissionless manner." - Andreas Antonopoulos

Then in January 2023, Casey Rodarmor launched the open-source Ordinals protocol called "Ord" that runs on top of a Bitcoin full node. Ord parses the bitcoin blockchain and indexes its contents in new and exciting ways. With the introduction of "Ordinal Theory", Bitcoin was not directly altered and therefore became no less elegant as a result of Ordinals and their design.

When delving into the world of Ordinals, one quickly realizes that there are numerous tools and methodologies to accomplish various tasks. On the one hand, this offers flexibility and creativity, enabling individuals to explore different avenues. On the other hand, it can lead to confusion and inefficiency.

The purpose of this document is to address this dilemma directly. While the approaches outlined in this collection are not purported to be the definitive way of accomplishing any specific task, they aim to provide a solid foundation for individuals seeking a reliable method. By narrowing down the choices and presenting a curated selection, we hope to alleviate the confusion and enable readers with tried and tested practices.

It is important to note that the world of Bitcoin and Ordinals is ever-evolving, and new techniques, technologies, and best practices emerge continuously. Therefore, this collection of notes serves as a snapshot in time, capturing a specific set of approaches that were proven effective at the time of writing.

The technical notes herein were taken while performing tasks on a Mac. Many of the details are very specific to macOS. As required, you will need to research how to handle such things on Windows.

Ordinals

Ordinals are the result of Ordinal Theory.

Ordinal Theory is first and foremost a protocol for assigning serial numbers to satoshis.

A satoshi is the smallest unit of currency on the Bitcoin network. One bitcoin is comprised of 100,000,000 satoshis.

Individual satoshis can be inscribed with data such as an image or string of text. Like any satoshi, they can then be held in Bitcoin wallets and transferred with a Bitcoin transaction.

These inscribed satoshis - or "inscriptions" - are referred to as Ordinals.

Much in the way a Bitcoin wallet parses the blockchain to reveal your balance and transactions, think of Ordinal Theory as a new lens through which to view the same blockchain. This new lens reveals images and other content found alongside transaction data. That content and each underlying satoshi is then indexed while applying a serial number to each.

Ordinal Theory created two main elements:

  1. Each individual Sat is tracked with a sequential sat numbering scheme. To distinguish them for purposes of this discussion, these are uninscribed sats.
  2. Ordinals are inscribed sats tracked with a sequential Ordinal numbering scheme.

How Does It Work?

Inscriptions are created when data is written to a satoshi in accordance with the inscription content model. In addition to the content itself, the inscription includes an Ordinal identifier (Ord) and a content type (or MIME type) that allows readers to know how to handle the content.

This is the same MIME data model used by the web, allowing inscriptions to evolve with the web, in support of any content supported by web browsers - all without requiring changes to the underlying protocol.

Ordinal Theory did not change how the blockchain works. Instead, two previous Bitcoin upgrades (SegWit and Taproot) introduced changes that made it possible to store a larger amount of data in a way that is more affordable (cheaper fees tied to the payload).

Unlike Ethereum NFTs that have content stored off-chain - typically on IPFS - Ordinal content is stored directly on-chain. The inscription data is posted as part of the "witness" data - the portion of the transaction that stores signatures.

Ordinals are always immutable such that it is impossible to alter an Ordinal after it has been created.

If you believe the Bitcoin network is permanent, then the content of Ordinals is permanent as well. Ordinals will outlive us all. This is a significant difference when compared to Ethereum NFTs wherein eventually someone will stop paying for persistent IPFS storage and the NFT will cease to reveal an image.

Do Ordinals Hinder Bitcoin's Ability to Function as Decentralized Money?

No. Bitcoin is and will always be a solution designed to decentralize money.

Ordinal Theory can help Bitcoin achieve its mission. First, inscriptions incur increased fees for miners. These miner fees help improve the security and resiliency of the network.

Ordinals will attract new participants that start collecting digital artifacts, but eventually become evangelists for Bitcoin as decentralized money.

Builders will build. More use cases and more users of Bitcoin will compel wallet developers and other solutions to improve and create wholly new user experiences. In this way, Ordinals has the potential to spark a new wave of development around the Bitcoin blockchain.

More people will be compelled to run a Bitcoin full node, increasing the strength of the network.

Inscriptions will stress test the network, serving to identify opportunities for improvement as Bitcoin continues to evolve.

Ordinals make Bitcoin exciting to OGs and new participants alike.

Inscribing

See Links section for a list of inscribing services.

Padding

Using Sparrow, padding UTXOs is useful when you want to add sats to an Ordinal as you may want to do if you will send the Ordinal in a manner that uses its sats to cover the transaction fee.

  1. If not already in your Sparrow wallet, send the Ordinal there
  2. In Sparrow, label an unused address like "Spendable BTC" and send at least 10,000 sats to this address
  3. Under the Receive tab, label a third address like "Padded Bitcoin Punk #1234"
  4. From the UTXO tab, click the Ordinal you want pad along with Command+click to also select the UTXO with your Spendable BTC
  5. With the two UTXOs selected, click Send Selected
  6. From the Send screen, paste the Pay to address, label the transaction like "Pad Bitcoin Punk #1234", and under Amount enter the total amount of sats you want to make up the padded Ordinal (typically 10,000 sats)
  7. Slide the fee range as desired while noticing that as you move the fee, Sparrow changes the order of the inputs as shown on the left side of the transaction workflow diagram

IMPORTANT: Make sure the Ordinal to be padded appears on the top of the left side, leaving the Spendable BTC to be on the bottom. Sparrow will randomly change this order as you change the fee amount. Just keep playing with the fee slider until it represents the speed you want and the transaction diagram shows the Ordinal as the top item on the left side.

  1. Click Create Transaction to proceed to view the transaction before Signing and Broadcasting

IMPORTANT: Make sure the Ordinal is the first item on both the left and right side of the diagram. Sparrow is randomly ordering these items. If they are not ordered correctly, simply close the window to go back and click Create Transaction again. After doing this a few times, eventually they will be in the desired order.

  1. Only when the final view of the transaction shows the Ordinal as the top item in both the inputs (left side) and outputs (right side) should you click to Sign and Broadcast the transaction. If you get this ordering wrong, you will corrupt your Ordinal.
  2. The Ordinal will be delivered with a size of 10,000 sats

Sat Hunting

Bitcoin has periodic events that create a system of rarity for sats:

  • Common: Any sat that is not the first of its block
  • Uncommon: The first stat of each block (every 10 minutes)
  • Rare: The first sat of each difficult adjustment period (roughly every 2 weeks)
  • Epic: The first sat of each halving cycle (roughly every 4 years)
  • Legendary: The first sat of each cycle (roughly every 24 years)
  • Mythic: The first stat of the genesis block (once, the first block)

Sat hunting is the process of reviewing individual sats in hopes of finding something other than Common sats.

Collectors may desire sats based on any criteria deemed interesting. Examples include:

  • Vintage: Sats mined in the first 1,000 blocks
  • Events: Sats tied to a historical event such as those from Block 78, the first Bitcoin transaction sent from Satoshi Nakamoto to Hal Finney.
  • Sat names: Using a modified base-26 encoding (numbers are converted to letters) each satoshi has a unique name value. Some names are more interesting than others.
  • Sat number or name palindromes (reads the same backward as forward).

Reference: @ItsFrankenSense shared a thread on how to sat hunt and later followed it up with a thread on how to extract sats.

Part 1: The Hunt

  1. Move $BTC from an exchange to Sparrow
  2. Under UTXOs, right-click on the Output value of the received BTC and select Copy Transaction Output
  3. Paste the value into the search at Ordinals.com
  4. View the many Sat Ranges
  5. A range with an Uncommon sat will appear in a different color
  6. Look for shorter range numbers (fewer characters when scanning down the list) and click the shorter ones to find vintage sats

As an alternative to manually reviewing the sat ranges on Ordinals.com, tools like Sat Hunter Pro and Sating.io provide a simple UI to identify interesting sats.

Part 2: The Extraction

  1. Copy and paste the list of sat ranges from Ordinals.com into a plain text formatted text file. This serves to strip the HTML formatting before pasting the data into Excel.
  2. Copy and paste the ranges from the text file into Excel

Important: Excel cannot properly handle the large values of sat ranges and this results in bad math when attempting to subtract the start and end range values. To work around this problem, use formulas to work with only the last 10 digits on each side of the range (=right(text, num_chars)).

  1. Create formulas to derive the number of sats in each range
  2. Add up your results and confirm this matches the Value as shown atop Ordinals.com for this transaction output. This confirms you accurately calculated the number of sats in each range.
  3. Derive the number of sats before the range you want to extract by adding up all the rows above the range containing the sat you will keep.
  4. In Sparrow, select the UTXO and click to Send
  5. You will create three parts to this one transaction
    1. Part 1 (to Exchange): The total number of sats calculated when adding all the ranges before the desire sat. Label this like '1. Send back to exchange'.
    2. Part 2 (to Keeper wallet): 10,000 sats (this includes the rare sats plus padding). Label this like '2. Keep Uncommon sat'.
    3. Part 3 (to Exchange): Hit the max button for the remaining sats in the UTXO. Label this like '3. Send remainder back to exchange'.

Caution: After creating the transaction but before broadcasting it, make sure the order of transactions outputs (right side of transaction diagram) show as desired. Likely it will not be in the desired order because Sparrow randomizes this. If the order is wrong, close the transaction and go back to click Create Transaction again. Do this until the orders is correct. Only then should you sign and broadcast the transaction.

Note: Sat ranges include the first sat in the range and exclude the last sat. Meaning when viewing a single range on Ordinals.com, the last sat is not part of that group/range of sats.

BRC-20

BRC-20 are alt-coins created and traded on the Bitcoin blockchain. Most have zero utility and are traded based on pure speculation that they will go viral and see market price increases as they trend.

Unlike $BTC, the native currency of Bitcoin, BRC-20 is a protocol that derives the balance of alt-coins from the state of Ordinal inscriptions.

BRC-20 tokens are transacted on-chain as any Ordinal. The content of each BRC-20 Ordinal is a JSON string in the format specified by the protocol.

BRC-20 functions include the following:

  • Deploy: Create a BRC-20 token while defining parameters such as the 4-character ticker symbol, maximum supply, and the limit that can be minted in a single mint inscription.
  • Mint: Mint an amount of a previously deployed BRC-20 token. Mints provide a balance only to the first owner of the Mint ordinal. You cannot move a balance of BRC-20 by sending a Mint token.
  • Transfer: Transfer an amount of BRC-20 token. Transfers only work once. They must be inscribed into an address holding a valid balance and then be sent to another address as a means of transferring the balance to the new address. The “used” Transfer Ordinal continues to exist but is invalid and cannot be reused. A new Transfer token must be minted and sent in order to send a balance amount from the new holding address. When minting Transfers, consider padding the Ordinal (ex. to 8,500 sats) as you will need to spend fees to send the Transfer Ordinal.

For illustrative purposes, the scenario below lists the actions taken as John and Jane mint a BRC-20 ticker and John subsequently transfers half his balance to Jane.

NameActionJohn’s BalanceJane’s Balance
JohnInscribe Deploy0
JohnInscribe Mint 1,0001,000
JaneInscribe Mint 2,0002,000
JohnInscribe Transfer 5001,000
JohnSend Transfer 500 to Jane5002,500

Marketplaces & Wallets

Various sites and wallets facilitate the inscribing process so that the above may be handled as a function of buying and selling when in fact what is occurring is Transfer tokens are being inscribed and sent as a means of moving the balance from one wallet (seller) to another (buyer).

Returning a Transferable Balance to Your Available Balance

If after inscribing a Transfer token (and before sending it) you want to change a Transferable balance back to your Available balance, you must transfer the valid Transfer to yourself.

Checking the Balance

At any point, you can use UniSat to check the balance of BRC-20 in an address.

JSON Content

The following are examples of the text strings to be inscribed on BRC-20 Ordinals for each of the three operations.

{ 
"p": "brc-20",
"op": "deploy",
"tick": "ordi",
"max": "21000000",
"lim": "1000"
}

{ 
  "p": "brc-20",
  "op": "mint",
  "tick": "ordi",
  "amt": "1000"
}

{ 
  "p": "brc-20",
  "op": "transfer",
  "tick": "ordi",
  "amt": "100"
}

Domain Names

Sats Name System (SNS)

Sats Names (a.k.a. .sats addresses) is a standard for writing names to Bitcoin using ordinals.

  • Addresses can be between 1 and 19 characters long, and use characters a-z, 0-9, -, and _
  • Before minting a Sats address, use a site such as UniSat to search to make sure the address has not already been minted
  • Go to UniSat, Gamma or any preferred inscription service to mint a text ordinal with a JSON string as shown below
{
"p": "sns",
"op": "reg",
"name": "helloworld.sats"
}

Reference: About Sats Names

Bitcoin Name System (BNS)

You can purchase a .btc address at btc.us.

Xverse and Hiro are Stacks-enabled wallets that support the ability to purchase BNS names. You will need $STX to make the purchase.

Each Xverse account can purchase only one .btc address, however you can create additional accounts to purchase additional .btc addresses.

Inscribing a Zonefile for your .BTC Address

At BNS.xyz you can inscribe your .btc name on an Ordinal to establish provenance of the name.

The process will write a copy of your zonefile as a text Ordinal. A zonefile serves to map the .btc name to a wallet address.

BTC Domains

BTC Domain is attempting to improve upon the Stacks equivalent by offering .btc domain names that are inscribed as formatted JSON text directly on the Bitcoin mainnet, with each domain being a unique inscription.

Trustless Domains

Trustless Wallet operates on the Trustless Computer chain. It works in cooperation with both the Bitcoin and Ethereum chains as a means to provide smart contact functionality on Bitcoin. For identification, Trustless uses your ETH address as signed through MetaMask while assigning a Bitcoin address to associate with your ETH address.

At Trustless Wallet you can purchase Trustless "Names" with an unknown future utility.

Wallets

There are many wallet applications from which to choose. Below is a recap of the most popular choices at the moment. For an expanded list, the Links section contains a list of the most common wallet options.

  • Xverse: If you are new to Ordinals, start with Xverse. It is the most widely supported wallet when it comes to web3 integrations with marketplaces and minting sites. It handles BTC in a separate address from that of your Ordinals. It also has special handling for BRC-20.
  • UniSat: Best for BRC-20 on account of its integration with the UniSat marketplace for BRC-20. Also handles Ordinals and BTC very well; all within a single address.
  • Sparrow: Best for coin-control as is required to extract sats, pad Ordinals and more. Just make sure you know what you're doing when sending Ordinals from Sparrow.

Sparrow

Reference: Ordinals.com guide details how to setup a Taproot (P2TR) wallet in Sparrow for receiving Ordinals.

Understanding UTXOs

Each time you receive sats, a new UTXO (Unspent Transaction Output) is created. Each UTXO can be managed separately. When sending an asset, you will typically select one UTXO.

Sparrow wallet is unique in the level of coin-control it provides. This is the detailed view of UTXOs and the granular ability to control which are spent (sent).

Freezing UTXOs

Important: It can be tricky to send Ordinals from Sparrow. As a means of protecting Ordinals from being accidentally lost when intending to send a specific asset, you should get in the habit of freezing all UTXOs as soon as transactions are confirmed.

UTXOs can be frozen and unfrozen as a way to protect them from being included with other UTXOs when sending Ordinals from Sparrow.

To freeze and unfreeze a UTXO, simply right-click the Transaction Output and select the appropriate action.

Viewing Received Inscriptions

Completed (confirmed) transactions can be viewed in the Transactions tab. And once confirmed, you can view your inscription by starting on the UTXO tab.

  1. From the UTXO tab, locate the UTXO labelled to contain the desired Ordinal
  2. Right-click on the Output value and select Copy Transaction Output
  3. Go to Ordinals.com, paste the Transaction Output in the Search bar and search to view the contents of the UTXO.
    1. If this is a valid Ordinal, the contents (i.e. image) will be displayed
  4. Click on the image to view Inscription number, ID and other values

Inspecting an Inscription Before Sending

Before sending an Ordinal, it is wise to review a few elements to ensure it is safe to send. To do this, view the inscriptions on Ordinals.com and check that:

  1. The output identifier matches the ordinal identifier
  2. The offset is 0 (this indicates the inscription is properly located on the first sat in the UTXO)
  3. The output value has enough sats to cover the transaction fee. Note that if more sats are required, you will need to Pad the UTXO as explained in the Padding section of this document.

Increasing the Fee to Speed Up the Transaction

  1. Under Transactions, locate the Unconfirmed transaction you want to speed up
  2. Right-click and choose "Replace Fee"
  3. Set the new fee
  4. Create, sign, and broadcast the transaction

Connecting Sparrow to Your Node

This assumes you are running a Bitcoin QT on your home network.

  1. Add 2 entries to the bitcoin.conf file in the Bitcoin QT datadir (in this case, an external HD named "Bitcoin")
rpcbind=0.0.0.0
rpcallowip=192.168.1.20 (IP address of client machine)
  1. Settings > Server > Edit Existing Connection: Change from Public to Bitcoin Core
    1. If Sparrow and Node are on same machine, leave URL as 127.0.0.1:8332.
    2. If Sparrow is on a machine separate from your node, enter the IP address of the node's host machine. (i.e. 192.168.1.47:8332)
  2. Under Data Folder, enter the host machine’s path to where your blockchain data is stored (i.e. /Volume/Bitcoin/Bitcoin)
  3. Under User/Pass enter the User and Password found in the .cookie file used by Bitcoin Core (found in the Bitcoin QT datadir external HD)

Note: The .cookie file is a temporary file created each time Core is started. Therefore, the password entered in Sparrow must be changed any time Bitcoin Core was restarted.

  1. Test Connection

Sparrow Public Server

The default public server upon setup is electrum.bitaroo.net

Importing Xverse's Ordinals Wallet Into Sparrow

  1. File > New Wallet
  2. Give it a name like ‘Xverse (Ordinals)’
  3. Script Type: Taproot (P2TR)
  4. Under Keystore: New Or Imported Software Wallet
  5. Mnemonic Words: Use 12 Words
  6. Paste Seed Phrase
  7. Click Create Keystore (Note: The Derivation Path should show as m/86'/0'/0')
  8. Click Import Keystore
  9. Click Apply
  10. Set Password as desired

Xverse & Hiro

Note: While the same seed phrase may be used to import a wallet into both Hiro and Xverse, each solution uses a different derivation path and therefore uses different addresses. That is to say that if, for example, you have $BTC in Xverse (which uses Wrapped Segwit for its Ordinals address) and you import that wallet into Hiro (which uses Native Segwit), Hiro will not provide access to the $BTC because Hiro will not recognize and display the address used in Xverse.

Speeding Up Transactions Submitted with Xverse

Xverse does not currently support the ability to send a transaction to replace the fee as is required to speed up a transaction stuck in mempool (because the original fee was too low).

However, the transaction can be sped up outside of Xverse.

One method is to use the premium option at Bitcoin Jumper to speed up the BTC transaction. This fee-based service will manually add the transaction to be confirmed by a partner mining node. The fee is calculated to be the cost to include the transaction into one of the next blocks and therefore is above the current miner processing rate.

Alternately, you can import the wallet into Sparrow and therein, increase the fee rate. With the below, the original transaction is replaced with a new transaction to send the funds back to your wallet. At that point you can resubmit the original transaction as desired.

  1. Copy the seed phrase from Xverse and use it to import the wallet into Sparrow
    1. For Xverse, select a Nested Segwit wallet (3...)
    2. For Hiro, select a Native Segwit (bc1q...)
  2. In Sparrow, under Transactions, locate the Unconfirmed transaction you want to speed up
  3. Right-click and choose Increase Effective Fee Rate
  4. Make sure the "Pay to" address is accurate. This should be your BTC address shown in Xverse. This is important as Sparrow may change this.
  5. Set the new fee. To derive the fee amount, multiply the current regular fee rate (sat/vB shown on mempool.space) by 2.5 as this fee needs to be enough to both process this transaction and speed up the original transaction.
  6. Create, sign, and broadcast the transaction

Reference: How to Speed Up Bitcoin Ordinal Transactions

Importing Xverse's Ordinals Wallet Into Sparrow

See Sparrow Section.

Emblem Vault

Emblem Vault facilitates the storage and exchange of Ordinals on the ETH mainnet. Ordinals can be wrapped inside an Emblem Vault that is traded on OpenSea like any ETH NFT. At any time, the owner of the Emblem Vault can open the vault and move the Ordinal to their Ordinal wallet.

Unlocking an Emblem Vault

  1. Connect to emblem.finance with the ETH wallet that contains your vaulted Ordinals
  2. My Vaults > Locked
  3. Approve Minting to call the contract that opens the vault
  4. Unlock Vault (Get Private Keys) to burn the ETH NFT and get the private key to the wallet holding the Ordinal
  5. You will be required to purchase $COVAL, the currency used to pay the unlocking fee
  6. Click Get Keys (if the keys don’t display, refresh the page until they do)
  7. Copy the mnemonic phrase so it can be pasted to import into another wallet app (e.g. Sparrow)
  8. Record and secure this seed phrase for as long as you need access to the wallet containing this Ordinal.

Note: The Keys can be retrieved again in the future by going to your Unlocked vaults. You will only need to sign in MetaMask to retrieve the keys. This is not a transaction and therefore no gas is required.

Importing the Wallet into Sparrow

  1. In Sparrow, File > Import Wallet
  2. Mnemonic Words: Use 12 Words
  3. Paste the words by pasting the entire copied data into Word 1
  4. Click Discover Wallet
  5. Name the wallet to match the token being unlocked (e.g. Bitcoin Punk #1234)
  6. Add a password if desired
  7. Click on UTXOs to see the UTXO containing the Ordinal
  8. If the UTXO does not show, try toggling the network connection at the bottom right of the screen
  9. Label the UTXO like “Bitcoin Punk #1234”
  10. As desired, transfer this Ordinal to your main Sparrow wallet following the normal Sparrow Send process

Reference: How to Unlock Your Ordinals in an Emblem Vault

Bitcoin Node Setup (Mac)

Note: In this Bitcoin Core GUI (a.k.a. Bitcoin QT) setup, the blockchain data is set to be stored on an external drive named ‘Bitcoin’, in a folder named ‘Bitcoin’. With this non-standard configuration, many command line actions require the use of additional arguments to tell the binaries where to find required files. These arguments may not be required if upon installation you accept the default location for your blockchain data.

Install Bitcoin GUI (a.k.a. Bitcoin QT)

  1. Go to Bitcoin Core and download the Mac .dmg of Bitcoin Core (select ARM if your Mac has an M1 or M2 chip)
  2. Install Bitcoin Core and run it from the Applications menu
  3. Follow the prompts including configuring the data store to use an external drive as desired

Bitcoin core indexing is intensive with disk i.o. If possible, use an SSD for noticeably better results (faster and fewer corrupt file events). In this example, an external SSD was used.

  1. Build the full blockchain index
    1. Preferences > Main: Check to Enable RPC server
    2. Open Configuration File: Enter ‘txindex=1’ (without quotes)
    3. Close to save the config file and click OK
    4. Quit Bitcoin Core and restart it.
    5. Wait as many days as it takes to complete the index. This indexing process can be stopped and restarted as desired.

Note: This process places the bitcoin.conf file in the folder where you told Bitcoin Core to store your blockchain data (i.e. =/Volumes/Bitcoin/Bitcoin). To check the status of the index, open the Console and enter getindexinfo. If the result is "True:, the data is fully sync’d.

Install the Bitcoin Core Deamon (a.k.a. bitcoind)

The daemon is a version of Bitcoin Core that can runs in terminal mode, giving you additional capabilities.

  1. Install Homebrew
    1. From Terminal, enter ‘Brew’ to confirm ‘command not found’. This indicates Homebrew is not already installed.
    2. Go to Homebrew and run the install curl command as shown on the site. Note that after installing, Homebrew shows you 2 additional commands to enter into terminal. These are critical as they will put Brew in your path variable.
  2. Install Bitcoin daemon from Terminal (Utilities > Terminal)
brew install bitcoin

Note: Bitcoin binaries are placed in the hidden path /opt/homebrew/opt/bitcoin/bin/ (In Finder, use Command-Shift-Dot to see hidden files and folders).

  1. Edit the Config file entry to share the previously acquired blockchain data. This step is done for the unlikely case you have a reason to run the Bitcoin service instead of the daemon.
    1. Navigate to Go > Home > Library > Application Support
    2. On the Go menu hit Option to see the Library folder
    3. At any time use Command-Shift-Dot to see hidden folders (e.g. Library)
    4. If a Bitcoin folder does not already exist, create it under the Application Support folder
    5. Copy the bitcoin.conf file from the blockchain data created earlier to this new folder
    6. Edit the file so that before the txindex=1 entry, the first line of the file reads: datadir=your/path (i.e. datadir=/Volumes/Bitcoin/Bitcoin)
    7. Test daemon with a simple version check command
bitcoind --version
or
bitcoin-cli --version
  1. When needed, run bitcoin daemon from Terminal. The following command is to manually start bitcoind while telling it where to find your blockchain data
bitcoind -datadir=/Volumes/Bitcoin/Bitcoin

Other Commands

  • If instead of on-demand, you want to start bitcoin as a service
brew services start bitcoin
  • Stop bitcoin service
bitcoin-cli stop
  • Restart the service after an upgrade
brew services restart bitcoin
  • Get Blockchain data status where inititialblockdownload=false means the initial download was completed
bitcoin-cli getblockchaininfo
  • Help
bitcoin-cli -help
bitcoin-cli -getinfo -help
  • Get Block Count (Note that Ordinals.com also shows the latest block when you hover the cursor over the center of the clock.)
bitcoin-cli getblockcount

Important: At this stage you have both the Bitcoin Core GUI and Bitcoin Core daemon installed. These cannot be run simultaneously as they share local blockchain data. The GUI is an easy way to just run the core. The daemon runs the core while also providing command line capabilities that are helpful, especially when troubleshooting. Just close/stop one before opening/starting the other.

Reference: Hell Money Podcast: How to Make an Inscription Part 1

Update Bitcoin Node to a New Release (Mac)

Update Bitcoin QT (GUI)

  1. If it's running, shut down Ord server.
  2. If it's running, shut down Bitcoin QT.
  3. Go to Bitcoin Core and download the Mac .dmg of Bitcoin Core (select ARM if your Mac has an M1 or M2 chip)
  4. Open the downloaded .dmg file and copy the Bitcoin application to your Applications folder while overwriting the previous version.
  5. Run the Bitcoin app from your Applications folder.

Note: The first couple of times you try to open the newly installed app, you will need to go to Settings > Privacy & Security to allow the app.

Update Bitcoin Daemon (bitcoind)

  1. If it’s running, shut down Ord server.
  2. If it’s running, shut down Bitcoin QT.
  3. In Terminal, run the following to confirm the currently installed version
bitcoind -version
  1. If it’s running, shut down bitcoind.
  2. In Terminal, run the following command.
brew update && brew upgrade 
  1. Navigate to Go > Home > Library > Application Support > Bitcoin and open the bitcon.conf file to make sure the contents look appropriate (you may be missing server=1 and that’s okay).
datadir=/Volumes/Bitcoin/Bitcoin
txindex=1
server=1
  1. In terminal, run the following to confirm the update has been applied.
bitcoin -version
  1. In terminal, start bitcoind to comfirm it functions
bitcoind -datadir=/Volumes/Bitcoin/Bitcoin
or if you created the alias
bitcoindm 

Ord Setup (Mac)

Cargo presents a simple method for installing Ord. While we did not try this, instead of using Cargo you may be able to install the latest pre-built binary from Terminal with the following command.

curl --proto '=https' --tlsv1.2 -fsLS https://ordinals.com/install.sh | bash -s

The method chosen below uses Cargo to install Ord.

Install Cargo with RustUp

Ord is written in Rust. RustUp installs the required Rust language and Cargo package manager. Commands below are to be used in Terminal.

  1. Go to https://rustup.rs and copy the command and paste it to run in Terminal
  2. Where you are presented an option and one is shown with “(default)”, just press enter at the prompt to use that default
  3. Add Cargo to the path
    1. If the following command returns "cargo not found", that confirms Cargo is not already in the shell. Then proceed to next command (source...)
which cargo
source "$HOME/.cargo/env"
  1. Try again to confirm Terminal now finds Cargo
which cargo
  1. Close Terminal and reopen it

Install Ord

  1. Start your Bitcoin node (Open Bitcoin QT from your Applications folder)
  2. In terminal, enter the install command
cargo install ord
  1. Once Ord is installed, the following command should reveal that Ord is installed by indicating its location. Alternately you can use the command 'which ord'
ord --version

Note for reference: The Ord binary is stored in /Users/yourusername/.cargo/bin

Build the Ord Index

  1. In the bitcoin.conf file add the following entry
server=1
  1. Save and close the bitcoin.conf file
  2. Restart Bitcoin Core

The default location for the Ord index is ‘/Users/yourusername/Library/Application Support/ord’ but in this setup it will be created on an external drive. For performance reasons, an SSD drive is recommended. SSD is not explicitly required of course, but with it you will see dramatic speed improvement during indexing and the increased performance will reduce the number events resulting in a corrupt index file.

  1. On the external drive, create a folder called 'Ord'
  2. In the new folder, add a plain text empty file called ‘index.redb’
    1. Or download an index file as linked from a posting in The Ordicord Discord server and place this as your starting index file
  3. Start building the index with the following command where the additional arguments are required to point to the external hard drive location of the index.redb and cookie.index files

Note: If you did not move the Ord index from its standard location, you do not need the --index argument

ord --index /Volumes/Bitcoin/Ord/index.redb --cookie-file /Volumes/Bitcoin/Bitcoin/.cookie index
  1. Wait as long as it takes for the index build to complete
  2. In Terminal, use CTRL-C at any point to stop the process (it can be restarted later)

Start the Ord Server

  1. Before starting Ord Server, create a backup of the ord index in case file ever gets corrupted

Important: You will want to routinely backup your Ord index file as it will become corrupted at times. When that occurs (as is indicated when the Ord server starts throwing up errors) you simply delete the index.redb file and replace it with your latest backup. Ord will then rebuild the index from where it left off.

Note: Ord indexes automatically while running the Ord Server. So the index function (not shown below) is only used as a means to index when not running server.

  1. Start Ord Server
ord --index /Volumes/Bitcoin/Ord/index.redb --cookie-file /Volumes/Bitcoin/Bitcoin/.cookie server
  1. In the browser go to http://localhost to access your local host of Ordinals.com

Congratulations. Bitcoin Core and Ord are fully installed and functioning. You always need Bitcoin running before starting Ord. And at any time, you can use CTRL-C to stop the Ord server and restart it.

Reference: Hell Money Podcast: How to Make an Inscription Part 1

Create an Ord Wallet & Inscribe

Inscription services make it very easy to inscribe anything. However, for more advanced inscription needs such as inscribing on an Uncommon sat you are holding, you may need to inscribe from your Ord server. The following steps provide the basic foundation for inscribing from Ord.

Create the Wallet

  1. Kill the Ord server with CTRL-C
ord --index /Volumes/Bitcoin/Ord/index.redb --cookie-file /Volumes/Bitcoin/Bitcoin/.cookie wallet create | pbcopy

Note: Add ‘ | pbcopy’ to the end of the command if you want the resulting seed phrase to automatically be copied to the clipboard

  1. Temporarily paste the seed phrase so that you can later save it as desired (ex. print it to hardcopy and lock it in your safe)

Create an Inscription

  1. To get a fresh address
ord --index /Volumes/Bitcoin/Ord/index.redb --cookie-file /Volumes/Bitcoin/Bitcoin/.cookie wallet receive
  1. Send BTC to this address as will be need to pay inscription transaction fees assessed by the network.

  2. Ord will play a sound when the payment transaction is confirmed. Wait for Bitcoin QT to show the updated available balance. Or go to mempool.space and paste the address to see the status of the transaction.

  3. Confirm the wallet balance

ord --index /Volumes/Bitcoin/Ord/index.redb --cookie-file /Volumes/Bitcoin/Bitcoin/.cookie wallet balance
  1. Inscribe while setting the fee rate to an appropriate level as can found on mempool.space
ord --index /Volumes/Bitcoin/Ord/index.redb --cookie-file /Volumes/Bitcoin/Bitcoin/.cookie wallet inscribe /Users/yourusername/Desktop/OrdinalsTest.txt --fee-rate 35

This test is to create a text-based Ordinal with the contents of OrdinalsTest.txt as the body of the Ordinal. For a higher fee you can instead inscribe anything (ex. .webp file, which is an ideally compressed image).

  1. Wait for the commit and reveal transactions to complete
  2. Note your inscription ID is shown in the output. You can paste that into Ordinals.com or your Ord page to view the inscription
  3. The inscription is sent to a new address in your Ord wallet

Note: To do a dry run (perhaps to see the total cost before actually broadcasting the transaction)

ord --index /Volumes/Bitcoin/Ord/index.redb --cookie-file /Volumes/Bitcoin/Bitcoin/.cookie wallet inscribe /Users/yourusername/Desktop/OrdinalsTest.txt --destination bc1addresstoreceivetheinscription1234 --fee-rate 35 --dry-run
  1. To see your inscriptions
ord --index /Volumes/Bitcoin/Ord/index.redb --cookie-file /Volumes/Bitcoin/Bitcoin/.cookie wallet inscriptions
  1. Transfer the new Ordinal to a keeper wallet as desired. For the safety afforded with its coin-control features, this is most easily done from Sparrow after you import your Ord wallet using the seed phrase. And if after importing the Ord wallet into Sparrow, Sparrow does not reveal your inscription, try changing Sparrow's Gap Limit setting (Wallet > Advanced > Gap Limit) from the default to something like 250. This setting tells Sparrow how many empty address to find before it stops scanning them for transactions.

Reference: Hell Money Podcast: How to Make an Inscription Part 2

Other Commands

ord --help

ord wallet -help

ord --index /Volumes/Bitcoin/Ord/index.redb --cookie-file /Volumes/Bitcoin/Bitcoin/.cookie wallet balance

Update Ord to a New Release (Mac)

In this example, Ord 0.5.2 was updated to Ord 0.6.1

  1. Determine the current release of your Ord server:
ord --version
  1. CTRL-C to stop your Ord server
  2. Now is a good time to make sure all your backups are up-to-date
  3. Download the latest compiled Ord release from GitHub. If on Mac with M1 or M2 processor, choose the AArch tar.gz package
  4. Double-click the .gz file to extract its contents
  5. Open another Finder window and press Command+Shift+Dot to view hidden files
  6. Navigate to where your current Ord binary is located: /Users/yourusername/.cargo/bin
  7. Rename the current ord file like ord.052.old
  8. Drag the new ‘ord’ binary file to the same folder as the old binary file
  9. The following command may prompt macOS with a security warning. If so, go to Settings > Privacy & Security and scroll to find where it says Ord was blocked. Click to Allow Anyway. Keep doing this Version command until you stop getting warnings and it responds to indicate the new version. Alternately you can try to simply right-click on the Ord binary in Finder and then proceed to terminal.
ord --version

Note: The upgrade from Ord 0.5.2 to 0.6.1 introduced handling for Cursed Inscriptions. As a result, Ord must build a completely new index file. Therefore, the next step is not typically necessary for a basic Ord upgrade.

  1. To force Ord to build a completely new index file, rename the current index.redb file to index.redb.old
  2. Run the index command
ord --index /Volumes/Bitcoin/Ord/index.redb --cookie-file /Volumes/Bitcoin/Bitcoin/.cookie index

Note: As of Ord 0.7.0 you need to add 'run' to the end of the index command.

ord --index /Volumes/Bitcoin/Ord/index.redb --cookie-file /Volumes/Bitcoin/Bitcoin/.cookie index run
  1. Wait as long as it takes for the index build to complete

This indexing took approximately 1.5 hours while indexing to an external SSD drive.

  1. In Terminal, use CTRL-C at any point to stop the process (it can be restarted later)
  2. When the index build completes, start your Ord server

Links

Caution: Do your own research and use these links at your own risk.

Wallets

Sparrow is a desktop Bitcoin wallet designed to provide as much detail as possible about your transactions and UTXOs (Unspent Transaction Outputs). While not designed to support Ordinals, Sparrow's advanced coin-control features make it a uniquely powerful tool enabling sat extraction, padding of Ordinals and more.

Xverse is a user-friendly Bitcoin wallet designed for managing BTC, Ordinals and BRC-20. Web3-enabled, it is integrated with an increasing number of websites facilitating login and purchasing. It also supports Stacks ($STX) as is required to register a .btc domain on btc.us. Xverse is available as a desktop browser extension and a mobile app. Xverse is a fork of Hiro.

Hiro is akin to Xverse as it lets you connect to apps and manage assets secured on Bitcoin and BTC L2s including the Stacks blockchain. Hiro is available as a desktop browser extension and a mobile app.

UniSat is many things, including a user-friendly wallet for your browser. UniSat is especially useful for handling BRC-20 on account of the wallet's integration with UniSat's leading marketplace for BRC-20.

Ledger hardware wallet can be used to store and manage ordinals.

Trustless Wallet is the reference wallet for Trustless Computer. The Trustless Computer protocol enables developers to build dApps and smart contracts that use the Trustless Computer network. This wallet is NOT appropriate for managing ordinals but instead it is used to trade its own type of NFTs traded on the TC network. Note: The private key availble for export from Trustless Wallet can be imported into UniSat to restore the BTC wallet provided by Trustless Wallet.

Marketplaces

Magic Eden is the premier Ordinals marketplace.

Binance NFT lets you click to view listed Bitcoin projects.

Ordinals.Market not only allows you to connect with Xverse to trade ordinals but also trade verified Emblem Vaults.

Generative is a marketplace for artists to make their Ordinals available for purchase. Generative supports Trustless Computer NFTS and uses MetaMask to authenticate the user.

Ordinals Wallet is a marketplace with an optional imbedded wallet. You can also connect with Xverse or UniSat to purchase or list Ordinals.

Gamma

OrdSwap lets you connect with your ETH address by signing in MetaMask, while assigning you a BTC address used for handling BTC and ordinals.

Ultra Rares is currently waitlisted.

OpenOrdex

Scarce City

OrdSea

Ordinals Gateway is Coming Soon.

Inscription Services

LooksOrdinal provides an inexpensive option.

Inscribor

OrdinalsBot can inscribe onto vintage and uncommon sats.

Toki

UniSat is a great choice for inscribing Deploy, Mint and Transfer Ordinals for BRC-20. It allows facilitates inscribing images, text, .sats and more.

Gamma has a basic inscription feature along with tools to facilitate minting a collection and a related mint page. The basic inscription features supports text along with single and bulk image inscriptions.

OrdSwap supports inscribing images, text, BRC-20, ORC-20, .sats and more.

Ordinals Gateway

Generative allows artists inscribe and list 1/1s and collections.

Ordinal Explorers

Ordinals is the official site from the Ord team. When you run an Ord server, you are running a local copy of this exact same website.

Ordinals/Generative is a backup version of the Ordinals site which can be useful when Ordinals.com is having performance issues.

Best in Slot shows BRC-20 market cap and volume data.

Cursed Ordinals is a branch of Ordinals.com designed to explore Cursed Inscriptions.

OrdinalHub lets you discover, track and analyze ordinals.

Hiro: Ordinals includes an option to search by rarity (ex. Uncommon).

OrdKit

OrdFind

Ord95 allows you to search Ordinals with either a Ordinal ID or inscription number.

OrdiScan

Ordinal.art includes a view of the first inscriptions ever created.

Sat Explorers

Sat Hunter Pro from Rare Satoshi Society

Sating.io scans a wallet address for rare and interesting sats.

OrdinalHub has a SatScanner that allows you to input a wallet address to scan for unique sats.

Blockchain Explorers

mempool.space

blockchain.com

Transaction Accelerators

BitAccelerate is a free bitcoin transaction accelerator that allows you to get faster confirmations on your unconfirmed transactions.

Bitcoin Jumper allows you to speed up your BTC transaction with either a Free or Paid acceleration options.

Name Registrations

Sats Names is a standard for writing names to Bitcoin using Ordinals.

UniSat's search features enables you to confirm sats addresses have not previously been inscribed.

Best in Slot enables you to search on the inscription number of a .sats address. If the results include a blue check part, the domain is valid and verified as the first inscription for that name.

btc.us enables you to use $STX (Stacks) to claim a .btc domain like yourname.btc. These domains can be associated with an individual wallet address in Xverse or Hiro wallets.

BNS.xyz helps you establish the provenance of your BNS .btc domain name by inscribing it onto an Ordinal.

BTC Domains is attempting to improve upon the Stacks equivalent by offering .btc domain names that are inscribed as formatted JSON text directly on the Bitcoin mainnet, with each domain being a unique inscription.

Other

Ordinal Theory Handbook is the original guide to Ordinal Theory as introduced by Casey Rodarmor.

Ordinals.com lets you search for a sat name by placing the name at the end of the URL like: https://ordinals.com/sat/wenlambo. The same can be done with https://ordinals.com/block/78 to search for a specific block number.

UniSat can report the balance of BRC-20 in a provided address.

Satoshi to Bitcoin Converter

OrdinalsBot has a launchpad to mint an ordinals collection.

Emblem Vault facilitates the storage and exchange of Ordinals on the ETH mainnet. Ordinals can be wrapped inside an Emblem Vault that is traded on OpenSea like any ETH NFT. At any time, the owner of the Emblem Vault can open the vault and move the Ordinal to your Ordinal wallet.

Bitcoin Punks Emblem Vault Opensea Verifier can be used to make sure the inscription address matches the Emblem as a means to verify the validity before purchasing the ETH NFT.

Ordinals/ord on Github is the official code repository for the Ordinals project.

OrdAPI cointains a collection of API calls facilitated by its service.

Ordinals Metadata Composer helps you create JSON files to index your Ordinals collection as used by a marketplaces to tie a collection together under a collection name.

Off Topic

mdBook was used to create this document. It is a command line tool to create books with Markdown.

Visual Studio Code (with the Markdown All in One and Code Spell Checker extensions) is the code editor used to create the contents of this document.

Text-Image.com turns an image into ASCII art (text art) as may be useful to create low-cost images while testing inscriptions.

Who to Follow

In no particular order, here are some people you may want to follow on Twitter.

Rare Satoshi Society

Nullish

Franken

Leonidas

Udi Wertheimer

BitGod

zk-Shark

Dazza9x

H.O

Casey Rodarmor

Ordinally

Raph

Trevor

Danny Huuep

TimechainOrd

Erin

Psifour

CBSpears

Rijndael

Paz

Glossary

Cursed Inscriptions

Inscriptions where negative numbers are displayed and inscriptions are counted backwards. Xverse, Hiro and other well-known wallets will not recognize Cursed Inscriptions and therefore Sparrow is the only wallet capable of handling them.

Derivation Path

Refers to the hierarchical structure used to generate a sequence of cryptographic keys and addresses from a single master seed phrase. This structure is commonly known as the Hierarchical Deterministic (HD) wallet. The HD wallet uses the hierarchical key derivation algorithm (HD algorithm) to generate a tree-like structure of keys. This tree structure starts with a single master key, derived from the seed phrase, and branches out to generate child keys and addresses.

Stamps

Stamps are not Ordinals, so they are not referenced in this document. They use the open-source Counterparty protocol that is built on the Bitcoin blockchain. Using the native Counterparty decentralized exchange and $XCP token, users can mint and trade digital assets stored on the Bitcoin chain.

Satoshi or Sat

The smallest unit of bitcoin equal to one hundred millionth a bitcoin.

1 sat = 0.00000001 BTC

1 BTC = 100,000,000 sats

Whoredinals

See this Tweet.

macOS Tips

Create Aliases for Use in Terminal

The below uses zsh shell. Similar steps exist to do the same with bash.

  1. Open your zshrc file in Terminal
nano ~/.zshrc
  1. In the zshrc file, create an alias by adding a line in the following format: alias alias_name='command_to_execute' where you replace alias_name with the name you want to give to your alias, and command_to_execute with the command you want to execute when you use your alias.
alias ordindex='/Users/yourusername/.cargo/bin/ord --index /Volumes/Bitcoin/Ord/index.redb --cookie-file /Volumes/Bitcoin/Bitcoin/.cookie index'

alias ordserver='/Users/yourusername/.cargo/bin/ord --index /Volumes/Bitcoin/Ord/index.redb --cookie-file /Volumes/Bitcoin/Bitcoin/.cookie server'

alias bitcoindm='/opt/homebrew/Cellar/bitcoin/24.0.1/bin/bitcoind -datadir=/Volumes/Bitcoin/Bitcoin'
  1. Save the changes to the zshrc file by pressing Ctrl+O and then Enter
  2. Exit the nano editor by pressing Ctrl+X
  3. To make the changes take effect, you can either restart your Terminal application, or use the following command to reload zshrc and make your new alias available for use
source ~/.zshrc

With an Alias established, going forward you need to enter only the alias name for Terminal to execute the command you specified in the .zshrc file. As an example, entering 'orderserver' will now start the Ord server while accessing the Ord index file and the Bitcoin QT cookie file as stored on the external drive.

mdBook

mdBook was used to create this document. It is a command line tool to create books with Markdown. Markdown a simple way to format text that looks great on any device. It doesn’t do anything fancy like change the font size, color, or type - just the essentials to keep it nice and clean. If you don't like mdBook, you may consider GitBook as a preferable alternative.

Install mBook

  1. Create a new folder like \LocalUserName\mdBook
  2. Download the appropriate executable binary from GitHub
  3. Unpack the file and move mdBook to the directory created above

mdBook is a CLI tool and therefore all actions are done in Terminal Mode

  1. Add the mdBook folder to the PATH variable
nano ~/.zshrc
  1. Add the following entry to the zshrc file
#Adding mdBook to PATH
export PATH=$PATH:~/mdBook
  1. Save and exit: CTRL-X, Y, Enter
  2. Restart zshrc
source ~/.zshrc
  1. Verify the change was made
echo $PATH

Create a Book

  1. Initialize the new book
mdbook init your-book-title
  1. Do you want a .gitignore to be created = y
  2. Your mdBook is now located in your home folder

Editing the Book with Visual Studio Code

Visual Studio Code (or VS Code) is a source code editor. In this case, it is a simple and effective tool for editing the .md Markdown files that are the source files from which the final HTML book will be rendered. In other words, you will write your content in VS Code.

  1. Download Visual Studio Code and move it to your Applications folder
  2. In VS Code, install required extensions
    1. Settings > Extensions > Markdown All in One > Install
    2. Settings > Extensions > Code Spell Check > Install
  3. In Visual Studio Code, open the book folder and desired .md file
    1. Bottom right, toggle HTML to Markdown for editing .md files
    2. Top right, click Open Preview on the Side
  4. Make edits and save files as needed

mdBook Components

The mdBook folder is comprised of two main components

  • The 'book' folder contains the rendered book in the form of CSS and HTML files. These are the files used by readers as they view the contents.
  • The 'src' folder contains the source .md files. These are the files that are created and edited to makeup the content of the book. The Summary.md file is the table of contents that includes reference to the other .md files, each representing a separate chapter in the book.

Common Markdown

Reference: CommonMark.org provides a recap of basic Markdown features

Render the Book

Book rendering is the process through which the source .md files are converted to HTML. This is done by starting the related service as shown below. You can leave this service running in Terminal while editing the book, or you can start the service periodically, when you desire new HTML output files.

cd /users/yourmacusername/your-book-title
mdbook serve --open

Use CTRL-C to stop the service at any time.

GitHub

GitHub is a code repository that may be used to host your mdBook files, making them internet accessible. This allows you to configure a website to link to the book for viewing by visitors of the site.

GitHub has many other features that may be useful, for example, the Issues feature can be a simple way to record notes of any future edits that you would like to make to the book.

Upload the mdBook Files to GitHub

  1. Create a Repository named like your-book-title
  2. Under Code, create a Deploy Branch to represent the production Branch. This will be where you will host the currently accessible version of the book
  3. Copy your local 'book' folder to a temporary location and rename it 'docs'
  4. In GitHub open the Deploy Branch and click to Add Files
  5. Drag your local 'docs' folder to GirHub and Commit the changes
  6. Configure GitHub pages to host your uploaded files
    1. From your main Repository page, click Settings
    2. On the left, under Code and Automation, click Pages
    3. On the settings on the right, make sure the Build and Deployment Source is set to Deploy from a branch
    4. Set the Branch to deploy /docs
  7. As needed going forward, to update your hosted book, simply repeat the steps above to upload a new local 'docs' folder so as to overwrite the previous version

At this point you have configured the automated 'pages build and deployment' workflow that will run behind the scenes to update the hosted pages each time the 'docs' files are updated.

Linking to Your Hosted mdBook from a Website

To access the mdBook as hosted on GitHub pages, link to your book's introduction file

https://mattonchain.github.io/notes-on-a-chain/introduction.html