Bitcoin full node and query server

Nov 5, 2024

View in context in the libbitcoin Slack #general mirror.

evoskuil20:28
  1. Non-overlapping ranges of blocks (e.g., 1000 blocks at a time) are downloaded and and unordered checks are done in parallel across multiple ranges
  2. The first range can also start confirmability checks (genesis to block 999), after which transactions from this range are committed to the Transactions table and the ConfirmationIndex is updated
  3. Now that the first range has finished with it’s confirmability checks, the second range of blocks can start its confirmability checks, and so on
  1. The entire chain can be downloaded concurrently. Ranges are not necessary and can often make milestone runs slower. Using the configurable window improves data locality and prevents long-running gaps. But it's purely statistical.
  2. Validation checks can progress as soon as there are no download gaps in the candidate chain, and continue to the next gap. Once the validated chain is stronger than the confirmed chain (typically 1 block at a time during catch-up), confirmability checks are performed in block order (heavily concurrently within each block).
  3. The only delays for validation and confirmation are gaps and resource availability.
josie18:35
yeah, what you've explained here, especially windows vs ranges is what i assumed was going on, but i wanted to keep the delving post simple, hence the example with ranges. i need to reread and digest the rest of your answers, but so far i think the only misconception i had was assuming that confirmability was also happening under the milestone. regarding threat model, i agree there is no material difference (that i can see) and the primary reason we dont skip this in core is because we have to delete the spent outputs to maintain a UTXO set