From 5ca5039cf2bf5dcd0ee872c72f162bce8b59f22f Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Tue, 11 Jul 2023 15:11:52 +0200 Subject: [PATCH] fix: changed the data type for FeePayer and FeeGranter (backport #16272) (#16920) Co-authored-by: Vishal Potpelliwar <71565171+vishal-kanna@users.noreply.github.com> --- CHANGELOG.md | 1 + types/tx_msg.go | 2 +- x/auth/ante/fee.go | 7 ++----- x/auth/tx/builder.go | 6 +++--- x/auth/tx/builder_test.go | 2 +- x/auth/tx/direct_aux.go | 11 +++-------- x/auth/tx/direct_aux_test.go | 2 +- 7 files changed, 12 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f67adc6d1ab5..72e26e9852f2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -51,6 +51,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### API Breaking Changes +* (types) [#16272](https://github.com/cosmos/cosmos-sdk/pull/16272) From now the `FeeGranter` in the `FeeTx` interface takes the byte type instead of string. * (testutil) [#16899](https://github.com/cosmos/cosmos-sdk/pull/16899) The *cli testutil* `QueryBalancesExec` has been removed. Use the gRPC or REST query instead. * (x/auth) [#16650](https://github.com/cosmos/cosmos-sdk/pull/16650) The *cli testutil* `QueryAccountExec` has been removed. Use the gRPC or REST query instead. * (types/math) [#16040](https://github.com/cosmos/cosmos-sdk/pull/16798) Remove aliases in `types/math.go` (part 2). diff --git a/types/tx_msg.go b/types/tx_msg.go index 898a8f6ea6d3..230092ad2181 100644 --- a/types/tx_msg.go +++ b/types/tx_msg.go @@ -61,7 +61,7 @@ type ( GetGas() uint64 GetFee() Coins FeePayer() []byte - FeeGranter() string + FeeGranter() []byte } // TxWithMemo must have GetMemo() method to use ValidateMemoDecorator diff --git a/x/auth/ante/fee.go b/x/auth/ante/fee.go index b6131d59e1fc..d28f9f999752 100644 --- a/x/auth/ante/fee.go +++ b/x/auth/ante/fee.go @@ -86,11 +86,8 @@ func (dfd DeductFeeDecorator) checkDeductFee(ctx sdk.Context, sdkTx sdk.Tx, fee // if feegranter set deduct fee from feegranter account. // this works with only when feegrant enabled. - if feeGranter != "" { - feeGranterAddr, err := sdk.AccAddressFromBech32(feeGranter) - if err != nil { - return err - } + if feeGranter != nil { + feeGranterAddr := sdk.AccAddress(feeGranter) if dfd.feegrantKeeper == nil { return sdkerrors.ErrInvalidRequest.Wrap("fee grants are not enabled") diff --git a/x/auth/tx/builder.go b/x/auth/tx/builder.go index 7cd594235873..d5c9af1b48f8 100644 --- a/x/auth/tx/builder.go +++ b/x/auth/tx/builder.go @@ -210,12 +210,12 @@ func (w *wrapper) FeePayer() []byte { return signers[0] } -func (w *wrapper) FeeGranter() string { +func (w *wrapper) FeeGranter() []byte { feeGranter := w.tx.AuthInfo.Fee.Granter if feeGranter != "" { - return feeGranter + return sdk.MustAccAddressFromBech32(feeGranter) } - return "" + return nil } func (w *wrapper) GetTip() *tx.Tip { diff --git a/x/auth/tx/builder_test.go b/x/auth/tx/builder_test.go index c817b1718d80..31583bc8ad4e 100644 --- a/x/auth/tx/builder_test.go +++ b/x/auth/tx/builder_test.go @@ -317,5 +317,5 @@ func TestBuilderFeeGranter(t *testing.T) { // set fee granter txBuilder.SetFeeGranter(addr1) - require.Equal(t, addr1.String(), txBuilder.GetTx().FeeGranter()) + require.Equal(t, addr1.String(), sdk.AccAddress(txBuilder.GetTx().FeeGranter()).String()) } diff --git a/x/auth/tx/direct_aux.go b/x/auth/tx/direct_aux.go index 75671a0fc409..31a3d9572384 100644 --- a/x/auth/tx/direct_aux.go +++ b/x/auth/tx/direct_aux.go @@ -1,8 +1,8 @@ package tx import ( - "bytes" "fmt" + "strings" errorsmod "cosmossdk.io/errors" @@ -56,13 +56,8 @@ func (signModeDirectAuxHandler) GetSignBytes( // Fee payer cannot use SIGN_MODE_DIRECT_AUX, because SIGN_MODE_DIRECT_AUX // does not sign over fees, which would create malleability issues. - addrBz, err := sdk.AccAddressFromBech32(data.Address) - if err != nil { - return nil, err - } - - if bytes.Equal(feePayer, addrBz) { - return nil, sdkerrors.ErrUnauthorized.Wrapf("fee payer %s cannot sign with %s", feePayer, signingtypes.SignMode_SIGN_MODE_DIRECT_AUX) + if strings.EqualFold(sdk.AccAddress(feePayer).String(), data.Address) { + return nil, sdkerrors.ErrUnauthorized.Wrapf("fee payer %s cannot sign with %s", sdk.AccAddress(feePayer).String(), signingtypes.SignMode_SIGN_MODE_DIRECT_AUX) } signDocDirectAux := types.SignDocDirectAux{ diff --git a/x/auth/tx/direct_aux_test.go b/x/auth/tx/direct_aux_test.go index 32f76b17fbb8..4b6ad3d8c320 100644 --- a/x/auth/tx/direct_aux_test.go +++ b/x/auth/tx/direct_aux_test.go @@ -82,7 +82,7 @@ func TestDirectAuxHandler(t *testing.T) { t.Log("verify fee payer cannot use SIGN_MODE_DIRECT_AUX") _, err = modeHandler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_DIRECT_AUX, feePayerSigningData, txBuilder.GetTx()) - require.EqualError(t, err, fmt.Sprintf("fee payer %s cannot sign with %s: unauthorized", []byte(feePayerAddr), signingtypes.SignMode_SIGN_MODE_DIRECT_AUX)) + require.EqualError(t, err, fmt.Sprintf("fee payer %s cannot sign with %s: unauthorized", feePayerAddr.String(), signingtypes.SignMode_SIGN_MODE_DIRECT_AUX)) t.Log("verify GetSignBytes with generating sign bytes by marshaling signDocDirectAux") signBytes, err := modeHandler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_DIRECT_AUX, signingData, txBuilder.GetTx())