Bitcoin full node and query server

Dec 1, 2018

View in context in the libbitcoin Slack #general mirror.

jungly19:10
Interesting article by Jameson Lopp sharing his observations on synch performance of various implementations with full validation turned on. Curious to hear what others here make of it. “Bitcoin Full Validation Sync Performance” by Jameson Lopp https://link.medium.com/ChljI0YFiS
link.medium.com
A place where words matter
👍 1
29 replies · neillm, James C., jungly, evoskuil · last Dec 04, 2018
neillm21:59
Thanks for posting @jungly!
neillm22:02
I expect we'll be doing some more comparison tests of our own as version4 is closer to launch. ~5 hours for a core sync sounds way faster than anything I've experienced, although I hadn't tried a full sync on 0.17 ni particular yet
James C.11:53
Hm, why did he comment out all the checkpoints? I remember they are identical to core?
neillm13:17
For the full validation
neillm13:21
It sounds like he wants a "full_validation = true" option that ignores all checkpoints post genesis (?)
(edited)
neillm13:25
While that hypothetical option could be confusing (messing with checkpoints and they're not working because that option is set), it seemed it was difficult to remove the pre-populated checkpoints: "the hardest part was removing the hardcoded block checkpoints". Not sure, I don't find that so difficult, and perhaps now that he knows, it may not be as difficult (?)
(edited)
neillm13:29
The "recompiling for full validation" part confuses me. Anyone know what he means by that?
neillm13:30
Oh, unless he means switching between core consensus vs native(?). Actually, I'm curious if he used native consensus (I don't think it says, but maybe I missed that)
jungly13:31
Maybe he means rebuilding the stack from his fork with the his changes to take out checkpoints?
neillm13:38
Hrm, maybe, but there's no need for that since he can just edit the config, which he already did.
👍 1
jungly13:52
True. I misread what he was saying. Weird he had to rebuild. Maybe we should mention that on the tweet thread Check out @lopp’s Tweet: https://twitter.com/lopp/status/1068900532788563968?s=09
neillm13:54
Go for it, I don't tweet myself 😉
James C.16:26
Btw - does libbitcoin have a lax DER parser for pre bip66 signatures in earlier blocks? I guess it used to be openssl, but that isn’t a dependency obviously...
James C.18:10
Perfect thank you @neillm !
👍 1
evoskuil08:52
He apparently failed to recognize that providing a genesis only checkpoint eliminates all checkpoints. However this is non-consensus behavior, so not why it’s useful.
evoskuil08:54
Switching between use of libconsensus and native does not require a recompile.
evoskuil08:57
The way core gets “faster” is by not validating most of the chain by using “known good” blocks (our v4 milestones). If he didn’t disable this it’s not a reasonable comparison.
James C.09:10
What’s the difference between known-blocks and checkpoints?
evoskuil09:19
The later treat a hash mismatch at the height as invalid.
James C.09:23
Ah, so core just has a white-list of known subsequent header hashes it specifically fetches for the first n blocks?
evoskuil09:32
No, like checkpoints except that if they are not found they are ignored but if found allow skipping validation of ancestry.
👍 1
James C.09:38
Theoretically: If “known blocks” are not bound to a specific height, and no known blocks are found, does core begin to validate at genesis at some hard-coded height?
evoskuil09:38
It just validates after the last standard checkpoint.
evoskuil10:04
And they don’t have to be height bound but could be. The hash is identified via header sync and then all blocks prior can skip validation.
James C.10:11
Cool, think I get it: so it foregoes validation until it reaches the last “known” block, and otherwise resorts to most recent “known-block” or even checkpoint as a starting point for validation (Assuming these “known blocks” are all higher than checkpoints).
(edited)
James C.10:14
Just wondering when it “gives up” on finding all known-blocks if they aren’t bound to height…
evoskuil11:28
Logically you just check every strong chain header against milestones and when matched, treat the branch up to that point as prevalidated. In our implementation these are concurrent activities, but that just represents an implementation detail.
👍 1
James C.15:22
I like implementation details!
👍 1