private static PoSSwitcher CreatePosSwitcher() { IDb db = new MemDb(); IBlockTree blockTree = Substitute.For <IBlockTree>(); TestSpecProvider specProvider = new (London.Instance); specProvider.TerminalTotalDifficulty = 2; MergeConfig? mergeConfig = new() { Enabled = true }; IBlockCacheService blockCacheService = new BlockCacheService(); return(new PoSSwitcher(mergeConfig, new SyncConfig(), db, blockTree, specProvider, LimboLogs.Instance)); } }
private IBlockValidator CreateBlockValidator() { IBlockCacheService blockCacheService = new BlockCacheService(); PoSSwitcher = new PoSSwitcher(MergeConfig, SyncConfig.Default, new MemDb(), BlockTree, SpecProvider, LogManager); SealValidator = new MergeSealValidator(PoSSwitcher, Always.Valid); HeaderValidator preMergeHeaderValidator = new HeaderValidator(BlockTree, SealValidator, SpecProvider, LogManager); HeaderValidator = new MergeHeaderValidator(PoSSwitcher, preMergeHeaderValidator, BlockTree, SpecProvider, SealValidator, LogManager); return(new BlockValidator( new TxValidator(SpecProvider.ChainId), HeaderValidator, Always.Valid, SpecProvider, LogManager)); }
public void givenAnInvalidBlock_ifParentIsNotPostMerge_thenLastValidHashShouldBeZero() { IBlockFinder blockFinder = Substitute.For <IBlockFinder>(); IBlockCacheService blockCacheService = new BlockCacheService(); Keccak invalidBlock = Keccak.Compute("A"); BlockHeader parentBlockHeader = new BlockHeaderBuilder().TestObject; blockCacheService.BlockCache[parentBlockHeader.Hash] = new Block(parentBlockHeader); IPoSSwitcher poSSwitcher = Substitute.For <IPoSSwitcher>(); poSSwitcher.IsPostMerge(parentBlockHeader).Returns(false); _tracker = new(poSSwitcher, blockFinder, blockCacheService, new TestLogManager()); // Small max section size, to make sure things propagate correctly _tracker.OnInvalidBlock(invalidBlock, parentBlockHeader.Hash); AssertInvalid(invalidBlock, Keccak.Zero); }
public void givenAnInvalidBlock_WithUnknownParent_thenGetParentFromCache() { IBlockFinder blockFinder = Substitute.For <IBlockFinder>(); IBlockCacheService blockCacheService = new BlockCacheService(); BlockHeader parentBlockHeader = new BlockHeaderBuilder() .TestObject; BlockHeader blockHeader = new BlockHeaderBuilder() .WithParentHash(parentBlockHeader.Hash).TestObject; blockCacheService.BlockCache[blockHeader.Hash] = new Block(blockHeader); blockCacheService.BlockCache[parentBlockHeader.Hash] = new Block(parentBlockHeader); IPoSSwitcher alwaysPos = Substitute.For <IPoSSwitcher>(); alwaysPos.IsPostMerge(Arg.Any <BlockHeader>()).Returns(true); _tracker = new(alwaysPos, blockFinder, blockCacheService, new TestLogManager()); // Small max section size, to make sure things propagate correctly _tracker.OnInvalidBlock(blockHeader.Hash, null); AssertInvalid(blockHeader.Hash, parentBlockHeader.Hash); }