-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
backport: merge bitcoin#24024, #23880, #24909, #24178, #24171, #25404, #25514, #25720, partial bitcoin#23832, #24169, #25454 (headers backports) #6097
Conversation
This pull request has conflicts, please rebase. |
This pull request has conflicts, please rebase. |
2cd1b24
to
129ea1e
Compare
How about altering spv detection logic instead? d92560a |
02ddb3e
to
14142f5
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
utACK 14142f5
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
utACK 14142f5
needs rebase to fix |
…nager.m_blockman
…Block this commit will not work with `--enable-c++20` as c++20 does away with aggregate initialization when constructors are declared. a partial backport of bitcoin#24169 will sort that out.
bitcoin#25454 introduces a 10 point penalty for remitting more than MAX_BLOCKS_TO_ANNOUNCE unconnected block headers. Whether they are connected or not is determined by taking the first entry and running its hashPrevBlock through LookupBlockIndex. This new behaviour causes a test failure in p2p_dos_header_tree.py in Dash. Bitcoin doesn't face a test failure with this new behaviour as the first non-fork block in its test data is the dump for block 1 (00000000b873e7 9784647a6c82962c70d228557d24a747ea4d1b8bbe878e1206) but Dash uses block 0 (00000bafbc94add76cb75e2ec92894837288a481e5c005f6563d91623bf8bc2c), the genesis block. By definition of a genesis block, it has a hashPrevBlock of 0, which cannot be looked up. This trips the penalty. This doesn't cause any problems in the field as nobody is expected to ever broadcast the genesis block but it does cause a test failure for us. We need to correct that by getting rid of the genesis block from the test data.
commits reverted: - 753ed61
…o the same peer excludes: - 99f4785
…to Peer Co-authored-by: UdjinM6 <UdjinM6@users.noreply.github.com>
…n a block is found
14142f5
to
c92b0f5
Compare
, bitcoin#24909, bitcoin#24178, bitcoin#24171, bitcoin#25404, bitcoin#25514, bitcoin#25720, partial bitcoin#23832, bitcoin#24169, bitcoin#25454 (headers backports)" This reverts commit 117dda9, reversing changes made to e803b32.
, bitcoin#24909, bitcoin#24178, bitcoin#24171, bitcoin#25404, bitcoin#25514, bitcoin#25720, partial bitcoin#23832, bitcoin#24169, bitcoin#25454 (headers backports)" This reverts commit 117dda9, reversing changes made to e803b32.
, bitcoin#24909, bitcoin#24178, bitcoin#24171, bitcoin#25404, bitcoin#25514, bitcoin#25720, partial bitcoin#23832, bitcoin#24169, bitcoin#25454 (headers backports)" This reverts commit 117dda9, reversing changes made to e803b32.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
reviewed + tested with extra lock for cs_main in dsnotificationinterface.cpp:
https://gitlab.com/dashpay/dash/-/pipelines/1409559191
commits up to 26d477b LGTM
, bitcoin#24177, bitcoin#24299, bitcoin#24917, bitcoin#22564, bitcoin#25349, bitcoin#25571, bitcoin#17487, bitcoin#26999, bitcoin#27011 (blockstorage backports: part 2) b658637 merge bitcoin#27011: Add simulation-based `CCoinsViewCache` fuzzer (Kittywhiskers Van Gogh) 1d0e410 merge bitcoin#26999: A few follow-ups to bitcoin#17487 (Kittywhiskers Van Gogh) 7d837ea merge bitcoin#17487: allow write to disk without cache drop (Kittywhiskers Van Gogh) 2c758f4 merge bitcoin#25571: Make mapBlocksUnknownParent local, and rename it (Kittywhiskers Van Gogh) 70a91e1 merge bitcoin#25349: CBlockIndex/CDiskBlockIndex improvements for safety, consistent behavior (Kittywhiskers Van Gogh) eca0a64 merge bitcoin#22564: Move mutable globals cleared in ::UnloadBlockIndex to BlockManager (Kittywhiskers Van Gogh) 916b3f0 merge bitcoin#24917: Make BlockManager::LoadBlockIndex private (Kittywhiskers Van Gogh) e10ca27 merge bitcoin#24299: UnloadBlockIndex and ChainstateManager::Reset thread safety cleanups (Kittywhiskers Van Gogh) 18aa55b merge bitcoin#24177: add missing thread safety lock assertions (Kittywhiskers Van Gogh) 678e67c merge bitcoin#24235: use stronger EXCLUSIVE_LOCKS_REQUIRED() (Kittywhiskers Van Gogh) edc665c merge bitcoin#24103: Replace RecursiveMutex m_cs_chainstate with Mutex, and rename it (Kittywhiskers Van Gogh) d19ffd6 merge bitcoin#22278: Add LIFETIMEBOUND to CScript where needed (Kittywhiskers Van Gogh) Pull request description: ## Additional Information * Dependent on #6097 * Dependency for #6067 * Test failures in `linux64_multiprocess-build` ([build](https://gitlab.com/dashpay/dash/-/jobs/7550924662)) and `linux64_tsan-test` ([build](https://gitlab.com/dashpay/dash/-/jobs/7550924666)) do not stem from this PR but are pre-existing failures in `develop` ([build](https://gitlab.com/dashpay/dash/-/jobs/7550859495), [build](https://gitlab.com/dashpay/dash/-/jobs/7550859499)). A fix for the build failures has been opened as a separate PR. ## Breaking Changes None observed. ## Checklist: - [x] I have performed a self-review of my own code - [x] I have commented my code, particularly in hard-to-understand areas **(note: N/A)** - [x] I have added or updated relevant unit/integration/functional/e2e tests - [x] I have made corresponding changes to the documentation **(note: N/A)** - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_ ACKs for top commit: UdjinM6: LGTM, utACK b658637 PastaPastaPasta: utACK b658637 Tree-SHA512: 1a9c3a41617af274db169db47a9c9fce7ba7ce0b2d68aa75617640a55da11a0fa095cb25ce6a2d38f06d3f6a6cc4c08cb4cf82dca4bdc74192e8882fd5f7052f
Additional Information
Dependent on backport: merge bitcoin#21727, #22371, #21526, #23174, #23785, #23581, #23974, #22932, #24050, #24515 (blockstorage backports) #6085
Dependency for backport: merge bitcoin#22278, #24103, #24235, #24177, #24299, #24917, #22564, #25349, #25571, #17487, #26999, #27011 (blockstorage backports: part 2) #6098
bitcoin#25514 removespeers.spvNodeConnections
andpeers.fullNodeConnections
reporting fromCalculateNumConnectionsChangedStats
as the services flags used to distingush between the two have been moved to thePeer
struct, accessable only throughPeerManager
.AsResolved with patch by UdjinM6, thanks!PeerManager
isn't accessable toCConnman
, even if a new public function was exposed throughPeerManger
(as we have forIsInvInFilter
and others or we try to access the value throughGetNodeStateStats
),CConnman
would be unable to leverage it.bitcoin#23880 introduces code that is not valid C++20 (but valid C++17) and therefore, required a partial backport of bitcoin#24169 (fae6790) to make the code C++20 legal.
bitcoin#25454 introduces a 10-point penalty for remitting more than
MAX_BLOCKS_TO_ANNOUNCE
unconnected block headers.blockheader_testnet3.hex
(introduced in bitcoin#16551, part of dash#5963), unlike in Bitcoin, includes the genesis block.By definition of a genesis block, there is no block before it that connects to, which causes the 10-point penalty to trip and
p2p_dos_header_tree.py
to fail (see below). This has been remedied by removing the genesis block from the test data to match upstream and also because no node has a good reason to ever broadcast the genesis block as-is over P2P.Test Failure
bitcoin#25454 has a goal similar to dash#2032 (and its predecessor, dash#1589), namely, avoiding
getheaders
(2
) duplication to the same peer. Unfortunately, Dash's mitigation seems to conflict with Bitcoin's mitigation and this results infeature_minchainwork.py
failing (see below). This has been remedied by partially reverting dash#2032.Test Failure
bitcoin#25720 introduces a new test,
p2p_initial_headers_sync.py
, to validate that when a client has a stale tip, it will only engage in headers sync with one peer (emit agetheaders2
* message).Unmodified, this test fails (see below) as while the backport deals with one source of
getheaders2
messages, the test setup unwittingly triggers another (source), specifically, allowing thepindexBestHeader->GetBlockTime() > GetAdjustedTime() - nMaxTipAge
condition to evaluatetrue
.This is because, unlike in Bitcoin test suite's
setup_chain()
(source), Dash sets the mocktime to match the mock chain (source) during setup, while the test assumes that the mock chain is stale enough to not trigger this source ofgetheaders2
messages.As the tip is barely stale, it emits the
getheaders2
message, which is detected, causing the test to fail. This has been remedied by overridingsetup_chain()
to behave more like Bitcoin's test suite.* -
getheaders2
is a Dash-specific message that is courtesy of compressed headers, Bitcoin would be checking forgetheaders
Test Failure
Checklist: