/// <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.dataStoreSerializer = new DataStoreSerializer(this.network.Consensus.ConsensusFactory); }
public PrunedBlockRepository(IBlockRepository blockRepository, DataStoreSerializer dataStoreSerializer, ILoggerFactory loggerFactory, StoreSettings storeSettings) { this.blockRepository = blockRepository; this.dataStoreSerializer = dataStoreSerializer; this.logger = loggerFactory.CreateLogger(this.GetType().FullName); this.storeSettings = storeSettings; }
public void PruneRepository_PruneAndCompact_FromGenesis_OnStartUp() { var posBlocks = CreatePosBlocks(50); var chainedHeaderTip = BuildProvenHeaderChainFromBlocks(posBlocks); var dataFolderPath = CreateTestDir(this); var dataFolder = new DataFolder(dataFolderPath); var dBreezeSerializer = new DataStoreSerializer(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); prunedBlockRepository.Initialize(); 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)); }
public void PruneRepository_PruneAndCompact_OnShutDown() { var posBlocks = CreatePosBlocks(50); var chainedHeaderTip = BuildProvenHeaderChainFromBlocks(posBlocks); var dataFolderPath = CreateTestDir(this); var dataFolder = new DataFolder(dataFolderPath); var dBreezeSerializer = new DataStoreSerializer(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); prunedBlockRepository.Initialize(); // 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. 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)); }
public BlockStoreTests() { this.loggerFactory = new LoggerFactory(); this.network = new BitcoinRegTest(); this.dataStoreSerializer = new DataStoreSerializer(this.network.Consensus.ConsensusFactory); }
private IBlockRepository SetupRepository(Network main, string dir) { var dBreezeSerializer = new DataStoreSerializer(main.Consensus.ConsensusFactory); var repository = new BlockRepository(main, dir, this.LoggerFactory.Object, dBreezeSerializer); repository.Initialize(); return(repository); }
public RocksDbKeyValueRepository(string folder, DataStoreSerializer dataStoreSerializer) { Directory.CreateDirectory(folder); this.dataStoreSerializer = dataStoreSerializer; // Open a connection to a new DB and create if not found var options = new DbOptions().SetCreateIfMissing(true); this.rocksdb = DB.Open(options, folder); }
public PollsRepository(string folder, ILoggerFactory loggerFactory, DataStoreSerializer dataStoreSerializer) { Guard.NotEmpty(folder, nameof(folder)); Directory.CreateDirectory(folder); this.dbreeze = new DBreezeEngine(folder); this.logger = loggerFactory.CreateLogger(this.GetType().FullName); this.dataStoreSerializer = dataStoreSerializer; }
public LeveldbKeyValueRepository(string folder, DataStoreSerializer dataStoreSerializer) { Directory.CreateDirectory(folder); this.dataStoreSerializer = dataStoreSerializer; // Open a connection to a new DB and create if not found var options = new Options { CreateIfMissing = true }; this.leveldb = new DB(options, folder); }
public void ReloadPersistentCoinView() { ((IDisposable)this.Coindb).Dispose(); this.cleanList.Remove((IDisposable)this.Coindb); var dateTimeProvider = new DateTimeProvider(); var serializer = new DataStoreSerializer(this.Network.Consensus.ConsensusFactory); //this.Coindb = new DBreezeCoindb(this.Network, this.FolderName, dateTimeProvider, this.loggerFactory, new NodeStats(dateTimeProvider, this.loggerFactory), serializer); //this.Coindb = new FasterCoindb(this.Network, this.FolderName, dateTimeProvider, this.loggerFactory, new NodeStats(dateTimeProvider, this.loggerFactory), serializer); this.Coindb = new LeveldbCoindb(this.Network, this.FolderName, dateTimeProvider, this.loggerFactory, new NodeStats(dateTimeProvider, this.loggerFactory), serializer); this.Coindb.Initialize(); this.cleanList.Add((IDisposable)this.Coindb); }
public ProvenBlockHeaderStoreTests() : base(new StratisTest()) { var nodeStats = new NodeStats(DateTimeProvider.Default, this.LoggerFactory.Object); var dBreezeSerializer = new DataStoreSerializer(this.Network.Consensus.ConsensusFactory); var ibdMock = new Mock <IInitialBlockDownloadState>(); ibdMock.Setup(s => s.IsInitialBlockDownload()).Returns(false); this.provenBlockHeaderRepository = new LevelDbProvenBlockHeaderRepository(this.Network, CreateTestDir(this), this.LoggerFactory.Object, dBreezeSerializer); this.provenBlockHeaderStore = new ProvenBlockHeaderStore(DateTimeProvider.Default, this.LoggerFactory.Object, this.provenBlockHeaderRepository, nodeStats, ibdMock.Object); }
public RocksdbBlockRepository(Network network, string folder, ILoggerFactory loggerFactory, DataStoreSerializer dataStoreSerializer) { Guard.NotNull(network, nameof(network)); Guard.NotEmpty(folder, nameof(folder)); Directory.CreateDirectory(folder); var options = new DbOptions().SetCreateIfMissing(true); this.rocksdb = DB.Open(options, folder); this.Locker = new object(); this.logger = loggerFactory.CreateLogger(this.GetType().FullName); this.network = network; this.dataStoreSerializer = dataStoreSerializer; this.genesisTransactions = network.GetGenesis().Transactions.ToDictionary(k => k.GetHash()); }
public PoATestsBase(TestPoANetwork network = null) { this.loggerFactory = new LoggerFactory(); this.signals = new Signals.Signals(this.loggerFactory, null); this.network = network == null ? new TestPoANetwork() : network; this.consensusOptions = this.network.ConsensusOptions; this.DataStoreSerializer = new DataStoreSerializer(this.network.Consensus.ConsensusFactory); this.ChainIndexer = new ChainIndexer(this.network); IDateTimeProvider timeProvider = new DateTimeProvider(); this.consensusSettings = new ConsensusSettings(NodeSettings.Default(this.network)); this.federationManager = CreateFederationManager(this, this.network, this.loggerFactory, this.signals); this.chainIndexerMock = new Mock <ChainIndexer>(); var header = new BlockHeader(); this.chainIndexerMock.Setup(x => x.Tip).Returns(new ChainedHeader(header, header.GetHash(), 0)); this.slotsManager = new SlotsManager(this.network, this.federationManager, this.chainIndexerMock.Object, this.loggerFactory); this.poaHeaderValidator = new PoABlockHeaderValidator(this.loggerFactory); this.asyncProvider = new AsyncProvider(this.loggerFactory, this.signals, new Mock <INodeLifetime>().Object); var dataFolder = new DataFolder(TestBase.CreateTestDir(this)); var finalizedBlockRepo = new FinalizedBlockInfoRepository(new KeyValueRepository(dataFolder, this.DataStoreSerializer), this.loggerFactory, this.asyncProvider); finalizedBlockRepo.LoadFinalizedBlockInfoAsync(this.network).GetAwaiter().GetResult(); this.resultExecutorMock = new Mock <IPollResultExecutor>(); this.votingManager = new VotingManager(this.federationManager, this.loggerFactory, this.slotsManager, this.resultExecutorMock.Object, new NodeStats(timeProvider, this.loggerFactory), dataFolder, this.DataStoreSerializer, this.signals, finalizedBlockRepo); this.votingManager.Initialize(); this.chainState = new ChainState(); this.rulesEngine = new PoAConsensusRuleEngine(this.network, this.loggerFactory, new DateTimeProvider(), this.ChainIndexer, new NodeDeployments(this.network, this.ChainIndexer), this.consensusSettings, new Checkpoints(this.network, this.consensusSettings), new Mock <ICoinView>().Object, this.chainState, new InvalidBlockHashStore(timeProvider), new NodeStats(timeProvider, this.loggerFactory), this.slotsManager, this.poaHeaderValidator, this.votingManager, this.federationManager, this.asyncProvider, new ConsensusRulesContainer()); List <ChainedHeader> headers = ChainedHeadersHelper.CreateConsecutiveHeaders(50, null, false, null, this.network); this.currentHeader = headers.Last(); }
public FasterCoindb(Network network, string folder, IDateTimeProvider dateTimeProvider, ILoggerFactory loggerFactory, INodeStats nodeStats, DataStoreSerializer dataStoreSerializer) { Guard.NotNull(network, nameof(network)); Guard.NotEmpty(folder, nameof(folder)); this.dataStoreSerializer = dataStoreSerializer; // Create the coinview folder if it does not exist. Directory.CreateDirectory(folder); this.logger = loggerFactory.CreateLogger(this.GetType().FullName); this.network = network; this.performanceCounter = new BackendPerformanceCounter(dateTimeProvider); this.dataFolder = folder; nodeStats.RegisterStats(this.AddBenchStats, StatsType.Benchmark, this.GetType().Name, 400); }
public NodeContext(object caller, string name, Network network, bool clean) { network = network ?? KnownNetworks.RegTest; this.loggerFactory = new LoggerFactory(); this.Network = network; this.FolderName = TestBase.CreateTestDir(caller, name); var dateTimeProvider = new DateTimeProvider(); var serializer = new DataStoreSerializer(this.Network.Consensus.ConsensusFactory); //this.Coindb = new DBreezeCoindb(network, this.FolderName, dateTimeProvider, this.loggerFactory, new NodeStats(dateTimeProvider, this.loggerFactory), serializer); //this.Coindb = new FasterCoindb(network, this.FolderName, dateTimeProvider, this.loggerFactory, new NodeStats(dateTimeProvider, this.loggerFactory), serializer); this.Coindb = new LeveldbCoindb(network, this.FolderName, dateTimeProvider, this.loggerFactory, new NodeStats(dateTimeProvider, this.loggerFactory), serializer); this.Coindb.Initialize(); this.cleanList = new List <IDisposable> { (IDisposable)this.Coindb }; }
public VotingManager(IFederationManager federationManager, ILoggerFactory loggerFactory, ISlotsManager slotsManager, IPollResultExecutor pollResultExecutor, INodeStats nodeStats, DataFolder dataFolder, DataStoreSerializer dataStoreSerializer, ISignals signals, IFinalizedBlockInfoRepository finalizedBlockInfo) { this.federationManager = Guard.NotNull(federationManager, nameof(federationManager)); this.slotsManager = Guard.NotNull(slotsManager, nameof(slotsManager)); 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, dataStoreSerializer); this.logger = loggerFactory.CreateLogger(this.GetType().FullName); this.isInitialized = false; }
public ChainRepository(string folder, ILoggerFactory loggerFactory, DataStoreSerializer dataStoreSerializer, IBlockHeaderStore blockHeaderStore) { this.dataStoreSerializer = dataStoreSerializer; this.blockHeaderStore = blockHeaderStore; Guard.NotEmpty(folder, nameof(folder)); Guard.NotNull(loggerFactory, nameof(loggerFactory)); this.logger = loggerFactory.CreateLogger(this.GetType().FullName); Directory.CreateDirectory(folder); // Open a connection to a new DB and create if not found var options = new Options { CreateIfMissing = true }; this.leveldb = new DB(options, folder); }
public RocksDbCoindb(Network network, string folder, IDateTimeProvider dateTimeProvider, ILoggerFactory loggerFactory, INodeStats nodeStats, DataStoreSerializer dataStoreSerializer) { Guard.NotNull(network, nameof(network)); Guard.NotEmpty(folder, nameof(folder)); this.dataStoreSerializer = dataStoreSerializer; this.logger = loggerFactory.CreateLogger(this.GetType().FullName); // Open a connection to a new DB and create if not found var options = new DbOptions().SetCreateIfMissing(true); this.rocksdb = RocksDb.Open(options, folder); this.network = network; this.performanceCounter = new BackendPerformanceCounter(dateTimeProvider); nodeStats.RegisterStats(this.AddBenchStats, StatsType.Benchmark, this.GetType().Name, 400); }
/// <summary> /// Initializes a new instance of the object. /// </summary> /// <param name="network">Specification of the network the node runs on - RegTest/TestNet/MainNet.</param> /// <param name="folder"><see cref="ProvenBlockHeaderRepository"/> folder path to the DBreeze database files.</param> /// <param name="loggerFactory">Factory to create a logger for this type.</param> /// <param name="dataStoreSerializer">The serializer to use for <see cref="IBitcoinSerializable"/> objects.</param> public ProvenBlockHeaderRepository(Network network, string folder, ILoggerFactory loggerFactory, DataStoreSerializer dataStoreSerializer) { Guard.NotNull(network, nameof(network)); Guard.NotNull(folder, nameof(folder)); this.dataStoreSerializer = dataStoreSerializer; this.logger = loggerFactory.CreateLogger(this.GetType().FullName); Directory.CreateDirectory(folder); // Open a connection to a new DB and create if not found var options = new DbOptions().SetCreateIfMissing(true); this.rocksdb = RocksDb.Open(options, folder); this.locker = new object(); this.network = network; }
/// <summary> /// Initializes the DBreeze serializer. /// </summary> public DBreezeTest() : base(KnownNetworks.StratisRegTest) { this.dbreezeSerializer = new DataStoreSerializer(this.Network.Consensus.ConsensusFactory); }
/// <summary> /// Creates test chain with a consensus loop. /// </summary> public static async Task <TestChainContext> CreateAsync(Network network, string dataDir, Mock <IPeerAddressManager> mockPeerAddressManager = null) { var testChainContext = new TestChainContext() { Network = network }; testChainContext.NodeSettings = new NodeSettings(network, args: new string[] { $"-datadir={dataDir}" }); testChainContext.ConnectionSettings = new ConnectionManagerSettings(testChainContext.NodeSettings); testChainContext.LoggerFactory = testChainContext.NodeSettings.LoggerFactory; testChainContext.DateTimeProvider = DateTimeProvider.Default; testChainContext.Signals = new Signals.Signals(testChainContext.NodeSettings.LoggerFactory, null); testChainContext.AsyncProvider = new AsyncProvider(testChainContext.NodeSettings.LoggerFactory, testChainContext.Signals, new Mock <INodeLifetime>().Object); network.Consensus.Options = new ConsensusOptions(); //new FullNodeBuilderConsensusExtension.PowConsensusRulesRegistration().RegisterRules(network.Consensus); var consensusSettings = new ConsensusSettings(testChainContext.NodeSettings); testChainContext.Checkpoints = new Checkpoints(); testChainContext.ChainIndexer = new ChainIndexer(network); testChainContext.ChainState = new ChainState(); testChainContext.InitialBlockDownloadState = new InitialBlockDownloadState(testChainContext.ChainState, testChainContext.Network, consensusSettings, new Checkpoints(), testChainContext.NodeSettings.LoggerFactory, testChainContext.DateTimeProvider); var inMemoryCoinView = new InMemoryCoinView(new HashHeightPair(testChainContext.ChainIndexer.Tip)); var cachedCoinView = new CachedCoinView(network, new Checkpoints(), inMemoryCoinView, DateTimeProvider.Default, testChainContext.LoggerFactory, new NodeStats(testChainContext.DateTimeProvider, testChainContext.LoggerFactory), new ConsensusSettings(testChainContext.NodeSettings)); var dataFolder = new DataFolder(TestBase.AssureEmptyDir(dataDir)); testChainContext.PeerAddressManager = mockPeerAddressManager == null ? new PeerAddressManager(DateTimeProvider.Default, dataFolder, testChainContext.LoggerFactory, new SelfEndpointTracker(testChainContext.LoggerFactory, testChainContext.ConnectionSettings)) : mockPeerAddressManager.Object; testChainContext.MockConnectionManager = new Mock <IConnectionManager>(); testChainContext.MockReadOnlyNodesCollection = new Mock <IReadOnlyNetworkPeerCollection>(); testChainContext.MockConnectionManager.Setup(s => s.ConnectedPeers).Returns(testChainContext.MockReadOnlyNodesCollection.Object); testChainContext.MockConnectionManager.Setup(s => s.NodeSettings).Returns(testChainContext.NodeSettings); testChainContext.MockConnectionManager.Setup(s => s.ConnectionSettings).Returns(testChainContext.ConnectionSettings); testChainContext.ConnectionManager = testChainContext.MockConnectionManager.Object; var dateTimeProvider = new DateTimeProvider(); testChainContext.PeerBanning = new PeerBanning(testChainContext.ConnectionManager, testChainContext.LoggerFactory, testChainContext.DateTimeProvider, testChainContext.PeerAddressManager); var deployments = new NodeDeployments(testChainContext.Network, testChainContext.ChainIndexer); testChainContext.ConsensusRules = new PowConsensusRuleEngine(testChainContext.Network, testChainContext.LoggerFactory, testChainContext.DateTimeProvider, testChainContext.ChainIndexer, deployments, consensusSettings, testChainContext.Checkpoints, cachedCoinView, testChainContext.ChainState, new InvalidBlockHashStore(dateTimeProvider), new NodeStats(dateTimeProvider, testChainContext.LoggerFactory), testChainContext.AsyncProvider, new ConsensusRulesContainer()).SetupRulesEngineParent(); testChainContext.HeaderValidator = new HeaderValidator(testChainContext.ConsensusRules, testChainContext.LoggerFactory); testChainContext.IntegrityValidator = new IntegrityValidator(testChainContext.ConsensusRules, testChainContext.LoggerFactory); testChainContext.PartialValidator = new PartialValidator(testChainContext.AsyncProvider, testChainContext.ConsensusRules, testChainContext.LoggerFactory); testChainContext.FullValidator = new FullValidator(testChainContext.ConsensusRules, testChainContext.LoggerFactory); var dBreezeSerializer = new DataStoreSerializer(network.Consensus.ConsensusFactory); var blockRepository = new BlockRepository(testChainContext.Network, dataFolder, testChainContext.LoggerFactory, dBreezeSerializer); var blockStoreFlushCondition = new BlockStoreQueueFlushCondition(testChainContext.ChainState, testChainContext.InitialBlockDownloadState); var blockStore = new BlockStoreQueue(testChainContext.ChainIndexer, testChainContext.ChainState, blockStoreFlushCondition, new Mock <StoreSettings>().Object, blockRepository, testChainContext.LoggerFactory, new Mock <INodeStats>().Object, testChainContext.AsyncProvider); blockStore.Initialize(); testChainContext.Consensus = ConsensusManagerHelper.CreateConsensusManager(network, dataDir); await testChainContext.Consensus.InitializeAsync(testChainContext.ChainIndexer.Tip); return(testChainContext); }
public ChainRepository(DataFolder dataFolder, ILoggerFactory loggerFactory, DataStoreSerializer dataStoreSerializer, IBlockHeaderStore blockHeaderStore) : this(dataFolder.ChainPath, loggerFactory, dataStoreSerializer, blockHeaderStore) { }
public LeveldbBlockRepository(Network network, DataFolder dataFolder, ILoggerFactory loggerFactory, DataStoreSerializer dataStoreSerializer) : this(network, dataFolder.BlockPath, loggerFactory, dataStoreSerializer) { }
public ProvenBlockHeaderRepositoryTests() : base(KnownNetworks.StratisTest) { this.loggerFactory = new Mock <ILoggerFactory>(); this.dataStoreSerializer = new DataStoreSerializer(this.Network.Consensus.ConsensusFactory); }
public ChainRepositoryTest() : base(KnownNetworks.StratisRegTest) { this.dataStoreSerializer = new DataStoreSerializer(this.Network.Consensus.ConsensusFactory); }
public LeveldbCoindb(Network network, DataFolder dataFolder, IDateTimeProvider dateTimeProvider, ILoggerFactory loggerFactory, INodeStats nodeStats, DataStoreSerializer dataStoreSerializer) : this(network, dataFolder.CoindbPath, dateTimeProvider, loggerFactory, nodeStats, dataStoreSerializer) { }
/// <summary> /// Initializes a new instance of the object. /// </summary> /// <param name="network">Specification of the network the node runs on - RegTest/TestNet/MainNet.</param> /// <param name="folder"><see cref="ProvenBlockHeaderRepository"/> folder path to the DBreeze database files.</param> /// <param name="loggerFactory">Factory to create a logger for this type.</param> /// <param name="dataStoreSerializer">The serializer to use for <see cref="IBitcoinSerializable"/> objects.</param> public LevelDbProvenBlockHeaderRepository(Network network, DataFolder folder, ILoggerFactory loggerFactory, DataStoreSerializer dataStoreSerializer) : this(network, folder.ProvenBlockHeaderPath, loggerFactory, dataStoreSerializer) { }
/// <summary> /// Initializes logger factory for inherited tests. /// </summary> public TestBase(Network network) { this.Network = network; this.DataStoreSerializer = new DataStoreSerializer(network.Consensus.ConsensusFactory); }
public PollsRepository(DataFolder dataFolder, ILoggerFactory loggerFactory, DataStoreSerializer dataStoreSerializer) : this(dataFolder.PollsPath, loggerFactory, dataStoreSerializer) { }
public RocksDbKeyValueRepository(DataFolder dataFolder, DataStoreSerializer dataStoreSerializer) : this(dataFolder.KeyValueRepositoryPath, dataStoreSerializer) { }