mirror of
https://github.com/LBRYFoundation/lbcwallet.git
synced 2025-08-31 01:11:31 +00:00
Return correct JSON object for listunspent.
This change fixes the reply for listunspent to return a JSON object in the same format as done by the reference implementation. Previously, listunspent would return an array of the same objects as returned for listtransactions.
This commit is contained in:
parent
189df5c535
commit
3f40e256c2
2 changed files with 53 additions and 10 deletions
20
account.go
20
account.go
|
@ -711,11 +711,17 @@ func (a *Account) TotalReceived(confirms int) (float64, error) {
|
||||||
// confirmed checks whether a transaction at height txHeight has met
|
// confirmed checks whether a transaction at height txHeight has met
|
||||||
// minconf confirmations for a blockchain at height curHeight.
|
// minconf confirmations for a blockchain at height curHeight.
|
||||||
func confirmed(minconf int, txHeight, curHeight int32) bool {
|
func confirmed(minconf int, txHeight, curHeight int32) bool {
|
||||||
if minconf == 0 {
|
return confirms(txHeight, curHeight) >= int32(minconf)
|
||||||
return true
|
}
|
||||||
}
|
|
||||||
if txHeight != -1 && int(curHeight-txHeight+1) >= minconf {
|
// confirms returns the number of confirmations for a transaction in a
|
||||||
return true
|
// block at height txHeight (or -1 for an unconfirmed tx) given the chain
|
||||||
}
|
// height curHeight.
|
||||||
return false
|
func confirms(txHeight, curHeight int32) int32 {
|
||||||
|
switch {
|
||||||
|
case txHeight == -1, txHeight > curHeight:
|
||||||
|
return 0
|
||||||
|
default:
|
||||||
|
return curHeight - txHeight + 1
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
43
acctmgr.go
43
acctmgr.go
|
@ -18,6 +18,7 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"container/list"
|
"container/list"
|
||||||
|
"encoding/hex"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/conformal/btcutil"
|
"github.com/conformal/btcutil"
|
||||||
|
@ -574,19 +575,55 @@ func (am *AccountManager) GetTransaction(txsha *btcwire.ShaHash) []accountTx {
|
||||||
// transaction an empty array will be returned.
|
// transaction an empty array will be returned.
|
||||||
func (am *AccountManager) ListUnspent(minconf, maxconf int,
|
func (am *AccountManager) ListUnspent(minconf, maxconf int,
|
||||||
addresses map[string]bool) ([]map[string]interface{}, error) {
|
addresses map[string]bool) ([]map[string]interface{}, error) {
|
||||||
|
|
||||||
bs, err := GetCurBlock()
|
bs, err := GetCurBlock()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
filter := len(addresses) != 0
|
||||||
|
|
||||||
infos := []map[string]interface{}{}
|
infos := []map[string]interface{}{}
|
||||||
for _, a := range am.AllAccounts() {
|
for _, a := range am.AllAccounts() {
|
||||||
for _, record := range a.TxStore.UnspentOutputs() {
|
for _, rtx := range a.TxStore.UnspentOutputs() {
|
||||||
info := record.TxInfo(a.name, bs.Height, cfg.Net())[0]
|
confs := confirms(rtx.Height(), bs.Height)
|
||||||
|
switch {
|
||||||
|
case int(confs) < minconf, int(confs) > maxconf:
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
_, addrs, _, _ := rtx.Addresses(cfg.Net())
|
||||||
|
if filter {
|
||||||
|
for _, addr := range addrs {
|
||||||
|
_, ok := addresses[addr.EncodeAddress()]
|
||||||
|
if ok {
|
||||||
|
goto include
|
||||||
|
}
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
include:
|
||||||
|
outpoint := rtx.OutPoint()
|
||||||
|
info := map[string]interface{}{
|
||||||
|
"txid": outpoint.Hash.String(),
|
||||||
|
"vout": float64(outpoint.Index),
|
||||||
|
"account": a.Name(),
|
||||||
|
"scriptPubKey": hex.EncodeToString(rtx.PkScript()),
|
||||||
|
"amount": float64(rtx.Value()) / 1e8,
|
||||||
|
"confirmations": float64(confs),
|
||||||
|
}
|
||||||
|
|
||||||
|
// BUG: this should be a JSON array so that all
|
||||||
|
// addresses can be included, or removed (and the
|
||||||
|
// caller extracts addresses from the pkScript).
|
||||||
|
if len(addrs) > 0 {
|
||||||
|
info["address"] = addrs[0].EncodeAddress()
|
||||||
|
}
|
||||||
|
|
||||||
infos = append(infos, info)
|
infos = append(infos, info)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return infos, nil
|
return infos, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue