BIP-110

Changing chains

Choosing the Core chain? Here is how to switch

This guide is for node operators who choose to leave the two-block BIP-110 branch and switch to the Core chain.

Mandatory signaling started at height 961,632. The BIP-110 branch mined two blocks through height 961,633.

Checked against live chain data on August 9, 2026

Switching procedure

Choose your platform

Use Bitcoin Knots v29.3.knots20260507. It is the last matching Knots release without RDTS. It can use the existing data directory.

Docker

Run these commands from the directory that contains your Compose file. The examples use bitcoin as the service and container name. Replace that name if your setup uses a different one.

  1. In docker-compose.yml, set the Bitcoin image to ghcr.io/retropex/bitcoin:29.3.knots20260507.
  2. Keep the existing Bitcoin data volume mounted at /data/.bitcoin. Do not create a new empty volume.
  3. Remove consensusrules=rdts from bitcoin.conf. The pre-RDTS release will not start with that value.
  4. Stop every container that depends on Bitcoin. Keep the database and Bitcoin data volumes.
Inspect the current chain
docker exec bitcoin bitcoin-cli -datadir=/data/.bitcoin getnetworkinfodocker exec bitcoin bitcoin-cli -datadir=/data/.bitcoin getbestblockhashdocker exec bitcoin bitcoin-cli -datadir=/data/.bitcoin getblockhash 961632
Start pre-RDTS Bitcoin Knots
docker compose pull bitcoindocker compose up -d --no-deps --force-recreate bitcoin

Wait for Bitcoin Knots to accept RPC commands. If block 961,632 still has the BIP-110 hash, invalidate the first BIP-110 block. This one call also invalidates its child at height 961,633.

Leave the BIP-110 branch
docker exec bitcoin bitcoin-cli -datadir=/data/.bitcoin invalidateblock 0000000000000000000169eb6f811ddbd0daf343af7b62180cdb13e7c78dbc16

After the final checks pass, clear the temporary local mark. Then start the dependent services.

Clear the temporary override
docker exec bitcoin bitcoin-cli -datadir=/data/.bitcoin reconsiderblock 0000000000000000000169eb6f811ddbd0daf343af7b62180cdb13e7c78dbc16

Restart the dependent containers with your normal Compose command after their Bitcoin connection is ready.

StartOS 0.4

Automatic switch
  1. Stop the services that depend on Bitcoin Knots.
  2. Refresh the StartOS marketplace. Then install the current Bitcoin Knots (pre-RDTS) flavor.
  3. Start Bitcoin Knots and wait for chain sync.
  4. If StartOS finds stored invalid-chain verdicts, it clears them and shows a Chain Verdicts Reset notification. If it finds none, normal chain sync continues without this notification.

Do not run the manual invalidation command on StartOS unless StartOS reports a problem while it resets chain verdicts.

StartOS 0.3.5.1

Legacy package

The current marketplace package requires StartOS 0.4. StartOS 0.3.5.1 needs the older .s9pk package format. The linked package contains Bitcoin Knots from before RDTS and supports both Start9 processor types. It is a community package from Retropex, not an official Start9 release.

  1. Download bitcoind.s9pk from the v29.3.knots20260507 release.
  2. Check that its SHA-256 value is 3a57a796c5f211d810b44ee9e948ca84ac985fcca5af586f1ae1272c2f23f1dc.
  3. Stop all services that depend on Bitcoin Knots.
  4. Stop Bitcoin Knots.
  5. Open System → Sideload Service, select bitcoind.s9pk, and select Upload & Install. Install it as an update to the existing service.
  6. Open Bitcoin Knots. Select Configure, save the configuration, and start the service.
  7. Wait for Bitcoin Knots to accept RPC commands.
Check the downloaded package
shasum -a 256 bitcoind.s9pk

The legacy package does not switch chains automatically. If the node does not resume sync, connect to StartOS with SSH. Replace the example hostname with the name of your server. The SSH user is start9, not root. See the StartOS SSH guide if SSH is not set up.

Connect to StartOS
ssh start9@your-server-name.local
Check the active chain
sudo docker exec bitcoind.embassy bitcoin-cli getbestblockhashsudo docker exec bitcoind.embassy bitcoin-cli getblockhash 961632

If block 961,632 has the BIP-110 hash, invalidate its first block. This one call also invalidates its child at height 961,633.

Leave the BIP-110 branch
sudo docker exec bitcoind.embassy bitcoin-cli invalidateblock 0000000000000000000169eb6f811ddbd0daf343af7b62180cdb13e7c78dbc16

Complete the final checks below. If you used the invalidation command, clear the temporary mark only after the node is fully synced on the Core chain.

Clear the temporary override after sync
sudo docker exec bitcoind.embassy bitcoin-cli reconsiderblock 0000000000000000000169eb6f811ddbd0daf343af7b62180cdb13e7c78dbc16

Umbrel

  1. Stop apps that depend on Bitcoin Knots.
  2. Open Bitcoin Knots → Settings → Version.
  3. Select v29.3.knots20260507, save the setting, and wait for the node to restart.
  4. Open the umbrelOS terminal and check the active chain.
Check the chain
sudo docker exec bitcoin-knots_app_1 bitcoin-cli getbestblockhashsudo docker exec bitcoin-knots_app_1 bitcoin-cli getblockhash 961632

If the node stays on the BIP-110 block at height 961,633, run this one command:

Leave the BIP-110 branch
sudo docker exec bitcoin-knots_app_1 bitcoin-cli invalidateblock 0000000000000000000169eb6f811ddbd0daf343af7b62180cdb13e7c78dbc16

myNode

  1. Stop services that depend on Bitcoin.
  2. Open Settings → Custom Bitcoin Version.
  3. Select Bitcoin Knots (v29.3.knots20260507) and wait for the installation and restart.
  4. Open the Bitcoin CLI web terminal and check the chain.
Check the chain
bitcoin-cli -datadir=/mnt/hdd/mynode/bitcoin getbestblockhashbitcoin-cli -datadir=/mnt/hdd/mynode/bitcoin getblockhash 961632

If the node stays on the BIP-110 block at height 961,633, run this one command:

Leave the BIP-110 branch
bitcoin-cli -datadir=/mnt/hdd/mynode/bitcoin invalidateblock 0000000000000000000169eb6f811ddbd0daf343af7b62180cdb13e7c78dbc16

General Bitcoin Knots

  1. Stop bitcoind.
  2. Back up the wallet and configuration files.
  3. Remove consensusrules=rdts from bitcoin.conf. The pre-RDTS release does not start when this value is present.
  4. Download and verify Bitcoin Knots v29.3.knots20260507. Install it without changing the data directory.
  5. Start the node and check the active chain.
Check the chain
bitcoin-cli getbestblockhashbitcoin-cli getblockhash 961632

If the node stays on the BIP-110 block at height 961,633, run this one command:

Leave the BIP-110 branch
bitcoin-cli invalidateblock 0000000000000000000169eb6f811ddbd0daf343af7b62180cdb13e7c78dbc16

Final checks

Verify before you restart other services

Wait for peers to send the Core chain. Then run these commands with the command prefix for your platform.

Verify chain and sync
bitcoin-cli getblockhash 961632bitcoin-cli getblockchaininfo

Block 961,632

00000000000000000000d1e01392faa65ceeaed307f0a3159144b84146ff24ba

Sync state

blocks equals headers and initialblockdownload is false.

Dependent services

Wait for each index and Lightning service to report full sync.

Remove the temporary local override

Do this only if you ran invalidateblock and all final checks pass. This command removes the permanent local invalid mark. After the command, verify that the node remains on the Core chain.

Use the same platform command as above. Replaceinvalidateblock withreconsiderblock.

Run only after full sync
bitcoin-cli reconsiderblock 0000000000000000000169eb6f811ddbd0daf343af7b62180cdb13e7c78dbc16

Run getblockhash 961632 one more time. It must still show the block hash shown above for the Core chain.

Do not start with a reindex

  • • A normal switch keeps the existing blocks and chainstate. It does not need a download from genesis.
  • -reindex-chainstate does not change the consensus rules and is not a chain selector.
  • • Use a full reindex only if the node reports damaged block-index data, or if a platform tool says that pruned data makes an in-place switch impossible.