public WriteBatch CreateWriteBatch() { var writeBatch = new WriteBatch(); try { foreach (var update in updates) { var txIndex = update.Key; var blockTxNode = update.Value; var key = DbEncoder.EncodeBlockHashTxIndex(blockHash, txIndex); if (blockTxNode != null) { writeBatch.Put(key, DataEncoder.EncodeBlockTxNode(blockTxNode)); } else { writeBatch.Delete(key); } } return(writeBatch); } catch (Exception) { writeBatch.Dispose(); throw; } }
public bool TryAddBlockTransactions(UInt256 blockHash, IEnumerable <EncodedTx> blockTxes) { if (ContainsBlock(blockHash)) { return(false); } var writeBatch = new WriteBatch(); try { int txCount; using (var snapshot = db.GetSnapshot()) { var readOptions = new ReadOptions { Snapshot = snapshot }; var txIndex = 0; foreach (var tx in blockTxes) { var key = DbEncoder.EncodeBlockHashTxIndex(blockHash, txIndex); Slice existingValue; if (db.TryGet(readOptions, key, out existingValue)) { return(false); } var blockTx = new BlockTx(txIndex, tx); var value = DataEncoder.EncodeBlockTxNode(blockTx); writeBatch.Put(key, value); txIndex++; } txCount = txIndex; } return(TryAddBlockInner(blockHash, txCount, writeBatch)); } finally { writeBatch.Dispose(); } }