Checkpoints serve two purposes:
- They hardcode a historic part of the chain
- They allow us to disable a check (expensive signature checking) in that historic part.
I personally dislike the first part, as it requires users to trust the software they're downloading contains the right checkpoints. Of course, they're already trusting the code anyway in much more substantial ways, but just requiring some piece of data to be updated frequently in a trusted way, to keep up with the block chain validation performance feels wrong to me. Of course, we can't have the second part without the first. Or can we?
There is a proposed idea, which isn't is implemented, to modify the synchronization mechanism to consist of two steps:
- In a first step, only headers are downloaded and verified, in much the same way as blocks are now downloaded and verified. This will result in the client knowing the best valid chain of blocks, except it won't know whether the transactions in it are valid.
- In a second step, the actual blocks along this chain are downloaded and verified.
Such a mechanism has several advantages, including being able to distribute the synchronization over several nodes, and not risking downloading side chains (sometimes called orphans).
In addition, it could have a rule "Do not validate signature checks if a block has N blocks on top of it". Since the client already knows there is a valid chain before doing the full transaction validation, there is no need for checkpoints to prevent getting a wrong chain.
Of course, this will have to be thought about a lot before implementing it, but I believe it will allow us to not rely on checkpoints anymore.
EDIT:
Benefits of checkpoints can be realized in better ways like assumevalid
.
Recent versions(>= 0.14) of bitcoin core come with option --assumevalid <safe-block>
. This gives the benefit of skipping signature validation upto the safe-block without hardcoding the history. If another heavier chain is seen which does not contain the safe block, the bitcoin software will correctly reorg to the other chain.
More Info: What are the trust assumptions in --assumed-valid in bitcoin core 0.14?