Пример #1
0
        //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);
        }