From 02b0a7c18d80396a4263dad308077166809f04a4 Mon Sep 17 00:00:00 2001 From: Wilmer Paulino Date: Wed, 10 Jul 2019 15:56:44 -0700 Subject: [PATCH] wallet: fix nil txid in publishTransaction A nil txid could've been returned from publishTransaction even if it was successful. This was due to the underlying SendRawTransaction call "failing", e.g., when the transaction being broadcast has already confirmed, but publishTranasction interpreting such failure as a success. --- wallet/wallet.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/wallet/wallet.go b/wallet/wallet.go index fe52cb2..f2f9b07 100644 --- a/wallet/wallet.go +++ b/wallet/wallet.go @@ -3369,7 +3369,7 @@ func (w *Wallet) publishTransaction(tx *wire.MsgTx) (*chainhash.Hash, error) { return nil, err } - txid, err := chainClient.SendRawTransaction(tx, false) + _, err = chainClient.SendRawTransaction(tx, false) // Determine if this was an RPC error thrown due to the transaction // already confirming. @@ -3378,9 +3378,10 @@ func (w *Wallet) publishTransaction(tx *wire.MsgTx) (*chainhash.Hash, error) { rpcTxConfirmed = rpcErr.Code == btcjson.ErrRPCTxAlreadyInChain } + txid := tx.TxHash() switch { case err == nil: - return txid, nil + return &txid, nil // Since we have different backends that can be used with the wallet, // we'll need to check specific errors for each one. @@ -3399,7 +3400,7 @@ func (w *Wallet) publishTransaction(tx *wire.MsgTx) (*chainhash.Hash, error) { case strings.Contains( strings.ToLower(err.Error()), "txn-already-in-mempool", ): - return txid, nil + return &txid, nil // If the transaction has already confirmed, we can safely remove it // from the unconfirmed store as it should already exist within the @@ -3434,7 +3435,7 @@ func (w *Wallet) publishTransaction(tx *wire.MsgTx) (*chainhash.Hash, error) { "from unconfirmed store: %v", tx.TxHash(), dbErr) } - return txid, nil + return &txid, nil // If the transaction was rejected for whatever other reason, then we'll // remove it from the transaction store, as otherwise, we'll attempt to