From e98bbf1a2c92a310b42cece43c0af7a3730713bb Mon Sep 17 00:00:00 2001 From: Pavel Shibaev Date: Wed, 2 Oct 2024 16:58:02 +0200 Subject: [PATCH] (fix) Fail fast on the nonzero code during the sync broadcast - 2 --- client/chain/chain.go | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/client/chain/chain.go b/client/chain/chain.go index 5293f8b9..34917f9a 100644 --- a/client/chain/chain.go +++ b/client/chain/chain.go @@ -839,8 +839,23 @@ func (c *chainClient) SyncBroadcastSignedTx(txBytes []byte) (*txtypes.BroadcastT awaitCtx, cancelFn := context.WithTimeout(context.Background(), defaultBroadcastTimeout) defer cancelFn() - txHash, _ := hex.DecodeString(res.TxResponse.TxHash) + resultTx, err := c.ctx.Client.Tx(awaitCtx, txHash, false) + if err != nil { + if errRes := client.CheckCometError(err, txBytes); errRes != nil { + return &txtypes.BroadcastTxResponse{TxResponse: errRes}, err + } + } else if resultTx.TxResult.Code != 0 { + resResultTx := sdk.NewResponseResultTx(resultTx, res.TxResponse.Tx, res.TxResponse.Timestamp) + res = &txtypes.BroadcastTxResponse{TxResponse: resResultTx} + panic(errors.New(fmt.Sprintf("Failed with non-zero code %d", resultTx.TxResult.Code))) + return res, errors.New(fmt.Sprintf("Failed with non-zero code %d", resultTx.TxResult.Code)) + } else if resultTx.Height > 0 { + resResultTx := sdk.NewResponseResultTx(resultTx, res.TxResponse.Tx, res.TxResponse.Timestamp) + res = &txtypes.BroadcastTxResponse{TxResponse: resResultTx} + return res, err + } + t := time.NewTimer(defaultBroadcastStatusPoll) for { @@ -859,10 +874,14 @@ func (c *chainClient) SyncBroadcastSignedTx(txBytes []byte) (*txtypes.BroadcastT t.Reset(defaultBroadcastStatusPoll) continue + } else if resultTx.TxResult.Code != 0 { + resResultTx := sdk.NewResponseResultTx(resultTx, res.TxResponse.Tx, res.TxResponse.Timestamp) + res = &txtypes.BroadcastTxResponse{TxResponse: resResultTx} + panic(errors.New(fmt.Sprintf("Failed with non-zero code %d", resultTx.TxResult.Code))) + return res, errors.New(fmt.Sprintf("Failed with non-zero code %d", resultTx.TxResult.Code)) } else if resultTx.Height > 0 { resResultTx := sdk.NewResponseResultTx(resultTx, res.TxResponse.Tx, res.TxResponse.Timestamp) res = &txtypes.BroadcastTxResponse{TxResponse: resResultTx} - t.Stop() return res, err }