//ver1 public static Transaction NewTransaction(string from, string to, int amount, UTXOSet set) { var inputs = new List <TxInput>(); var outputs = new List <TxOutput>(); var walletBank = new WalletBank(); var wallet = walletBank.FindWallet(from); var pubKeyHash = wallet.PublicKeyHash; var spendableOutputs = set.FindSpendableOutputs(pubKeyHash, amount); var account = spendableOutputs.Item2; var validOutputs = spendableOutputs.Item1; if (account < amount) { Console.WriteLine("Insufficient funds"); return(null); } else { foreach (var output in validOutputs.Keys) { var txId = (output); if (validOutputs.ContainsKey(txId)) { foreach (var @out in validOutputs[txId]) { var input = new TxInput() { Id = HexadecimalEncoding.FromHexStringToByte(txId), Out = @out, Signature = null, PubKey = wallet.PublicKey }; inputs.Add(input); } } } outputs.Add(TxOutput.NewTxOutput(amount, to)); if (account > amount) { outputs.Add(TxOutput.NewTxOutput(account - amount, from)); } } var tx = new Transaction() { Id = null, Inputs = inputs, Outputs = outputs, TimeStamp = DateTime.Now }; tx.Id = tx.CalculateHash(); set.Chain.SignTransaction(tx, wallet.PrivateKey); return(tx); }
public void ReindexUTXO() { var utxoSet = new UTXOSet(this); utxoSet.ReIndex(); var countTxs = utxoSet.CountTransactions(); Console.WriteLine("DONE, there is: " + countTxs + " transactions"); }
public float GetBalance(string address) { var balance = 0; var pubKeyHash = WalletCore.TransferAddressToPkHash(address); var utxoSet = new UTXOSet(this); var utxo = FindUnspentTransactionsOutputs(pubKeyHash); foreach (var output in utxo) { balance += output.Value; } Console.WriteLine("Balance of " + address + ": " + balance); return(balance); }