Пример #1
0
 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);
 }
Пример #2
0
 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();
 }
Пример #4
0
    public void Setup()
    {
        RopstenSpecProvider specProvider  = RopstenSpecProvider.Instance;
        EthereumEcdsa       ethereumEcdsa = new(specProvider.ChainId, LimboLogs.Instance);

        _receiptsRecovery = new ReceiptsRecovery(ethereumEcdsa, specProvider);
    }
Пример #5
0
 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;
 }
Пример #6
0
 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;
 }
Пример #7
0
        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);
        }
Пример #8
0
        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);
        }
Пример #9
0
 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);
 }
Пример #10
0
        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);
                }
            }
        }
Пример #11
0
        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;
        }
Пример #12
0
        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));
 }
Пример #14
0
 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));
 }