예제 #1
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="ecdsa">Needed to recover an address from a signature.</param>
 /// <param name="txPool">Finding transactions in mempool can speed up address recovery.</param>
 /// <param name="specProvider">Spec Provider</param>
 /// <param name="logManager">Logging</param>
 public RecoverSignatures(IEthereumEcdsa?ecdsa, ITxPool?txPool, ISpecProvider?specProvider, ILogManager?logManager)
 {
     _ecdsa        = ecdsa ?? throw new ArgumentNullException(nameof(ecdsa));
     _txPool       = txPool ?? throw new ArgumentNullException(nameof(ecdsa));
     _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
     _logger       = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
 }
예제 #2
0
        public BlockProcessor(
            ISpecProvider?specProvider,
            IBlockValidator?blockValidator,
            IRewardCalculator?rewardCalculator,
            ITransactionProcessor?transactionProcessor,
            IStateProvider?stateProvider,
            IStorageProvider?storageProvider,
            ITxPool?txPool,
            IReceiptStorage?receiptStorage,
            IWitnessCollector?witnessCollector,
            ILogManager?logManager)
        {
            _logger               = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
            _specProvider         = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
            _blockValidator       = blockValidator ?? throw new ArgumentNullException(nameof(blockValidator));
            _stateProvider        = stateProvider ?? throw new ArgumentNullException(nameof(stateProvider));
            _storageProvider      = storageProvider ?? throw new ArgumentNullException(nameof(storageProvider));
            _txPool               = txPool ?? throw new ArgumentNullException(nameof(txPool));
            _receiptStorage       = receiptStorage ?? throw new ArgumentNullException(nameof(receiptStorage));
            _witnessCollector     = witnessCollector ?? throw new ArgumentNullException(nameof(witnessCollector));
            _rewardCalculator     = rewardCalculator ?? throw new ArgumentNullException(nameof(rewardCalculator));
            _transactionProcessor = transactionProcessor ?? throw new ArgumentNullException(nameof(transactionProcessor));

            _receiptsTracer = new BlockReceiptsTracer();
        }
        public ReadOnlyTxProcessingEnv(
            IReadOnlyDbProvider?readOnlyDbProvider,
            IReadOnlyTrieStore?readOnlyTrieStore,
            IReadOnlyBlockTree?readOnlyBlockTree,
            ISpecProvider?specProvider,
            ILogManager?logManager)
        {
            if (specProvider == null)
            {
                throw new ArgumentNullException(nameof(specProvider));
            }

            DbProvider = readOnlyDbProvider ?? throw new ArgumentNullException(nameof(readOnlyDbProvider));
            _codeDb    = readOnlyDbProvider.CodeDb.AsReadOnly(true);

            StateReader     = new StateReader(readOnlyTrieStore, _codeDb, logManager);
            StateProvider   = new StateProvider(readOnlyTrieStore, _codeDb, logManager);
            StorageProvider = new StorageProvider(readOnlyTrieStore, StateProvider, logManager);
            IWorldState worldState = new WorldState(StateProvider, StorageProvider);

            BlockTree         = readOnlyBlockTree ?? throw new ArgumentNullException(nameof(readOnlyBlockTree));
            BlockhashProvider = new BlockhashProvider(BlockTree, logManager);

            Machine = new VirtualMachine(BlockhashProvider, specProvider, logManager);
            TransactionProcessor = new TransactionProcessor(specProvider, worldState, Machine, logManager);
        }
예제 #4
0
        public CliqueBlockProducer(
            ITxSource txSource,
            IBlockchainProcessor blockchainProcessor,
            IStateProvider stateProvider,
            IBlockTree blockTree,
            ITimestamper timestamper,
            ICryptoRandom cryptoRandom,
            ISnapshotManager snapshotManager,
            ISealer cliqueSealer,
            IGasLimitCalculator gasLimitCalculator,
            ISpecProvider?specProvider,
            ICliqueConfig config,
            ILogManager logManager)
        {
            _logger             = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
            _txSource           = txSource ?? throw new ArgumentNullException(nameof(txSource));
            _processor          = blockchainProcessor ?? throw new ArgumentNullException(nameof(blockchainProcessor));
            _blockTree          = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
            _stateProvider      = stateProvider ?? throw new ArgumentNullException(nameof(stateProvider));
            _timestamper        = timestamper ?? throw new ArgumentNullException(nameof(timestamper));
            _cryptoRandom       = cryptoRandom ?? throw new ArgumentNullException(nameof(cryptoRandom));
            _sealer             = cliqueSealer ?? throw new ArgumentNullException(nameof(cliqueSealer));
            _gasLimitCalculator = gasLimitCalculator ?? throw new ArgumentNullException(nameof(gasLimitCalculator));
            _specProvider       = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
            _snapshotManager    = snapshotManager ?? throw new ArgumentNullException(nameof(snapshotManager));
            _config             = config ?? throw new ArgumentNullException(nameof(config));
            _wiggle             = new WiggleRandomizer(_cryptoRandom, _snapshotManager);

            _timer.AutoReset = false;
            _timer.Elapsed  += TimerOnElapsed;
            _timer.Interval  = 100;
            _timer.Start();
        }
예제 #5
0
 public BlockTreeBuilder WithTransactions(IReceiptStorage receiptStorage, ISpecProvider specProvider, Func <Block, Transaction, IEnumerable <LogEntry> >?logsForBlockBuilder = null)
 {
     _specProvider        = specProvider;
     _ecdsa               = new EthereumEcdsa(specProvider.ChainId, LimboLogs.Instance);
     _receiptStorage      = receiptStorage;
     _logCreationFunction = logsForBlockBuilder;
     return(this);
 }
            protected override async Task <TestBlockchain> Build(ISpecProvider?specProvider = null, UInt256?initialValues = null)
            {
                TestBlockchain chain = await base.Build(specProvider, initialValues);

                await chain.BlockchainProcessor.StopAsync(true);

                return(chain);
            }
예제 #7
0
 public OnChainTxWatcher(IBlockTree blockTree, ITxPool txPool, ISpecProvider?specProvider, ILogManager logManager)
 {
     _blockTree    = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
     _txPool       = txPool ?? throw new ArgumentNullException(nameof(txPool));
     _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider));;
     _logger       = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
     _blockTree.BlockAddedToMain += OnBlockAddedToMain;
 }
예제 #8
0
            protected override async Task <TestBlockchain> Build(ISpecProvider?specProvider = null, UInt256?initialValues = null)
            {
                TestBlockchain chain = await base.Build(specProvider, initialValues);

                AccountAbstractionRpcModule = new AccountAbstractionRpcModule(UserOperationPool, new [] { new Address(_accountAbstractionConfig.EntryPointContractAddress) });

                return(chain);
            }
예제 #9
0
 public HeaderValidator(IBlockTree?blockTree, ISealValidator?sealValidator, ISpecProvider?specProvider, ILogManager?logManager)
 {
     _logger         = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
     _blockTree      = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
     _sealValidator  = sealValidator ?? throw new ArgumentNullException(nameof(sealValidator));
     _specProvider   = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
     _daoBlockNumber = specProvider.DaoBlockNumber;
 }
 public TransactionProcessor(
     ISpecProvider?specProvider,
     IStateProvider?stateProvider,
     IStorageProvider?storageProvider,
     IVirtualMachine?virtualMachine,
     ILogManager?logManager)
     : this(specProvider, new WorldState(stateProvider, storageProvider), virtualMachine, logManager)
 {
 }
예제 #11
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));
 }
 public ReadOnlyTxProcessingEnv(
     IDbProvider?dbProvider,
     IReadOnlyTrieStore?trieStore,
     IBlockTree?blockTree,
     ISpecProvider?specProvider,
     ILogManager?logManager)
     : this(dbProvider?.AsReadOnly(false), trieStore, blockTree?.AsReadOnly(), specProvider, logManager)
 {
 }
예제 #13
0
 public ReadOnlyTxProcessingEnvFactory(
     IReadOnlyDbProvider?readOnlyDbProvider,
     IReadOnlyTrieStore?readOnlyTrieStore,
     IReadOnlyBlockTree?readOnlyBlockTree,
     ISpecProvider?specProvider,
     ILogManager?logManager)
 {
     _readOnlyDbProvider = readOnlyDbProvider;
     _readOnlyTrieStore  = readOnlyTrieStore;
     _readOnlyBlockTree  = readOnlyBlockTree;
     _specProvider       = specProvider;
     _logManager         = logManager;
 }
예제 #14
0
        public BlockTreeBuilder(Block genesisBlock, ISpecProvider?specProvider = null)
        {
            BlocksDb    = new MemDb();
            HeadersDb   = new MemDb();
            BlockInfoDb = new MemDb();
            MetadataDb  = new MemDb();

            // so we automatically include in all tests my questionable decision of storing Head block header at 00...
            BlocksDb.Set(Keccak.Zero, Rlp.Encode(Build.A.BlockHeader.TestObject).Bytes);
            _genesisBlock            = genesisBlock;
            ChainLevelInfoRepository = new ChainLevelInfoRepository(BlockInfoDb);
            TestObjectInternal       = new BlockTree(BlocksDb, HeadersDb, BlockInfoDb, ChainLevelInfoRepository, specProvider ?? MainnetSpecProvider.Instance, Substitute.For <IBloomStorage>(), LimboLogs.Instance);
        }
예제 #15
0
 public BlockValidator(
     ITxValidator?txValidator,
     IHeaderValidator?headerValidator,
     IUnclesValidator?unclesValidator,
     ISpecProvider?specProvider,
     ILogManager?logManager)
 {
     _logger          = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
     _txValidator     = txValidator ?? throw new ArgumentNullException(nameof(txValidator));
     _unclesValidator = unclesValidator ?? throw new ArgumentNullException(nameof(unclesValidator));
     _specProvider    = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
     _headerValidator = headerValidator ?? throw new ArgumentNullException(nameof(headerValidator));
 }
            protected override async Task <TestBlockchain> Build(ISpecProvider?specProvider = null, UInt256?initialValues = null)
            {
                TestBlockchain chain = await base.Build(specProvider, initialValues);

                MevRpcModule = new MevRpcModule(new JsonRpcConfig(),
                                                BundlePool,
                                                BlockFinder,
                                                StateReader,
                                                _tracerFactory,
                                                SpecProvider,
                                                Signer);

                return(chain);
            }
 public TransactionProcessor(
     ISpecProvider?specProvider,
     IWorldState?worldState,
     IVirtualMachine?virtualMachine,
     ILogManager?logManager)
 {
     _logger          = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
     _specProvider    = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
     _worldState      = worldState ?? throw new ArgumentNullException(nameof(worldState));
     _stateProvider   = worldState.StateProvider;
     _storageProvider = worldState.StorageProvider;
     _virtualMachine  = virtualMachine ?? throw new ArgumentNullException(nameof(virtualMachine));
     _ecdsa           = new EthereumEcdsa(specProvider.ChainId, logManager);
 }
예제 #18
0
        public static ITxFilterPipeline CreateStandardFilteringPipeline(
            ILogManager logManager,
            ISpecProvider?specProvider,
            IMiningConfig?miningConfig = null)
        {
            if (specProvider == null)
            {
                throw new ArgumentNullException(nameof(specProvider));
            }

            return(new TxFilterPipelineBuilder(logManager)
                   .WithMinGasPriceFilter(miningConfig?.MinGasPrice ?? UInt256.Zero, specProvider)
                   .WithBaseFeeFilter(specProvider)
                   .Build);
        }
예제 #19
0
 public DevBlockProducer(
     ITxSource?txSource,
     IBlockchainProcessor?processor,
     IStateProvider?stateProvider,
     IBlockTree?blockTree,
     IBlockProductionTrigger?trigger,
     ITimestamper?timestamper,
     ISpecProvider?specProvider,
     IMiningConfig?miningConfig,
     ILogManager logManager)
     : base(
         txSource,
         processor,
         new NethDevSealEngine(),
         blockTree,
         trigger,
         stateProvider,
예제 #20
0
            protected override async Task <TestBlockchain> Build(ISpecProvider?specProvider = null, UInt256?initialValues = null)
            {
                TestBlockchain chain = await base.Build(specProvider, initialValues);

                IList <Address> entryPointContractAddresses        = new List <Address>();
                IList <string>  _entryPointContractAddressesString = _accountAbstractionConfig.GetEntryPointAddresses().ToList();

                foreach (string _addressString in _entryPointContractAddressesString)
                {
                    bool parsed = Address.TryParse(
                        _addressString,
                        out Address? entryPointContractAddress);
                    entryPointContractAddresses.Add(entryPointContractAddress !);
                }
                AccountAbstractionRpcModule = new AccountAbstractionRpcModule(UserOperationPool, entryPointContractAddresses.ToArray());

                return(chain);
            }
예제 #21
0
 protected BlockProducerBase(
     ITxSource?txSource,
     IBlockchainProcessor?processor,
     ISealer?sealer,
     IBlockTree?blockTree,
     IBlockProcessingQueue?blockProcessingQueue,
     IStateProvider?stateProvider,
     IGasLimitCalculator?gasLimitCalculator,
     ITimestamper?timestamper,
     ISpecProvider?specProvider,
     ILogManager?logManager)
 {
     _txSource            = txSource ?? throw new ArgumentNullException(nameof(txSource));
     Processor            = processor ?? throw new ArgumentNullException(nameof(processor));
     Sealer               = sealer ?? throw new ArgumentNullException(nameof(sealer));
     BlockTree            = blockTree ?? throw new ArgumentNullException(nameof(blockTree));
     BlockProcessingQueue = blockProcessingQueue ?? throw new ArgumentNullException(nameof(blockProcessingQueue));
     _stateProvider       = stateProvider ?? throw new ArgumentNullException(nameof(stateProvider));
     _gasLimitCalculator  = gasLimitCalculator ?? throw new ArgumentNullException(nameof(gasLimitCalculator));
     Timestamper          = timestamper ?? throw new ArgumentNullException(nameof(timestamper));
     _spec  = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
     Logger = logManager?.GetClassLogger() ?? throw new ArgumentNullException(nameof(logManager));
 }
예제 #22
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;
        }
 public TargetAdjustedGasLimitCalculator(ISpecProvider?specProvider, IMiningConfig?miningConfig)
 {
     _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
     _miningConfig = miningConfig ?? throw new ArgumentNullException(nameof(miningConfig));
 }
예제 #24
0
 public async Task <T> Build(ISpecProvider?specProvider = null, UInt256?initialValues = null)
 {
     return((T)(await _blockchain.Build(specProvider, initialValues)));
 }
예제 #25
0
 public ReceiptsRecovery(IEthereumEcdsa?ecdsa, ISpecProvider?specProvider)
 {
     _ecdsa        = ecdsa ?? throw new ArgumentNullException(nameof(ecdsa));
     _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
 }
 public async Task <MergeTestBlockchain> Build(ISpecProvider?specProvider = null) =>
 (MergeTestBlockchain) await Build(specProvider, null);
예제 #27
0
        private static PoSSwitcher CreatePosSwitcher(IBlockTree blockTree, IDb?db = null, ISpecProvider?specProvider = null)
        {
            db ??= new MemDb();
            MergeConfig?mergeConfig = new() { Enabled = true };

            return(new PoSSwitcher(mergeConfig, new SyncConfig(), db, blockTree, specProvider ?? MainnetSpecProvider.Instance, LimboLogs.Instance));
        }
    }
예제 #28
0
 public RewardCalculator(ISpecProvider?specProvider)
 {
     _specProvider = specProvider ?? throw new ArgumentNullException(nameof(specProvider));
 }