public static SearchResult <BlockHeader> SearchForHeader(this IBlockFinder blockFinder, BlockParameter blockParameter, bool allowNulls = false) { if (blockFinder.Head == null) { return(new SearchResult <BlockHeader>("Incorrect head block", ErrorCodes.InternalError)); } blockParameter ??= BlockParameter.Latest; BlockHeader header; if (blockParameter.RequireCanonical) { header = blockFinder.FindHeader(blockParameter.BlockHash, BlockTreeLookupOptions.RequireCanonical); if (header == null && !allowNulls) { header = blockFinder.FindHeader(blockParameter.BlockHash); if (header != null) { return(new SearchResult <BlockHeader>($"{blockParameter.BlockHash} block is not canonical", ErrorCodes.InvalidInput)); } } } else { header = blockFinder.FindHeader(blockParameter); } return(header == null && !allowNulls ? new SearchResult <BlockHeader>($"{blockParameter.BlockHash?.ToString() ?? blockParameter.BlockNumber?.ToString() ?? blockParameter.Type.ToString()} could not be found", ErrorCodes.ResourceNotFound) : new SearchResult <BlockHeader>(header)); }
public ParityModule(IEcdsa ecdsa, ITxPool txPool, IBlockFinder blockFinder, IReceiptFinder receiptFinder, ILogManager logManager) { _ecdsa = ecdsa ?? throw new ArgumentNullException(nameof(ecdsa)); _txPool = txPool ?? throw new ArgumentNullException(nameof(txPool)); _blockFinder = blockFinder ?? throw new ArgumentNullException(nameof(blockFinder)); _receiptFinder = receiptFinder ?? throw new ArgumentNullException(nameof(receiptFinder)); }
public static BlockHeader FindParentHeader(this IBlockFinder finder, BlockHeader header, BlockTreeLookupOptions options) { if (header.MaybeParent == null) { BlockHeader parent = finder.FindHeader(header.ParentHash, options); header.MaybeParent = new WeakReference <BlockHeader>(parent); return(parent); } header.MaybeParent.TryGetTarget(out BlockHeader maybeParent); if (maybeParent == null) { BlockHeader parent = finder.FindHeader(header.ParentHash, options); header.MaybeParent.SetTarget(parent); return(parent); } if (maybeParent.TotalDifficulty == null && (options & BlockTreeLookupOptions.TotalDifficultyNotNeeded) == 0) { BlockHeader fromDb = finder.FindHeader(header.ParentHash, options); maybeParent.TotalDifficulty = fromDb.TotalDifficulty; } return(maybeParent); }
public static SearchResult <Block> SearchForBlock(this IBlockFinder blockFinder, BlockParameter blockParameter, bool allowNulls = false) { Block block; if (blockParameter.RequireCanonical) { block = blockFinder.FindBlock(blockParameter.BlockHash, BlockTreeLookupOptions.RequireCanonical); if (block == null && !allowNulls) { var header = blockFinder.FindHeader(blockParameter.BlockHash); if (header != null) { return(new SearchResult <Block>($"{blockParameter.BlockHash} block is not canonical", ErrorCodes.InvalidInput)); } } } else { block = blockFinder.FindBlock(blockParameter); } return(block == null && !allowNulls ? new SearchResult <Block>($"{blockParameter.BlockHash?.ToString() ?? blockParameter.BlockNumber?.ToString() ?? blockParameter.Type.ToString()} could not be found", ErrorCodes.ResourceNotFound) : new SearchResult <Block>(block)); }
public void CheckHealth_returns_expected_results([ValueSource(nameof(CheckHealthTestCases))] CheckHealthTest test) { IBlockFinder blockFinder = Substitute.For <IBlockFinder>(); ISyncServer syncServer = Substitute.For <ISyncServer>(); IBlockchainProcessor blockchainProcessor = Substitute.For <IBlockchainProcessor>(); IBlockProducer blockProducer = Substitute.For <IBlockProducer>(); IHealthHintService healthHintService = Substitute.For <IHealthHintService>(); blockchainProcessor.IsProcessingBlocks(Arg.Any <ulong?>()).Returns(test.IsProcessingBlocks); blockProducer.IsProducingBlocks(Arg.Any <ulong?>()).Returns(test.IsProducingBlocks); syncServer.GetPeerCount().Returns(test.PeerCount); BlockHeaderBuilder GetBlockHeader(int blockNumber) => Build.A.BlockHeader.WithNumber(blockNumber); blockFinder.Head.Returns(new Block(GetBlockHeader(4).TestObject)); if (test.IsSyncing) { blockFinder.FindBestSuggestedHeader().Returns(GetBlockHeader(15).TestObject); } else { blockFinder.FindBestSuggestedHeader().Returns(GetBlockHeader(2).TestObject); } IEthSyncingInfo ethSyncingInfo = new EthSyncingInfo(blockFinder); NodeHealthService nodeHealthService = new(syncServer, blockFinder, blockchainProcessor, blockProducer, new HealthChecksConfig(), healthHintService, ethSyncingInfo, test.IsMining); CheckHealthResult result = nodeHealthService.CheckHealth(); Assert.AreEqual(test.ExpectedHealthy, result.Healthy); Assert.AreEqual(test.ExpectedMessage, FormatMessages(result.Messages.Select(x => x.Message))); Assert.AreEqual(test.ExpectedLongMessage, FormatMessages(result.Messages.Select(x => x.LongMessage))); }
public TraceModule(IReceiptFinder receiptFinder, ITracer tracer, IBlockFinder blockFinder, CancellationToken cancellationToken = default(CancellationToken)) { _cancellationToken = cancellationToken; _receiptFinder = receiptFinder ?? throw new ArgumentNullException(nameof(receiptFinder)); _tracer = tracer ?? throw new ArgumentNullException(nameof(tracer)); _blockFinder = blockFinder ?? throw new ArgumentNullException(nameof(blockFinder)); }
public void Setup() { IBlockFinder blockFinder = Substitute.For <IBlockFinder>(); BlockCacheService blockCacheService = new(); _tracker = new(NoPoS.Instance, blockFinder, blockCacheService, new TestLogManager()); }
public BlockchainBridge( IStateReader stateReader, IStateProvider stateProvider, IStorageProvider storageProvider, IBlockTree blockTree, ITxPool txPool, IReceiptStorage receiptStorage, IFilterStore filterStore, IFilterManager filterManager, IWallet wallet, ITransactionProcessor transactionProcessor, IEthereumEcdsa ecdsa) { _stateReader = stateReader ?? throw new ArgumentNullException(nameof(stateReader)); _stateProvider = stateProvider ?? throw new ArgumentNullException(nameof(stateProvider)); _storageProvider = storageProvider ?? throw new ArgumentNullException(nameof(storageProvider)); _blockTree = blockTree ?? throw new ArgumentNullException(nameof(blockTree)); _txPool = txPool ?? throw new ArgumentNullException(nameof(_txPool)); _receiptStorage = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage)); _filterStore = filterStore ?? throw new ArgumentException(nameof(filterStore)); _filterManager = filterManager ?? throw new ArgumentException(nameof(filterManager)); _wallet = wallet ?? throw new ArgumentException(nameof(wallet)); _transactionProcessor = transactionProcessor ?? throw new ArgumentException(nameof(transactionProcessor)); _ecdsa = ecdsa ?? throw new ArgumentNullException(nameof(ecdsa)); _blockFinder = new BlockFinder(_blockTree); _logFinder = new LogFinder(_blockFinder, _receiptStorage); }
public EthRpcModule( IJsonRpcConfig rpcConfig, IBlockchainBridge blockchainBridge, IBlockFinder blockFinder, IStateReader stateReader, ITxPool txPool, ITxSender txSender, IWallet wallet, IReceiptFinder receiptFinder, ILogManager logManager, ISpecProvider specProvider, IGasPriceOracle gasPriceOracle, IEthSyncingInfo ethSyncingInfo, IFeeHistoryOracle feeHistoryOracle) { _logger = logManager.GetClassLogger(); _rpcConfig = rpcConfig ?? throw new ArgumentNullException(nameof(rpcConfig)); _blockchainBridge = blockchainBridge ?? throw new ArgumentNullException(nameof(blockchainBridge)); _blockFinder = blockFinder ?? throw new ArgumentNullException(nameof(blockFinder)); _stateReader = stateReader ?? throw new ArgumentNullException(nameof(stateReader)); _txPoolBridge = txPool ?? throw new ArgumentNullException(nameof(txPool)); _txSender = txSender ?? throw new ArgumentNullException(nameof(txSender)); _wallet = wallet ?? throw new ArgumentNullException(nameof(wallet)); _receiptFinder = receiptFinder ?? throw new ArgumentNullException(nameof(receiptFinder));; _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); _gasPriceOracle = gasPriceOracle ?? throw new ArgumentNullException(nameof(gasPriceOracle)); _ethSyncingInfo = ethSyncingInfo ?? throw new ArgumentNullException(nameof(ethSyncingInfo)); _feeHistoryOracle = feeHistoryOracle ?? throw new ArgumentNullException(nameof(feeHistoryOracle)); }
public ParityModule(IEcdsa ecdsa, ITxPool txPool, IBlockTree blockTree, IReceiptStorage receiptStorage, ILogManager logManager) { _ecdsa = ecdsa ?? throw new ArgumentNullException(nameof(ecdsa)); _txPool = txPool ?? throw new ArgumentNullException(nameof(txPool)); _blockFinder = new BlockFinder(blockTree ?? throw new ArgumentNullException(nameof(blockTree))); _receiptStorage = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage)); }
public BaselineModule( ITxSender txSender, IStateReader stateReader, ILogFinder logFinder, IBlockFinder blockFinder, IAbiEncoder abiEncoder, IFileSystem fileSystem, IDb baselineDb, IDb metadataBaselineDb, ILogManager logManager, IBlockProcessor blockProcessor, DisposableStack disposableStack) { _abiEncoder = abiEncoder ?? throw new ArgumentNullException(nameof(abiEncoder)); _fileSystem = fileSystem ?? throw new ArgumentNullException(nameof(fileSystem)); _baselineDb = baselineDb ?? throw new ArgumentNullException(nameof(baselineDb)); _metadataBaselineDb = metadataBaselineDb ?? throw new ArgumentNullException(nameof(metadataBaselineDb)); _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); _txSender = txSender ?? throw new ArgumentNullException(nameof(txSender)); _stateReader = stateReader ?? throw new ArgumentNullException(nameof(stateReader)); _logFinder = logFinder ?? throw new ArgumentNullException(nameof(logFinder)); _blockFinder = blockFinder ?? throw new ArgumentNullException(nameof(blockFinder)); _blockProcessor = blockProcessor ?? throw new ArgumentNullException(nameof(blockProcessor)); _baselineTreeHelper = new BaselineTreeHelper(_logFinder, baselineDb, metadataBaselineDb, _logger); _disposableStack = disposableStack ?? throw new ArgumentNullException(nameof(disposableStack)); _metadata = LoadMetadata(); InitTrees(); }
public void Can_ask_for_block_signer_when_hash_is_null() { ISnapshotManager snapshotManager = Substitute.For <ISnapshotManager>(); IBlockFinder blockFinder = Substitute.For <IBlockFinder>(); CliqueRpcModule rpcModule = new(Substitute.For <ICliqueBlockProducer>(), snapshotManager, blockFinder); rpcModule.clique_getBlockSigner(null).Result.ResultType.Should().Be(ResultType.Failure); }
public TraceModule(IReceiptFinder receiptFinder, ITracer tracer, IBlockFinder blockFinder, IJsonRpcConfig jsonRpcConfig) { _receiptFinder = receiptFinder ?? throw new ArgumentNullException(nameof(receiptFinder)); _tracer = tracer ?? throw new ArgumentNullException(nameof(tracer)); _blockFinder = blockFinder ?? throw new ArgumentNullException(nameof(blockFinder)); _jsonRpcConfig = jsonRpcConfig ?? throw new ArgumentNullException(nameof(jsonRpcConfig)); _cancellationTokenTimeout = TimeSpan.FromMilliseconds(_jsonRpcConfig.TracerTimeout); }
public LogFinder(IBlockFinder blockFinder, IReceiptStorage receiptStorage, IBloomStorage bloomStorage, IReceiptsRecovery receiptsRecovery, int maxBlockDepth = 1000) { _blockFinder = blockFinder ?? throw new ArgumentNullException(nameof(blockFinder)); _receiptStorage = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage)); _bloomStorage = bloomStorage ?? throw new ArgumentNullException(nameof(bloomStorage)); _receiptsRecovery = receiptsRecovery ?? throw new ArgumentNullException(nameof(receiptsRecovery)); _maxBlockDepth = maxBlockDepth; }
public void Setup() { _block = Build.A.Block .WithUncles(Build.A.BlockHeader.TestObject, Build.A.BlockHeader.TestObject).TestObject; _blockFinder = Substitute.For <IBlockTree>(); _witnessRepository = new WitnessCollector(new MemDb(), LimboLogs.Instance); _witnessRpcModule = new WitnessRpcModule(_witnessRepository, _blockFinder); }
/// <summary> /// This class should smoothly react to new blocks and logs /// For now it will be very non-optimized just to deliver the basic functionality /// </summary> /// <param name="address"></param> /// <param name="baselineTree"></param> /// <param name="logFinder"></param> /// <param name="blockFinder"></param> public BaselineTreeTracker(Address address, BaselineTree baselineTree, ILogFinder logFinder, IBlockFinder blockFinder) { _address = address ?? throw new ArgumentNullException(nameof(address)); _baselineTree = baselineTree ?? throw new ArgumentNullException(nameof(baselineTree)); _logFinder = logFinder ?? throw new ArgumentNullException(nameof(logFinder)); _blockFinder = blockFinder ?? throw new ArgumentNullException(nameof(blockFinder)); _timer = InitTimer(); }
public LogFinder(IBlockFinder blockFinder, IReceiptFinder receiptFinder, IBloomStorage bloomStorage, ILogManager logManager, IReceiptsRecovery receiptsRecovery, int maxBlockDepth = 1000) { _blockFinder = blockFinder ?? throw new ArgumentNullException(nameof(blockFinder)); _receiptFinder = receiptFinder ?? throw new ArgumentNullException(nameof(receiptFinder)); _bloomStorage = bloomStorage ?? throw new ArgumentNullException(nameof(bloomStorage)); _receiptsRecovery = receiptsRecovery ?? throw new ArgumentNullException(nameof(receiptsRecovery));; _logger = logManager?.GetClassLogger <LogFinder>() ?? throw new ArgumentNullException(nameof(logManager)); _maxBlockDepth = maxBlockDepth; }
public void Setup() { _blockchainBridge = Substitute.For <IBlockchainBridge>(); _txPool = Substitute.For <ITxPool>(); _blockFinder = Substitute.For <IBlockFinder>(); _stateReader = Substitute.For <IStateReader>(); _txSender = Substitute.For <ITxSender>(); _ndmBridge = new NdmBlockchainBridge(_blockchainBridge, _blockFinder, _stateReader, _txSender); }
public void Can_ask_for_block_signer_when_block_is_unknown() { ISnapshotManager snapshotManager = Substitute.For <ISnapshotManager>(); IBlockFinder blockFinder = Substitute.For <IBlockFinder>(); blockFinder.FindHeader(Arg.Any <Keccak>()).Returns((BlockHeader)null); CliqueRpcModule rpcModule = new(Substitute.For <ICliqueBlockProducer>(), snapshotManager, blockFinder); rpcModule.clique_getBlockSigner(Keccak.Zero).Result.ResultType.Should().Be(ResultType.Failure); }
public static Block?FindParent(this IBlockFinder finder, BlockHeader blockHeader, BlockTreeLookupOptions options) { if (blockHeader.ParentHash is null) { throw new InvalidOperationException( $"Cannot find parent when parent hash is null on block with hash {blockHeader.Hash}."); } return(finder.FindBlock(blockHeader.ParentHash, options)); }
public NdmBlockchainBridge( IBlockchainBridge blockchainBridge, IBlockFinder blockTree, IStateReader stateReader, ITxSender txSender) { _blockchainBridge = blockchainBridge ?? throw new ArgumentNullException(nameof(blockchainBridge)); _txSender = txSender ?? throw new ArgumentNullException(nameof(txSender)); _blockTree = blockTree ?? throw new ArgumentNullException(nameof(blockTree)); _stateReader = stateReader ?? throw new ArgumentNullException(nameof(stateReader)); }
public void GasPriceEstimate_IfPreviousGasPriceDoesNotExist_ShouldBeEmptyPrice(ulong?gasPrice) { IBlockFinder blockFinder = Substitute.For <IBlockFinder>(); ISpecProvider specProvider = Substitute.For <ISpecProvider>(); GasPriceOracle testGasPriceOracle = new(blockFinder, specProvider, gasPrice); UInt256 estimate = testGasPriceOracle.GetGasPriceEstimate(); UInt256 expectedGasPrice = 110 * (gasPrice ?? 1.GWei()) / 100; estimate.Should().BeEquivalentTo(expectedGasPrice); }
public void IsSyncing_ReturnsExpectedResult(long bestHeader, long currentHead, bool expectedResult) { IBlockFinder blockFinder = Substitute.For <IBlockFinder>(); blockFinder.FindBestSuggestedHeader().Returns(Build.A.BlockHeader.WithNumber(bestHeader).TestObject); blockFinder.Head.Returns(Build.A.Block.WithHeader(Build.A.BlockHeader.WithNumber(currentHead).TestObject).TestObject); EthSyncingInfo ethSyncingInfo = new(blockFinder); SyncingResult syncingResult = ethSyncingInfo.GetFullInfo(); Assert.AreEqual(expectedResult, syncingResult.IsSyncing); }
public void Setup() { _logManager = LimboLogs.Instance; _specProvider = RopstenSpecProvider.Instance; _ethereumEcdsa = new EthereumEcdsa(_specProvider.ChainId, _logManager); _noTxStorage = NullTxStorage.Instance; _inMemoryTxStorage = new InMemoryTxStorage(); _persistentTxStorage = new PersistentTxStorage(new MemDb()); _stateProvider = new StateProvider(new TrieStore(new MemDb(), _logManager), new MemDb(), _logManager); _blockFinder = Substitute.For <IBlockFinder>(); _blockFinder.FindBestSuggestedHeader().Returns(Build.A.BlockHeader.WithNumber(10000000).TestObject); }
public void GetFeeHistory_IfRewardPercentilesContainInvalidNumber_ResultsInFailure(double[] rewardPercentiles) { int blockCount = 10; IBlockFinder blockFinder = Substitute.For <IBlockFinder>(); blockFinder.FindBlock(BlockParameter.Latest).Returns(Build.A.Block.TestObject); FeeHistoryOracle feeHistoryOracle = GetSubstitutedFeeHistoryOracle(blockFinder: blockFinder); ResultWrapper <FeeHistoryResults> resultWrapper = feeHistoryOracle.GetFeeHistory(blockCount, BlockParameter.Latest, rewardPercentiles); resultWrapper.Result.Error.Should().Be("rewardPercentiles: Some values are below 0 or greater than 100."); resultWrapper.Result.ResultType.Should().Be(ResultType.Failure); }
public void Can_ask_for_block_signer() { ISnapshotManager snapshotManager = Substitute.For <ISnapshotManager>(); IBlockFinder blockFinder = Substitute.For <IBlockFinder>(); BlockHeader header = Build.A.BlockHeader.TestObject; blockFinder.FindHeader(Arg.Any <Keccak>()).Returns(header); snapshotManager.GetBlockSealer(header).Returns(TestItem.AddressA); CliqueRpcModule rpcModule = new(Substitute.For <ICliqueBlockProducer>(), snapshotManager, blockFinder); rpcModule.clique_getBlockSigner(Keccak.Zero).Result.ResultType.Should().Be(ResultType.Success); rpcModule.clique_getBlockSigner(Keccak.Zero).Data.Should().Be(TestItem.AddressA); }
public ProofModule( ITracer tracer, IBlockFinder blockFinder, IReceiptFinder receiptFinder, ISpecProvider specProvider, ILogManager logManager) { _tracer = tracer ?? throw new ArgumentNullException(nameof(tracer)); _blockFinder = blockFinder ?? throw new ArgumentNullException(nameof(blockFinder)); _receiptFinder = receiptFinder ?? throw new ArgumentNullException(nameof(receiptFinder)); _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); }
public void GasPriceEstimate_IfPreviousGasPriceExists_ShouldEqualLastGasPrice(int lastGasPrice) { IBlockFinder blockFinder = Substitute.For <IBlockFinder>(); ISpecProvider specProvider = Substitute.For <ISpecProvider>(); GasPriceOracle testGasPriceOracle = new(blockFinder, specProvider) { _gasPriceEstimation = new(null, (UInt256)lastGasPrice) }; UInt256 estimate = testGasPriceOracle.GetGasPriceEstimate(); estimate.Should().BeEquivalentTo((UInt256?)lastGasPrice); }
public void GetGasPricesFromRecentBlocks_IfBlockHasMoreThanThreeValidTxs_OnlyAddTxsWithLowestGasPrices() { Block testBlock = Build.A.Block.WithTransactions(GetFiveTransactionsWithDifferentGasPrices()).TestObject; IBlockFinder blockFinder = Substitute.For <IBlockFinder>(); blockFinder.FindBlock(0).Returns(testBlock); GasPriceOracle testGasPriceOracle = new(blockFinder, Substitute.For <ISpecProvider>()); List <UInt256> expected = new() { 2, 3, 4 }; IEnumerable <UInt256> results = testGasPriceOracle.GetSortedGasPricesFromRecentBlocks(0); results.Should().BeEquivalentTo(expected); }
public void GasPriceEstimate_NoChangeInHeadBlock_ReturnsPreviousGasPrice() { IBlockFinder blockFinder = Substitute.For <IBlockFinder>(); ISpecProvider specProvider = Substitute.For <ISpecProvider>(); Block testHeadBlock = Build.A.Block.Genesis.TestObject; GasPriceOracle testGasPriceOracle = new(blockFinder, specProvider) { _gasPriceEstimation = new(testHeadBlock.Hash, 7) }; UInt256 result = testGasPriceOracle.GetGasPriceEstimate(); result.Should().Be((UInt256)7); }