/// <summary>
 /// Initializes logger factory for tests in this class.
 /// </summary>
 public CoinViewTests()
 {
     this.loggerFactory     = new LoggerFactory();
     this.network           = Network.Main;
     this.dbreezeSerializer = new DBreezeSerializer();
     this.dbreezeSerializer.Initialize(this.network);
 }
예제 #2
0
        public VotingManager(IFederationManager federationManager, ILoggerFactory loggerFactory, IPollResultExecutor pollResultExecutor,
                             INodeStats nodeStats, DataFolder dataFolder, DBreezeSerializer dBreezeSerializer, ISignals signals,
                             IFinalizedBlockInfoRepository finalizedBlockInfo,
                             Network network,
                             IBlockRepository blockRepository = null,
                             ChainIndexer chainIndexer        = null)
        {
            this.federationManager  = Guard.NotNull(federationManager, nameof(federationManager));
            this.pollResultExecutor = Guard.NotNull(pollResultExecutor, nameof(pollResultExecutor));
            this.signals            = Guard.NotNull(signals, nameof(signals));
            this.nodeStats          = Guard.NotNull(nodeStats, nameof(nodeStats));
            this.finalizedBlockInfo = Guard.NotNull(finalizedBlockInfo, nameof(finalizedBlockInfo));

            this.locker              = new object();
            this.votingDataEncoder   = new VotingDataEncoder(loggerFactory);
            this.scheduledVotingData = new List <VotingData>();
            this.pollsRepository     = new PollsRepository(dataFolder, loggerFactory, dBreezeSerializer);
            this.logger              = loggerFactory.CreateLogger(this.GetType().FullName);
            this.network             = network;
            this.poaConsensusOptions = (PoAConsensusOptions)this.network.Consensus.Options;

            this.blockRepository = blockRepository;
            this.chainIndexer    = chainIndexer;

            this.isInitialized = false;
        }
예제 #3
0
 public RocksDbKeyValueRepository(DataFolder dataFolder, DBreezeSerializer dataStoreSerializer)
 {
     Directory.CreateDirectory(dataFolder.KeyValueRepositoryPath);
     this.dataStoreSerializer = dataStoreSerializer;
     this.dbOptions           = new DbOptions().SetCreateIfMissing(true);
     this.rocksdb             = RocksDb.Open(this.dbOptions, dataFolder.KeyValueRepositoryPath);
 }
예제 #4
0
        public LevelDbCoindb(Network network, string folder, IDateTimeProvider dateTimeProvider,
                             ILoggerFactory loggerFactory, INodeStats nodeStats, DBreezeSerializer dBreezeSerializer)
        {
            Guard.NotNull(network, nameof(network));
            Guard.NotEmpty(folder, nameof(folder));

            this.dBreezeSerializer = dBreezeSerializer;

            this.logger = loggerFactory.CreateLogger(this.GetType().FullName);

            // Open a connection to a new DB and create if not found
            var options = new Options {
                CreateIfMissing = true
            };

            this.leveldb = new DB(options, folder);

            this.network            = network;
            this.performanceCounter = new BackendPerformanceCounter(dateTimeProvider);

            if (nodeStats.DisplayBenchStats)
            {
                nodeStats.RegisterStats(this.AddBenchStats, StatsType.Benchmark, this.GetType().Name, 400);
            }
        }
예제 #5
0
        public void CanRetrieveSavedConversionRequest()
        {
            var network    = new SmartContractsPoARegTest();
            var dataFolder = TestBase.CreateDataFolder(this, network: network);

            var serializer = new DBreezeSerializer(network.Consensus.ConsensusFactory);
            var kvs        = new ConversionRequestKeyValueStore(dataFolder, serializer);

            var repo = new ConversionRequestRepository(kvs);

            var request = new ConversionRequest()
            {
                RequestId          = "requestId",
                RequestType        = ConversionRequestType.Mint,
                Processed          = false,
                RequestStatus      = ConversionRequestStatus.Unprocessed,
                Amount             = 100000000,
                BlockHeight        = 123,
                DestinationAddress = ""
            };

            repo.Save(request);

            var request2 = repo.Get(request.RequestId);

            Assert.Equal(request.RequestId, request2.RequestId);
            Assert.Equal(request.RequestType, request2.RequestType);
            Assert.Equal(request.Processed, request2.Processed);
            Assert.Equal(request.RequestStatus, request2.RequestStatus);
            Assert.Equal(request.Amount, request2.Amount);
            Assert.Equal(request.BlockHeight, request2.BlockHeight);
            Assert.Equal(request.DestinationAddress, request2.DestinationAddress);
        }
예제 #6
0
 /// <summary>
 /// Initializes logger factory for tests in this class.
 /// </summary>
 public CoinViewTests()
 {
     this.loggerFactory     = new LoggerFactory();
     this.network           = KnownNetworks.Main;
     this.regTest           = KnownNetworks.RegTest;
     this.dBreezeSerializer = new DBreezeSerializer(this.network.Consensus.ConsensusFactory);
 }
예제 #7
0
 /// <summary>
 /// Initializes a new instance of the object.
 /// </summary>
 /// <param name="dataFolder"><see cref="LevelDbProvenBlockHeaderRepository"/> folder path to the DBreeze database files.</param>
 /// <param name="dBreezeSerializer">The serializer to use for <see cref="IBitcoinSerializable"/> objects.</param>
 /// <param name="network">Specification of the network the node runs on - RegTest/TestNet/MainNet.</param>
 public RocksDbProvenBlockHeaderRepository(
     DataFolder dataFolder,
     DBreezeSerializer dBreezeSerializer,
     Network network)
     : this(dataFolder.ProvenBlockHeaderPath, dBreezeSerializer, network)
 {
 }
예제 #8
0
        public RewardClaimerTests()
        {
            this.network = new StraxRegTest
            {
                RewardClaimerBatchActivationHeight = 40,
                RewardClaimerBlockInterval         = 10
            };

            this.addressHelper      = new MultisigAddressHelper(this.network, new CirrusRegTest());
            this.broadCasterManager = Substitute.For <IBroadcasterManager>();
            this.chainIndexer       = new ChainIndexer(this.network);
            this.consensusManager   = Substitute.For <IConsensusManager>();
            this.dbreezeSerializer  = new DBreezeSerializer(this.network.Consensus.ConsensusFactory);

            this.loggerFactory = Substitute.For <ILoggerFactory>();
            this.signals       = new Signals(this.loggerFactory, null);

            this.initialBlockDownloadState = Substitute.For <IInitialBlockDownloadState>();
            this.initialBlockDownloadState.IsInitialBlockDownload().Returns(false);

            this.opReturnDataReader = new OpReturnDataReader(new CounterChainNetworkWrapper(new CirrusRegTest()));

            this.federatedPegSettings = Substitute.For <IFederatedPegSettings>();
            this.federatedPegSettings.MultiSigRedeemScript.Returns(this.addressHelper.PayToMultiSig);

            this.federatedPegSettings.MinimumConfirmationsSmallDeposits.Returns(5);
            this.federatedPegSettings.MinimumConfirmationsNormalDeposits.Returns(10);
            this.federatedPegSettings.MinimumConfirmationsLargeDeposits.Returns(20);

            this.federatedPegSettings.SmallDepositThresholdAmount.Returns(Money.Coins(10));
            this.federatedPegSettings.NormalDepositThresholdAmount.Returns(Money.Coins(100));
        }
예제 #9
0
        /// <summary>
        /// Initializes a new instance of the object.
        /// </summary>
        /// <param name="nodeSettings">User defined node settings.</param>
        /// <param name="dataFolder">Locations of important folders and files on disk.</param>
        /// <param name="nodeLifetime">Global application life cycle control - triggers when application shuts down.</param>
        /// <param name="chain">Thread safe access to the best chain of block headers (that the node is aware of) from genesis.</param>
        /// <param name="chainState">Information about node's chain.</param>
        /// <param name="connectionManager">Manager of node's network connections.</param>
        /// <param name="chainRepository">Access to the database of blocks.</param>
        /// <param name="dateTimeProvider">Provider of time functions.</param>
        /// <param name="asyncLoopFactory">Factory for creating background async loop tasks.</param>
        /// <param name="timeSyncBehaviorState">State of time synchronization feature that stores collected data samples.</param>
        /// <param name="dbreezeSerializer">Provider of binary (de)serialization for data stored in the database.</param>
        /// <param name="loggerFactory">Factory to be used to create logger for the node.</param>
        public BaseFeature(
            NodeSettings nodeSettings,
            DataFolder dataFolder,
            INodeLifetime nodeLifetime,
            ConcurrentChain chain,
            ChainState chainState,
            IConnectionManager connectionManager,
            ChainRepository chainRepository,
            IDateTimeProvider dateTimeProvider,
            IAsyncLoopFactory asyncLoopFactory,
            TimeSyncBehaviorState timeSyncBehaviorState,
            DBreezeSerializer dbreezeSerializer,
            ILoggerFactory loggerFactory,
            IPeerBanning peerBanning,
            IPeerAddressManager peerAddressManager)
        {
            this.chainState        = Guard.NotNull(chainState, nameof(chainState));
            this.chainRepository   = Guard.NotNull(chainRepository, nameof(chainRepository));
            this.nodeSettings      = Guard.NotNull(nodeSettings, nameof(nodeSettings));
            this.dataFolder        = Guard.NotNull(dataFolder, nameof(dataFolder));
            this.nodeLifetime      = Guard.NotNull(nodeLifetime, nameof(nodeLifetime));
            this.chain             = Guard.NotNull(chain, nameof(chain));
            this.connectionManager = Guard.NotNull(connectionManager, nameof(connectionManager));
            this.peerBanning       = Guard.NotNull(peerBanning, nameof(peerBanning));

            this.peerAddressManager = Guard.NotNull(peerAddressManager, nameof(peerAddressManager));
            this.peerAddressManager.PeerFilePath = this.dataFolder;

            this.dateTimeProvider      = dateTimeProvider;
            this.asyncLoopFactory      = asyncLoopFactory;
            this.timeSyncBehaviorState = timeSyncBehaviorState;
            this.loggerFactory         = loggerFactory;
            this.dbreezeSerializer     = dbreezeSerializer;
            this.logger = loggerFactory.CreateLogger(this.GetType().FullName);
        }
예제 #10
0
        public BlockStoreTests()
        {
            this.network = KnownNetworks.StratisMain;
            this.repositoryTipHashAndHeight = new HashHeightPair(this.network.GenesisHash, 0);

            var serializer = new DBreezeSerializer();

            serializer.Initialize(new StratisMain());

            this.random = new Random();

            this.listOfSavedBlocks = new Dictionary <uint256, Block>();
            this.listOfSavedBlocks.Add(uint256.One, Block.Parse(this.testBlockHex, KnownNetworks.StratisMain));

            this.chain = CreateChain(10);

            this.nodeLifetime = new NodeLifetime();

            this.blockRepositoryMock = new Mock <IBlockRepository>();
            this.blockRepositoryMock.Setup(x => x.PutAsync(It.IsAny <HashHeightPair>(), It.IsAny <List <Block> >()))
            .Returns((HashHeightPair newTip, List <Block> blocks) =>
            {
                this.repositoryTipHashAndHeight = newTip;
                this.repositorySavesCount++;
                this.repositoryTotalBlocksSaved += blocks.Count;
                return(Task.CompletedTask);
            });

            this.blockRepositoryMock.Setup(x => x.DeleteAsync(It.IsAny <HashHeightPair>(), It.IsAny <List <uint256> >()))
            .Returns((HashHeightPair newTip, List <uint256> blocks) =>
            {
                this.repositoryTotalBlocksDeleted += blocks.Count;
                return(Task.CompletedTask);
            });

            this.blockRepositoryMock.Setup(x => x.GetBlockAsync(It.IsAny <uint256>()))
            .Returns((uint256 hash) =>
            {
                Block block = null;

                if (this.listOfSavedBlocks.ContainsKey(hash))
                {
                    block = this.listOfSavedBlocks[hash];
                }

                return(Task.FromResult(block));
            });

            this.blockRepositoryMock.Setup(x => x.TipHashAndHeight).Returns(() =>
            {
                return(this.repositoryTipHashAndHeight);
            });

            this.chainState = new ChainState();

            var blockStoreFlushCondition = new BlockStoreQueueFlushCondition(this.chainState);

            this.blockStoreQueue = new BlockStoreQueue(this.chain, this.chainState, blockStoreFlushCondition, new StoreSettings(NodeSettings.Default(this.network)),
                                                       this.blockRepositoryMock.Object, new LoggerFactory(), new Mock <INodeStats>().Object);
        }
예제 #11
0
        public async Task PruneRepository_PruneAndCompact_OnShutDownAsync()
        {
            var posBlocks        = CreatePosBlocks(50);
            var chainedHeaderTip = BuildProvenHeaderChainFromBlocks(posBlocks);

            var dataFolderPath = CreateTestDir(this);
            var dataFolder     = new DataFolder(dataFolderPath);

            var dBreezeSerializer = new DBreezeSerializer(this.Network.Consensus.ConsensusFactory);

            var blockRepository = new BlockRepository(this.Network, dataFolder, this.LoggerFactory.Object, dBreezeSerializer);

            blockRepository.PutBlocks(new HashHeightPair(posBlocks.Last().GetHash(), 50), posBlocks);

            var storeSettings = new StoreSettings(NodeSettings.Default(this.Network))
            {
                AmountOfBlocksToKeep = 10
            };

            var prunedBlockRepository = new PrunedBlockRepository(blockRepository, dBreezeSerializer, this.LoggerFactory.Object, storeSettings);
            await prunedBlockRepository.InitializeAsync();

            // Delete blocks 30 to 0 from the repo, this would have been done by the service before shutdown was initiated.
            blockRepository.DeleteBlocks(posBlocks.Take(30).Select(b => b.GetHash()).ToList());
            prunedBlockRepository.UpdatePrunedTip(chainedHeaderTip.GetAncestor(30));
            // Ensure that the block has been deleted from disk.
            Assert.Null(blockRepository.GetBlock(chainedHeaderTip.GetAncestor(29).HashBlock));

            // On shutdown the database will only be compacted.
            await prunedBlockRepository.PruneAndCompactDatabase(chainedHeaderTip.GetAncestor(50), this.Network, false);

            Assert.Equal(chainedHeaderTip.GetAncestor(30).HashBlock, prunedBlockRepository.PrunedTip.Hash);
            Assert.Equal(chainedHeaderTip.GetAncestor(30).Height, prunedBlockRepository.PrunedTip.Height);
            Assert.Null(blockRepository.GetBlock(chainedHeaderTip.GetAncestor(29).HashBlock));
        }
예제 #12
0
        /// <summary>
        /// Initializes logger factory for inherited tests.
        /// </summary>
        public TestBase(Network network)
        {
            this.Network = network;
            var serializer = new DBreezeSerializer();

            serializer.Initialize(this.Network);
        }
예제 #13
0
        /// <summary>
        /// Initializes logger factory for tests in this class.
        /// </summary>
        public BlockStoreTests()
        {
            this.loggerFactory = new LoggerFactory();
            DBreezeSerializer serializer = new DBreezeSerializer();

            serializer.Initialize(Network.Main);
        }
예제 #14
0
        public async Task PruneRepository_PruneAndCompact_FromGenesis_OnStartUpAsync()
        {
            var posBlocks        = CreatePosBlocks(50);
            var chainedHeaderTip = BuildProvenHeaderChainFromBlocks(posBlocks);

            var dataFolderPath = CreateTestDir(this);
            var dataFolder     = new DataFolder(dataFolderPath);

            var dBreezeSerializer = new DBreezeSerializer(this.Network.Consensus.ConsensusFactory);

            var blockRepository = new BlockRepository(this.Network, dataFolder, this.LoggerFactory.Object, dBreezeSerializer);

            blockRepository.PutBlocks(new HashHeightPair(posBlocks.Last().GetHash(), 50), posBlocks);

            var storeSettings = new StoreSettings(NodeSettings.Default(this.Network))
            {
                AmountOfBlocksToKeep = 10
            };

            var prunedBlockRepository = new PrunedBlockRepository(blockRepository, dBreezeSerializer, this.LoggerFactory.Object, storeSettings);
            await prunedBlockRepository.InitializeAsync();

            await prunedBlockRepository.PruneAndCompactDatabase(chainedHeaderTip.GetAncestor(50), this.Network, true);

            // The first prune will delete blocks from 40 to 0.
            Assert.Equal(chainedHeaderTip.GetAncestor(40).HashBlock, prunedBlockRepository.PrunedTip.Hash);
            Assert.Equal(chainedHeaderTip.GetAncestor(40).Height, prunedBlockRepository.PrunedTip.Height);
            // Ensure that the block has been deleted from disk.
            Assert.Null(blockRepository.GetBlock(chainedHeaderTip.GetAncestor(39).HashBlock));
        }
예제 #15
0
        /// <summary>
        /// Initializes logger factory for inherited tests.
        /// </summary>
        public TestBase()
        {
            this.loggerFactory = new LoggerFactory();
            DBreezeSerializer serializer = new DBreezeSerializer();

            serializer.Initialize();
        }
 public PrunedBlockRepository(IBlockRepository blockRepository, DBreezeSerializer dBreezeSerializer, ILoggerFactory loggerFactory, StoreSettings storeSettings)
 {
     this.blockRepository   = blockRepository;
     this.dBreezeSerializer = dBreezeSerializer;
     this.logger            = loggerFactory.CreateLogger(this.GetType().FullName);
     this.storeSettings     = storeSettings;
 }
예제 #17
0
        public BlockStoreTests()
        {
            this.loggerFactory = new LoggerFactory();

            this.network           = new BitcoinRegTest();
            this.dBreezeSerializer = new DBreezeSerializer(this.network);
        }
        /// <summary>
        /// Initializes the cross-chain transfer tests.
        /// </summary>
        /// <param name="network">The network to run the tests for.</param>
        public CrossChainTestBase(Network network = null, Network counterChainNetwork = null)
        {
            this.network             = network ?? FederatedPegNetwork.NetworksSelector.Regtest();
            this.counterChainNetwork = counterChainNetwork ?? Networks.Stratis.Regtest();
            this.federatedPegOptions = new FederatedPegOptions(counterChainNetwork);

            NetworkRegistration.Register(this.network);

            this.loggerFactory = Substitute.For <ILoggerFactory>();
            this.nodeLifetime  = new NodeLifetime();
            this.logger        = Substitute.For <ILogger>();
            this.signals       = Substitute.For <ISignals>();
            this.asyncProvider = new AsyncProvider(this.loggerFactory, this.signals, this.nodeLifetime);
            this.loggerFactory.CreateLogger(null).ReturnsForAnyArgs(this.logger);
            this.dateTimeProvider                   = DateTimeProvider.Default;
            this.opReturnDataReader                 = new OpReturnDataReader(this.loggerFactory, this.federatedPegOptions);
            this.blockRepository                    = Substitute.For <IBlockRepository>();
            this.fullNode                           = Substitute.For <IFullNode>();
            this.withdrawalTransactionBuilder       = Substitute.For <IWithdrawalTransactionBuilder>();
            this.federationWalletManager            = Substitute.For <IFederationWalletManager>();
            this.federationWalletSyncManager        = Substitute.For <IFederationWalletSyncManager>();
            this.FederationWalletTransactionHandler = Substitute.For <IFederationWalletTransactionHandler>();
            this.walletFeePolicy                    = Substitute.For <IWalletFeePolicy>();
            this.connectionManager                  = Substitute.For <IConnectionManager>();
            this.dBreezeSerializer                  = new DBreezeSerializer(this.network.Consensus.ConsensusFactory);
            this.ibdState                           = Substitute.For <IInitialBlockDownloadState>();
            this.wallet = null;
            this.federationGatewaySettings = Substitute.For <IFederationGatewaySettings>();
            this.ChainIndexer = new ChainIndexer(this.network);

            this.federationGatewaySettings.TransactionFee.Returns(new Money(0.01m, MoneyUnit.BTC));

            // Generate the keys used by the federation members for our tests.
            this.federationKeys = new[]
            {
                "ensure feel swift crucial bridge charge cloud tell hobby twenty people mandate",
                "quiz sunset vote alley draw turkey hill scrap lumber game differ fiction",
                "exchange rent bronze pole post hurry oppose drama eternal voice client state"
            }.Select(m => HdOperations.GetExtendedKey(m)).ToArray();

            SetExtendedKey(0);

            this.fundingTransactions = new List <Transaction>();

            this.blockDict = new Dictionary <uint256, Block>();
            this.blockDict[this.network.GenesisHash] = this.network.GetGenesis();

            this.blockRepository.GetBlocks(Arg.Any <List <uint256> >()).ReturnsForAnyArgs((x) =>
            {
                var hashes = x.ArgAt <List <uint256> >(0);
                var blocks = new List <Block>();
                for (int i = 0; i < hashes.Count; i++)
                {
                    blocks.Add(this.blockDict.TryGetValue(hashes[i], out Block block) ? block : null);
                }

                return(blocks);
            });
        }
예제 #19
0
 public RocksDbBlockRepository(Network network, string dataFolder, DBreezeSerializer dataStoreSerializer)
 {
     this.dataFolder        = dataFolder;
     this.dBreezeSerializer = dataStoreSerializer;
     this.locker            = new object();
     this.logger            = LogManager.GetCurrentClassLogger();
     this.network           = network;
 }
예제 #20
0
 /// <summary>
 /// Initializes logger factory for tests in this class.
 /// </summary>
 public CoinViewTests()
 {
     this.loggerFactory     = new LoggerFactory();
     this.network           = KnownNetworks.Main;
     this.regTest           = KnownNetworks.RegTest;
     this.dbreezeSerializer = new DBreezeSerializer();
     this.dbreezeSerializer.Initialize(this.network);
 }
예제 #21
0
        private IBlockRepository SetupRepository(Network main, string dataFolder)
        {
            var dBreezeSerializer = new DBreezeSerializer(main.Consensus.ConsensusFactory);
            var repository        = new RocksDbBlockRepository(main, dataFolder, dBreezeSerializer);

            repository.Initialize();
            return(repository);
        }
예제 #22
0
        public BlockStoreTests()
        {
            this.loggerFactory = new LoggerFactory();
            this.network       = KnownNetworks.Main;
            var serializer = new DBreezeSerializer();

            serializer.Initialize(this.network);
        }
        public BlockStoreSignaledTests()
        {
            this.loggerFactory = new LoggerFactory();

            this.network = new BitcoinRegTest();
            var serializer = new DBreezeSerializer();

            serializer.Initialize(this.network);
        }
 public LevelDbBlockRepository(Network network, string dataFolder, DBreezeSerializer dBreezeSerializer)
 {
     this.dataFolder          = dataFolder;
     this.locker              = new object();
     this.logger              = LogManager.GetCurrentClassLogger();
     this.network             = network;
     this.dBreezeSerializer   = dBreezeSerializer;
     this.genesisTransactions = network.GetGenesis().Transactions.ToDictionary(k => k.GetHash());
 }
예제 #25
0
        public PollsRepository(string folder, ILoggerFactory loggerFactory, DBreezeSerializer dBreezeSerializer)
        {
            Guard.NotEmpty(folder, nameof(folder));

            Directory.CreateDirectory(folder);
            this.dbreeze = new DBreezeEngine(folder);

            this.logger            = loggerFactory.CreateLogger(this.GetType().FullName);
            this.dBreezeSerializer = dBreezeSerializer;
        }
예제 #26
0
        public ProvenBlockHeaderStoreTests() : base(new StratisTest())
        {
            var nodeStats = new NodeStats(DateTimeProvider.Default);

            var dBreezeSerializer = new DBreezeSerializer(this.Network);

            this.provenBlockHeaderRepository = new ProvenBlockHeaderRepository(this.Network, CreateTestDir(this), this.LoggerFactory.Object, dBreezeSerializer);

            this.provenBlockHeaderStore = new ProvenBlockHeaderStore(DateTimeProvider.Default, this.LoggerFactory.Object, this.provenBlockHeaderRepository, nodeStats);
        }
        private IBlockRepository SetupRepository(Network main, string dir)
        {
            var dBreezeSerializer = new DBreezeSerializer(main);

            var repository = new BlockRepository(main, dir, this.LoggerFactory.Object, dBreezeSerializer);

            repository.InitializeAsync().GetAwaiter().GetResult();

            return(repository);
        }
예제 #28
0
        public PollsRepository(string folder, DBreezeSerializer dBreezeSerializer)
        {
            Guard.NotEmpty(folder, nameof(folder));

            Directory.CreateDirectory(folder);
            this.dbreeze = new DBreezeEngine(folder);

            this.logger            = LogManager.GetCurrentClassLogger();
            this.dBreezeSerializer = dBreezeSerializer;
        }
예제 #29
0
        public PollsRepository(string folder, ILoggerFactory loggerFactory, DBreezeSerializer dBreezeSerializer)
        {
            Guard.NotEmpty(folder, nameof(folder));

            Directory.CreateDirectory(folder);
            this.dbreeze = new DBreezeEngine(folder);

            this.logger            = loggerFactory.CreateLogger("Impleum.Bitcoin.FullNode");
            this.dBreezeSerializer = dBreezeSerializer;
        }
        private IBlockRepository SetupRepository(Network main, string dir)
        {
            var dBreezeSerializer = new DBreezeSerializer(main.Consensus.ConsensusFactory);

            var repository = new BlockRepository(main, dir, this.LoggerFactory.Object, dBreezeSerializer);

            repository.Initialize();

            return(repository);
        }