Commit graph

11 commits

Author SHA1 Message Date
Olaoluwa Osuntokun
7f47da83bb netsync: add TestIsSyncCandidateRegtest
Add a test verifying that isSyncCandidate accepts peers from any
address on regtest, including Docker bridge IPs, remote IPs, and IPv6.
2026-03-23 21:13:59 -04:00
Calvin Kim
2aae8a6d68 netsync: add TestStartSyncChainCurrent for chain-current noop path
Verify that startSync does not set syncPeer or ibdMode when the
chain tip is recent and no peer advertises a height above ours.
2026-02-26 23:08:01 +09:00
Calvin Kim
570d3c8da3 netsync: add TestStallNoDisconnectAtSameHeight for stall handler 2026-02-26 22:22:51 +09:00
Calvin Kim
ce094262ff netsync: add TestStartSyncBlockFallback for block-only sync path
Verify that startSync skips header download and directly requests
blocks when the header chain is already caught up to the peer's
height but the block chain lags behind.
2026-02-26 22:05:57 +09:00
Calvin Kim
dc6e096cd3 netsync: add TestSyncStateMachine for end-to-end IBD sync flow
Tests the full IBD state machine: startSync → fetchHeaders →
handleHeadersMsg → fetchHeaderBlocks → handleBlockMsg → IBD complete.

Three sub-cases exercise different paths:
- fresh IBD from genesis
- node restart with partially synced blocks
- stalled sync peer recovery via handleStallSample
2026-02-26 21:57:54 +09:00
Calvin Kim
0b1c7b7acd netsync: rename headersFirstMode to ibdMode
ibdMode is a more fitting name than headersFirstMode since all blocks
are downloaded headers-first during the initial block download.
2026-02-26 18:10:29 +09:00
Calvin Kim
8588a25129 netsync: require peer argument in fetchHeaderBlocks
Refactor fetchHeaderBlocks and buildBlockRequest to take an explicit
peer parameter instead of implicitly using sm.syncPeer. This makes the
caller responsible for choosing which peer to fetch from and adds a nil
guard to prevent a panic if the sync peer has been cleared.
2026-02-26 16:40:01 +09:00
Calvin Kim
dc90f8ca2a netsync: change fetchHeaderBlocks to be based on the processed block
headers

We introduce buildBlockRequest that'll create a getdata message based
off of the block index instead of the headerList in SyncManager.

The new fetchHeaderBlocks utilizes buildBlockRequest and now will create
fetch requests based on the processed block headers.
2026-02-26 16:39:55 +09:00
Calvin Kim
51576a44cc netsync: add isInIBDMode
isInIBDMode returns if the SyncManager needs to download blocks and sync
to the latest chain tip.

It determines if it's in ibd mode by checking if the blockchain thinks
we're current and if we don't have peers that are at higher advertised
blocks.
2026-02-26 16:34:46 +09:00
Calvin Kim
ddf80b87ef netsync: add fetchHigherPeers
fetchHigherPeers provides a convenient function to get peers that are
sync candidates and are at a higher advertised height than the passed in
height.
2026-02-26 16:34:44 +09:00
Calvin Kim
b1aef3ad21 netsync: add checkHeadersList
checkHeadersList takes in a blockhash and returns if it's a checkpointed
block and the correct behavior flags for the verification of the block.
2026-02-26 16:33:47 +09:00