//Saves the current BlockChain and uncommitted transaction state to a checkpoint file //{crypto provider name}\checkpoints\{checkpoint files} public string CheckPoint() { Logger.Log("Saving checkpoint"); string checkpointDir = Path.Combine(this.appDir, _cryptoProvider.ProviderName(), "checkpoints"); if (!Directory.Exists(checkpointDir)) { Directory.CreateDirectory(checkpointDir); } string filename = System.DateTime.Now.ToString("yyyyMMddHHmmss") + ".chk"; string filepath = Path.Combine(checkpointDir, filename); using (StreamWriter writer = File.CreateText(filepath)) { string line = ""; line = String.Join("|", NodeId, _cryptoProvider.ProviderName(), _currentTransactions.Count().ToString()); writer.WriteLine(line); CheckPointTransactions(_currentTransactions, writer); writer.WriteLine(_chain.Count()); foreach (Block b in _chain) { line = string.Join("|", b.Index, b.Timestamp, b.Proof, b.PreviousHash, b.Transactions.Count); writer.WriteLine(line); CheckPointTransactions(b.Transactions, writer); } } Logger.Log($"Checkpoint saved : {filename}"); return(filename); }