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.
evoskuil19:03
BC could do that as well, chasing validation and creating the utxo store. But this means populating a large and redundant table. We just populate the associations that provide the essential information provided by the utxo store. This is a costly model in terms of proving confirmability, but it should not be any cheaper to navigate the same associations to build the redundant store. This is also more costly for us because we store unconfirmed/conflicts in the same space, but that also provides other very significant advantages, such as an append only store and having everything already validated and written when a compact block arrives.