Commit graph

1805 commits

Author SHA1 Message Date
Suhas Daftuar
3556b85022 Move CheckBlockIndex() from Chainstate to ChainstateManager
Also rewrite CheckBlockIndex() to perform tests on all chainstates.

This increases sanity-check coverage, as any place in our code where we were
invoke CheckBlockIndex() on a single chainstate will now invoke the sanity
checks on all chainstates.

This change also tightens up the checks on setBlockIndexCandidates and
mapBlocksUnlinked, to more precisely match what we aim for even in the presence
of assumed-valid blocks.
2023-07-24 16:23:38 -04:00
Suhas Daftuar
768690b7ce Fix initialization of setBlockIndexCandidates when working with multiple chainstates
When using assumeutxo and multiple chainstates are active, the background
chainstate should consider all HAVE_DATA blocks that are ancestors of the
snapshotted block and that have more work than the tip as potential candidates.
2023-07-24 16:23:38 -04:00
Suhas Daftuar
d43a1f1a2f Tighten requirements for adding elements to setBlockIndexCandidates
When using assumeutxo, we only need the background chainstate to consider
blocks that are on the chain leading to the snapshotted block.

Note that this introduces the new invariant that we can only have an assumeutxo
snapshot where the snapshotted blockhash is in our block index. Unknown block
hashes that are somehow passed in will cause assertion failures when processing
new blocks.

Includes test fixes and improvements by Andrew Chow and Fabian Jahr.
2023-07-24 16:23:38 -04:00
Suhas Daftuar
d0d40ea9a6 Move block-storage-related logic to ChainstateManager
Separate the notion of which blocks are stored on disk, and what data is in our
block index, from what tip a chainstate might be able to get to. We can use
chainstate-agnostic data to determine when to store a block on disk (primarily,
an anti-DoS set of criteria) and let the chainstates figure out for themselves
when a block is of interest for being a candidate tip.

Note: some of the invariants in CheckBlockIndex are modified, but more work is
needed (ie to move CheckBlockIndex to ChainstateManager, as most of what
CheckBlockIndex is doing is checking the consistency of the block index, which
is outside of Chainstate).
2023-07-21 10:09:44 -04:00
fanquake
85e9e1f802
validation: use noexcept instead of deprecated throw()
```bash
  CXX      libbitcoin_node_a-validation.o
validation.cpp:5164:30: warning: dynamic exception specifications are deprecated [-Wdeprecated-dynamic-exception-spec]
    const char* what() const throw() override
                             ^~~~~~~
validation.cpp:5164:30: note: use 'noexcept' instead
    const char* what() const throw() override
                             ^~~~~~~
                             noexcept
```
2023-07-17 14:44:46 +01:00
Suhas Daftuar
272fbc370c Update CheckBlockIndex invariants for chains based on an assumeutxo snapshot 2023-07-14 17:09:06 -04:00
Suhas Daftuar
10c05710ce Add wrapper for adding entries to a chainstate's block index candidates 2023-07-14 17:09:06 -04:00
Suhas Daftuar
471da5f6e7 Move block-arrival information / preciousblock counters to ChainstateManager
Block arrival information (and the preciousblock RPC, a related concept) are
both chainstate-agnostic, so these are moved to ChainstateManager. This should
just be a refactor, without any observable behavior changes.
2023-07-14 17:09:06 -04:00
Suhas Daftuar
1cfc887d00 Remove CChain dependency in node/blockstorage 2023-07-14 14:54:57 -04:00
Ryan Ofsky
31eca93a9e kernel: Remove StartShutdown calls from validation code
This change drops the last kernel dependency on shutdown.cpp. It also adds new
hooks for libbitcoinkernel applications to be able to interrupt kernel
operations when the chain tip changes.

This is a refactoring that does not affect behavior. (Looking at the code it
can appear like the new break statement in the ActivateBestChain function is a
change in behavior, but actually the previous StartShutdown call was indirectly
triggering a break before, because it was causing m_chainman.m_interrupt to be
true. The new code just makes the break more obvious.)
2023-07-11 12:30:56 -04:00
Byron Hambly
88d211dbfd Merge de942511a6 into merged_master (Elements PR #1239)
bitcoin/bitcoin#23381 refactored PolicyScriptChecks to store the
precomputed txdata in the workspace, so I have added the genesis hash to
the transform of the workspaces in AcceptMultipleTransactions.

I don't think there was a specific test for this, so during review it
may be worth checking this thoroughly. We also need a test to cover
this.
2023-07-03 13:32:10 +00:00
Byron Hambly
b2b09ea422 Merge c7da61dcc3 into merged_master (Bitcoin PR bitcoin/bitcoin#24403) 2023-07-02 16:55:32 +00:00
Byron Hambly
0e89b30f95 Merge 8add59d77d into merged_master (Bitcoin PR bitcoin/bitcoin#24367) 2023-07-02 07:33:56 +00:00
Byron Hambly
a7beef6e4a Merge bc49650b7c into merged_master (Bitcoin PR bitcoin/bitcoin#24310) 2023-07-02 06:52:34 +00:00
Byron Hambly
e08d177be5 Merge 2b0735d183 into merged_master (Bitcoin PR bitcoin/bitcoin#23907) 2023-07-01 06:45:48 +00:00
Byron Hambly
d1e5100b7a Merge 922c49a138 into merged_master (Bitcoin PR bitcoin/bitcoin#23819) 2023-06-30 20:36:30 +00:00
Byron Hambly
56b4063490 Merge 03c8c6937e into merged_master (Bitcoin PR bitcoin/bitcoin#24177) 2023-06-30 18:17:42 +00:00
Byron Hambly
9de9d8ac60 Merge 8ac79973f8 into merged_master (Bitcoin PR bitcoin/bitcoin#24196) 2023-06-30 11:03:12 +00:00
Byron Hambly
8ce619fa31 Merge f7a36477a6 into merged_master (Bitcoin PR bitcoin/bitcoin#24227) 2023-06-30 09:37:45 +00:00
Byron Hambly
46be1c5f43 Merge ad05e68e17 into merged_master (Bitcoin PR bitcoin/bitcoin#24103) 2023-06-29 13:57:20 +00:00
Byron Hambly
a992ccaac2 Merge 196b459920 into merged_master (Bitcoin PR bitcoin/bitcoin#23438) 2023-06-29 08:37:35 +00:00
TheCharlatan
6eb33bd0c2
kernel: Add fatalError method to notifications
FatalError replaces what previously was the AbortNode function in
shutdown.cpp.

This commit is part of the libbitcoinkernel project and further removes
the shutdown's and, more generally, the kernel library's dependency on
interface_ui with a kernel notification method. By removing interface_ui
from the kernel library, its dependency on boost is reduced to just
boost::multi_index. At the same time it also takes a step towards
de-globalising the interrupt infrastructure.

Co-authored-by: Russell Yanofsky <russ@yanofsky.org>
Co-authored-by: TheCharlatan <seb.kung@gmail.com>
2023-06-28 09:52:33 +02:00
TheCharlatan
edb55e2777
kernel: Pass interrupt reference to chainman
This and the following commit seek to decouple the libbitcoinkernel
library from the shutdown code. As a library, it should it should have
its own flexible interrupt infrastructure without relying on node-wide
globals.

The commit takes the first step towards this goal by de-globalising
`ShutdownRequested` calls in kernel code.

Co-authored-by: Russell Yanofsky <russ@yanofsky.org>
Co-authored-by: TheCharlatan <seb.kung@gmail.com>
2023-06-28 09:52:27 +02:00
Andrew Chow
2c2150aa04
Merge bitcoin/bitcoin#26828: assumeutxo: catch and log fs::remove error instead of two exist checks
0e21b56a44 assumeutxo: catch and log fs::remove error instead of two exist checks (Andrew Toth)

Pull request description:

  Fixes a block of code which seems to be incorrectly performing two existence checks instead of catching and logging errors. `fs::remove` returns `false` only if the file being removed does not exist, so it is redundant with the `fs::exists` check. If an error does occur when trying to remove an existing file, `fs::remove` will throw. See https://en.cppreference.com/w/cpp/filesystem/remove.

  Also see https://github.com/bitcoin/bitcoin/blob/master/src/init.cpp#L326-L332 for a similar pattern.

ACKs for top commit:
  MarcoFalke:
    lgtm ACK 0e21b56a44
  jamesob:
    ACK https://github.com/bitcoin/bitcoin/pull/26828/commits/0e21b56a44d53cec9080edb04410a692717f1ddc
  achow101:
    ACK 0e21b56a44

Tree-SHA512: 137d0be5266cfd947e5e50ec93b895ac659adadf9413bef3468744bfdacee8dbe7d9bdfaf91784c45708610325d2241a114f4be4e622a108a639b3672b618fd2
2023-06-23 16:21:43 -04:00
Andrew Chow
6a473373d4
Merge bitcoin/bitcoin#27862: validation: Stricter assumeutxo error handling when renaming chainstates
1c7d08b9ac validation: Stricter assumeutxo error handling in InvalidateCoinsDBOnDisk (Ryan Ofsky)
9047337d36 validation: Stricter assumeutxo error handling in LoadChainstate (Ryan Ofsky)

Pull request description:

  There are two places in assumeutxo code where it is calling `AbortNode` to trigger asynchronous shutdowns without returning errors to calling functions.

  One case, in `LoadChainstate`, happens when snapshot validation succeeds, and there is an error trying to replace the background chainstate with the snapshot chainstate.

  The other case, in `InvalidateCoinsDBOnDisk`, happens when snapshot validatiion fails, and there is an error trying to remove the snapshot chainstate.

  In both cases the node is being forced to shut down, so it makes sense for these functions to raise errors so callers can know that an error happened without having to infer it from the shutdown state.

  Noticed these cases while reviewing #27861, which replaces the `AbortNode` function with a `FatalError` function.

ACKs for top commit:
  achow101:
    ACK 1c7d08b9ac
  TheCharlatan:
    ACK 1c7d08b9ac
  jamesob:
    ACK 1c7d08b9ac ([`jamesob/ackr/27862.1.ryanofsky.validation_stricter_assu`](https://github.com/jamesob/bitcoin/tree/ackr/27862.1.ryanofsky.validation_stricter_assu))

Tree-SHA512: fb1dcde3fa0e77b4ba0c48507d289552b939c2866781579c8e994edc209abc3cd29cf81c89380057199323a8eec484956abb1fd3a43c957ecd0e7f7bbfd63fd8
2023-06-22 13:20:36 -04:00
Byron Hambly
522ba1a6a8 Merge 0147278e37 into merged_master (Bitcoin PR bitcoin/bitcoin#21464) 2023-06-21 09:23:39 +00:00
Byron Hambly
d3405a9759 Merge 417e7503f8 into merged_master (Bitcoin PR bitcoin/bitcoin#23804) 2023-06-21 09:15:45 +00:00
Byron Hambly
d1115c4741 Merge e3de7cb903 into merged_master (Bitcoin PR bitcoin/bitcoin#24102) 2023-06-20 13:41:28 +00:00
Byron Hambly
6c233fcb76 Merge 06b6369766 into merged_master (Bitcoin PR bitcoin/bitcoin#23976) 2023-06-20 11:58:11 +00:00
Byron Hambly
8ef51ea1f8 Merge dfe1341c57 into merged_master (Bitcoin PR bitcoin/bitcoin#24033) 2023-06-20 11:18:44 +00:00
Byron Hambly
e6b8c52041 Merge 1f7acfdcca into merged_master (Bitcoin PR bitcoin/bitcoin#24024) 2023-06-19 09:48:16 +00:00
Byron Hambly
7878ba47b9 Merge c561f2f06e into merged_master (Bitcoin PR bitcoin/bitcoin#23497) 2023-06-19 09:28:31 +00:00
Martin Zumsande
e639364495 validation: add missing insert to m_dirty_blockindex
...in FindMostWorkChain(). Before this, it was possible that the change
to the block index wouldn't be persisted to disk.
2023-06-16 17:23:03 -04:00
Ryan Ofsky
1c7d08b9ac validation: Stricter assumeutxo error handling in InvalidateCoinsDBOnDisk
Currently InvalidateCoinsDBOnDisk is calling AbortNode without an error to the
caller if it fails. Change it to return just return util::Result, and update
the caller to handle the error itself.

This causes the secondary error to be shown below the main error instead of the
other way around.
2023-06-15 15:11:32 -04:00
Byron Hambly
78a8032c1e Merge 4ada74206a into merged_master (Bitcoin PR bitcoin/bitcoin#23974) 2023-06-15 13:21:10 +00:00
Byron Hambly
72bd6c92e7 Merge 2f37b221d1 into merged_master (Bitcoin PR bitcoin/bitcoin#23581) 2023-06-14 19:21:05 +00:00
Byron Hambly
ba233174c1 Merge 75a227e39e into merged_master (Bitcoin PR bitcoin/bitcoin#23683) 2023-06-14 17:57:12 +00:00
Byron Hambly
daf1fea319 Merge 8b5a4de904 into merged_master (Bitcoin PR bitcoin/bitcoin#23795) 2023-06-14 17:09:33 +00:00
Byron Hambly
7aff9c20e3 Merge 6535772510 into merged_master (Bitcoin PR bitcoin/bitcoin#23882) 2023-06-14 16:52:33 +00:00
Byron Hambly
47626b5a64 Merge 623745ca74 into merged_master (Bitcoin PR bitcoin/bitcoin#23912) 2023-06-14 15:44:11 +00:00
Byron Hambly
413786c613 Merge 8c0bd871fc into merged_master (Bitcoin PR bitcoin/bitcoin#23785) 2023-06-13 14:30:53 +00:00
Byron Hambly
39e670c88c Merge 216f4ca9e7 into merged_master (Bitcoin PR bitcoin/bitcoin#22674) 2023-06-13 13:17:01 +00:00
Byron Hambly
6179a5a04e Merge b67115dd04 into merged_master (Bitcoin PR bitcoin/bitcoin#23174) 2023-06-13 11:41:51 +00:00
Byron Hambly
d1b42f9929 Merge 767c012665 into merged_master (Bitcoin PR bitcoin/bitcoin#23738) 2023-06-13 08:34:23 +00:00
James Dorfman
67a5234365 Merge a063647413 into merged_master (Bitcoin PR bitcoin/bitcoin#23280) 2023-06-12 17:58:49 +00:00
fanquake
6f5f37eefd
Merge bitcoin/bitcoin#27357: validation: Move warningcache to ChainstateManager and rename to m_warningcache
552684976b validation: Move warningcache to ChainstateManager (dimitaracev)

Pull request description:

  Removes `warningcache`  and moves it to `ChainstateManager`. Also removes the respective `TODO`  completely.

ACKs for top commit:
  ajtowns:
    ACK 552684976b
  dimitaracev:
    > ACK [5526849](552684976b)
  TheCharlatan:
    ACK 552684976b
  ryanofsky:
    Code review ACK 552684976b

Tree-SHA512: 6869bd7aa4f0b59324e12eb8e3df47f2c9a3f3b0d9b7d45857426ec9e8b71c5573bdcf71db822f8c10aff7d8679a00a4bedc7a256c28f325e744e5d7267b41e9
2023-06-12 13:20:18 +01:00
Byron Hambly
b0b2f3deff Merge f6013265b7 into merged_master (Bitcoin PR bitcoin/bitcoin#20295) 2023-06-06 09:10:04 +00:00
Byron Hambly
f97b7f0c64 Merge 84d921e79c into merged_master (Bitcoin PR bitcoin/bitcoin#23465) 2023-06-06 09:00:13 +00:00
Byron Hambly
6089b0123d Merge dca9ab48b8 into merged_master (Bitcoin PR bitcoin/bitcoin#23661) 2023-06-02 08:54:50 +00:00
James Dorfman
71f8040ba1 Merge 345c8180d7 into merged_master (Bitcoin PR bitcoin/bitcoin#23630) 2023-06-02 04:58:15 +00:00