diff --git a/.changeset/true-mammals-lie.md b/.changeset/true-mammals-lie.md new file mode 100644 index 000000000..bd91112f8 --- /dev/null +++ b/.changeset/true-mammals-lie.md @@ -0,0 +1,5 @@ +--- +"chainlink-deployments-framework": patch +--- + +fix(mcms): improve error handling in confirmTransaction diff --git a/engine/cld/legacy/cli/mcmsv2/mcms_v2.go b/engine/cld/legacy/cli/mcmsv2/mcms_v2.go index 42e28f779..f4dcf62fb 100644 --- a/engine/cld/legacy/cli/mcmsv2/mcms_v2.go +++ b/engine/cld/legacy/cli/mcmsv2/mcms_v2.go @@ -1545,24 +1545,27 @@ func confirmTransaction(ctx context.Context, lggr logger.Logger, tx types.Transa lggr.Infof("Transaction %s confirmed in block %d", tx.Hash, block) return nil } - rcpt, err := chain.Client.TransactionReceipt(ctx, common.HexToHash(tx.Hash)) - if err != nil { - return fmt.Errorf("error getting transaction receipt for %s: %w", tx.Hash, err) + lggr.Errorf("failed to confirm transaction %s: %s", tx.Hash, err) + rcpt, rerr := chain.Client.TransactionReceipt(ctx, common.HexToHash(tx.Hash)) + if rerr != nil { + return fmt.Errorf("failed to get transaction receipt for %s: %w", tx.Hash, rerr) + } + if rcpt == nil { + return fmt.Errorf("got nil receipt for %s", tx.Hash) + } + if rcpt.Status == gethtypes.ReceiptStatusSuccessful { + return nil } - if rcpt != nil && rcpt.Status == 0 && cfg.proposalCtx != nil { + if cfg.proposalCtx != nil { // Decode via simulation to recover revert bytes - if pretty, ok := tryDecodeTxRevertEVM( - ctx, - chain.Client, - tx.RawData.(*gethtypes.Transaction), - bindings.ManyChainMultiSigABI, - rcpt.BlockNumber, - cfg.proposalCtx); ok { + pretty, ok := tryDecodeTxRevertEVM(ctx, chain.Client, tx.RawData.(*gethtypes.Transaction), + bindings.ManyChainMultiSigABI, rcpt.BlockNumber, cfg.proposalCtx) + if ok { return fmt.Errorf("tx %s reverted: %s", tx.Hash, pretty) } } - return err + return fmt.Errorf("transaction %s failed (block number %v): %w", tx.Hash, rcpt.BlockNumber, err) } if family == chainsel.FamilyAptos {