Exemple #1
0
        //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);
        }
Exemple #2
0
        public void ReindexUTXO()
        {
            var utxoSet = new UTXOSet(this);

            utxoSet.ReIndex();

            var countTxs = utxoSet.CountTransactions();

            Console.WriteLine("DONE, there is: " + countTxs + " transactions");
        }
Exemple #3
0
        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);
        }