Beispiel #1
0
        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));
            }
Beispiel #3
0
    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);
    }
Beispiel #4
0
    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);
    }