From b273b9b75e7cf76c7492ec548e831413efdaee3f Mon Sep 17 00:00:00 2001 From: ziggie Date: Sun, 18 Aug 2024 11:46:44 +0200 Subject: [PATCH] api: check for an output to be unspent. --- btc/explorer_api.go | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/btc/explorer_api.go b/btc/explorer_api.go index c36b902..e4c03f6 100644 --- a/btc/explorer_api.go +++ b/btc/explorer_api.go @@ -156,10 +156,23 @@ func (a *ExplorerAPI) Unspent(addr string) ([]*Vout, error) { for _, tx := range txs { for voutIdx, vout := range tx.Vout { if vout.ScriptPubkeyAddr == addr { - vout.Outspend = &Outspend{ - Txid: tx.TXID, - Vin: voutIdx, + // We need to also make sure that the tx is not + // already spent before including it as unspent. + // + // NOTE: Somehow LND sometimes contructs + // channels with the same keyfamily base hence + // the same pubkey. Nees to be investigated on + // the LND side. + url := fmt.Sprintf( + "%s/tx/%s/outspend/%d", a.BaseURL, + tx.TXID, voutIdx, + ) + outspend := Outspend{} + err := fetchJSON(url, &outspend) + if err != nil { + return nil, err } + outputs = append(outputs, vout) } }