public Task Execute(CancellationToken cancellationToken) { IInitConfig initConfig = _get.Config <IInitConfig>(); IBloomConfig bloomConfig = _get.Config <IBloomConfig>(); IFileStoreFactory fileStoreFactory = initConfig.DiagnosticMode == DiagnosticMode.MemDb ? new InMemoryDictionaryFileStoreFactory() : new FixedSizeFileStoreFactory(Path.Combine(initConfig.BaseDbPath, DbNames.Bloom), DbNames.Bloom, Bloom.ByteLength); IBloomStorage bloomStorage = _set.BloomStorage = bloomConfig.Index ? new BloomStorage(bloomConfig, _get.DbProvider !.BloomDb, fileStoreFactory) : NullBloomStorage.Instance; _get.DisposeStack.Push(bloomStorage); IChainLevelInfoRepository chainLevelInfoRepository = _set.ChainLevelInfoRepository = new ChainLevelInfoRepository(_get.DbProvider !.BlockInfosDb); IBlockTree blockTree = _set.BlockTree = new BlockTree( _get.DbProvider, chainLevelInfoRepository, _get.SpecProvider, bloomStorage, _get.Config <ISyncConfig>(), _get.LogManager); ISigner signer = NullSigner.Instance; ISignerStore signerStore = NullSigner.Instance; if (_get.Config <IMiningConfig>().Enabled) { Signer signerAndStore = new(_get.SpecProvider !.ChainId, _get.OriginalSignerKey !, _get.LogManager); signer = signerAndStore; signerStore = signerAndStore; } _set.EngineSigner = signer; _set.EngineSignerStore = signerStore; ReceiptsRecovery receiptsRecovery = new(_get.EthereumEcdsa, _get.SpecProvider); IReceiptStorage receiptStorage = _set.ReceiptStorage = initConfig.StoreReceipts ? new PersistentReceiptStorage(_get.DbProvider.ReceiptsDb, _get.SpecProvider !, receiptsRecovery) : NullReceiptStorage.Instance; IReceiptFinder receiptFinder = _set.ReceiptFinder = new FullInfoReceiptFinder(receiptStorage, receiptsRecovery, blockTree); LogFinder logFinder = new( blockTree, receiptFinder, receiptStorage, bloomStorage, _get.LogManager, new ReceiptsRecovery(_get.EthereumEcdsa, _get.SpecProvider), 1024); _set.LogFinder = logFinder; return(Task.CompletedTask); }
/// <summary> /// Add a filestore factory to this library. /// </summary> public void AddFileStoreFactory(IFileStoreFactory factory) { if (factory == null) { throw new ArgumentNullException(nameof(factory)); } fileStoreFactories.Add(factory); }
public BloomStorage(IBloomConfig config, IDb bloomDb, IFileStoreFactory fileStoreFactory) { long Get(Keccak key, long defaultValue) => bloomDb.Get(key)?.ToLongFromBigEndianByteArrayWithoutLeadingZeros() ?? defaultValue; _config = config ?? throw new ArgumentNullException(nameof(config)); _bloomInfoDb = bloomDb ?? throw new ArgumentNullException(nameof(_bloomInfoDb)); _fileStoreFactory = fileStoreFactory; _storageLevels = CreateStorageLevels(config); Levels = (byte)_storageLevels.Length; MinBlockNumber = Get(MinBlockNumberKey, long.MaxValue); MaxBlockNumber = Get(MaxBlockNumberKey, -1); MigratedBlockNumber = Get(MigrationBlockNumberKey, -1); }
public FilesComponent(IFileStoreFactory storeFactory, IMapper mapper) { _storeFactory = storeFactory ?? throw new ArgumentNullException(nameof(storeFactory)); _mapper = mapper ?? throw new ArgumentNullException(nameof(mapper)); }
private Task InitBlockchain() { if (_api.ChainSpec == null) { throw new StepDependencyException(nameof(_api.ChainSpec)); } if (_api.DbProvider == null) { throw new StepDependencyException(nameof(_api.DbProvider)); } if (_api.SpecProvider == null) { throw new StepDependencyException(nameof(_api.SpecProvider)); } ILogger logger = _api.LogManager.GetClassLogger(); IInitConfig initConfig = _api.Config <IInitConfig>(); ISyncConfig syncConfig = _api.Config <ISyncConfig>(); if (syncConfig.DownloadReceiptsInFastSync && !syncConfig.DownloadBodiesInFastSync) { logger.Warn($"{nameof(syncConfig.DownloadReceiptsInFastSync)} is selected but {nameof(syncConfig.DownloadBodiesInFastSync)} - enabling bodies to support receipts download."); syncConfig.DownloadBodiesInFastSync = true; } Account.AccountStartNonce = _api.ChainSpec.Parameters.AccountStartNonce; Signer signer = new Signer(_api.SpecProvider.ChainId, _api.OriginalSignerKey, _api.LogManager); _api.Signer = signer; _api.SignerStore = signer; _api.StateProvider = new StateProvider( _api.DbProvider.StateDb, _api.DbProvider.CodeDb, _api.LogManager); _api.EthereumEcdsa = new EthereumEcdsa(_api.SpecProvider.ChainId, _api.LogManager); _api.TxPool = new TxPool.TxPool( new PersistentTxStorage(_api.DbProvider.PendingTxsDb), Timestamper.Default, _api.EthereumEcdsa, _api.SpecProvider, _api.Config <ITxPoolConfig>(), _api.StateProvider, _api.LogManager); TxSealer standardSealer = new TxSealer(_api.Signer, _api.Timestamper); NonceReservingTxSealer nonceReservingTxSealer = new NonceReservingTxSealer(_api.Signer, _api.Timestamper, _api.TxPool); IVaultConfig vaultConfig = _api.Config <IVaultConfig>(); if (!vaultConfig.Enabled) { _api.TxSender = new TxPoolSender(_api.TxPool, standardSealer, nonceReservingTxSealer); } else { IVaultService vaultService = new VaultService(vaultConfig, _api.LogManager); IVaultWallet wallet = new VaultWallet(vaultService, vaultConfig.VaultId, _api.LogManager); ITxSigner vaultSigner = new VaultTxSigner(wallet, _api.ChainSpec.ChainId); // change vault to provide, use sealer to set the gas price as well _api.TxSender = new VaultTxSender(vaultSigner, vaultConfig, _api.ChainSpec.ChainId); } IBloomConfig?bloomConfig = _api.Config <IBloomConfig>(); IFileStoreFactory fileStoreFactory = initConfig.DiagnosticMode == DiagnosticMode.MemDb ? (IFileStoreFactory) new InMemoryDictionaryFileStoreFactory() : new FixedSizeFileStoreFactory(Path.Combine(initConfig.BaseDbPath, DbNames.Bloom), DbNames.Bloom, Bloom.ByteLength); _api.BloomStorage = bloomConfig.Index ? new BloomStorage(bloomConfig, _api.DbProvider.BloomDb, fileStoreFactory) : (IBloomStorage)NullBloomStorage.Instance; _api.DisposeStack.Push(_api.BloomStorage); _api.ChainLevelInfoRepository = new ChainLevelInfoRepository(_api.DbProvider.BlockInfosDb); _api.BlockTree = new BlockTree( _api.DbProvider.BlocksDb, _api.DbProvider.HeadersDb, _api.DbProvider.BlockInfosDb, _api.ChainLevelInfoRepository, _api.SpecProvider, _api.TxPool, _api.BloomStorage, _api.Config <ISyncConfig>(), _api.LogManager); // Init state if we need system calls before actual processing starts if (_api.BlockTree.Head != null) { _api.StateProvider.StateRoot = _api.BlockTree.Head.StateRoot; } _api.ReceiptStorage = initConfig.StoreReceipts ? (IReceiptStorage?)new PersistentReceiptStorage(_api.DbProvider.ReceiptsDb, _api.SpecProvider, new ReceiptsRecovery()) : NullReceiptStorage.Instance; _api.ReceiptFinder = new FullInfoReceiptFinder(_api.ReceiptStorage, new ReceiptsRecovery(), _api.BlockTree); _api.RecoveryStep = new TxSignaturesRecoveryStep(_api.EthereumEcdsa, _api.TxPool, _api.LogManager); _api.StorageProvider = new StorageProvider( _api.DbProvider.StateDb, _api.StateProvider, _api.LogManager); // blockchain processing BlockhashProvider blockhashProvider = new BlockhashProvider( _api.BlockTree, _api.LogManager); VirtualMachine virtualMachine = new VirtualMachine( _api.StateProvider, _api.StorageProvider, blockhashProvider, _api.SpecProvider, _api.LogManager); _api.TransactionProcessor = new TransactionProcessor( _api.SpecProvider, _api.StateProvider, _api.StorageProvider, virtualMachine, _api.LogManager); InitSealEngine(); if (_api.SealValidator == null) { throw new StepDependencyException(nameof(_api.SealValidator)); } /* validation */ _api.HeaderValidator = CreateHeaderValidator(); OmmersValidator ommersValidator = new OmmersValidator( _api.BlockTree, _api.HeaderValidator, _api.LogManager); TxValidator txValidator = new TxValidator(_api.SpecProvider.ChainId); _api.BlockValidator = new BlockValidator( txValidator, _api.HeaderValidator, ommersValidator, _api.SpecProvider, _api.LogManager); ReadOnlyDbProvider readOnly = new ReadOnlyDbProvider(_api.DbProvider, false); StateReader stateReader = new StateReader(readOnly.StateDb, readOnly.CodeDb, _api.LogManager); _api.TxPoolInfoProvider = new TxPoolInfoProvider(stateReader, _api.TxPool); _api.MainBlockProcessor = CreateBlockProcessor(); BlockchainProcessor blockchainProcessor = new BlockchainProcessor( _api.BlockTree, _api.MainBlockProcessor, _api.RecoveryStep, _api.LogManager, new BlockchainProcessor.Options { AutoProcess = !syncConfig.BeamSync, StoreReceiptsByDefault = initConfig.StoreReceipts, }); _api.BlockProcessingQueue = blockchainProcessor; _api.BlockchainProcessor = blockchainProcessor; if (syncConfig.BeamSync) { BeamBlockchainProcessor beamBlockchainProcessor = new BeamBlockchainProcessor( new ReadOnlyDbProvider(_api.DbProvider, false), _api.BlockTree, _api.SpecProvider, _api.LogManager, _api.BlockValidator, _api.RecoveryStep, _api.RewardCalculatorSource !, _api.BlockProcessingQueue, _api.SyncModeSelector !); _api.DisposeStack.Push(beamBlockchainProcessor); } return(Task.CompletedTask); }
public StoreController(IFileStoreFactory storeFactory, ILogger <StoreController> logger) { _logger = logger; _storeFactory = storeFactory; }
public CryptoKeyStore(IConfigurationProvider config, IFileStoreFactory storeFactory) { _config = config; _storeFactory = storeFactory; }