Rework Blockchain.FindUTXOs
This commit is contained in:
parent
95d3f69363
commit
f83ccd7b4c
|
@ -58,17 +58,15 @@ func (bc *Blockchain) AddBlock(transactions []*Transaction) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// FindUTXOs finds and returns unspend transaction outputs for the address
|
// FindUnspentTransactions returns a list of transactions containing unspent outputs for an address
|
||||||
func (bc *Blockchain) FindUTXOs(address string, amount int) (int, map[string][]int) {
|
func (bc *Blockchain) FindUnspentTransactions(address string) []*Transaction {
|
||||||
var spentTXs map[string][]int
|
var spentTXs map[string][]int
|
||||||
var unspentTXs map[string][]int
|
var unspentTXs []*Transaction
|
||||||
accumulated := 0
|
|
||||||
bci := bc.Iterator()
|
bci := bc.Iterator()
|
||||||
|
|
||||||
for {
|
for {
|
||||||
block := bci.Next()
|
block := bci.Next()
|
||||||
|
|
||||||
Work:
|
|
||||||
for _, tx := range block.Transactions {
|
for _, tx := range block.Transactions {
|
||||||
txid := string(tx.GetHash())
|
txid := string(tx.GetHash())
|
||||||
|
|
||||||
|
@ -82,13 +80,8 @@ func (bc *Blockchain) FindUTXOs(address string, amount int) (int, map[string][]i
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if out.Unlock(address) && accumulated < amount {
|
if out.Unlock(address) {
|
||||||
accumulated += out.Value
|
unspentTXs = append(unspentTXs, tx)
|
||||||
unspentTXs[txid] = append(unspentTXs[txid], outid)
|
|
||||||
|
|
||||||
if accumulated >= amount {
|
|
||||||
break Work
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,7 +99,37 @@ func (bc *Blockchain) FindUTXOs(address string, amount int) (int, map[string][]i
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return accumulated, unspentTXs
|
return unspentTXs
|
||||||
|
}
|
||||||
|
|
||||||
|
// FindUTXOs finds and returns unspend transaction outputs for the address
|
||||||
|
func (bc *Blockchain) FindUTXOs(address string, amount int) (int, map[string][]int) {
|
||||||
|
var unspentOutputs map[string][]int
|
||||||
|
unspentTXs := bc.FindUnspentTransactions(address)
|
||||||
|
accumulated := 0
|
||||||
|
|
||||||
|
// TODO: Fix this
|
||||||
|
if amount == -1 {
|
||||||
|
accumulated = -2
|
||||||
|
}
|
||||||
|
|
||||||
|
Work:
|
||||||
|
for _, tx := range unspentTXs {
|
||||||
|
txid := string(tx.GetHash())
|
||||||
|
|
||||||
|
for outid, out := range tx.Vout {
|
||||||
|
if out.Unlock(address) && accumulated < amount {
|
||||||
|
accumulated += out.Value
|
||||||
|
unspentOutputs[txid] = append(unspentOutputs[txid], outid)
|
||||||
|
|
||||||
|
if accumulated >= amount {
|
||||||
|
break Work
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return accumulated, unspentOutputs
|
||||||
}
|
}
|
||||||
|
|
||||||
// Iterator ...
|
// Iterator ...
|
||||||
|
|
Loading…
Reference in New Issue