public LevelDbStorageManager(string baseDirectory, ulong? blocksCacheSize = null, ulong? blocksWriteCacheSize = null, ulong? blockTxesCacheSize = null, ulong? blockTxesWriteCacheSize = null, ulong? chainStateCacheSize = null, ulong? chainStateWriteCacheSize = null, string[] blockTxesStorageLocations = null) { this.baseDirectory = baseDirectory; this.blockTxesStorageLocations = blockTxesStorageLocations; blockStorage = new Lazy<LevelDb.LevelDbBlockStorage>(() => new LevelDbBlockStorage(this.baseDirectory, blocksCacheSize, blocksWriteCacheSize)); blockTxesStorage = new Lazy<IBlockTxesStorage>(() => { if (blockTxesStorageLocations == null) return new LevelDbBlockTxesStorage(this.baseDirectory, blockTxesCacheSize, blockTxesWriteCacheSize); else return new SplitBlockTxesStorage(blockTxesStorageLocations, path => new LevelDbBlockTxesStorage(path, blockTxesCacheSize, blockTxesWriteCacheSize)); }); chainStateManager = new Lazy<LevelDbChainStateManager>(() => new LevelDbChainStateManager(this.baseDirectory, chainStateCacheSize, chainStateWriteCacheSize)); this.memoryStorageManager = new Lazy<MemoryStorageManager>(() => { // create memory storage with the unconfirmed txes chain tip already in sync with chain state ChainedHeader chainTip; using (var handle = OpenChainStateCursor()) { handle.Item.BeginTransaction(readOnly: true); chainTip = handle.Item.ChainTip; } var memoryStorageManager = new MemoryStorageManager(); using (var handle = memoryStorageManager.OpenUnconfirmedTxesCursor()) { handle.Item.BeginTransaction(); handle.Item.ChainTip = chainTip; handle.Item.CommitTransaction(); } return memoryStorageManager; }); }
public EsentStorageManager(string baseDirectory, string[] blockTxesStorageLocations = null) { this.baseDirectory = baseDirectory; this.blockTxesStorageLocations = blockTxesStorageLocations; this.blockStorage = new Lazy<Esent.EsentBlockStorage>(() => new EsentBlockStorage(this.baseDirectory)); this.blockTxesStorage = new Lazy<IBlockTxesStorage>(() => { if (blockTxesStorageLocations == null) return new EsentBlockTxesStorage(this.baseDirectory); else return new SplitBlockTxesStorage(blockTxesStorageLocations, path => new EsentBlockTxesStorage(path)); }); this.chainStateManager = new Lazy<EsentChainStateManager>(() => new EsentChainStateManager(this.baseDirectory)); this.memoryStorageManager = new Lazy<MemoryStorageManager>(() => { // create memory storage with the unconfirmed txes chain tip already in sync with chain state ChainedHeader chainTip; using (var handle = OpenChainStateCursor()) { handle.Item.BeginTransaction(readOnly: true); chainTip = handle.Item.ChainTip; } var memoryStorageManager = new MemoryStorageManager(); using (var handle = memoryStorageManager.OpenUnconfirmedTxesCursor()) { handle.Item.BeginTransaction(); handle.Item.ChainTip = chainTip; handle.Item.CommitTransaction(); } return memoryStorageManager; }); }