示例#1
0
        public void Setup()
        {
            IDbProvider                  memDbProvider            = TestMemDbProvider.Init();
            TrieStore                    trieStore                = new (new MemDb(), LimboLogs.Instance);
            StateProvider                stateProvider            = new (trieStore, memDbProvider.CodeDb, LimboLogs.Instance);
            StorageProvider              storageProvider          = new (trieStore, stateProvider, LimboLogs.Instance);
            ChainLevelInfoRepository     chainLevelInfoRepository = new (memDbProvider);
            ISpecProvider                specProvider             = MainnetSpecProvider.Instance;
            IBloomStorage                bloomStorage             = NullBloomStorage.Instance;
            EthereumEcdsa                ecdsa = new (1, LimboLogs.Instance);
            ITransactionComparerProvider transactionComparerProvider =
                new TransactionComparerProvider(specProvider, _blockTree);

            _blockTree = new BlockTree(
                memDbProvider,
                chainLevelInfoRepository,
                specProvider,
                bloomStorage,
                new SyncConfig(),
                LimboLogs.Instance);
            TxPool.TxPool txPool = new (
                ecdsa,
                new ChainHeadInfoProvider(specProvider, _blockTree, stateProvider),
                new TxPoolConfig(),
                new TxValidator(specProvider.ChainId),
                LimboLogs.Instance,
                transactionComparerProvider.GetDefaultComparer());
            BlockhashProvider blockhashProvider = new (_blockTree, LimboLogs.Instance);
            VirtualMachine    virtualMachine    = new(
                blockhashProvider,
                specProvider,
                LimboLogs.Instance);
            TransactionProcessor transactionProcessor = new (
                specProvider,
                stateProvider,
                storageProvider,
                virtualMachine,
                LimboLogs.Instance);

            BlockProcessor blockProcessor = new (
                MainnetSpecProvider.Instance,
                Always.Valid,
                new RewardCalculator(specProvider),
                new BlockProcessor.BlockValidationTransactionsExecutor(transactionProcessor, stateProvider),
                stateProvider,
                storageProvider,
                NullReceiptStorage.Instance,
                new WitnessCollector(memDbProvider.StateDb, LimboLogs.Instance),
                LimboLogs.Instance);

            _blockchainProcessor = new BlockchainProcessor(
                _blockTree,
                blockProcessor,
                new RecoverSignatures(
                    ecdsa,
                    txPool,
                    specProvider,
                    LimboLogs.Instance),
                LimboLogs.Instance, BlockchainProcessor.Options.Default);
        }
        public static INdmBlockchainBridge BuildABridge()
        {
            IDbProvider      memDbProvider    = TestMemDbProvider.Init();
            StateReader      stateReader      = new StateReader(memDbProvider.StateDb, memDbProvider.CodeDb, LimboLogs.Instance);
            StateProvider    stateProvider    = new StateProvider(memDbProvider.StateDb, memDbProvider.CodeDb, LimboLogs.Instance);
            IEthereumEcdsa   ecdsa            = new EthereumEcdsa(ChainId.Mainnet, LimboLogs.Instance);
            ITxPool          txPool           = new TxPool.TxPool(new InMemoryTxStorage(), ecdsa, MainnetSpecProvider.Instance, new TxPoolConfig(), stateProvider, LimboLogs.Instance);
            BlockTree        blockTree        = Build.A.BlockTree().OfChainLength(1).TestObject;
            IWallet          wallet           = new DevWallet(new WalletConfig(), LimboLogs.Instance);
            ReceiptsRecovery receiptsRecovery = new ReceiptsRecovery(ecdsa, MainnetSpecProvider.Instance);
            LogFinder        logFinder        = new LogFinder(blockTree, new InMemoryReceiptStorage(), NullBloomStorage.Instance, LimboLogs.Instance, receiptsRecovery, 1024);

            ReadOnlyTxProcessingEnv processingEnv = new ReadOnlyTxProcessingEnv(
                new ReadOnlyDbProvider(memDbProvider, false),
                new ReadOnlyBlockTree(blockTree),
                MainnetSpecProvider.Instance, LimboLogs.Instance);
            BlockchainBridge blockchainBridge = new BlockchainBridge(
                processingEnv,
                txPool,
                new InMemoryReceiptStorage(),
                NullFilterStore.Instance,
                NullFilterManager.Instance,
                ecdsa,
                Timestamper.Default,
                logFinder,
                false,
                false);

            WalletTxSigner txSigner  = new WalletTxSigner(wallet, ChainId.Mainnet);
            ITxSealer      txSealer0 = new TxSealer(txSigner, Timestamper.Default);
            ITxSealer      txSealer1 = new NonceReservingTxSealer(txSigner, Timestamper.Default, txPool);
            ITxSender      txSender  = new TxPoolSender(txPool, txSealer0, txSealer1);

            return(new NdmBlockchainBridge(blockchainBridge, blockTree, stateReader, txSender));
        }
示例#3
0
 public static Runner.Ethereum.Api.NethermindApi ContextWithMocks() =>
 new Runner.Ethereum.Api.NethermindApi(Substitute.For <IConfigProvider>(), new EthereumJsonSerializer(), LimboLogs.Instance)
 {
     Enode                    = Substitute.For <IEnode>(),
     TxPool                   = Substitute.For <ITxPool>(),
     Wallet                   = Substitute.For <IWallet>(),
     BlockTree                = Substitute.For <IBlockTree>(),
     SyncServer               = Substitute.For <ISyncServer>(),
     DbProvider               = TestMemDbProvider.Init(),
     PeerManager              = Substitute.For <IPeerManager>(),
     SpecProvider             = Substitute.For <ISpecProvider>(),
     EthereumEcdsa            = Substitute.For <IEthereumEcdsa>(),
     MainBlockProcessor       = Substitute.For <IBlockProcessor>(),
     ReceiptStorage           = Substitute.For <IReceiptStorage>(),
     ReceiptFinder            = Substitute.For <IReceiptFinder>(),
     BlockValidator           = Substitute.For <IBlockValidator>(),
     RewardCalculatorSource   = Substitute.For <IRewardCalculatorSource>(),
     TxPoolInfoProvider       = Substitute.For <ITxPoolInfoProvider>(),
     StaticNodesManager       = Substitute.For <IStaticNodesManager>(),
     BloomStorage             = Substitute.For <IBloomStorage>(),
     Sealer                   = Substitute.For <ISealer>(),
     Synchronizer             = Substitute.For <ISynchronizer>(),
     BlockchainProcessor      = Substitute.For <IBlockchainProcessor>(),
     BlockProducer            = Substitute.For <IBlockProducer>(),
     ConfigProvider           = Substitute.For <IConfigProvider>(),
     DiscoveryApp             = Substitute.For <IDiscoveryApp>(),
     EngineSigner             = Substitute.For <ISigner>(),
     FileSystem               = Substitute.For <IFileSystem>(),
     FilterManager            = Substitute.For <IFilterManager>(),
     FilterStore              = Substitute.For <IFilterStore>(),
     GrpcServer               = Substitute.For <IGrpcServer>(),
     HeaderValidator          = Substitute.For <IHeaderValidator>(),
     IpResolver               = Substitute.For <IIPResolver>(),
     KeyStore                 = Substitute.For <IKeyStore>(),
     LogFinder                = Substitute.For <ILogFinder>(),
     MonitoringService        = Substitute.For <IMonitoringService>(),
     ProtocolsManager         = Substitute.For <IProtocolsManager>(),
     ProtocolValidator        = Substitute.For <IProtocolValidator>(),
     RlpxPeer                 = Substitute.For <IRlpxPeer>(),
     SealValidator            = Substitute.For <ISealValidator>(),
     SessionMonitor           = Substitute.For <ISessionMonitor>(),
     StateProvider            = Substitute.For <IStateProvider>(),
     StateReader              = Substitute.For <IStateReader>(),
     StorageProvider          = Substitute.For <IStorageProvider>(),
     TransactionProcessor     = Substitute.For <ITransactionProcessor>(),
     TxSender                 = Substitute.For <ITxSender>(),
     BlockProcessingQueue     = Substitute.For <IBlockProcessingQueue>(),
     EngineSignerStore        = Substitute.For <ISignerStore>(),
     EthereumJsonSerializer   = Substitute.For <IJsonSerializer>(),
     NodeStatsManager         = Substitute.For <INodeStatsManager>(),
     RpcModuleProvider        = Substitute.For <IRpcModuleProvider>(),
     SyncModeSelector         = Substitute.For <ISyncModeSelector>(),
     SyncPeerPool             = Substitute.For <ISyncPeerPool>(),
     WebSocketsManager        = Substitute.For <IWebSocketsManager>(),
     ChainLevelInfoRepository = Substitute.For <IChainLevelInfoRepository>(),
     TrieStore                = Substitute.For <ITrieStore>(),
     ReadOnlyTrieStore        = Substitute.For <IReadOnlyTrieStore>(),
     ChainSpec                = new ChainSpec(),
 };
            public SyncingContext(SynchronizerType synchronizerType)
            {
                _logger = _logManager.GetClassLogger();
                ISyncConfig syncConfig  = synchronizerType == SynchronizerType.Fast ? SyncConfig.WithFastSync : SyncConfig.WithFullSyncOnly;
                IDbProvider dbProvider  = TestMemDbProvider.Init();
                IDb         stateDb     = new MemDb();
                IDb         codeDb      = dbProvider.CodeDb;
                MemDb       blockInfoDb = new MemDb();

                BlockTree = new BlockTree(new MemDb(), new MemDb(), blockInfoDb, new ChainLevelInfoRepository(blockInfoDb), new SingleReleaseSpecProvider(Constantinople.Instance, 1), NullBloomStorage.Instance, _logManager);
                ITimerFactory    timerFactory = Substitute.For <ITimerFactory>();
                NodeStatsManager stats        = new NodeStatsManager(timerFactory, _logManager);

                SyncPeerPool = new SyncPeerPool(BlockTree, stats, 25, _logManager);

                SyncProgressResolver syncProgressResolver = new SyncProgressResolver(
                    BlockTree,
                    NullReceiptStorage.Instance,
                    stateDb,
                    new MemDb(),
                    new TrieStore(stateDb, LimboLogs.Instance),
                    syncConfig,
                    _logManager);
                MultiSyncModeSelector syncModeSelector = new MultiSyncModeSelector(syncProgressResolver, SyncPeerPool, syncConfig, _logManager);

                Synchronizer = new Synchronizer(
                    dbProvider,
                    MainnetSpecProvider.Instance,
                    BlockTree,
                    NullReceiptStorage.Instance,
                    Always.Valid,
                    Always.Valid,
                    SyncPeerPool,
                    stats,
                    syncModeSelector,
                    syncConfig,
                    _logManager);

                SyncServer = new SyncServer(
                    stateDb,
                    codeDb,
                    BlockTree,
                    NullReceiptStorage.Instance,
                    Always.Valid,
                    Always.Valid,
                    SyncPeerPool,
                    syncModeSelector,
                    syncConfig,
                    new WitnessCollector(new MemDb(), LimboLogs.Instance),
                    _logManager);

                SyncPeerPool.Start();

                Synchronizer.Start();
                Synchronizer.SyncEvent += SynchronizerOnSyncEvent;

                AllInstances.Add(this);
            }
示例#5
0
 private PruningContext(IPruningStrategy pruningStrategy, IPersistenceStrategy persistenceStrategy)
 {
     _logManager          = new TestLogManager(LogLevel.Trace);
     _logger              = _logManager.GetClassLogger();
     _dbProvider          = TestMemDbProvider.Init();
     _persistenceStrategy = persistenceStrategy;
     _pruningStrategy     = pruningStrategy;
     _trieStore           = new TrieStore(_dbProvider.StateDb, _pruningStrategy, _persistenceStrategy, _logManager);
     _stateProvider       = new StateProvider(_trieStore, _dbProvider.CodeDb, _logManager);
     _storageProvider     = new StorageProvider(_trieStore, _stateProvider, _logManager);
     _stateReader         = new StateReader(_trieStore, _dbProvider.CodeDb, _logManager);
 }
        public async Task ProviderInitTests_BeamSyncDbProvider()
        {
            var         syncModeSelector   = Substitute.For <ISyncModeSelector>();
            var         dbProvider         = TestMemDbProvider.Init();
            var         rocksDbFactory     = new RocksDbFactory(new DbConfig(), LimboLogs.Instance, Path.Combine(_folderWithDbs, "beam"));
            IDbProvider beamSyncDbProvider = new BeamSyncDbProvider(syncModeSelector, dbProvider, new SyncConfig(), LimboLogs.Instance);
            var         initializer        = new BaselineDbInitializer(beamSyncDbProvider, new BaselineConfig(), rocksDbFactory, new MemDbFactory());
            await initializer.Init();

            Assert.NotNull(beamSyncDbProvider.GetDb <IDb>(BaselineDbNames.BaselineTree));
            Assert.NotNull(beamSyncDbProvider.GetDb <IDb>(BaselineDbNames.BaselineTreeMetadata));
            Assert.IsTrue(beamSyncDbProvider.GetDb <IDb>(BaselineDbNames.BaselineTree) is MemDb);
            Assert.IsTrue(beamSyncDbProvider.GetDb <IDb>(BaselineDbNames.BaselineTreeMetadata) is MemDb);
        }
示例#7
0
        public void Setup()
        {
            IDbProvider dbProvider = TestMemDbProvider.Init();

            ChainLevelInfoRepository repository   = new ChainLevelInfoRepository(dbProvider);
            ISpecProvider            specProvider = MainnetSpecProvider.Instance;

            _blockTree = new BlockTree(dbProvider, repository, specProvider, NullBloomStorage.Instance, new SyncConfig(), LimboLogs.Instance);

            TrieStore       trieStore       = new TrieStore(dbProvider.StateDb, LimboLogs.Instance);
            StateProvider   stateProvider   = new StateProvider(trieStore, dbProvider.CodeDb, LimboLogs.Instance);
            StorageProvider storageProvider = new StorageProvider(trieStore, stateProvider, LimboLogs.Instance);

            BlockhashProvider blockhashProvider = new BlockhashProvider(_blockTree, LimboLogs.Instance);

            VirtualMachine virtualMachine = new VirtualMachine(stateProvider, storageProvider, blockhashProvider, specProvider, LimboLogs.Instance);

            TransactionProcessor transactionProcessor = new TransactionProcessor(specProvider, stateProvider, storageProvider, virtualMachine, LimboLogs.Instance);

            BlockProcessor blockProcessor = new BlockProcessor(
                specProvider,
                TestBlockValidator.AlwaysValid,
                NoBlockRewards.Instance,
                transactionProcessor,
                stateProvider,
                storageProvider,
                NullTxPool.Instance,
                NullReceiptStorage.Instance,
                NullWitnessCollector.Instance,
                LimboLogs.Instance);

            _processor = new BlockchainProcessor(_blockTree, blockProcessor, new CompositeBlockPreprocessorStep(), LimboLogs.Instance, BlockchainProcessor.Options.NoReceipts);
            Block genesis = Build.A.Block.Genesis.TestObject;

            _blockTree.SuggestBlock(genesis);
            _processor.Process(genesis, ProcessingOptions.None, NullBlockTracer.Instance);
        }
示例#8
0
        private SyncTestContext CreateSyncManager(int index)
        {
            var logManager            = NoErrorLimboLogs.Instance;
            ConsoleAsyncLogger logger = new ConsoleAsyncLogger(LogLevel.Debug, "PEER " + index + " ");
//            var logManager = new OneLoggerLogManager(logger);
            var specProvider = new SingleReleaseSpecProvider(ConstantinopleFix.Instance, MainnetSpecProvider.Instance.ChainId);

            var             dbProvider  = TestMemDbProvider.Init();
            IDb             blockDb     = dbProvider.BlocksDb;
            IDb             headerDb    = dbProvider.HeadersDb;
            IDb             blockInfoDb = dbProvider.BlockInfosDb;
            ISnapshotableDb codeDb      = dbProvider.CodeDb;
            ISnapshotableDb stateDb     = dbProvider.StateDb;

            var stateReader   = new StateReader(stateDb, codeDb, logManager);
            var stateProvider = new StateProvider(stateDb, codeDb, logManager);

            stateProvider.CreateAccount(TestItem.AddressA, 10000.Ether());
            stateProvider.Commit(specProvider.GenesisSpec);
            stateProvider.CommitTree();
            stateProvider.RecalculateStateRoot();
            stateDb.Commit();

            var storageProvider = new StorageProvider(stateDb, stateProvider, logManager);
            var receiptStorage  = new InMemoryReceiptStorage();

            var ecdsa             = new EthereumEcdsa(specProvider.ChainId, logManager);
            var txPool            = new TxPool.TxPool(new InMemoryTxStorage(), ecdsa, specProvider, new TxPoolConfig(), stateProvider, logManager);
            var tree              = new BlockTree(blockDb, headerDb, blockInfoDb, new ChainLevelInfoRepository(blockInfoDb), specProvider, NullBloomStorage.Instance, logManager);
            var blockhashProvider = new BlockhashProvider(tree, LimboLogs.Instance);
            var virtualMachine    = new VirtualMachine(stateProvider, storageProvider, blockhashProvider, specProvider, logManager);

            var sealValidator   = Always.Valid;
            var headerValidator = new HeaderValidator(tree, sealValidator, specProvider, logManager);
            var txValidator     = Always.Valid;
            var ommersValidator = new OmmersValidator(tree, headerValidator, logManager);
            var blockValidator  = new BlockValidator(txValidator, headerValidator, ommersValidator, specProvider, logManager);

            ISyncConfig syncConfig = _synchronizerType == SynchronizerType.Fast ? SyncConfig.WithFastSync : SyncConfig.WithFullSyncOnly;

            var rewardCalculator = new RewardCalculator(specProvider);
            var txProcessor      = new TransactionProcessor(specProvider, stateProvider, storageProvider, virtualMachine, logManager);
            var blockProcessor   = new BlockProcessor(specProvider, blockValidator, rewardCalculator, txProcessor, stateDb, codeDb, stateProvider, storageProvider, txPool, receiptStorage, logManager);

            var step      = new RecoverSignatures(ecdsa, txPool, specProvider, logManager);
            var processor = new BlockchainProcessor(tree, blockProcessor, step, logManager, BlockchainProcessor.Options.Default);

            var nodeStatsManager = new NodeStatsManager(logManager);
            var syncPeerPool     = new SyncPeerPool(tree, nodeStatsManager, 25, logManager);

            StateProvider   devState            = new StateProvider(stateDb, codeDb, logManager);
            StorageProvider devStorage          = new StorageProvider(stateDb, devState, logManager);
            var             devEvm              = new VirtualMachine(devState, devStorage, blockhashProvider, specProvider, logManager);
            var             devTxProcessor      = new TransactionProcessor(specProvider, devState, devStorage, devEvm, logManager);
            var             devBlockProcessor   = new BlockProcessor(specProvider, blockValidator, rewardCalculator, devTxProcessor, stateDb, codeDb, devState, devStorage, txPool, receiptStorage, logManager);
            var             devChainProcessor   = new BlockchainProcessor(tree, devBlockProcessor, step, logManager, BlockchainProcessor.Options.NoReceipts);
            var             transactionSelector = new TxPoolTxSource(txPool, stateReader, logManager);
            var             producer            = new DevBlockProducer(
                transactionSelector,
                devChainProcessor,
                stateProvider, tree,
                processor,
                txPool,
                Timestamper.Default,
                logManager);

            SyncProgressResolver  resolver     = new SyncProgressResolver(tree, receiptStorage, stateDb, new MemDb(), syncConfig, logManager);
            MultiSyncModeSelector selector     = new MultiSyncModeSelector(resolver, syncPeerPool, syncConfig, logManager);
            Synchronizer          synchronizer = new Synchronizer(
                dbProvider,
                MainnetSpecProvider.Instance,
                tree,
                NullReceiptStorage.Instance,
                blockValidator,
                sealValidator,
                syncPeerPool,
                nodeStatsManager,
                StaticSelector.Full,
                syncConfig,
                logManager);
            var syncServer = new SyncServer(stateDb, codeDb, tree, receiptStorage, Always.Valid, Always.Valid, syncPeerPool, selector, syncConfig, logManager);

            ManualResetEventSlim waitEvent = new ManualResetEventSlim();

            tree.NewHeadBlock += (s, e) => waitEvent.Set();

            if (index == 0)
            {
                _genesis = Build.A.Block.Genesis.WithStateRoot(stateProvider.StateRoot).TestObject;
                producer.Start();
            }

            syncPeerPool.Start();
            synchronizer.Start();
            processor.Start();
            tree.SuggestBlock(_genesis);

            if (!waitEvent.Wait(1000))
            {
                throw new Exception("No genesis");
            }

            SyncTestContext context = new SyncTestContext();

            context.Ecdsa = ecdsa;
            context.BlockchainProcessor = processor;
            context.PeerPool            = syncPeerPool;
            context.StateProvider       = stateProvider;
            context.Synchronizer        = synchronizer;
            context.SyncServer          = syncServer;
            context.Tree          = tree;
            context.BlockProducer = producer;
            context.TxPool        = txPool;
            context.Logger        = logger;
            return(context);
        }
示例#9
0
        public void GlobalSetup()
        {
            var dbProvider  = TestMemDbProvider.Init();
            IDb codeDb      = dbProvider.CodeDb;
            IDb stateDb     = dbProvider.StateDb;
            IDb blockInfoDb = new MemDb(10, 5);

            ISpecProvider specProvider = MainnetSpecProvider.Instance;
            IReleaseSpec  spec         = MainnetSpecProvider.Instance.GenesisSpec;
            var           trieStore    = new TrieStore(stateDb, LimboLogs.Instance);

            StateProvider stateProvider = new(trieStore, codeDb, LimboLogs.Instance);

            stateProvider.CreateAccount(Address.Zero, 1000.Ether());
            stateProvider.Commit(spec);

            StorageProvider storageProvider = new(trieStore, stateProvider, LimboLogs.Instance);
            StateReader     stateReader     = new(trieStore, codeDb, LimboLogs.Instance);

            ChainLevelInfoRepository chainLevelInfoRepository = new (blockInfoDb);
            BlockTree blockTree = new(dbProvider, chainLevelInfoRepository, specProvider, NullBloomStorage.Instance, LimboLogs.Instance);

            _blockhashProvider = new BlockhashProvider(blockTree, LimboLogs.Instance);
            _virtualMachine    = new VirtualMachine(_blockhashProvider, specProvider, LimboLogs.Instance);

            Block genesisBlock = Build.A.Block.Genesis.TestObject;

            blockTree.SuggestBlock(genesisBlock);

            Block block1 = Build.A.Block.WithParent(genesisBlock).WithNumber(1).TestObject;

            blockTree.SuggestBlock(block1);

            TransactionProcessor transactionProcessor
                = new(MainnetSpecProvider.Instance, stateProvider, storageProvider, _virtualMachine, LimboLogs.Instance);

            IBlockProcessor.IBlockTransactionsExecutor transactionsExecutor = new BlockProcessor.BlockValidationTransactionsExecutor(transactionProcessor, stateProvider);
            BlockProcessor blockProcessor = new(specProvider, Always.Valid, new RewardCalculator(specProvider), transactionsExecutor,
                                                stateProvider, storageProvider, NullReceiptStorage.Instance, NullWitnessCollector.Instance, LimboLogs.Instance);

            EthereumEcdsa       ecdsa = new(specProvider.ChainId, LimboLogs.Instance);
            BlockchainProcessor blockchainProcessor = new(
                blockTree,
                blockProcessor,
                new RecoverSignatures(
                    ecdsa,
                    NullTxPool.Instance,
                    specProvider,
                    LimboLogs.Instance),
                LimboLogs.Instance,
                BlockchainProcessor.Options.NoReceipts);

            blockchainProcessor.Process(genesisBlock, ProcessingOptions.None, NullBlockTracer.Instance);
            blockchainProcessor.Process(block1, ProcessingOptions.None, NullBlockTracer.Instance);

            IBloomStorage bloomStorage = new BloomStorage(new BloomConfig(), new MemDb(), new InMemoryDictionaryFileStoreFactory());

            LogFinder logFinder = new(
                blockTree,
                new InMemoryReceiptStorage(),
                bloomStorage,
                LimboLogs.Instance,
                new ReceiptsRecovery(ecdsa, specProvider));

            BlockchainBridge bridge = new(
                new ReadOnlyTxProcessingEnv(
                    new ReadOnlyDbProvider(dbProvider, false),
                    trieStore.AsReadOnly(),
                    new ReadOnlyBlockTree(blockTree),
                    specProvider,
                    LimboLogs.Instance),
                NullTxPool.Instance,
                NullReceiptStorage.Instance,
                NullFilterStore.Instance,
                NullFilterManager.Instance,
                ecdsa,
                Timestamper.Default,
                logFinder,
                specProvider,
                false);

            GasPriceOracle   gasPriceOracle   = new(blockTree, specProvider);
            FeeHistoryOracle feeHistoryOracle = new(blockTree, NullReceiptStorage.Instance, specProvider);
            EthSyncingInfo   ethSyncingInfo   = new(blockTree);

            _ethModule = new EthRpcModule(
                new JsonRpcConfig(),
                bridge,
                blockTree,
                stateReader,
                NullTxPool.Instance,
                NullTxSender.Instance,
                NullWallet.Instance,
                Substitute.For <IReceiptFinder>(),
                LimboLogs.Instance,
                specProvider,
                gasPriceOracle,
                ethSyncingInfo,
                feeHistoryOracle);
        }
示例#10
0
        private SyncTestContext CreateSyncManager(int index)
        {
            NoErrorLimboLogs   logManager = NoErrorLimboLogs.Instance;
            ConsoleAsyncLogger logger     = new(LogLevel.Debug, "PEER " + index + " ");
//            var logManager = new OneLoggerLogManager(logger);
            SingleReleaseSpecProvider specProvider =
                new(ConstantinopleFix.Instance, MainnetSpecProvider.Instance.ChainId);

            IDbProvider dbProvider  = TestMemDbProvider.Init();
            IDb         blockDb     = dbProvider.BlocksDb;
            IDb         headerDb    = dbProvider.HeadersDb;
            IDb         blockInfoDb = dbProvider.BlockInfosDb;
            IDb         codeDb      = dbProvider.CodeDb;
            IDb         stateDb     = dbProvider.StateDb;

            TrieStore     trieStore     = new(stateDb, LimboLogs.Instance);
            StateReader   stateReader   = new(trieStore, codeDb, logManager);
            StateProvider stateProvider = new(trieStore, codeDb, logManager);

            stateProvider.CreateAccount(TestItem.AddressA, 10000.Ether());
            stateProvider.Commit(specProvider.GenesisSpec);
            stateProvider.CommitTree(0);
            stateProvider.RecalculateStateRoot();

            StorageProvider        storageProvider = new(trieStore, stateProvider, logManager);
            InMemoryReceiptStorage receiptStorage  = new();

            EthereumEcdsa ecdsa = new(specProvider.ChainId, logManager);
            BlockTree     tree  = new(blockDb, headerDb, blockInfoDb, new ChainLevelInfoRepository(blockInfoDb),
                                      specProvider, NullBloomStorage.Instance, logManager);
            ITransactionComparerProvider transactionComparerProvider =
                new TransactionComparerProvider(specProvider, tree);

            TxPool.TxPool txPool = new(new InMemoryTxStorage(), ecdsa, new ChainHeadInfoProvider(specProvider, tree, stateReader),
                                       new TxPoolConfig(), new TxValidator(specProvider.ChainId), logManager, transactionComparerProvider.GetDefaultComparer());
            BlockhashProvider blockhashProvider = new(tree, LimboLogs.Instance);
            VirtualMachine    virtualMachine    =
                new(stateProvider, storageProvider, blockhashProvider, specProvider, logManager);

            Always          sealValidator   = Always.Valid;
            HeaderValidator headerValidator = new(tree, sealValidator, specProvider, logManager);
            Always          txValidator     = Always.Valid;
            OmmersValidator ommersValidator = new(tree, headerValidator, logManager);
            BlockValidator  blockValidator  =
                new(txValidator, headerValidator, ommersValidator, specProvider, logManager);

            ISyncConfig syncConfig = _synchronizerType == SynchronizerType.Fast
                ? SyncConfig.WithFastSync
                : SyncConfig.WithFullSyncOnly;

            RewardCalculator     rewardCalculator = new(specProvider);
            TransactionProcessor txProcessor      =
                new(specProvider, stateProvider, storageProvider, virtualMachine, logManager);

            BlockProcessor blockProcessor = new(
                specProvider,
                blockValidator,
                rewardCalculator,
                txProcessor,
                stateProvider,
                storageProvider,
                txPool,
                receiptStorage,
                NullWitnessCollector.Instance,
                logManager);

            RecoverSignatures   step      = new(ecdsa, txPool, specProvider, logManager);
            BlockchainProcessor processor = new(tree, blockProcessor, step, logManager,
                                                BlockchainProcessor.Options.Default);

            ITimerFactory    timerFactory     = Substitute.For <ITimerFactory>();
            NodeStatsManager nodeStatsManager = new(timerFactory, logManager);
            SyncPeerPool     syncPeerPool     = new(tree, nodeStatsManager, 25, logManager);

            StateProvider        devState       = new(trieStore, codeDb, logManager);
            StorageProvider      devStorage     = new(trieStore, devState, logManager);
            VirtualMachine       devEvm         = new(devState, devStorage, blockhashProvider, specProvider, logManager);
            TransactionProcessor devTxProcessor = new(specProvider, devState, devStorage, devEvm, logManager);

            BlockProcessor devBlockProcessor = new(
                specProvider,
                blockValidator,
                rewardCalculator,
                devTxProcessor,
                devState,
                devStorage,
                txPool,
                receiptStorage,
                NullWitnessCollector.Instance,
                logManager);

            BlockchainProcessor devChainProcessor = new(tree, devBlockProcessor, step, logManager,
                                                        BlockchainProcessor.Options.NoReceipts);
            ITxFilterPipeline txFilterPipeline    = TxFilterPipelineBuilder.CreateStandardFilteringPipeline(LimboLogs.Instance, specProvider);
            TxPoolTxSource    transactionSelector = new(txPool, stateReader, specProvider, transactionComparerProvider, logManager, txFilterPipeline);
            DevBlockProducer  producer            = new(
                transactionSelector,
                devChainProcessor,
                stateProvider, tree,
                processor,
                new BuildBlocksRegularly(TimeSpan.FromMilliseconds(50)).IfPoolIsNotEmpty(txPool),
                Timestamper.Default,
                specProvider,
                new MiningConfig(),
                logManager);

            SyncProgressResolver resolver = new(
                tree, receiptStorage, stateDb, new MemDb(), NullTrieNodeResolver.Instance, syncConfig, logManager);
            MultiSyncModeSelector selector     = new(resolver, syncPeerPool, syncConfig, logManager);
            Synchronizer          synchronizer = new(
                dbProvider,
                MainnetSpecProvider.Instance,
                tree,
                NullReceiptStorage.Instance,
                blockValidator,
                sealValidator,
                syncPeerPool,
                nodeStatsManager,
                StaticSelector.Full,
                syncConfig,
                logManager);
            SyncServer syncServer = new(
                stateDb,
                codeDb,
                tree,
                receiptStorage,
                Always.Valid,
                Always.Valid,
                syncPeerPool,
                selector,
                syncConfig,
                NullWitnessCollector.Instance,
                logManager);

            ManualResetEventSlim waitEvent = new();

            tree.NewHeadBlock += (_, _) => waitEvent.Set();

            if (index == 0)
            {
                _genesis = Build.A.Block.Genesis.WithStateRoot(stateProvider.StateRoot).TestObject;
                producer.Start();
            }

            syncPeerPool.Start();
            synchronizer.Start();
            processor.Start();
            tree.SuggestBlock(_genesis);

            if (!waitEvent.Wait(1000))
            {
                throw new Exception("No genesis");
            }

            SyncTestContext context = new();

            context.Ecdsa = ecdsa;
            context.BlockchainProcessor = processor;
            context.PeerPool            = syncPeerPool;
            context.StateProvider       = stateProvider;
            context.Synchronizer        = synchronizer;
            context.SyncServer          = syncServer;
            context.Tree          = tree;
            context.BlockProducer = producer;
            context.TxPool        = txPool;
            context.Logger        = logger;
            return(context);
        }
示例#11
0
 public static NethermindApi ContextWithMocks() =>
 new NethermindApi()
 {
     LogManager                  = LimboLogs.Instance,
     Enode                       = Substitute.For <IEnode>(),
     TxPool                      = Substitute.For <ITxPool>(),
     Wallet                      = Substitute.For <IWallet>(),
     BlockTree                   = Substitute.For <IBlockTree>(),
     SyncServer                  = Substitute.For <ISyncServer>(),
     DbProvider                  = TestMemDbProvider.Init(),
     PeerManager                 = Substitute.For <IPeerManager>(),
     PeerPool                    = Substitute.For <IPeerPool>(),
     SpecProvider                = Substitute.For <ISpecProvider>(),
     EthereumEcdsa               = Substitute.For <IEthereumEcdsa>(),
     MainBlockProcessor          = Substitute.For <IBlockProcessor>(),
     ReceiptStorage              = Substitute.For <IReceiptStorage>(),
     ReceiptFinder               = Substitute.For <IReceiptFinder>(),
     BlockValidator              = Substitute.For <IBlockValidator>(),
     RewardCalculatorSource      = Substitute.For <IRewardCalculatorSource>(),
     TxPoolInfoProvider          = Substitute.For <ITxPoolInfoProvider>(),
     StaticNodesManager          = Substitute.For <IStaticNodesManager>(),
     BloomStorage                = Substitute.For <IBloomStorage>(),
     Sealer                      = Substitute.For <ISealer>(),
     Synchronizer                = Substitute.For <ISynchronizer>(),
     BlockchainProcessor         = Substitute.For <IBlockchainProcessor>(),
     BlockProducer               = Substitute.For <IBlockProducer>(),
     ConfigProvider              = Substitute.For <IConfigProvider>(),
     DiscoveryApp                = Substitute.For <IDiscoveryApp>(),
     EngineSigner                = Substitute.For <ISigner>(),
     FileSystem                  = Substitute.For <IFileSystem>(),
     FilterManager               = Substitute.For <IFilterManager>(),
     FilterStore                 = Substitute.For <IFilterStore>(),
     GrpcServer                  = Substitute.For <IGrpcServer>(),
     HeaderValidator             = Substitute.For <IHeaderValidator>(),
     IpResolver                  = Substitute.For <IIPResolver>(),
     KeyStore                    = Substitute.For <IKeyStore>(),
     LogFinder                   = Substitute.For <ILogFinder>(),
     MonitoringService           = Substitute.For <IMonitoringService>(),
     ProtocolsManager            = Substitute.For <IProtocolsManager>(),
     ProtocolValidator           = Substitute.For <IProtocolValidator>(),
     RlpxPeer                    = Substitute.For <IRlpxHost>(),
     SealValidator               = Substitute.For <ISealValidator>(),
     SessionMonitor              = Substitute.For <ISessionMonitor>(),
     SnapProvider                = Substitute.For <ISnapProvider>(),
     StateProvider               = Substitute.For <IStateProvider>(),
     StateReader                 = Substitute.For <IStateReader>(),
     StorageProvider             = Substitute.For <IStorageProvider>(),
     TransactionProcessor        = Substitute.For <ITransactionProcessor>(),
     TxSender                    = Substitute.For <ITxSender>(),
     BlockProcessingQueue        = Substitute.For <IBlockProcessingQueue>(),
     EngineSignerStore           = Substitute.For <ISignerStore>(),
     EthereumJsonSerializer      = Substitute.For <IJsonSerializer>(),
     NodeStatsManager            = Substitute.For <INodeStatsManager>(),
     RpcModuleProvider           = Substitute.For <IRpcModuleProvider>(),
     SyncModeSelector            = Substitute.For <ISyncModeSelector>(),
     SyncPeerPool                = Substitute.For <ISyncPeerPool>(),
     PeerDifficultyRefreshPool   = Substitute.For <IPeerDifficultyRefreshPool>(),
     WebSocketsManager           = Substitute.For <IWebSocketsManager>(),
     ChainLevelInfoRepository    = Substitute.For <IChainLevelInfoRepository>(),
     TrieStore                   = Substitute.For <ITrieStore>(),
     ReadOnlyTrieStore           = Substitute.For <IReadOnlyTrieStore>(),
     ChainSpec                   = new ChainSpec(),
     BlockProducerEnvFactory     = Substitute.For <IBlockProducerEnvFactory>(),
     TransactionComparerProvider = Substitute.For <ITransactionComparerProvider>(),
     GasPriceOracle              = Substitute.For <IGasPriceOracle>(),
     EthSyncingInfo              = Substitute.For <IEthSyncingInfo>(),
     HealthHintService           = Substitute.For <IHealthHintService>(),
     TxValidator                 = new TxValidator(MainnetSpecProvider.Instance.ChainId),
     UnclesValidator             = Substitute.For <IUnclesValidator>(),
     BlockProductionPolicy       = Substitute.For <IBlockProductionPolicy>(),
     SyncProgressResolver        = Substitute.For <ISyncProgressResolver>(),
     BetterPeerStrategy          = Substitute.For <IBetterPeerStrategy>(),
     ReceiptMonitor              = Substitute.For <IReceiptMonitor>(),
     WitnessRepository           = Substitute.For <IWitnessRepository>()
 };