From 37301962cf43f7eaa2b74b5d0732627d95458a66 Mon Sep 17 00:00:00 2001 From: Calvin Kim Date: Sun, 5 Nov 2023 16:46:25 +0900 Subject: [PATCH] main: fix csn serve tx bug Fixes a bug where a csn would crash upon serving a tx to a peer. --- server.go | 57 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/server.go b/server.go index 93ab679d..d487ad7c 100644 --- a/server.go +++ b/server.go @@ -1529,35 +1529,46 @@ func (s *server) pushTxMsg(sp *serverPeer, hash *chainhash.Hash, doneChan chan<- return err } - leafDatas, err := blockchain.TxToDelLeaves(tx, s.chain) - if err != nil { - chanLog.Errorf(err.Error()) - if doneChan != nil { - doneChan <- struct{}{} - } - return err - } - - var ud *wire.UData - // We already checked that at least one is active. Pick one and // generate the UData. if s.utreexoProofIndex != nil { - ud, err = s.utreexoProofIndex.GenerateUData(leafDatas) + leafDatas, err := blockchain.TxToDelLeaves(tx, s.chain) + if err != nil { + chanLog.Errorf(err.Error()) + if doneChan != nil { + doneChan <- struct{}{} + } + return err + } + ud, err := s.utreexoProofIndex.GenerateUData(leafDatas) + if err != nil { + chanLog.Errorf(err.Error()) + if doneChan != nil { + doneChan <- struct{}{} + } + return err + } + tx.MsgTx().UData = ud + } else if s.flatUtreexoProofIndex != nil { - ud, err = s.flatUtreexoProofIndex.GenerateUData(leafDatas) - } else { - ud, err = s.chain.GenerateUData(leafDatas) - } - if err != nil { - chanLog.Errorf(err.Error()) - if doneChan != nil { - doneChan <- struct{}{} + leafDatas, err := blockchain.TxToDelLeaves(tx, s.chain) + if err != nil { + chanLog.Errorf(err.Error()) + if doneChan != nil { + doneChan <- struct{}{} + } + return err } - return err + ud, err := s.flatUtreexoProofIndex.GenerateUData(leafDatas) + if err != nil { + chanLog.Errorf(err.Error()) + if doneChan != nil { + doneChan <- struct{}{} + } + return err + } + tx.MsgTx().UData = ud } - - tx.MsgTx().UData = ud } // Once we have fetched data wait for any previous operation to finish.