lnwallet/btcwallet: fix bug in GetUtxo for BlockChainIO implementation
This commit fixes an unnoticed bug within btcwallet’s implementation of the BlockChainIO interface, specifically the GetUtxo method. In order to maintain compatibility with Bitcoin Core’s gettxout method, btcd doesn’t return an error if the targeted output is actually spent. We weren’t properly detecting this, but we do now by creating a new error which is returned in the case of a nil error but a nil return value.
This commit is contained in:
parent
98471256fa
commit
473f298524
@ -2,11 +2,18 @@ package btcwallet
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
|
"errors"
|
||||||
|
|
||||||
"github.com/lightningnetwork/lnd/lnwallet"
|
"github.com/lightningnetwork/lnd/lnwallet"
|
||||||
"github.com/roasbeef/btcd/wire"
|
"github.com/roasbeef/btcd/wire"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
// ErrOutputSpent is returned by the GetUtxo method if the target output
|
||||||
|
// for lookup has already been spent.
|
||||||
|
ErrOutputSpent = errors.New("target output has been spent")
|
||||||
|
)
|
||||||
|
|
||||||
// GetBestBlock returns the current height and hash of the best known block
|
// GetBestBlock returns the current height and hash of the best known block
|
||||||
// within the main chain.
|
// within the main chain.
|
||||||
//
|
//
|
||||||
@ -22,6 +29,8 @@ func (b *BtcWallet) GetUtxo(txid *wire.ShaHash, index uint32) (*wire.TxOut, erro
|
|||||||
txout, err := b.rpc.GetTxOut(txid, index, false)
|
txout, err := b.rpc.GetTxOut(txid, index, false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
} else if txout == nil {
|
||||||
|
return nil, ErrOutputSpent
|
||||||
}
|
}
|
||||||
|
|
||||||
pkScript, err := hex.DecodeString(txout.ScriptPubKey.Hex)
|
pkScript, err := hex.DecodeString(txout.ScriptPubKey.Hex)
|
||||||
|
Loading…
Reference in New Issue
Block a user