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.
- In
docker-compose.yml, set the Bitcoin image toghcr.io/retropex/bitcoin:29.3.knots20260507. - Keep the existing Bitcoin data volume mounted at
/data/.bitcoin. Do not create a new empty volume. - Remove
consensusrules=rdtsfrombitcoin.conf. The pre-RDTS release will not start with that value. - Stop every container that depends on Bitcoin. Keep the database and Bitcoin data volumes.
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 961632docker compose pull bitcoindocker compose up -d --no-deps --force-recreate bitcoinWait 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.
docker exec bitcoin bitcoin-cli -datadir=/data/.bitcoin invalidateblock 0000000000000000000169eb6f811ddbd0daf343af7b62180cdb13e7c78dbc16After the final checks pass, clear the temporary local mark. Then start the dependent services.
docker exec bitcoin bitcoin-cli -datadir=/data/.bitcoin reconsiderblock 0000000000000000000169eb6f811ddbd0daf343af7b62180cdb13e7c78dbc16Restart the dependent containers with your normal Compose command after their Bitcoin connection is ready.
StartOS 0.4
Automatic switch- Stop the services that depend on Bitcoin Knots.
- Refresh the StartOS marketplace. Then install the current Bitcoin Knots (pre-RDTS) flavor.
- Start Bitcoin Knots and wait for chain sync.
- 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 packageThe 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.
- Download bitcoind.s9pk from the v29.3.knots20260507 release.
- Check that its SHA-256 value is
3a57a796c5f211d810b44ee9e948ca84ac985fcca5af586f1ae1272c2f23f1dc. - Stop all services that depend on Bitcoin Knots.
- Stop Bitcoin Knots.
- Open System → Sideload Service, select
bitcoind.s9pk, and select Upload & Install. Install it as an update to the existing service. - Open Bitcoin Knots. Select Configure, save the configuration, and start the service.
- Wait for Bitcoin Knots to accept RPC commands.
shasum -a 256 bitcoind.s9pkThe 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.
ssh start9@your-server-name.localsudo docker exec bitcoind.embassy bitcoin-cli getbestblockhashsudo docker exec bitcoind.embassy bitcoin-cli getblockhash 961632If block 961,632 has the BIP-110 hash, invalidate its first block. This one call also invalidates its child at height 961,633.
sudo docker exec bitcoind.embassy bitcoin-cli invalidateblock 0000000000000000000169eb6f811ddbd0daf343af7b62180cdb13e7c78dbc16Complete 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.
sudo docker exec bitcoind.embassy bitcoin-cli reconsiderblock 0000000000000000000169eb6f811ddbd0daf343af7b62180cdb13e7c78dbc16Umbrel
- Stop apps that depend on Bitcoin Knots.
- Open Bitcoin Knots → Settings → Version.
- Select v29.3.knots20260507, save the setting, and wait for the node to restart.
- Open the umbrelOS terminal and check the active chain.
sudo docker exec bitcoin-knots_app_1 bitcoin-cli getbestblockhashsudo docker exec bitcoin-knots_app_1 bitcoin-cli getblockhash 961632If the node stays on the BIP-110 block at height 961,633, run this one command:
sudo docker exec bitcoin-knots_app_1 bitcoin-cli invalidateblock 0000000000000000000169eb6f811ddbd0daf343af7b62180cdb13e7c78dbc16myNode
- Stop services that depend on Bitcoin.
- Open Settings → Custom Bitcoin Version.
- Select Bitcoin Knots (v29.3.knots20260507) and wait for the installation and restart.
- Open the Bitcoin CLI web terminal and check the chain.
bitcoin-cli -datadir=/mnt/hdd/mynode/bitcoin getbestblockhashbitcoin-cli -datadir=/mnt/hdd/mynode/bitcoin getblockhash 961632If the node stays on the BIP-110 block at height 961,633, run this one command:
bitcoin-cli -datadir=/mnt/hdd/mynode/bitcoin invalidateblock 0000000000000000000169eb6f811ddbd0daf343af7b62180cdb13e7c78dbc16General Bitcoin Knots
- Stop
bitcoind. - Back up the wallet and configuration files.
- Remove
consensusrules=rdtsfrombitcoin.conf. The pre-RDTS release does not start when this value is present. - Download and verify Bitcoin Knots v29.3.knots20260507. Install it without changing the data directory.
- Start the node and check the active chain.
bitcoin-cli getbestblockhashbitcoin-cli getblockhash 961632If the node stays on the BIP-110 block at height 961,633, run this one command:
bitcoin-cli invalidateblock 0000000000000000000169eb6f811ddbd0daf343af7b62180cdb13e7c78dbc16Final 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.
bitcoin-cli getblockhash 961632bitcoin-cli getblockchaininfoBlock 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.
bitcoin-cli reconsiderblock 0000000000000000000169eb6f811ddbd0daf343af7b62180cdb13e7c78dbc16Run 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-chainstatedoes 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.