diff --git a/CHANGELOG.md b/CHANGELOG.md index dcb7f0ea9130..9c32cf5f40ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -97,7 +97,6 @@ Ref: https://keepachangelog.com/en/1.0.0/ * Move Msg routers from BaseApp to middlewares. * Move Baseapp panic recovery into a middleware. * Rename simulation helper methods `baseapp.{Check,Deliver}` to `baseapp.Sim{Check,Deliver}`. -* [\#10322](https://github.com/cosmos/cosmos-sdk/pull/10322) The `tx.NewTxConfig` function takes a new parameter of type `address.Codec` used to encode and decode addresses. As such, a new field `AddressCdc` has been added to `simapp.EncodingConfig`. ### Client Breaking Changes diff --git a/client/tx/legacy_test.go b/client/tx/legacy_test.go index 94c43301eb07..65949a038fa1 100644 --- a/client/tx/legacy_test.go +++ b/client/tx/legacy_test.go @@ -61,7 +61,7 @@ type TestSuite struct { func (s *TestSuite) SetupSuite() { encCfg := simapp.MakeTestEncodingConfig() s.encCfg = encCfg - s.protoCfg = tx.NewTxConfig(codec.NewProtoCodec(encCfg.InterfaceRegistry), tx.DefaultSignModes, s.encCfg.AddressCdc) + s.protoCfg = tx.NewTxConfig(codec.NewProtoCodec(encCfg.InterfaceRegistry), tx.DefaultSignModes) s.aminoCfg = legacytx.StdTxConfig{Cdc: encCfg.Amino} } diff --git a/client/tx/tx.go b/client/tx/tx.go index 0a4adde5ac10..737a528cff0e 100644 --- a/client/tx/tx.go +++ b/client/tx/tx.go @@ -207,10 +207,24 @@ func Sign(txf Factory, name string, txBuilder client.TxBuilder, overwriteSig boo return err } + pubkeys, err := txBuilder.GetTx().GetPubKeys() + if err != nil { + return err + } + + signerIndex := 0 + for i, p := range pubkeys { + if p.Equals(pubKey) { + signerIndex = i + break + } + } + signerData := authsigning.SignerData{ ChainID: txf.chainID, AccountNumber: txf.accountNumber, Sequence: txf.sequence, + SignerIndex: signerIndex, Address: sdk.AccAddress(pubKey.Address()).String(), } diff --git a/server/rosetta/client_online.go b/server/rosetta/client_online.go index eebaa67e1e9e..ca00a1ff5ac7 100644 --- a/server/rosetta/client_online.go +++ b/server/rosetta/client_online.go @@ -20,7 +20,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" grpctypes "github.com/cosmos/cosmos-sdk/types/grpc" "github.com/cosmos/cosmos-sdk/version" - "github.com/cosmos/cosmos-sdk/x/auth/address" authtx "github.com/cosmos/cosmos-sdk/x/auth/tx" auth "github.com/cosmos/cosmos-sdk/x/auth/types" bank "github.com/cosmos/cosmos-sdk/x/bank/types" @@ -56,7 +55,7 @@ func NewClient(cfg *Config) (*Client, error) { v = "unknown" } - txConfig := authtx.NewTxConfig(cfg.Codec, authtx.DefaultSignModes, address.NewBech32Codec(sdk.Bech32MainPrefix)) + txConfig := authtx.NewTxConfig(cfg.Codec, authtx.DefaultSignModes) var supportedOperations []string for _, ii := range cfg.InterfaceRegistry.ListImplementations(sdk.MsgInterfaceProtoName) { diff --git a/server/rosetta/converter.go b/server/rosetta/converter.go index 7a7f6e019896..3591605eaadb 100644 --- a/server/rosetta/converter.go +++ b/server/rosetta/converter.go @@ -726,6 +726,7 @@ func (c converter) SigningComponents(tx authsigning.Tx, metadata *ConstructionMe ChainID: metadata.ChainID, AccountNumber: metadata.SignersData[i].AccountNumber, Sequence: metadata.SignersData[i].Sequence, + SignerIndex: i, } // get signature bytes diff --git a/server/rosetta/converter_test.go b/server/rosetta/converter_test.go index f7e2b36a46b4..1177d33405df 100644 --- a/server/rosetta/converter_test.go +++ b/server/rosetta/converter_test.go @@ -7,7 +7,6 @@ import ( abci "github.com/tendermint/tendermint/abci/types" - "github.com/cosmos/cosmos-sdk/x/auth/address" authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" "github.com/cosmos/cosmos-sdk/client" @@ -45,7 +44,7 @@ func (s *ConverterTestSuite) SetupTest() { s.unsignedTxBytes = unsignedTxBytes // instantiate converter cdc, ir := rosetta.MakeCodec() - txConfig := authtx.NewTxConfig(cdc, authtx.DefaultSignModes, address.NewBech32Codec(sdk.Bech32MainPrefix)) + txConfig := authtx.NewTxConfig(cdc, authtx.DefaultSignModes) s.c = rosetta.NewConverter(cdc, ir, txConfig) // add utils s.ir = ir diff --git a/simapp/helpers/test_helpers.go b/simapp/helpers/test_helpers.go index 3c7b8ca42bad..887bc8d3da27 100644 --- a/simapp/helpers/test_helpers.go +++ b/simapp/helpers/test_helpers.go @@ -61,6 +61,7 @@ func GenTx(gen client.TxConfig, msgs []sdk.Msg, feeAmt sdk.Coins, gas uint64, ch ChainID: chainID, AccountNumber: accNums[i], Sequence: accSeqs[i], + SignerIndex: i, } signBytes, err := gen.SignModeHandler().GetSignBytes(signMode, signerData, tx.GetTx()) if err != nil { diff --git a/simapp/params/amino.go b/simapp/params/amino.go index 39bf4d54e5c5..7ae119f5f3d6 100644 --- a/simapp/params/amino.go +++ b/simapp/params/amino.go @@ -17,10 +17,8 @@ func MakeTestEncodingConfig() EncodingConfig { cdc := codec.NewLegacyAmino() interfaceRegistry := types.NewInterfaceRegistry() marshaler := codec.NewAminoCodec(cdc) - addressCdc := address.NewBech32Codec(sdk.Bech32MainPrefix) return EncodingConfig{ - AddressCdc: addressCdc, InterfaceRegistry: interfaceRegistry, Marshaler: marshaler, TxConfig: legacytx.StdTxConfig{Cdc: cdc}, diff --git a/simapp/params/encoding.go b/simapp/params/encoding.go index edbf0ca0cd2b..8ff9ea04b39b 100644 --- a/simapp/params/encoding.go +++ b/simapp/params/encoding.go @@ -4,13 +4,11 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/codec/types" - "github.com/cosmos/cosmos-sdk/x/auth/address" ) // EncodingConfig specifies the concrete encoding types to use for a given app. // This is provided for compatibility between protobuf and amino implementations. type EncodingConfig struct { - AddressCdc address.Codec InterfaceRegistry types.InterfaceRegistry Codec codec.Codec TxConfig client.TxConfig diff --git a/simapp/params/proto.go b/simapp/params/proto.go index 905eaf1ae06e..2a38fff04008 100644 --- a/simapp/params/proto.go +++ b/simapp/params/proto.go @@ -6,8 +6,6 @@ package params import ( "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/codec/types" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/auth/address" "github.com/cosmos/cosmos-sdk/x/auth/tx" ) @@ -19,13 +17,11 @@ func MakeTestEncodingConfig() EncodingConfig { cdc := codec.NewLegacyAmino() interfaceRegistry := types.NewInterfaceRegistry() codec := codec.NewProtoCodec(interfaceRegistry) - addressCdc := address.NewBech32Codec(sdk.Bech32MainPrefix) return EncodingConfig{ - AddressCdc: addressCdc, InterfaceRegistry: interfaceRegistry, Codec: codec, - TxConfig: tx.NewTxConfig(codec, tx.DefaultSignModes, addressCdc), + TxConfig: tx.NewTxConfig(codec, tx.DefaultSignModes), Amino: cdc, } } diff --git a/x/auth/address/codec.go b/types/address/codec.go similarity index 100% rename from x/auth/address/codec.go rename to types/address/codec.go diff --git a/x/auth/client/cli/tx_multisign.go b/x/auth/client/cli/tx_multisign.go index 77358de95a07..f22a2f530f04 100644 --- a/x/auth/client/cli/tx_multisign.go +++ b/x/auth/client/cli/tx_multisign.go @@ -134,6 +134,7 @@ func makeMultiSignCmd() func(cmd *cobra.Command, args []string) (err error) { ChainID: txFactory.ChainID(), AccountNumber: txFactory.AccountNumber(), Sequence: txFactory.Sequence(), + SignerIndex: i, } err = signing.VerifySignature(sig.PubKey, signingData, sig.Data, txCfg.SignModeHandler(), txBuilder.GetTx()) @@ -328,6 +329,7 @@ func makeBatchMultisignCmd() func(cmd *cobra.Command, args []string) error { ChainID: txFactory.ChainID(), AccountNumber: txFactory.AccountNumber(), Sequence: txFactory.Sequence(), + SignerIndex: i, } for _, sig := range signatureBatch { diff --git a/x/auth/client/cli/validate_sigs.go b/x/auth/client/cli/validate_sigs.go index 51e46e84c411..9a0911d3a8a3 100644 --- a/x/auth/client/cli/validate_sigs.go +++ b/x/auth/client/cli/validate_sigs.go @@ -110,6 +110,7 @@ func printAndValidateSigs( ChainID: chainID, AccountNumber: accNum, Sequence: accSeq, + SignerIndex: i, } err = authsigning.VerifySignature(pubKey, signingData, sig.Data, signModeHandler, sigTx) if err != nil { diff --git a/x/auth/address/bech32.go b/x/auth/keeper/bech32_codec.go similarity index 56% rename from x/auth/address/bech32.go rename to x/auth/keeper/bech32_codec.go index b0adde5a69ab..ea9ba7c3e343 100644 --- a/x/auth/address/bech32.go +++ b/x/auth/keeper/bech32_codec.go @@ -1,31 +1,32 @@ -package address +package keeper import ( sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/address" "github.com/cosmos/cosmos-sdk/types/bech32" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) -// Bech32Codec is a address.Codec based on bech32 encoding. -type Bech32Codec struct { - Bech32Prefix string +// bech32Codec is a address.Codec based on bech32 encoding. +type bech32Codec struct { + bech32Prefix string } -var _ Codec = &Bech32Codec{} +var _ address.Codec = &bech32Codec{} // NewBech32Codec creates a new address.Codec based on bech32 encoding. -func NewBech32Codec(prefix string) Codec { - return Bech32Codec{prefix} +func newBech32Codec(prefix string) address.Codec { + return bech32Codec{prefix} } // StringToBytes encodes text to bytes. -func (bc Bech32Codec) StringToBytes(text string) ([]byte, error) { +func (bc bech32Codec) StringToBytes(text string) ([]byte, error) { hrp, bz, err := bech32.DecodeAndConvert(text) if err != nil { return nil, err } - if hrp != bc.Bech32Prefix { + if hrp != bc.bech32Prefix { return nil, sdkerrors.Wrap(sdkerrors.ErrLogic, "hrp does not match bech32Prefix") } @@ -37,8 +38,8 @@ func (bc Bech32Codec) StringToBytes(text string) ([]byte, error) { } // BytesToString decodes bytes to text. -func (bc Bech32Codec) BytesToString(bz []byte) (string, error) { - text, err := bech32.ConvertAndEncode(bc.Bech32Prefix, bz) +func (bc bech32Codec) BytesToString(bz []byte) (string, error) { + text, err := bech32.ConvertAndEncode(bc.bech32Prefix, bz) if err != nil { return "", err } diff --git a/x/auth/keeper/keeper.go b/x/auth/keeper/keeper.go index 16a6e83e475b..2039cae91906 100644 --- a/x/auth/keeper/keeper.go +++ b/x/auth/keeper/keeper.go @@ -11,8 +11,8 @@ import ( cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" storetypes "github.com/cosmos/cosmos-sdk/store/types" sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/address" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/cosmos/cosmos-sdk/x/auth/address" "github.com/cosmos/cosmos-sdk/x/auth/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" ) @@ -86,7 +86,7 @@ func NewAccountKeeper( permAddrs[name] = types.NewPermissionsForAddress(name, perms) } - bech32Codec := address.NewBech32Codec(bech32Prefix) + bech32Codec := newBech32Codec(bech32Prefix) return AccountKeeper{ key: key, @@ -246,10 +246,10 @@ func (ak AccountKeeper) GetCodec() codec.BinaryCodec { return ak.cdc } // add getter for bech32Prefix func (ak AccountKeeper) getBech32Prefix() (string, error) { - bech32Codec, ok := ak.addressCdc.(address.Bech32Codec) + bech32Codec, ok := ak.addressCdc.(bech32Codec) if !ok { return "", errors.New("unable cast addressCdc to bech32Codec") } - return bech32Codec.Bech32Prefix, nil + return bech32Codec.bech32Prefix, nil } diff --git a/x/auth/middleware/feegrant_test.go b/x/auth/middleware/feegrant_test.go index 9ab7f7cede57..c76b3ec825e4 100644 --- a/x/auth/middleware/feegrant_test.go +++ b/x/auth/middleware/feegrant_test.go @@ -16,7 +16,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/simulation" "github.com/cosmos/cosmos-sdk/types/tx/signing" - "github.com/cosmos/cosmos-sdk/x/auth/address" "github.com/cosmos/cosmos-sdk/x/auth/middleware" authsign "github.com/cosmos/cosmos-sdk/x/auth/signing" "github.com/cosmos/cosmos-sdk/x/auth/tx" @@ -29,7 +28,7 @@ func (s *MWTestSuite) TestDeductFeesNoDelegation() { ctx := s.SetupTest(false) // setup app := s.app - protoTxCfg := tx.NewTxConfig(codec.NewProtoCodec(app.InterfaceRegistry()), tx.DefaultSignModes, address.NewBech32Codec(sdk.Bech32MainPrefix)) + protoTxCfg := tx.NewTxConfig(codec.NewProtoCodec(app.InterfaceRegistry()), tx.DefaultSignModes) txHandler := middleware.ComposeMiddlewares( noopTxHandler{}, @@ -217,6 +216,7 @@ func genTxWithFeeGranter(gen client.TxConfig, msgs []sdk.Msg, feeAmt sdk.Coins, ChainID: chainID, AccountNumber: accNums[i], Sequence: accSeqs[i], + SignerIndex: i, } signBytes, err := gen.SignModeHandler().GetSignBytes(signMode, signerData, tx.GetTx()) if err != nil { diff --git a/x/auth/middleware/sigverify.go b/x/auth/middleware/sigverify.go index 0a90a183f4f3..0d5796d6346e 100644 --- a/x/auth/middleware/sigverify.go +++ b/x/auth/middleware/sigverify.go @@ -487,6 +487,7 @@ func (svm sigVerificationTxHandler) sigVerify(ctx context.Context, sdkTx sdk.Tx, ChainID: chainID, AccountNumber: accNum, Sequence: acc.GetSequence(), + SignerIndex: i, } if !simulate { diff --git a/x/auth/middleware/testutil_test.go b/x/auth/middleware/testutil_test.go index 130b1bbde9be..4f174f6e69f2 100644 --- a/x/auth/middleware/testutil_test.go +++ b/x/auth/middleware/testutil_test.go @@ -143,6 +143,7 @@ func (s *MWTestSuite) createTestTx(txBuilder client.TxBuilder, privs []cryptotyp ChainID: chainID, AccountNumber: accNums[i], Sequence: accSeqs[i], + SignerIndex: i, } sigV2, err := tx.SignWithPrivKey( s.clientCtx.TxConfig.SignModeHandler().DefaultMode(), signerData, diff --git a/x/auth/migrations/legacytx/amino_signing_test.go b/x/auth/migrations/legacytx/amino_signing_test.go index db9777c1ab23..89410d6c8948 100644 --- a/x/auth/migrations/legacytx/amino_signing_test.go +++ b/x/auth/migrations/legacytx/amino_signing_test.go @@ -50,6 +50,7 @@ func TestLegacyAminoJSONHandler_GetSignBytes(t *testing.T) { ChainID: chainId, AccountNumber: accNum, Sequence: seqNum, + SignerIndex: 0, } signBz, err := handler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, signingData, tx) require.NoError(t, err) diff --git a/x/auth/signing/handler_map_test.go b/x/auth/signing/handler_map_test.go index 4d1fe76917ec..88559c8c32a2 100644 --- a/x/auth/signing/handler_map_test.go +++ b/x/auth/signing/handler_map_test.go @@ -64,6 +64,7 @@ func TestHandlerMap_GetSignBytes(t *testing.T) { ChainID: chainId, AccountNumber: accNum, Sequence: seqNum, + SignerIndex: 0, } signBz, err := handler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, signingData, tx) require.NoError(t, err) diff --git a/x/auth/signing/sign_mode_handler.go b/x/auth/signing/sign_mode_handler.go index efa8f96e4cbc..0cb37922cf2f 100644 --- a/x/auth/signing/sign_mode_handler.go +++ b/x/auth/signing/sign_mode_handler.go @@ -37,4 +37,6 @@ type SignerData struct { // since in SIGN_MODE_DIRECT the account sequence is already in the signer // info. Sequence uint64 + + SignerIndex int } diff --git a/x/auth/signing/verify_test.go b/x/auth/signing/verify_test.go index f1984a7f7e12..99eeaf8a04e3 100644 --- a/x/auth/signing/verify_test.go +++ b/x/auth/signing/verify_test.go @@ -53,6 +53,7 @@ func TestVerifySignature(t *testing.T) { ChainID: chainId, AccountNumber: acc.GetAccountNumber(), Sequence: acc.GetSequence(), + SignerIndex: 0, } signBytes := legacytx.StdSignBytes(signerData.ChainID, signerData.AccountNumber, signerData.Sequence, 10, fee, msgs, memo) signature, err := priv.Sign(signBytes) diff --git a/x/auth/testutil/suite.go b/x/auth/testutil/suite.go index 809c67564229..b9bcc8a9c609 100644 --- a/x/auth/testutil/suite.go +++ b/x/auth/testutil/suite.go @@ -131,6 +131,7 @@ func (s *TxConfigTestSuite) TestTxBuilderSetSignatures() { ChainID: "test", AccountNumber: 1, Sequence: seq1, + SignerIndex: 0, } signBytes, err := signModeHandler.GetSignBytes(signModeHandler.DefaultMode(), signerData, sigTx) s.Require().NoError(err) @@ -142,6 +143,7 @@ func (s *TxConfigTestSuite) TestTxBuilderSetSignatures() { ChainID: "test", AccountNumber: 3, Sequence: mseq, + SignerIndex: 0, } mSignBytes, err := signModeHandler.GetSignBytes(signModeHandler.DefaultMode(), signerData, sigTx) s.Require().NoError(err) diff --git a/x/auth/tx/config.go b/x/auth/tx/config.go index 0b57b03092b2..dc1ace9d8f8a 100644 --- a/x/auth/tx/config.go +++ b/x/auth/tx/config.go @@ -7,7 +7,6 @@ import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" signingtypes "github.com/cosmos/cosmos-sdk/types/tx/signing" - "github.com/cosmos/cosmos-sdk/x/auth/address" "github.com/cosmos/cosmos-sdk/x/auth/signing" ) @@ -22,9 +21,9 @@ type config struct { // NewTxConfig returns a new protobuf TxConfig using the provided ProtoCodec and sign modes. The // first enabled sign mode will become the default sign mode. -func NewTxConfig(protoCodec codec.ProtoCodecMarshaler, enabledSignModes []signingtypes.SignMode, addressCdc address.Codec) client.TxConfig { +func NewTxConfig(protoCodec codec.ProtoCodecMarshaler, enabledSignModes []signingtypes.SignMode) client.TxConfig { return &config{ - handler: makeSignModeHandler(enabledSignModes, addressCdc), + handler: makeSignModeHandler(enabledSignModes), decoder: DefaultTxDecoder(protoCodec), encoder: DefaultTxEncoder(), jsonDecoder: DefaultJSONTxDecoder(protoCodec), diff --git a/x/auth/tx/config_test.go b/x/auth/tx/config_test.go index 3d15863426f1..b20cf1ce4e85 100644 --- a/x/auth/tx/config_test.go +++ b/x/auth/tx/config_test.go @@ -18,5 +18,5 @@ func TestGenerator(t *testing.T) { std.RegisterInterfaces(interfaceRegistry) interfaceRegistry.RegisterImplementations((*sdk.Msg)(nil), &testdata.TestMsg{}) protoCodec := codec.NewProtoCodec(interfaceRegistry) - suite.Run(t, testutil.NewTxConfigTestSuite(NewTxConfig(protoCodec, DefaultSignModes, nil))) + suite.Run(t, testutil.NewTxConfigTestSuite(NewTxConfig(protoCodec, DefaultSignModes))) } diff --git a/x/auth/tx/direct_aux.go b/x/auth/tx/direct_aux.go index 9695591db160..7efe74897950 100644 --- a/x/auth/tx/direct_aux.go +++ b/x/auth/tx/direct_aux.go @@ -1,24 +1,19 @@ package tx import ( - "bytes" "fmt" - codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" types "github.com/cosmos/cosmos-sdk/types/tx" signingtypes "github.com/cosmos/cosmos-sdk/types/tx/signing" - "github.com/cosmos/cosmos-sdk/x/auth/address" "github.com/cosmos/cosmos-sdk/x/auth/signing" ) var _ signing.SignModeHandler = signModeDirectAuxHandler{} // signModeDirectAuxHandler defines the SIGN_MODE_DIRECT_AUX SignModeHandler -type signModeDirectAuxHandler struct { - addressCdc address.Codec -} +type signModeDirectAuxHandler struct{} // DefaultMode implements SignModeHandler.DefaultMode func (signModeDirectAuxHandler) DefaultMode() signingtypes.SignMode { @@ -48,23 +43,9 @@ func (h signModeDirectAuxHandler) GetSignBytes( return nil, sdkerrors.Wrapf(sdkerrors.ErrInvalidRequest, "got empty address in %s handler", signingtypes.SignMode_SIGN_MODE_DIRECT_AUX) } - addrBz, err := h.addressCdc.StringToBytes(data.Address) - if err != nil { - return nil, err - } - - var pubKey *codectypes.Any - pubKeys, err := protoTx.GetPubKeys() - if err != nil { - return nil, err - } - for i, pk := range pubKeys { - if bytes.Equal(addrBz, pk.Address()) { - pubKey = protoTx.tx.AuthInfo.SignerInfos[i].PublicKey - } - } - if pubKey == nil { - return nil, sdkerrors.ErrInvalidRequest.Wrapf("got empty pubKey in %s handler", signingtypes.SignMode_SIGN_MODE_DIRECT_AUX) + signerInfo := protoTx.tx.AuthInfo.SignerInfos[data.SignerIndex] + if signerInfo == nil || signerInfo.PublicKey == nil { + return nil, sdkerrors.ErrInvalidRequest.Wrapf("got empty pubkey for address %s in %s handler", data.Address, signingtypes.SignMode_SIGN_MODE_DIRECT_AUX) } signDocDirectAux := types.SignDocDirectAux{ @@ -73,7 +54,7 @@ func (h signModeDirectAuxHandler) GetSignBytes( AccountNumber: data.AccountNumber, Sequence: data.Sequence, Tip: protoTx.tx.AuthInfo.Tip, - PublicKey: pubKey, + PublicKey: protoTx.tx.AuthInfo.SignerInfos[data.SignerIndex].PublicKey, } return signDocDirectAux.Marshal() diff --git a/x/auth/tx/direct_aux_test.go b/x/auth/tx/direct_aux_test.go index 28f73c1126ee..df7460c5ba78 100644 --- a/x/auth/tx/direct_aux_test.go +++ b/x/auth/tx/direct_aux_test.go @@ -12,7 +12,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" txtypes "github.com/cosmos/cosmos-sdk/types/tx" signingtypes "github.com/cosmos/cosmos-sdk/types/tx/signing" - "github.com/cosmos/cosmos-sdk/x/auth/address" "github.com/cosmos/cosmos-sdk/x/auth/signing" ) @@ -21,9 +20,8 @@ func TestDirectAuxHandler(t *testing.T) { interfaceRegistry := codectypes.NewInterfaceRegistry() interfaceRegistry.RegisterImplementations((*sdk.Msg)(nil), &testdata.TestMsg{}) marshaler := codec.NewProtoCodec(interfaceRegistry) - addressCdc := address.NewBech32Codec(sdk.Bech32MainPrefix) - txConfig := NewTxConfig(marshaler, []signingtypes.SignMode{signingtypes.SignMode_SIGN_MODE_DIRECT_AUX}, addressCdc) + txConfig := NewTxConfig(marshaler, []signingtypes.SignMode{signingtypes.SignMode_SIGN_MODE_DIRECT_AUX}) txBuilder := txConfig.NewTxBuilder() memo := "sometestmemo" @@ -58,9 +56,10 @@ func TestDirectAuxHandler(t *testing.T) { Address: addr.String(), ChainID: "test-chain", AccountNumber: 1, + SignerIndex: 0, } - modeHandler := signModeDirectAuxHandler{addressCdc} + modeHandler := signModeDirectAuxHandler{} signBytes, err := modeHandler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_DIRECT_AUX, signingData, txBuilder.GetTx()) require.NoError(t, err) require.NotNil(t, signBytes) diff --git a/x/auth/tx/direct_test.go b/x/auth/tx/direct_test.go index 24b3d3cb9190..418ab56e11a7 100644 --- a/x/auth/tx/direct_test.go +++ b/x/auth/tx/direct_test.go @@ -21,7 +21,7 @@ func TestDirectModeHandler(t *testing.T) { interfaceRegistry.RegisterImplementations((*sdk.Msg)(nil), &testdata.TestMsg{}) marshaler := codec.NewProtoCodec(interfaceRegistry) - txConfig := NewTxConfig(marshaler, []signingtypes.SignMode{signingtypes.SignMode_SIGN_MODE_DIRECT}, nil) + txConfig := NewTxConfig(marshaler, []signingtypes.SignMode{signingtypes.SignMode_SIGN_MODE_DIRECT}) txBuilder := txConfig.NewTxBuilder() memo := "sometestmemo" @@ -72,6 +72,7 @@ func TestDirectModeHandler(t *testing.T) { Address: addr.String(), ChainID: "test-chain", AccountNumber: 1, + SignerIndex: 0, } signBytes, err := modeHandler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_DIRECT, signingData, txBuilder.GetTx()) diff --git a/x/auth/tx/legacy_amino_json_test.go b/x/auth/tx/legacy_amino_json_test.go index 540b3b464761..893d06f5ff2d 100644 --- a/x/auth/tx/legacy_amino_json_test.go +++ b/x/auth/tx/legacy_amino_json_test.go @@ -49,6 +49,7 @@ func TestLegacyAminoJSONHandler_GetSignBytes(t *testing.T) { ChainID: chainId, AccountNumber: accNum, Sequence: seqNum, + SignerIndex: 0, } signBz, err := handler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, signingData, tx) require.NoError(t, err) diff --git a/x/auth/tx/mode_handler.go b/x/auth/tx/mode_handler.go index 07a462ceefbb..bb59fdc29a0e 100644 --- a/x/auth/tx/mode_handler.go +++ b/x/auth/tx/mode_handler.go @@ -4,7 +4,6 @@ import ( "fmt" signingtypes "github.com/cosmos/cosmos-sdk/types/tx/signing" - "github.com/cosmos/cosmos-sdk/x/auth/address" "github.com/cosmos/cosmos-sdk/x/auth/signing" ) @@ -17,7 +16,7 @@ var DefaultSignModes = []signingtypes.SignMode{ // makeSignModeHandler returns the default protobuf SignModeHandler supporting // SIGN_MODE_DIRECT, SIGN_MODE_DIRECT_AUX and SIGN_MODE_LEGACY_AMINO_JSON. -func makeSignModeHandler(modes []signingtypes.SignMode, addressCdc address.Codec) signing.SignModeHandler { +func makeSignModeHandler(modes []signingtypes.SignMode) signing.SignModeHandler { if len(modes) < 1 { panic(fmt.Errorf("no sign modes enabled")) } @@ -31,7 +30,7 @@ func makeSignModeHandler(modes []signingtypes.SignMode, addressCdc address.Codec case signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON: handlers[i] = signModeLegacyAminoJSONHandler{} case signingtypes.SignMode_SIGN_MODE_DIRECT_AUX: - handlers[i] = signModeDirectAuxHandler{addressCdc} + handlers[i] = signModeDirectAuxHandler{} default: panic(fmt.Errorf("unsupported sign mode %+v", mode)) }