Rework UTXO related functions

This commit is contained in:
Ivan Kuznetsov 2017-09-05 14:33:33 +07:00
parent f4ae5168b0
commit e89846d490
3 changed files with 22 additions and 10 deletions

View File

@ -106,8 +106,24 @@ func (bc *Blockchain) FindUnspentTransactions(address string) []*Transaction {
return unspentTXs return unspentTXs
} }
// FindUTXOs finds and returns unspend transaction outputs for the address // FindUTXO finds and returns all unspent transaction outputs
func (bc *Blockchain) FindUTXOs(address string, amount int) (int, map[string][]int) { func (bc *Blockchain) FindUTXO(address string) []TXOutput {
var UTXOs []TXOutput
unspentTransactions := bc.FindUnspentTransactions(address)
for _, tx := range unspentTransactions {
for _, out := range tx.Vout {
if out.CanBeUnlockedWith(address) {
UTXOs = append(UTXOs, out)
}
}
}
return UTXOs
}
// FindSpendableOutputs finds and returns unspent outputs to reference in inputs
func (bc *Blockchain) FindSpendableOutputs(address string, amount int) (int, map[string][]int) {
unspentOutputs := make(map[string][]int) unspentOutputs := make(map[string][]int)
unspentTXs := bc.FindUnspentTransactions(address) unspentTXs := bc.FindUnspentTransactions(address)
accumulated := 0 accumulated := 0

10
cli.go
View File

@ -22,14 +22,10 @@ func (cli *CLI) getBalance(address string) {
defer bc.db.Close() defer bc.db.Close()
balance := 0 balance := 0
utxs := bc.FindUnspentTransactions(address) UTXOs := bc.FindUTXO(address)
for _, tx := range utxs { for _, out := range UTXOs {
for _, out := range tx.Vout { balance += out.Value
if out.CanBeUnlockedWith(address) {
balance += out.Value
}
}
} }
fmt.Printf("Balance of '%s': %d\n", address, balance) fmt.Printf("Balance of '%s': %d\n", address, balance)

View File

@ -79,7 +79,7 @@ func NewUTXOTransaction(from, to string, value int, bc *Blockchain) *Transaction
var inputs []TXInput var inputs []TXInput
var outputs []TXOutput var outputs []TXOutput
acc, validOutputs := bc.FindUTXOs(from, value) acc, validOutputs := bc.FindSpendableOutputs(from, value)
if acc < value { if acc < value {
log.Panic("ERROR: Not enough funds") log.Panic("ERROR: Not enough funds")