Running a Bitcoin node isn’t just about keeping the network decentralized—it’s about verifying every step in the chain for yourself. Trust, but verify. In this guide, we’ll discuss how to use the assumevalid
parameter to speed up synchronization and how to verify specific blocks using PGP signatures, including creating and sharing your own attestations.
Since I’m just a random guy on the internet, you should never blindly trust me or anyone else. The first time you run a node, don’t set the assumevalid
parameter. Let Bitcoin Core verify every block from the Genesis Block to the current tip of the timechain. However, subsequent installations can use assumevalid
to speed up synchronization if you trust your own signatures—or those of others, like mine.
Let’s celebrate decentralization by verifying and signing block 880,275, marking a historical moment in Bitcoin’s timeline when Ross Ulbricht is free again!
Verifying a Block with External Signatures #
You can verify blocks using signatures provided by trusted individuals or entities. For this example, I’ll use my public PGP key. You can replicate this process using your own key and signed block files.
Step-by-Step Guide: #
1. Fetch the Public PGP Key #
Fetch my PGP public key from the Ubuntu keyserver:
gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys 9A69903667CFD1885F82F3E0542761C708D70FE2
2. Download the Signature File #
Obtain the signed hash file for block 880,275:
curl -o block_Ross_is_Free.asc http://unaligned256.com/signed_blocks/anarkokapitalet/block_Ross_is_Free.asc
3. Verify the Signature #
Compare the block hash from your node with the signature file:
bitcoin-cli getblockhash 880275 | gpg --verify block_Ross_is_Free.asc -
Expected output:
gpg: Signature made Wed Jan 22 09:12:18 2025 CET
gpg: using ECDSA key 9A69903667CFD1885F82F3E0542761C708D70FE2
gpg: Good signature from "Anarko [email protected]" [uncertain]
If it says Good signature
like above, the signature matches the block hash. You can trust this block as attested by the signer.
Signing a Block with Your PGP Key #
Create and publish your own attestations to help decentralize trust.
1. Retrieve the Block Hash #
Execute the following on your Bitcoin Core node:
bitcoin-cli getblockhash 880275
# Output: 00000000000000000000bcab0c04c09ad6e28de953f6ff09a5730e128710c448
2. Sign the Block Hash #
Use your private PGP key to create a detached signature:
echo 00000000000000000000bcab0c04c09ad6e28de953f6ff09a5730e128710c448 | gpg --armor --output block_Ross_is_Free.asc --detach-sign
3. Publish the Signature #
Add the signature file to your repository or a similar platform:
git add block_Ross_is_Free.asc
git commit -m "Signed block 880275 with <my_handle>"
git push
Now others can verify your signature and ensure their block hash aligns with your node’s.
Verifying a Specific Block and Using assumevalid
#
After verifying a block, you can use its hash in bitcoin.conf
to speed up synchronization.
1. Verify the Block Hash #
Retrieve the block hash for a specific block:
bitcoin-cli getblockhash <block_height>
For block 880,275:
bitcoin-cli getblockhash 880275
# Output: 00000000000000000000bcab0c04c09ad6e28de953f6ff09a5730e128710c448
2. Set assumevalid
in bitcoin.conf
#
Add the verified block hash to your bitcoin.conf
file:
assumevalid=00000000000000000000bcab0c04c09ad6e28de953f6ff09a5730e128710c448
3. Restart Your Node #
Restart your node for the configuration to take effect.
This reduces the time required for initial synchronization while ensuring the chain is consistent up to the specified block.