public BlockchainBridge( IStateReader stateReader, IStateProvider stateProvider, IStorageProvider storageProvider, IBlockTree blockTree, ITxPool txPool, IReceiptStorage receiptStorage, IFilterStore filterStore, IFilterManager filterManager, IWallet wallet, ITransactionProcessor transactionProcessor, IEthereumEcdsa ecdsa, IBloomStorage bloomStorage, IReceiptsRecovery receiptsRecovery, int findLogBlockDepthLimit = 1000) { _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)); _logFinder = new LogFinder(_blockTree, _receiptStorage, bloomStorage, receiptsRecovery, findLogBlockDepthLimit); }
public void SetUp() { _stateReader = Substitute.For <IStateReader>(); _stateProvider = Substitute.For <IStateProvider>(); _storageProvider = Substitute.For <IStorageProvider>(); _blockTree = Substitute.For <IBlockTree>(); _txPool = Substitute.For <ITxPool>(); _receiptStorage = Substitute.For <IReceiptStorage>(); _filterStore = Substitute.For <IFilterStore>(); _filterManager = Substitute.For <IFilterManager>(); _wallet = Substitute.For <IWallet>(); _transactionProcessor = Substitute.For <ITransactionProcessor>(); _ethereumEcdsa = Substitute.For <IEthereumEcdsa>(); _bloomStorage = Substitute.For <IBloomStorage>(); _receiptsRecovery = Substitute.For <IReceiptsRecovery>(); _blockchainBridge = new BlockchainBridge( _stateReader, _stateProvider, _storageProvider, _blockTree, _txPool, _receiptStorage, _filterStore, _filterManager, _wallet, _transactionProcessor, _ethereumEcdsa, _bloomStorage, _receiptsRecovery); }
public MergeBlockDownloader( IPoSSwitcher posSwitcher, IBeaconPivot beaconPivot, ISyncFeed <BlocksRequest?>?feed, ISyncPeerPool?syncPeerPool, IBlockTree?blockTree, IBlockValidator?blockValidator, ISealValidator?sealValidator, ISyncReport?syncReport, IReceiptStorage?receiptStorage, ISpecProvider specProvider, IBetterPeerStrategy betterPeerStrategy, IChainLevelHelper chainLevelHelper, ISyncProgressResolver syncProgressResolver, ILogManager logManager) : base(feed, syncPeerPool, blockTree, blockValidator, sealValidator, syncReport, receiptStorage, specProvider, new MergeBlocksSyncPeerAllocationStrategyFactory(posSwitcher, beaconPivot, logManager), betterPeerStrategy, logManager) { _blockTree = blockTree ?? throw new ArgumentNullException(nameof(blockTree)); _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); _chainLevelHelper = chainLevelHelper ?? throw new ArgumentNullException(nameof(chainLevelHelper)); _poSSwitcher = posSwitcher ?? throw new ArgumentNullException(nameof(posSwitcher)); _blockValidator = blockValidator ?? throw new ArgumentNullException(nameof(blockValidator)); _syncReport = syncReport ?? throw new ArgumentNullException(nameof(syncReport)); _receiptStorage = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage)); _beaconPivot = beaconPivot; _receiptsRecovery = new ReceiptsRecovery(new EthereumEcdsa(specProvider.ChainId, logManager), specProvider); _syncProgressResolver = syncProgressResolver ?? throw new ArgumentNullException(nameof(syncProgressResolver)); _logger = logManager.GetClassLogger(); }
public void Setup() { RopstenSpecProvider specProvider = RopstenSpecProvider.Instance; EthereumEcdsa ethereumEcdsa = new(specProvider.ChainId, LimboLogs.Instance); _receiptsRecovery = new ReceiptsRecovery(ethereumEcdsa, specProvider); }
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 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; }
private void SetUp(bool allowReceiptIterator) { var specProvider = Substitute.For <ISpecProvider>(); specProvider.GetSpec(Arg.Any <long>()).IsEip155Enabled.Returns(true); _receiptStorage = new InMemoryReceiptStorage(allowReceiptIterator); _blockTree = Build.A.BlockTree().WithTransactions(_receiptStorage, specProvider, LogsForBlockBuilder).OfChainLength(5).TestObject; _bloomStorage = new BloomStorage(new BloomConfig(), new MemDb(), new InMemoryDictionaryFileStoreFactory()); _receiptsRecovery = Substitute.For <IReceiptsRecovery>(); _logFinder = new LogFinder(_blockTree, _receiptStorage, _bloomStorage, LimboLogs.Instance, _receiptsRecovery); }
public PersistentReceiptStorage(IColumnsDb <ReceiptsColumns> receiptsDb, ISpecProvider specProvider, IReceiptsRecovery receiptsRecovery) { long Get(Keccak key, long defaultValue) => _database.Get(key)?.ToLongFromBigEndianByteArrayWithoutLeadingZeros() ?? defaultValue; _database = receiptsDb ?? throw new ArgumentNullException(nameof(receiptsDb)); _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); _receiptsRecovery = receiptsRecovery ?? throw new ArgumentNullException(nameof(receiptsRecovery)); _blocksDb = _database.GetColumnDb(ReceiptsColumns.Blocks); _transactionDb = _database.GetColumnDb(ReceiptsColumns.Transactions); byte[] lowestBytes = _database.Get(Keccak.Zero); _lowestInsertedReceiptBlock = lowestBytes == null ? (long?)null : new RlpStream(lowestBytes).DecodeLong(); _migratedBlockNumber = Get(MigrationBlockNumberKey, long.MaxValue); }
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; _rpcConfigGetLogsThreads = Math.Max(1, Environment.ProcessorCount / 4); }
public BlockDownloadContext(ISpecProvider specProvider, PeerInfo syncPeer, BlockHeader?[] headers, bool downloadReceipts, IReceiptsRecovery receiptsRecovery) { _indexMapping = new Dictionary <int, int>(); _downloadReceipts = downloadReceipts; _receiptsRecovery = receiptsRecovery; _specProvider = specProvider; _syncPeer = syncPeer; Blocks = new Block[headers.Length - 1]; NonEmptyBlockHashes = new List <Keccak>(); if (_downloadReceipts) { ReceiptsForBlocks = new TxReceipt[Blocks.Length][]; // do that only if downloading receipts } int currentBodyIndex = 0; for (int i = 1; i < headers.Length; i++) { BlockHeader?header = headers[i]; if (header?.Hash == null) { break; } if (header.HasBody) { Blocks[i - 1] = new Block(header); _indexMapping.Add(currentBodyIndex, i - 1); currentBodyIndex++; NonEmptyBlockHashes.Add(header.Hash); } else { Blocks[i - 1] = new Block(header, BlockBody.Empty); } } }
public BlockDownloader( ISyncFeed <BlocksRequest?>?feed, ISyncPeerPool?syncPeerPool, IBlockTree?blockTree, IBlockValidator?blockValidator, ISealValidator?sealValidator, ISyncReport?syncReport, IReceiptStorage?receiptStorage, ISpecProvider?specProvider, ILogManager?logManager) : base(feed, syncPeerPool, new BlocksSyncPeerAllocationStrategyFactory(), logManager) { _blockTree = blockTree ?? throw new ArgumentNullException(nameof(blockTree)); _blockValidator = blockValidator ?? throw new ArgumentNullException(nameof(blockValidator)); _sealValidator = sealValidator ?? throw new ArgumentNullException(nameof(sealValidator)); _syncReport = syncReport ?? throw new ArgumentNullException(nameof(syncReport)); _receiptStorage = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage)); _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider)); _logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager)); _receiptsRecovery = new ReceiptsRecovery(new EthereumEcdsa(_specProvider.ChainId, logManager), _specProvider); _syncBatchSize = new SyncBatchSize(logManager); _blockTree.NewHeadBlock += BlockTreeOnNewHeadBlock; }
public static TxReceipt[] FindForBlock(this IReceiptStorage receiptStorage, Block block, IReceiptsRecovery receiptsRecovery) { TxReceipt[] result = new TxReceipt[block.Body.Transactions.Length]; for (int i = 0; i < result.Length; i++) { result[i] = receiptStorage.Find(block.Body.Transactions[i].Hash); } receiptsRecovery.TryRecover(block, result); return(result); }
public FullInfoReceiptFinder(IReceiptStorage receiptStorage, IReceiptsRecovery receiptsRecovery, IBlockFinder blockFinder) { _receiptStorage = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage)); _receiptsRecovery = receiptsRecovery ?? throw new ArgumentNullException(nameof(receiptsRecovery)); _blockFinder = blockFinder ?? throw new ArgumentNullException(nameof(blockFinder)); }
public FullInfoReceiptFinder(IReceiptFinder innerFinder, IReceiptsRecovery receiptsRecovery, IBlockFinder blockFinder) { _innerFinder = innerFinder ?? throw new ArgumentNullException(nameof(innerFinder)); _receiptsRecovery = receiptsRecovery ?? throw new ArgumentNullException(nameof(receiptsRecovery)); _blockFinder = blockFinder ?? throw new ArgumentNullException(nameof(blockFinder)); }