コード例 #1
0
        public async Task can_return_tracked_list(uint trackedCount)
        {
            SingleReleaseSpecProvider spec    = new SingleReleaseSpecProvider(ConstantinopleFix.Instance, 1);
            TestRpcBlockchain         testRpc = await TestRpcBlockchain.ForTest(SealEngineType.NethDev).Build(spec);

            IStateReader   stateReader    = Substitute.For <IStateReader>();
            BaselineModule baselineModule = new BaselineModule(
                testRpc.TxSender,
                stateReader,
                testRpc.LogFinder,
                testRpc.BlockTree,
                _abiEncoder,
                _fileSystem,
                new MemDb(),
                LimboLogs.Instance);

            for (int i = 0; i < trackedCount; i++)
            {
                stateReader.GetCode(null, null).ReturnsForAnyArgs(new byte[] { 255 });
                await baselineModule.baseline_track(TestItem.Addresses[i]);
            }

            var result = (await baselineModule.baseline_getTracked());

            result.Data.Length.Should().Be((int)trackedCount);
        }
コード例 #2
0
ファイル: Web3EthApi.cs プロジェクト: jakubbober/Catalyst
        public Web3EthApi(IStateReader stateReader,
                          IDeltaResolver deltaResolver,
                          IDeltaCache deltaCache,
                          IDeltaExecutor executor,
                          IStorageProvider storageProvider,
                          IStateProvider stateProvider,
                          ITransactionRepository receipts,
                          ITransactionReceivedEvent transactionReceived,
                          IPeerRepository peerRepository,
                          IMempool <PublicEntryDao> mempoolRepository,
                          IDfsService dfsService,
                          IHashProvider hashProvider,
                          SyncState syncState,
                          IMapperProvider mapperProvider,
                          IPeerSettings peerSettings)
        {
            _receipts            = receipts;
            _transactionReceived = transactionReceived ?? throw new ArgumentNullException(nameof(transactionReceived));
            HashProvider         = hashProvider;
            _peerId            = peerSettings.PeerId;
            _mempoolRepository = mempoolRepository;
            PeerRepository     = peerRepository;
            _mapperProvider    = mapperProvider;

            StateReader     = stateReader ?? throw new ArgumentNullException(nameof(stateReader));
            DeltaResolver   = deltaResolver ?? throw new ArgumentNullException(nameof(deltaResolver));
            DeltaCache      = deltaCache ?? throw new ArgumentNullException(nameof(deltaCache));
            Executor        = executor ?? throw new ArgumentNullException(nameof(executor));
            StorageProvider = storageProvider ?? throw new ArgumentNullException(nameof(storageProvider));
            StateProvider   = stateProvider ?? throw new ArgumentNullException(nameof(stateProvider));
            DfsService      = dfsService;
            SyncState       = syncState;
        }
コード例 #3
0
 public EthModuleFactory(
     ITxPool txPool,
     ITxSender txSender,
     IWallet wallet,
     IBlockTree blockTree,
     IJsonRpcConfig config,
     ILogManager logManager,
     IStateReader stateReader,
     IBlockchainBridgeFactory blockchainBridgeFactory,
     ISpecProvider specProvider,
     IReceiptStorage receiptStorage,
     IGasPriceOracle gasPriceOracle,
     IEthSyncingInfo ethSyncingInfo)
 {
     _txPool                  = txPool ?? throw new ArgumentNullException(nameof(txPool));
     _txSender                = txSender ?? throw new ArgumentNullException(nameof(txSender));
     _wallet                  = wallet ?? throw new ArgumentNullException(nameof(wallet));
     _rpcConfig               = config ?? throw new ArgumentNullException(nameof(config));
     _logManager              = logManager ?? throw new ArgumentNullException(nameof(logManager));
     _stateReader             = stateReader ?? throw new ArgumentNullException(nameof(stateReader));
     _blockchainBridgeFactory = blockchainBridgeFactory ?? throw new ArgumentNullException(nameof(blockchainBridgeFactory));
     _specProvider            = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
     _ethSyncingInfo          = ethSyncingInfo ?? throw new ArgumentNullException(nameof(ethSyncingInfo));
     _receiptStorage          = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage));
     _gasPriceOracle          = gasPriceOracle ?? throw new ArgumentNullException(nameof(gasPriceOracle));
     _blockTree               = blockTree.AsReadOnly();
 }
コード例 #4
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);
 }
コード例 #5
0
 public Web3EthApi(IDeltaExecutor deltaExecutor, IStateReader stateReader, IStateRootResolver stateRootResolver, IDeltaResolver deltaResolver)
 {
     DeltaExecutor     = deltaExecutor ?? throw new ArgumentNullException(nameof(deltaExecutor));
     StateReader       = stateReader ?? throw new ArgumentNullException(nameof(stateReader));
     StateRootResolver = stateRootResolver ?? throw new ArgumentNullException(nameof(stateRootResolver));
     DeltaResolver     = deltaResolver ?? throw new ArgumentNullException(nameof(deltaResolver));
 }
コード例 #6
0
        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();
        }
コード例 #7
0
            /// <summary>
            /// Loads the queue from storage.
            /// </summary>
            /// <param name="reader">The reader to load the queue from.</param>
            protected override void LoadCore(IStateReader reader)
            {
                //
                // Deserialize metadata/head and metadata/tail as integers.
                //

                using (var headStream = reader.GetItemReader(MetadataCategory, HeadKey))
                {
                    _head = GetDeserializer <long>().Deserialize(headStream);
                }

                using (var tailStream = reader.GetItemReader(MetadataCategory, TailKey))
                {
                    _tail = GetDeserializer <long>().Deserialize(tailStream);
                }

                //
                // Prepare an array of eventual objects and fill with the elements obtained from the reader at items/i with indexes in range [head..tail).
                //
                // NB: Tail is an exclusive index.
                //

                var length = _tail - _head;

                _data = new EventualObject[length];

                for (var i = 0; i < length; i++)
                {
                    var key = GetKeyForIndex(_head + i);

                    using var itemStream = reader.GetItemReader(ItemsCategory, key);

                    _data[i] = EventualObject.FromState(itemStream);
                }
            }
コード例 #8
0
 public BlockchainBridge(ReadOnlyTxProcessingEnv processingEnv,
                         ITxPool?txPool,
                         IReceiptFinder?receiptStorage,
                         IFilterStore?filterStore,
                         IFilterManager?filterManager,
                         IEthereumEcdsa?ecdsa,
                         ITimestamper?timestamper,
                         ILogFinder?logFinder,
                         ISpecProvider specProvider,
                         bool isMining)
 {
     _processingEnv        = processingEnv ?? throw new ArgumentNullException(nameof(processingEnv));
     _stateReader          = processingEnv.StateReader ?? throw new ArgumentNullException(nameof(processingEnv.StateReader));
     _stateProvider        = processingEnv.StateProvider ?? throw new ArgumentNullException(nameof(processingEnv.StateProvider));
     _blockTree            = processingEnv.BlockTree ?? throw new ArgumentNullException(nameof(processingEnv.BlockTree));
     _transactionProcessor = processingEnv.TransactionProcessor ?? throw new ArgumentNullException(nameof(processingEnv.TransactionProcessor));
     _txPool        = txPool ?? throw new ArgumentNullException(nameof(_txPool));
     _receiptFinder = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage));
     _filterStore   = filterStore ?? throw new ArgumentNullException(nameof(filterStore));
     _filterManager = filterManager ?? throw new ArgumentNullException(nameof(filterManager));
     _ecdsa         = ecdsa ?? throw new ArgumentNullException(nameof(ecdsa));
     _timestamper   = timestamper ?? throw new ArgumentNullException(nameof(timestamper));
     _logFinder     = logFinder ?? throw new ArgumentNullException(nameof(logFinder));
     _specProvider  = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
     IsMining       = isMining;
 }
コード例 #9
0
 public BlockchainBridge(
     IStateReader stateReader,
     IStateProvider stateProvider,
     IStorageProvider storageProvider,
     IBlockTree blockTree,
     ITransactionPool transactionPool,
     ITransactionPoolInfoProvider transactionPoolInfoProvider,
     IReceiptStorage receiptStorage,
     IFilterStore filterStore,
     IFilterManager filterManager,
     IWallet wallet,
     ITransactionProcessor transactionProcessor)
 {
     _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));
     _transactionPool             = transactionPool ?? throw new ArgumentNullException(nameof(_transactionPool));
     _transactionPoolInfoProvider = transactionPoolInfoProvider ?? throw new ArgumentNullException(nameof(transactionPoolInfoProvider));
     _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));
 }
コード例 #10
0
 public TxPoolTxSource(ITxPool transactionPool, IStateReader stateReader, ILogManager logManager, long minGasPriceForMining = 0)
 {
     _transactionPool      = transactionPool ?? throw new ArgumentNullException(nameof(transactionPool));
     _stateReader          = stateReader ?? throw new ArgumentNullException(nameof(stateReader));
     _logger               = logManager?.GetClassLogger <TxPoolTxSource>() ?? throw new ArgumentNullException(nameof(logManager));
     _minGasPriceForMining = minGasPriceForMining;
 }
コード例 #11
0
 public void Setup()
 {
     _address      = Address.FromNumber(1);
     _stateReader  = Substitute.For <IStateReader>();
     _txPool       = Substitute.For <ITxPool>();
     _infoProvider = new TxPoolInfoProvider(_stateReader, _txPool);
 }
コード例 #12
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);
 }
コード例 #13
0
 public GeneratedTxSource(ITxSource innerSource, ITxSealer txSealer, IStateReader stateReader, ILogManager logManager)
 {
     _innerSource = innerSource ?? throw new ArgumentNullException(nameof(innerSource));
     _txSealer    = txSealer ?? throw new ArgumentNullException(nameof(txSealer));
     _stateReader = stateReader ?? throw new ArgumentNullException(nameof(stateReader));
     _logger      = logManager?.GetClassLogger <GeneratedTxSource>() ?? throw new ArgumentNullException(nameof(logManager));
 }
コード例 #14
0
 public BlockchainBridge(
     ReadOnlyTxProcessingEnv processingEnv,
     ITxPool txPool,
     IReceiptFinder receiptStorage,
     IFilterStore filterStore,
     IFilterManager filterManager,
     IEthereumEcdsa ecdsa,
     IBloomStorage bloomStorage,
     ITimestamper timestamper,
     ILogManager logManager,
     bool isMining,
     int findLogBlockDepthLimit          = 1000,
     CancellationToken cancellationToken = default(CancellationToken))
 {
     _processingEnv        = processingEnv ?? throw new ArgumentNullException(nameof(processingEnv));
     _stateReader          = processingEnv.StateReader ?? throw new ArgumentNullException(nameof(processingEnv.StateReader));
     _stateProvider        = processingEnv.StateProvider ?? throw new ArgumentNullException(nameof(processingEnv.StateProvider));
     _blockTree            = processingEnv.BlockTree ?? throw new ArgumentNullException(nameof(processingEnv.BlockTree));
     _transactionProcessor = processingEnv.TransactionProcessor ?? throw new ArgumentException(nameof(processingEnv.TransactionProcessor));
     _txPool        = txPool ?? throw new ArgumentNullException(nameof(_txPool));
     _receiptFinder = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage));
     _filterStore   = filterStore ?? throw new ArgumentException(nameof(filterStore));
     _filterManager = filterManager ?? throw new ArgumentException(nameof(filterManager));
     _ecdsa         = ecdsa ?? throw new ArgumentNullException(nameof(ecdsa));
     _timestamper   = timestamper ?? throw new ArgumentNullException(nameof(timestamper));
     IsMining       = isMining;
     _logFinder     = new LogFinder(_blockTree, _receiptFinder, bloomStorage, logManager, new ReceiptsRecovery(), findLogBlockDepthLimit);
 }
コード例 #15
0
        private static void GetStore(out IStateReader reader, out IStateWriter writer)
        {
            var store = new InMemoryStateStore(Guid.NewGuid().ToString());

            reader = new InMemoryStateReader(store);
            writer = new InMemoryStateWriter(store, CheckpointKind.Full);
        }
コード例 #16
0
ファイル: TxPoolTxSource.cs プロジェクト: rafal-mz/nethermind
 public TxPoolTxSource(ITxPool transactionPool, IStateReader stateReader, ILogManager logManager, ITxFilter txFilter = null)
 {
     _transactionPool = transactionPool ?? throw new ArgumentNullException(nameof(transactionPool));
     _stateReader     = stateReader ?? throw new ArgumentNullException(nameof(stateReader));
     _txFilter        = txFilter ?? new MinGasPriceTxFilter(UInt256.Zero);
     _logger          = logManager?.GetClassLogger <TxPoolTxSource>() ?? throw new ArgumentNullException(nameof(logManager));
 }
コード例 #17
0
            /// <summary>
            /// Loads the stack from storage.
            /// </summary>
            /// <param name="reader">The reader to load the stack from.</param>
            protected override void LoadCore(IStateReader reader)
            {
                //
                // Deserialize metadata/count as an integer.
                //

                using (var countStream = reader.GetItemReader(MetadataCategory, CountKey))
                {
                    _count = GetDeserializer <int>().Deserialize(countStream);
                }

                //
                // Prepare an array of eventual objects and fill with the elements obtained from the reader at items/i with indexes in range [0..count).
                //

                _data = new EventualObject[_count];

                for (var i = 0; i < _count; i++)
                {
                    var key = GetKeyForIndex(i);

                    using var itemStream = reader.GetItemReader(ItemsCategory, key);

                    _data[i] = EventualObject.FromState(itemStream);
                }
            }
コード例 #18
0
        public static bool HasStateForBlock(this IStateReader stateReader, BlockHeader header)
        {
            RootCheckVisitor rootCheckVisitor = new();

            stateReader.RunTreeVisitor(rootCheckVisitor, header.StateRoot);
            return(rootCheckVisitor.HasRoot);
        }
コード例 #19
0
        public async Task concurrent_track_requests_will_succeed()
        {
            Random random = new Random(42);

            SingleReleaseSpecProvider spec    = new SingleReleaseSpecProvider(ConstantinopleFix.Instance, 1);
            TestRpcBlockchain         testRpc = await TestRpcBlockchain.ForTest(SealEngineType.NethDev).Build(spec);

            IStateReader   stateReader    = Substitute.For <IStateReader>();
            BaselineModule baselineModule = CreateBaselineModule(testRpc, stateReader);

            int    iterationsPerTask = 1000;
            Action trackAction       = () =>
            {
                for (int i = 0; i < iterationsPerTask; i++)
                {
                    byte[] bytes = new byte[20];
                    random.NextBytes(bytes);
                    Address address = new Address(bytes);

                    stateReader.GetCode(Arg.Any <Keccak>(), address).Returns(new byte[] { 255 });
                    var result = baselineModule.baseline_track(address).Result; // safe to invoke Result here
                    result.Result.ResultType.Should().Be(ResultType.Success);
                }
            };

            Task task1 = new Task(trackAction);
            Task task2 = new Task(trackAction);
            Task task3 = new Task(trackAction);

            task1.Start();
            task2.Start();
            task3.Start();

            await Task.WhenAll(task1, task2, task3);
        }
コード例 #20
0
 public BoostBlockImprovementContextFactory(IManualBlockProductionTrigger blockProductionTrigger, TimeSpan timeout, IBoostRelay boostRelay, IStateReader stateReader)
 {
     _blockProductionTrigger = blockProductionTrigger;
     _timeout     = timeout;
     _boostRelay  = boostRelay;
     _stateReader = stateReader;
 }
コード例 #21
0
        public UserOperationSimulator(
            IUserOperationTxBuilder userOperationTxBuilder,
            IStateProvider stateProvider,
            IStateReader stateReader,
            AbiDefinition entryPointContractAbi,
            Address create2FactoryAddress,
            Address entryPointContractAddress,
            ISpecProvider specProvider,
            IBlockTree blockTree,
            IDbProvider dbProvider,
            IReadOnlyTrieStore trieStore,
            ITimestamper timestamper,
            ILogManager logManager)
        {
            _userOperationTxBuilder    = userOperationTxBuilder;
            _stateProvider             = stateProvider;
            _stateReader               = stateReader;
            _entryPointContractAbi     = entryPointContractAbi;
            _create2FactoryAddress     = create2FactoryAddress;
            _entryPointContractAddress = entryPointContractAddress;
            _specProvider              = specProvider;
            _blockTree   = blockTree;
            _dbProvider  = dbProvider.AsReadOnly(false);
            _trieStore   = trieStore;
            _timestamper = timestamper;
            _logManager  = logManager;

            _abiEncoder = new AbiEncoder();
        }
コード例 #22
0
 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));
 }
コード例 #23
0
 public GeneratedTxSourceApprover(ITxSource innerSource, IBasicWallet wallet, ITimestamper timestamper, IStateReader stateReader, int chainId)
 {
     _innerSource = innerSource ?? throw new ArgumentNullException(nameof(innerSource));
     _wallet      = wallet ?? throw new ArgumentNullException(nameof(wallet));
     _timestamper = timestamper ?? throw new ArgumentNullException(nameof(timestamper));
     _stateReader = stateReader ?? throw new ArgumentNullException(nameof(stateReader));
     _chainId     = chainId;
 }
コード例 #24
0
        /// <summary>
        /// Gets an item reader for the specified <paramref name="category"/> and <paramref name="key"/>.
        /// </summary>
        /// <param name="reader">The reader to obtain the item reader from.</param>
        /// <param name="category">The category of the item to get a reader for.</param>
        /// <param name="key">The key of the item to get a reader for.</param>
        /// <returns>A <see cref="Stream"/> that can be used to read the item.</returns>
        /// <exception cref="InvalidOperationException">An item with the specified <paramref name="category"/> and <paramref name="key"/> does not exist.</exception>
        public static Stream GetItemReader(this IStateReader reader, string category, string key)
        {
            if (!reader.TryGetItemReader(category, key, out var stream))
            {
                throw new InvalidOperationException(FormattableString.Invariant($"Failed to load '{category}/{key}'."));
            }

            return(stream);
        }
コード例 #25
0
        /// <summary>
        /// Loads the persisted object space from the specified <paramref name="reader"/>.
        /// </summary>
        /// <param name="reader">The reader to load the persisted object space from.</param>
        /// <exception cref="ArgumentNullException"><paramref name="reader"/> is <c>null.</c></exception>
        public void Load(IStateReader reader)
        {
            if (reader == null)
            {
                throw new ArgumentNullException(nameof(reader));
            }

            _items.Load(reader);
        }
コード例 #26
0
            /// <summary>
            /// Creates a new item reader to load the persisted entity with the specified <paramref name="key"/> identifier.
            /// </summary>
            /// <param name="reader">The state reader obtained from the entity's persisted object space. State for the persisted entity will be read from a partition under the <see cref="OperatorStateItemCategoryPrefix"/>.</param>
            /// <param name="key">The identifier of the persisted entity to read.</param>
            public ItemReader(IStateReader reader, string key)
            {
                //
                // REVIEW: We don't impose any limits on key (length, characters, etc.). Can we assume the IStateWriter has to deal with this, or should we have our own mapping somewhere (hashing, use of a dictionary, etc.)?
                //

                _reader = reader;
                _prefix = OperatorStateItemCategoryPrefix + key + "/";
            }
コード例 #27
0
        /// <summary>
        /// Recovers the state of the system from a store.
        /// </summary>
        /// <param name="this">System whose state will be loaded.</param>
        /// <param name="reader">Reader to load state from.</param>
        /// <param name="token">Cancellation token to observe cancellation requests.</param>
        /// <returns>Task to observe the eventual completion of the operation.</returns>
        public static Task RecoverAsync(this ICheckpointable @this, IStateReader reader, CancellationToken token)
        {
            if (@this == null)
            {
                throw new ArgumentNullException(nameof(@this));
            }

            return(@this.RecoverAsync(reader, token, progress: null));
        }
コード例 #28
0
 public TxPoolTxSource(ITxPool?transactionPool, IStateReader?stateReader, ISpecProvider?specProvider, ITransactionComparerProvider transactionComparerProvider, ILogManager?logManager, ITxFilterPipeline?txFilterPipeline)
 {
     _transactionPool             = transactionPool ?? throw new ArgumentNullException(nameof(transactionPool));
     _stateReader                 = stateReader ?? throw new ArgumentNullException(nameof(stateReader));
     _transactionComparerProvider = transactionComparerProvider ?? throw new ArgumentNullException(nameof(transactionComparerProvider));
     _txFilterPipeline            = txFilterPipeline ?? throw new ArgumentNullException(nameof(txFilterPipeline));
     _specProvider                = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
     _logger = logManager?.GetClassLogger <TxPoolTxSource>() ?? throw new ArgumentNullException(nameof(logManager));
 }
コード例 #29
0
            /// <summary>
            /// Loads the value from storage.
            /// </summary>
            /// <param name="reader">The reader to load the value from.</param>
            protected override void LoadCore(IStateReader reader)
            {
                //
                // Create an eventual object for data/value which gets deserialized upon first use by Restore<T>.
                //

                using var stream = reader.GetItemReader(DataCategory, ValueKey);

                _data = EventualObject.FromState(stream);
            }
コード例 #30
0
        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);
        }