public Transaction AddTransaction(string from, string to, decimal amount, IWalletProvider walletProvider) { this.CalculateBalances(0); if (balances.ContainsKey(from) && balances[from] < amount) { Console.WriteLine("Not enought coins..."); return(null); } var publicKeyHex = CryptographyUtilities.BytesToHex(walletProvider.PublicKey.GetEncoded()); var transaction = new Transaction() { From = from, To = to, Value = amount, SenderPublicKey = publicKeyHex }; string transactionJson = JsonConvert.SerializeObject(transaction, new JsonSerializerSettings() { ReferenceLoopHandling = ReferenceLoopHandling.Ignore }); var transactionHash = CryptographyUtilities.BytesToHex(CryptographyUtilities.CalcSHA256(transactionJson)); var signiture = walletProvider.SignTransaction(Encoding.UTF8.GetBytes(transactionHash)); transaction.TransactionHash = transactionHash; transaction.SenderSignature = signiture; this.pendingTransactions.Add(transaction); StorageFileProvider <Transaction[]> .SetModel(Constants.PendingTransactionsFilePath, this.pendingTransactions.ToArray()); Console.WriteLine("Transaction is pending..."); return(transaction); }