public async Task Feed_able_to_sync_when_new_pivot_is_set() { BlockTree syncedBlockTree = Build.A.BlockTree().OfChainLength(1000).TestObject; Block genesisBlock = syncedBlockTree.FindBlock(syncedBlockTree.GenesisHash, BlockTreeLookupOptions.None) !; BlockTree blockTree = Build.A.BlockTree().TestObject; blockTree.SuggestBlock(genesisBlock); ISyncConfig syncConfig = new SyncConfig { FastSync = true, FastBlocks = true, PivotNumber = "500", PivotHash = Keccak.Zero.ToString(), PivotTotalDifficulty = "1000000" // default difficulty in block tree builder }; BlockHeader? pivotHeader = syncedBlockTree.FindHeader(700, BlockTreeLookupOptions.None); IBeaconPivot pivot = PreparePivot(700, syncConfig, blockTree, pivotHeader); Context ctx = new (blockTree, syncConfig, pivot); BuildAndProcessHeaderSyncBatches(ctx, blockTree, syncedBlockTree, pivot, 0, 501); // move best pointers forward as proxy for chain merge Block highestBlock = syncedBlockTree.FindBlock(700, BlockTreeLookupOptions.None) !; blockTree.Insert(highestBlock, BlockTreeInsertBlockOptions.SaveHeader); pivot.EnsurePivot(syncedBlockTree.FindHeader(900, BlockTreeLookupOptions.None)); BuildAndProcessHeaderSyncBatches(ctx, blockTree, syncedBlockTree, pivot, 700, 701); highestBlock = syncedBlockTree.FindBlock(900, BlockTreeLookupOptions.None) !; blockTree.Insert(highestBlock, BlockTreeInsertBlockOptions.SaveHeader); pivot.EnsurePivot(syncedBlockTree.FindHeader(999, BlockTreeLookupOptions.None)); BuildAndProcessHeaderSyncBatches(ctx, blockTree, syncedBlockTree, pivot, 900, 901); }
public void InitBeaconHeaderSync(BlockHeader blockHeader) { StopBeaconModeControl(); _beaconPivot.EnsurePivot(blockHeader); }