4
In the source code of the standard client, checkpoints.cpp has this comment:
//
// What makes a good checkpoint block?
// + Is surrounded by blocks with reasonable timestamps
// (no blocks before with a timestamp after, none after with
// timestamp before)
// + Contains no strange transactions
//
Why should it matter? Presumably the client would have accepted it anyway if they were downloading it normally, and if you were to specify a later block, that would still force the client to download the strange block. I don't understand the point of this restriction.
"I don't think checkpoints are required at all or useful in any way," I actually disagree on this point, as my client grabs the blockchain quite a lot faster when getting blocks before a checkpoint. – Nick ODell – 2013-02-02T20:25:30.343
AFAIK checkpoints are not used to improve performance of the initial chain download, and even if it did your client would still have to scan each single block and look at each single transaction in it in order to find transactions that are relevant to its wallet. – David – 2013-02-02T21:18:07.160
True, but it doesn't need to verify the signatures. I don't know how significant that is performance-wise. – Nick ODell – 2013-02-02T21:29:54.420
Verifying the signature takes a negligible amount of time, it's looking the inputs up that does. The initial download performance is I/O bound, not CPU bound. – David – 2013-02-02T23:00:43.483
That makes sense. You mention that the
IsStandardcheck fails on transactions in some checkpoints. Do you have any examples? – Nick ODell – 2013-02-02T23:10:10.530I never said that :) – David – 2013-02-03T09:19:47.497
let us continue this discussion in chat
– Nick ODell – 2013-02-03T16:23:50.723