Bitcoin's assumption was to download the blocks and verify it in order to prevent getting fooled.

But by default, the assumevalid option is enabled in the software, which, as I understand it, makes some data (until 2017?) real without verification.

So, can we consider Bitcoin nodes safe? If so, why?

Of course, you can disable this option, but 99% of people may not even know that this option is enabled.


which, as I understand it, makes some data (until 2017?) real without verification.

You understand incorrectly. Firstly, the assumevalid blocks is updated at every major release, so it is at most a couple of months out of date for the most recent release. For Bitcoin Core 0.18.0, the assumevalid block is 0x0000000000000000000f1c54590ee18d15ec70e68c8cd4cfbadb1b4f11697eee which is from February of this year.

Secondly, assumevalid does not just make Bitcoin Core blindly accept blocks without validation. Bitcoin Core will still validate most parts of the block, including Proof of Work, UTXOs, amounts, etc. The only thing that is not validated are scripts because scripts are expensive. assumevalid just means that all scripts in transactions included in blocks that are ancestors of the assumevalid block are assumed to be valid.

Since it only assumes this for the ancestors of the assumevalid block, if there were a large work re-org which removed that block from the blockchain, all scripts would be validated.

So, can we consider Bitcoin nodes safe? If so, why?

Yes, we can. Nodes are still validating other important things like PoW, UTXOs, amounts, etc. The block that is chosen for the assumevalid block is always one that is several thousand blocks deep at the time the PR is created to update the assumevalid block, and tens of thousands of blocks deep by the time the release is made. So it is extremely unlikely to be reorged out due to the extremely large amount of work required to do so. Even if it were reorged, Bitcoin Core wouldn't become insecure, it would just be a bit slower.

Furthermore, in order for that block to be updated in the codebase, multiple people need to agree with the change and sign off on it. Many developers do so and go further to PGP sign a message stating that they agree that this block is part of the main Bitcoin chain.

While this does introduce a little bit of trust, people can independently check that that block is part of the main chain be going to block explorers and looking up the block in their own node. They can check that this block and its ancestors are indeed valid.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.