From bc49a8e7fd2fca72b560b8ecc8099db2daa7a5dd Mon Sep 17 00:00:00 2001 From: "mergify[bot]" <37929162+mergify[bot]@users.noreply.github.com> Date: Wed, 22 Jan 2025 13:02:05 +0100 Subject: [PATCH] refactor!: simplify signing packages (backport #23470) (#23475) Co-authored-by: Julien Robert --- CHANGELOG.md | 4 ++ baseapp/msg_service_router_test.go | 20 +++--- client/tx/aux_builder.go | 9 +-- client/tx/aux_builder_test.go | 25 ++++---- client/tx/factory.go | 19 +++--- client/tx/tx.go | 25 +++++--- client/tx/tx_test.go | 17 +++--- client/v2/autocli/builder.go | 4 +- client/v2/autocli/common.go | 13 +--- client/v2/go.mod | 2 +- client/v2/go.sum | 4 +- crypto/keyring/autocli.go | 8 +-- crypto/keyring/keyring.go | 16 ++--- crypto/keyring/keyring_ledger_test.go | 11 ++-- crypto/keyring/keyring_test.go | 33 +++++----- crypto/keys/multisig/multisig_test.go | 9 +-- crypto/types/multisig/pubkey.go | 4 +- simapp/app.go | 4 +- simapp/go.mod | 1 + simapp/go.sum | 2 - simapp/simd/cmd/root.go | 4 +- simsx/v2/txutils.go | 24 +++++--- tests/integration/baseapp/block_gas_test.go | 21 ++++--- tests/integration/server/grpc/server_test.go | 4 +- .../tx/benchmark/benchmarks_test.go | 4 +- tests/integration/tx/decode_test.go | 3 +- tests/integration/tx/internal/util.go | 10 +-- testutil/cli/cmd.go | 4 +- testutil/sims/tx_helpers.go | 24 +++++--- types/tx/direct_aux.go | 4 +- types/tx/direct_aux_test.go | 3 +- types/tx/signing/signature.go | 6 +- types/tx/signing/signature_data.go | 4 +- types/tx/signing/types.go | 39 ++++++++++++ x/auth/ante/ante_test.go | 9 +-- x/auth/ante/basic_test.go | 13 ++-- x/auth/ante/fee_test.go | 8 +-- x/auth/ante/feegrant_test.go | 16 ++++- x/auth/ante/setup_test.go | 8 +-- x/auth/ante/sigverify.go | 3 +- x/auth/ante/sigverify_test.go | 29 +++------ x/auth/ante/testutil_test.go | 19 ++++-- x/auth/ante/unordered_test.go | 4 +- x/auth/client/cli/tx_multisign.go | 9 +-- x/auth/client/cli/validate_sigs.go | 16 ++--- x/auth/client/tx.go | 11 ++-- x/auth/migrations/legacytx/amino_signing.go | 5 +- x/auth/migrations/legacytx/stdsign.go | 3 +- x/auth/migrations/legacytx/stdtx_test.go | 9 +-- x/auth/signing/adapter.go | 23 ++----- x/auth/signing/adapter_test.go | 8 ++- x/auth/signing/sign_mode_handler.go | 57 +++-------------- x/auth/signing/verify.go | 61 ++----------------- x/auth/tx/aux_test.go | 28 ++++++--- x/auth/tx/config.go | 24 ++++---- x/auth/tx/legacy_amino_json.go | 14 +++-- x/auth/tx/sigs.go | 6 +- x/auth/tx/testutil/suite.go | 22 ++++--- 58 files changed, 389 insertions(+), 400 deletions(-) create mode 100644 types/tx/signing/types.go diff --git a/CHANGELOG.md b/CHANGELOG.md index cb0cc6344d..9ef61b1620 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -52,6 +52,10 @@ Every module contains its own CHANGELOG.md. Please refer to the module you are i ### Improvements +* [#23470](https://github.com/cosmos/cosmos-sdk/pull/23470) Converge to use of one single sign mode type and signer data: + * Use api's signmode throughout the SDK to align with `cosmossdk.io/tx`. This allows developer not to juggle between sign mode types + * Deprecate `authsigning.SignerData` in favor of txsigning.SignerData and replace its usage + * Move helpers to go from one sign mode enum to another to `types/signing` instead of `x/auth/signing` (less dependency on `x`) * (all) [#23445](https://github.com/cosmos/cosmos-sdk/pull/23445) Remove `v2` code from codebase. * (codec) [#22988](https://github.com/cosmos/cosmos-sdk/pull/22988) Improve edge case handling for recursion limits. * (proto) [#23437](https://github.com/cosmos/cosmos-sdk/pull/23437) Deprecate `Block` field from `GetBlockByHeightResponse` and return empty comet block for `GetBlockByHeight`. diff --git a/baseapp/msg_service_router_test.go b/baseapp/msg_service_router_test.go index a1550a9459..e75d9dccb1 100644 --- a/baseapp/msg_service_router_test.go +++ b/baseapp/msg_service_router_test.go @@ -6,10 +6,12 @@ import ( abci "github.com/cometbft/cometbft/api/cometbft/abci/v1" "github.com/stretchr/testify/require" + "google.golang.org/protobuf/types/known/anypb" coretesting "cosmossdk.io/core/testing" "cosmossdk.io/depinject" "cosmossdk.io/log" + txsigning "cosmossdk.io/x/tx/signing" "github.com/cosmos/cosmos-sdk/client/tx" "github.com/cosmos/cosmos-sdk/codec" @@ -17,7 +19,6 @@ import ( "github.com/cosmos/cosmos-sdk/runtime" "github.com/cosmos/cosmos-sdk/testutil/testdata" "github.com/cosmos/cosmos-sdk/types/tx/signing" - authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" authtx "github.com/cosmos/cosmos-sdk/x/auth/tx" ) @@ -143,9 +144,6 @@ func TestMsgService(t *testing.T) { // set the TxDecoder in the BaseApp for minimal tx simulations app.SetTxDecoder(txConfig.TxDecoder()) - defaultSignMode, err := authsigning.APISignModeToInternal(txConfig.SignModeHandler().DefaultMode()) - require.NoError(t, err) - testdata.RegisterInterfaces(interfaceRegistry) testdata.RegisterMsgServer( app.MsgServiceRouter(), @@ -173,7 +171,7 @@ func TestMsgService(t *testing.T) { sigV2 := signing.SignatureV2{ PubKey: priv.PubKey(), Data: &signing.SingleSignatureData{ - SignMode: defaultSignMode, + SignMode: txConfig.SignModeHandler().DefaultMode(), Signature: nil, }, Sequence: 0, @@ -183,14 +181,20 @@ func TestMsgService(t *testing.T) { require.NoError(t, err) // Second round: all signer infos are set, so each signer can sign. - signerData := authsigning.SignerData{ + anyPk, err := codectypes.NewAnyWithValue(priv.PubKey()) + require.NoError(t, err) + + signerData := txsigning.SignerData{ ChainID: "test", AccountNumber: 0, Sequence: 0, - PubKey: priv.PubKey(), + PubKey: &anypb.Any{ + TypeUrl: anyPk.TypeUrl, + Value: anyPk.Value, + }, } sigV2, err = tx.SignWithPrivKey( - context.TODO(), defaultSignMode, signerData, + context.TODO(), txConfig.SignModeHandler().DefaultMode(), signerData, txBuilder, priv, txConfig, 0) require.NoError(t, err) err = txBuilder.SetSignatures(sigV2) diff --git a/client/tx/aux_builder.go b/client/tx/aux_builder.go index d7888770dd..35ba3a8800 100644 --- a/client/tx/aux_builder.go +++ b/client/tx/aux_builder.go @@ -8,6 +8,7 @@ import ( "google.golang.org/protobuf/types/known/anypb" "google.golang.org/protobuf/types/known/timestamppb" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" txv1beta1 "cosmossdk.io/api/cosmos/tx/v1beta1" txsigning "cosmossdk.io/x/tx/signing" "cosmossdk.io/x/tx/signing/aminojson" @@ -127,15 +128,15 @@ func (b *AuxTxBuilder) SetPubKey(pk cryptotypes.PubKey) error { // SetSignMode sets the aux signer's sign mode. Allowed sign modes are // DIRECT_AUX and LEGACY_AMINO_JSON. -func (b *AuxTxBuilder) SetSignMode(mode signing.SignMode) error { +func (b *AuxTxBuilder) SetSignMode(mode apisigning.SignMode) error { switch mode { - case signing.SignMode_SIGN_MODE_DIRECT_AUX, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON: + case apisigning.SignMode_SIGN_MODE_DIRECT_AUX, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON: default: return sdkerrors.ErrInvalidRequest.Wrapf("AuxTxBuilder can only sign with %s or %s", - signing.SignMode_SIGN_MODE_DIRECT_AUX, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) + apisigning.SignMode_SIGN_MODE_DIRECT_AUX, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) } - b.auxSignerData.Mode = mode + b.auxSignerData.Mode, _ = signing.APISignModeToInternal(mode) return nil } diff --git a/client/tx/aux_builder_test.go b/client/tx/aux_builder_test.go index 6380f2d6ee..67e04bc898 100644 --- a/client/tx/aux_builder_test.go +++ b/client/tx/aux_builder_test.go @@ -5,6 +5,8 @@ import ( "github.com/stretchr/testify/require" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" + "github.com/cosmos/cosmos-sdk/client/tx" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/codec/testutil" @@ -53,7 +55,7 @@ func TestAuxTxBuilder(t *testing.T) { { "cannot set SIGN_MODE_DIRECT", func() error { - return b.SetSignMode(signing.SignMode_SIGN_MODE_DIRECT) + return b.SetSignMode(apisigning.SignMode_SIGN_MODE_DIRECT) }, true, "AuxTxBuilder can only sign with SIGN_MODE_DIRECT_AUX or SIGN_MODE_LEGACY_AMINO_JSON", }, @@ -105,7 +107,7 @@ func TestAuxTxBuilder(t *testing.T) { func() error { require.NoError(t, b.SetMsgs(msg1)) require.NoError(t, b.SetPubKey(pub1)) - require.NoError(t, b.SetSignMode(signing.SignMode_SIGN_MODE_DIRECT_AUX)) + require.NoError(t, b.SetSignMode(apisigning.SignMode_SIGN_MODE_DIRECT_AUX)) _, err := b.GetSignBytes() return err @@ -117,7 +119,7 @@ func TestAuxTxBuilder(t *testing.T) { func() error { require.NoError(t, b.SetMsgs(msg1)) require.NoError(t, b.SetPubKey(pub1)) - require.NoError(t, b.SetSignMode(signing.SignMode_SIGN_MODE_DIRECT_AUX)) + require.NoError(t, b.SetSignMode(apisigning.SignMode_SIGN_MODE_DIRECT_AUX)) _, err := b.GetSignBytes() require.NoError(t, err) @@ -133,7 +135,7 @@ func TestAuxTxBuilder(t *testing.T) { require.NoError(t, b.SetMsgs(msg1)) require.NoError(t, b.SetPubKey(pub1)) b.SetAddress(addr1Str) - require.NoError(t, b.SetSignMode(signing.SignMode_SIGN_MODE_DIRECT_AUX)) + require.NoError(t, b.SetSignMode(apisigning.SignMode_SIGN_MODE_DIRECT_AUX)) _, err := b.GetSignBytes() require.NoError(t, err) @@ -154,7 +156,7 @@ func TestAuxTxBuilder(t *testing.T) { require.NoError(t, b.SetMsgs(msg1)) require.NoError(t, b.SetPubKey(pub1)) b.SetAddress(addr1Str) - err := b.SetSignMode(signing.SignMode_SIGN_MODE_DIRECT_AUX) + err := b.SetSignMode(apisigning.SignMode_SIGN_MODE_DIRECT_AUX) require.NoError(t, err) _, err = b.GetSignBytes() @@ -164,7 +166,7 @@ func TestAuxTxBuilder(t *testing.T) { auxSignerData, err := b.GetAuxSignerData() // Make sure auxSignerData is correctly populated - checkCorrectData(t, cdc, auxSignerData, signing.SignMode_SIGN_MODE_DIRECT_AUX) + checkCorrectData(t, cdc, auxSignerData, apisigning.SignMode_SIGN_MODE_DIRECT_AUX) return err }, @@ -176,7 +178,7 @@ func TestAuxTxBuilder(t *testing.T) { require.NoError(t, b.SetMsgs(msg1)) require.NoError(t, b.SetPubKey(pub1)) b.SetAddress(addr1Str) - err := b.SetSignMode(signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) + err := b.SetSignMode(apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) require.NoError(t, err) _, err = b.GetSignBytes() @@ -195,7 +197,7 @@ func TestAuxTxBuilder(t *testing.T) { require.NoError(t, b.SetMsgs(msg1)) require.NoError(t, b.SetPubKey(pub1)) b.SetAddress(addr1Str) - err := b.SetSignMode(signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) + err := b.SetSignMode(apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) require.NoError(t, err) _, err = b.GetSignBytes() @@ -205,7 +207,7 @@ func TestAuxTxBuilder(t *testing.T) { auxSignerData, err := b.GetAuxSignerData() // Make sure auxSignerData is correctly populated - checkCorrectData(t, cdc, auxSignerData, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) + checkCorrectData(t, cdc, auxSignerData, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) return err }, @@ -229,7 +231,7 @@ func TestAuxTxBuilder(t *testing.T) { } // checkCorrectData that the auxSignerData's content matches the inputs we gave. -func checkCorrectData(t *testing.T, cdc codec.Codec, auxSignerData typestx.AuxSignerData, signMode signing.SignMode) { +func checkCorrectData(t *testing.T, cdc codec.Codec, auxSignerData typestx.AuxSignerData, signMode apisigning.SignMode) { t.Helper() pkAny, err := codectypes.NewAnyWithValue(pub1) require.NoError(t, err) @@ -247,6 +249,7 @@ func checkCorrectData(t *testing.T, cdc codec.Codec, auxSignerData typestx.AuxSi require.Equal(t, chainID, auxSignerData.SignDoc.ChainId) require.Equal(t, msgAny, body.GetMessages()[0]) require.Equal(t, pkAny, auxSignerData.SignDoc.PublicKey) - require.Equal(t, signMode, auxSignerData.Mode) + m, _ := signing.InternalSignModeToAPI(auxSignerData.Mode) + require.Equal(t, signMode, m) require.Equal(t, rawSig, auxSignerData.Sig) } diff --git a/client/tx/factory.go b/client/tx/factory.go index 471aaa7dab..a6c795d3dc 100644 --- a/client/tx/factory.go +++ b/client/tx/factory.go @@ -11,6 +11,7 @@ import ( "github.com/cosmos/go-bip39" "github.com/spf13/pflag" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" "cosmossdk.io/math" "github.com/cosmos/cosmos-sdk/client" @@ -47,7 +48,7 @@ type Factory struct { feePayer sdk.AccAddress gasPrices sdk.DecCoins extOptions []*codectypes.Any - signMode signing.SignMode + signMode apisigning.SignMode simulateAndExecute bool preprocessTxHook client.PreprocessTxFn } @@ -62,18 +63,18 @@ func NewFactoryCLI(clientCtx client.Context, flagSet *pflag.FlagSet) (Factory, e return Factory{}, fmt.Errorf("failed to bind flags to viper: %w", err) } - signMode := signing.SignMode_SIGN_MODE_UNSPECIFIED + signMode := apisigning.SignMode_SIGN_MODE_UNSPECIFIED switch clientCtx.SignModeStr { case flags.SignModeDirect: - signMode = signing.SignMode_SIGN_MODE_DIRECT + signMode = apisigning.SignMode_SIGN_MODE_DIRECT case flags.SignModeLegacyAminoJSON: - signMode = signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON + signMode = apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON case flags.SignModeDirectAux: - signMode = signing.SignMode_SIGN_MODE_DIRECT_AUX + signMode = apisigning.SignMode_SIGN_MODE_DIRECT_AUX case flags.SignModeTextual: - signMode = signing.SignMode_SIGN_MODE_TEXTUAL + signMode = apisigning.SignMode_SIGN_MODE_TEXTUAL case flags.SignModeEIP191: - signMode = signing.SignMode_SIGN_MODE_EIP_191 + signMode = apisigning.SignMode_SIGN_MODE_EIP_191 //nolint:staticcheck // We still need to check if it was called } var accNum, accSeq uint64 @@ -237,12 +238,12 @@ func (f Factory) WithSimulateAndExecute(sim bool) Factory { } // SignMode returns the sign mode configured in the Factory -func (f Factory) SignMode() signing.SignMode { +func (f Factory) SignMode() apisigning.SignMode { return f.signMode } // WithSignMode returns a copy of the Factory with an updated sign mode value. -func (f Factory) WithSignMode(mode signing.SignMode) Factory { +func (f Factory) WithSignMode(mode apisigning.SignMode) Factory { f.signMode = mode return f } diff --git a/client/tx/tx.go b/client/tx/tx.go index 4aa34b0a93..d6d7463d6d 100644 --- a/client/tx/tx.go +++ b/client/tx/tx.go @@ -10,9 +10,14 @@ import ( gogogrpc "github.com/cosmos/gogoproto/grpc" "github.com/spf13/pflag" + "google.golang.org/protobuf/types/known/anypb" + + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" + txsigning "cosmossdk.io/x/tx/signing" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/input" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -168,7 +173,7 @@ func CalculateGas( // corresponding SignatureV2 if the signing is successful. func SignWithPrivKey( ctx context.Context, - signMode signing.SignMode, signerData authsigning.SignerData, + signMode apisigning.SignMode, signerData txsigning.SignerData, txBuilder client.TxBuilder, priv cryptotypes.PrivKey, txConfig client.TxConfig, accSeq uint64, ) (signing.SignatureV2, error) { @@ -206,7 +211,7 @@ func SignWithPrivKey( func countDirectSigners(data signing.SignatureData) int { switch data := data.(type) { case *signing.SingleSignatureData: - if data.SignMode == signing.SignMode_SIGN_MODE_DIRECT { + if data.SignMode == apisigning.SignMode_SIGN_MODE_DIRECT { return 1 } @@ -254,12 +259,9 @@ func Sign(ctx client.Context, txf Factory, name string, txBuilder client.TxBuild var err error signMode := txf.signMode - if signMode == signing.SignMode_SIGN_MODE_UNSPECIFIED { + if signMode == apisigning.SignMode_SIGN_MODE_UNSPECIFIED { // use the SignModeHandler's default mode if unspecified - signMode, err = authsigning.APISignModeToInternal(txf.txConfig.SignModeHandler().DefaultMode()) - if err != nil { - return err - } + signMode = txf.txConfig.SignModeHandler().DefaultMode() } k, err := txf.keybase.Key(name) @@ -277,12 +279,17 @@ func Sign(ctx client.Context, txf Factory, name string, txBuilder client.TxBuild return err } - signerData := authsigning.SignerData{ + anyPk, err := codectypes.NewAnyWithValue(pubKey) + if err != nil { + return err + } + + signerData := txsigning.SignerData{ ChainID: txf.chainID, AccountNumber: txf.accountNumber, Sequence: txf.sequence, - PubKey: pubKey, Address: addressStr, + PubKey: &anypb.Any{TypeUrl: anyPk.TypeUrl, Value: anyPk.Value}, } // For SIGN_MODE_DIRECT, calling SetSignatures calls setSignerInfos on diff --git a/client/tx/tx_test.go b/client/tx/tx_test.go index 67dd34d70a..2fdfa5b4f8 100644 --- a/client/tx/tx_test.go +++ b/client/tx/tx_test.go @@ -9,6 +9,8 @@ import ( "github.com/stretchr/testify/require" "google.golang.org/grpc" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" + "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" addresscodec "github.com/cosmos/cosmos-sdk/codec/address" @@ -81,12 +83,10 @@ func TestCalculateGas(t *testing.T) { for _, tc := range testCases { txCfg, _ := newTestTxConfig() - defaultSignMode, err := signing.APISignModeToInternal(txCfg.SignModeHandler().DefaultMode()) - require.NoError(t, err) txf := Factory{}. WithChainID("test-chain"). - WithTxConfig(txCfg).WithSignMode(defaultSignMode) + WithTxConfig(txCfg).WithSignMode(txCfg.SignModeHandler().DefaultMode()) t.Run(tc.name, func(t *testing.T) { mockClientCtx := mockContext{ @@ -119,9 +119,6 @@ func mockTxFactory(txCfg client.TxConfig) Factory { func TestBuildSimTx(t *testing.T) { txCfg, cdc := newTestTxConfig() - defaultSignMode, err := signing.APISignModeToInternal(txCfg.SignModeHandler().DefaultMode()) - require.NoError(t, err) - kb, err := keyring.New(t.Name(), "test", t.TempDir(), nil, cdc) require.NoError(t, err) @@ -132,7 +129,7 @@ func TestBuildSimTx(t *testing.T) { fromAddr, err := ac.BytesToString(sdk.AccAddress("from")) require.NoError(t, err) - txf := mockTxFactory(txCfg).WithSignMode(defaultSignMode).WithKeybase(kb) + txf := mockTxFactory(txCfg).WithSignMode(txCfg.SignModeHandler().DefaultMode()).WithKeybase(kb) msg := &countertypes.MsgIncreaseCounter{Signer: fromAddr, Count: 1} bz, err := txf.BuildSimTx(msg) require.NoError(t, err) @@ -262,9 +259,9 @@ func TestSign(t *testing.T) { txfNoKeybase := mockTxFactory(txConfig) txfDirect := txfNoKeybase. WithKeybase(kb). - WithSignMode(signingtypes.SignMode_SIGN_MODE_DIRECT) + WithSignMode(apisigning.SignMode_SIGN_MODE_DIRECT) txfAmino := txfDirect. - WithSignMode(signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) + WithSignMode(apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) addr1, err := k1.GetAddress() requireT.NoError(err) addr2, err := k2.GetAddress() @@ -422,7 +419,7 @@ func TestPreprocessHook(t *testing.T) { txfDirect := mockTxFactory(txConfig). WithKeybase(kb). - WithSignMode(signingtypes.SignMode_SIGN_MODE_DIRECT). + WithSignMode(apisigning.SignMode_SIGN_MODE_DIRECT). WithPreprocessTxHook(preprocessHook) addr1, err := kr.GetAddress() diff --git a/client/v2/autocli/builder.go b/client/v2/autocli/builder.go index 475dac8af6..bd1744ef88 100644 --- a/client/v2/autocli/builder.go +++ b/client/v2/autocli/builder.go @@ -4,10 +4,10 @@ import ( "github.com/spf13/cobra" "google.golang.org/grpc" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" "cosmossdk.io/client/v2/autocli/flag" "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/types/tx/signing" ) // Builder manages options for building CLI commands. @@ -24,7 +24,7 @@ type Builder struct { AddTxConnFlags func(*cobra.Command) Cdc codec.Codec - EnabledSignModes []signing.SignMode + EnabledSignModes []apisigning.SignMode } // ValidateAndComplete the builder fields. diff --git a/client/v2/autocli/common.go b/client/v2/autocli/common.go index ff3b5b184f..430525d155 100644 --- a/client/v2/autocli/common.go +++ b/client/v2/autocli/common.go @@ -13,7 +13,6 @@ import ( "google.golang.org/protobuf/reflect/protoreflect" autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" - apitxsigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" "cosmossdk.io/client/v2/autocli/config" "cosmossdk.io/client/v2/autocli/keyring" "cosmossdk.io/client/v2/broadcast/comet" @@ -23,7 +22,6 @@ import ( "cosmossdk.io/client/v2/internal/util" "github.com/cosmos/cosmos-sdk/codec" - "github.com/cosmos/cosmos-sdk/types/tx/signing" ) type cmdType int @@ -284,7 +282,7 @@ func (b *Builder) getContext(cmd *cobra.Command) (context.Context, error) { ConsensusAddressCodec: b.ConsensusAddressCodec, Cdc: b.Cdc, Keyring: k, - EnabledSignModes: signModesToApiSignModes(b.EnabledSignModes), + EnabledSignModes: b.EnabledSignModes, } return clientcontext.SetInContext(cmd.Context(), clientCtx), nil @@ -373,12 +371,3 @@ func getQueryClientConn(cdc codec.Codec) func(cmd *cobra.Command) (grpc.ClientCo return grpc.NewClient(addr, []grpc.DialOption{grpc.WithTransportCredentials(creds)}...) } } - -// signModesToApiSignModes converts a slice of signing.SignMode to a slice of apitxsigning.SignMode. -func signModesToApiSignModes(modes []signing.SignMode) []apitxsigning.SignMode { - r := make([]apitxsigning.SignMode, len(modes)) - for i, m := range modes { - r[i] = apitxsigning.SignMode(m) - } - return r -} diff --git a/client/v2/go.mod b/client/v2/go.mod index 07d3e7a3e7..7147489b69 100644 --- a/client/v2/go.mod +++ b/client/v2/go.mod @@ -174,4 +174,4 @@ require ( pgregory.net/rapid v1.1.0 // indirect ) -replace github.com/cosmos/cosmos-sdk => github.com/cosmos/cosmos-sdk v0.52.0-rc.1.0.20250113154334-fd651b73663b +replace github.com/cosmos/cosmos-sdk => github.com/cosmos/cosmos-sdk v0.52.0-rc.1.0.20250122113551-ad692c97166e diff --git a/client/v2/go.sum b/client/v2/go.sum index 96442c1570..38d49b2735 100644 --- a/client/v2/go.sum +++ b/client/v2/go.sum @@ -133,8 +133,8 @@ github.com/cosmos/cosmos-db v1.1.1 h1:FezFSU37AlBC8S98NlSagL76oqBRWq/prTPvFcEJNC github.com/cosmos/cosmos-db v1.1.1/go.mod h1:AghjcIPqdhSLP/2Z0yha5xPH3nLnskz81pBx3tcVSAw= github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA= github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec= -github.com/cosmos/cosmos-sdk v0.52.0-rc.1.0.20250113154334-fd651b73663b h1:JRRCHMonL7RafZjkRGnvJuQx9/n12g145PxLgIwNb20= -github.com/cosmos/cosmos-sdk v0.52.0-rc.1.0.20250113154334-fd651b73663b/go.mod h1:v82qVB9SOdP2gzKaEqiYefzWvXY0d1epP0JHHEeevqY= +github.com/cosmos/cosmos-sdk v0.52.0-rc.1.0.20250122113551-ad692c97166e h1:uD+6+X9yIfcBH13hJZjPqiTnZAuskWWUlLtIrbTQ7K4= +github.com/cosmos/cosmos-sdk v0.52.0-rc.1.0.20250122113551-ad692c97166e/go.mod h1:NBaGSpGuOFFDx7V/FVmbPqm1n0Xu3ihzqCbqj+8PxVs= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= diff --git a/crypto/keyring/autocli.go b/crypto/keyring/autocli.go index 26f39b3e43..7cf94fe72c 100644 --- a/crypto/keyring/autocli.go +++ b/crypto/keyring/autocli.go @@ -5,7 +5,6 @@ import ( "cosmossdk.io/core/address" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" - authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" ) // autoCLIKeyring represents the keyring interface used by the AutoCLI. @@ -84,12 +83,7 @@ func (a *autoCLIKeyringAdapter) Sign(name string, msg []byte, signMode signingv1 return nil, err } - sdkSignMode, err := authsigning.APISignModeToInternal(signMode) - if err != nil { - return nil, err - } - - signBytes, _, err := a.Keyring.Sign(record.Name, msg, sdkSignMode) + signBytes, _, err := a.Keyring.Sign(record.Name, msg, signMode) return signBytes, err } diff --git a/crypto/keyring/keyring.go b/crypto/keyring/keyring.go index 950ecbab44..dfb73d5d6d 100644 --- a/crypto/keyring/keyring.go +++ b/crypto/keyring/keyring.go @@ -15,6 +15,7 @@ import ( "github.com/cosmos/go-bip39" "golang.org/x/crypto/bcrypt" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" errorsmod "cosmossdk.io/errors" "github.com/cosmos/cosmos-sdk/client/input" @@ -25,7 +26,6 @@ import ( "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/cosmos/cosmos-sdk/types/tx/signing" ) // Backend options for Keyring @@ -111,10 +111,10 @@ type Keyring interface { // Signer is implemented by key stores that want to provide signing capabilities. type Signer interface { // Sign sign byte messages with a user key. - Sign(uid string, msg []byte, signMode signing.SignMode) ([]byte, types.PubKey, error) + Sign(uid string, msg []byte, signMode apisigning.SignMode) ([]byte, types.PubKey, error) // SignByAddress sign byte messages with a user key providing the address. - SignByAddress(address, msg []byte, signMode signing.SignMode) ([]byte, types.PubKey, error) + SignByAddress(address, msg []byte, signMode apisigning.SignMode) ([]byte, types.PubKey, error) } // Importer is implemented by key stores that support import of public and private keys. @@ -387,7 +387,7 @@ func (ks keystore) ImportPubKey(uid, armor string) error { // - []byte: The generated signature. // - types.PubKey: The public key corresponding to the private key used for signing. // - error: Any error encountered during the signing process. -func (ks keystore) Sign(uid string, msg []byte, signMode signing.SignMode) ([]byte, types.PubKey, error) { +func (ks keystore) Sign(uid string, msg []byte, signMode apisigning.SignMode) ([]byte, types.PubKey, error) { k, err := ks.Key(uid) if err != nil { return nil, nil, err @@ -420,7 +420,7 @@ func (ks keystore) Sign(uid string, msg []byte, signMode signing.SignMode) ([]by } } -func (ks keystore) SignByAddress(address, msg []byte, signMode signing.SignMode) ([]byte, types.PubKey, error) { +func (ks keystore) SignByAddress(address, msg []byte, signMode apisigning.SignMode) ([]byte, types.PubKey, error) { k, err := ks.KeyByAddress(address) if err != nil { return nil, nil, err @@ -638,7 +638,7 @@ func (ks keystore) SupportedAlgorithms() (SigningAlgoList, SigningAlgoList) { // SignWithLedger signs a binary message with the ledger device referenced by an Info object // and returns the signed bytes and the public key. It returns an error if the device could // not be queried or it returned an error. -func SignWithLedger(k *Record, msg []byte, signMode signing.SignMode) (sig []byte, pub types.PubKey, err error) { +func SignWithLedger(k *Record, msg []byte, signMode apisigning.SignMode) (sig []byte, pub types.PubKey, err error) { ledgerInfo := k.GetLedger() if ledgerInfo == nil { return nil, nil, ErrNotLedgerObj @@ -660,12 +660,12 @@ func SignWithLedger(k *Record, msg []byte, signMode signing.SignMode) (sig []byt } switch signMode { - case signing.SignMode_SIGN_MODE_TEXTUAL: + case apisigning.SignMode_SIGN_MODE_TEXTUAL: sig, err = priv.Sign(msg) if err != nil { return nil, nil, err } - case signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON: + case apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON: sig, err = priv.SignLedgerAminoJSON(msg) if err != nil { return nil, nil, err diff --git a/crypto/keyring/keyring_ledger_test.go b/crypto/keyring/keyring_ledger_test.go index 244e877f17..e1aa6b9848 100644 --- a/crypto/keyring/keyring_ledger_test.go +++ b/crypto/keyring/keyring_ledger_test.go @@ -11,12 +11,13 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" + "github.com/cosmos/cosmos-sdk/crypto/hd" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" "github.com/cosmos/cosmos-sdk/crypto/ledger" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/tx/signing" ) func TestInMemoryCreateLedger(t *testing.T) { @@ -71,10 +72,10 @@ func TestSignVerifyKeyRingWithLedger(t *testing.T) { require.Equal(t, "key", k.Name) d1 := []byte("my first message") - s1, pub1, err := kb.Sign("key", d1, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) + s1, pub1, err := kb.Sign("key", d1, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) require.NoError(t, err) - s2, pub2, err := SignWithLedger(k, d1, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) + s2, pub2, err := SignWithLedger(k, d1, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) require.NoError(t, err) require.True(t, pub1.Equals(pub2)) @@ -91,7 +92,7 @@ func TestSignVerifyKeyRingWithLedger(t *testing.T) { k, _, err = kb.NewMnemonic("test", English, types.FullFundraiserPath, DefaultBIP39Passphrase, hd.Secp256k1) require.NoError(t, err) - _, _, err = SignWithLedger(k, d1, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) + _, _, err = SignWithLedger(k, d1, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) require.Error(t, err) require.Equal(t, "not a ledger object", err.Error()) } @@ -189,7 +190,7 @@ func TestSignWithLedger(t *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - sig, pub, err := SignWithLedger(tc.record, tc.msg, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) + sig, pub, err := SignWithLedger(tc.record, tc.msg, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) assert.Equal(t, tc.wantSig, sig) assert.Equal(t, tc.wantPub, pub) if tc.wantErr { diff --git a/crypto/keyring/keyring_test.go b/crypto/keyring/keyring_test.go index 850cbcbafe..38334f7b0d 100644 --- a/crypto/keyring/keyring_test.go +++ b/crypto/keyring/keyring_test.go @@ -16,6 +16,8 @@ import ( "github.com/stretchr/testify/require" "golang.org/x/crypto/bcrypt" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" + "github.com/cosmos/cosmos-sdk/codec" codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil" codectypes "github.com/cosmos/cosmos-sdk/codec/types" @@ -29,7 +31,6 @@ import ( "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/cosmos/cosmos-sdk/types/tx/signing" ) const ( @@ -383,7 +384,7 @@ func TestSignVerifyKeyRing(t *testing.T) { d3 := []byte("feels like I forgot something...") // try signing both data with both .. - s11, pub1, err := kb.Sign(n1, d1, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) + s11, pub1, err := kb.Sign(n1, d1, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) require.NoError(t, err) key1, err := kr1.GetPubKey() @@ -391,11 +392,11 @@ func TestSignVerifyKeyRing(t *testing.T) { require.NotNil(t, key1) require.Equal(t, key1, pub1) - s12, pub1, err := kb.Sign(n1, d2, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) + s12, pub1, err := kb.Sign(n1, d2, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) require.Nil(t, err) require.Equal(t, key1, pub1) - s21, pub2, err := kb.Sign(n2, d1, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) + s21, pub2, err := kb.Sign(n2, d1, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) require.Nil(t, err) key2, err := kr2.GetPubKey() @@ -403,7 +404,7 @@ func TestSignVerifyKeyRing(t *testing.T) { require.NotNil(t, key2) require.Equal(t, key2, pub2) - s22, pub2, err := kb.Sign(n2, d2, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) + s22, pub2, err := kb.Sign(n2, d2, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) require.Nil(t, err) require.Equal(t, key2, pub2) @@ -442,7 +443,7 @@ func TestSignVerifyKeyRing(t *testing.T) { require.NoError(t, err) require.Equal(t, i3.Name, n3) - _, _, err = kb.Sign(n3, d3, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) + _, _, err = kb.Sign(n3, d3, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) require.Error(t, err) require.Equal(t, "cannot sign with offline keys", err.Error()) } @@ -1228,23 +1229,23 @@ func TestInMemorySignVerify(t *testing.T) { d3 := []byte("feels like I forgot something...") // try signing both data with both .. - s11, pub1, err := cstore.Sign(n1, d1, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) + s11, pub1, err := cstore.Sign(n1, d1, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) require.Nil(t, err) key1, err := kr1.GetPubKey() require.NoError(t, err) require.Equal(t, key1, pub1) - s12, pub1, err := cstore.Sign(n1, d2, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) + s12, pub1, err := cstore.Sign(n1, d2, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) require.Nil(t, err) require.Equal(t, key1, pub1) - s21, pub2, err := cstore.Sign(n2, d1, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) + s21, pub2, err := cstore.Sign(n2, d1, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) require.Nil(t, err) key2, err := kr2.GetPubKey() require.NoError(t, err) require.Equal(t, key2, pub2) - s22, pub2, err := cstore.Sign(n2, d2, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) + s22, pub2, err := cstore.Sign(n2, d2, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) require.Nil(t, err) require.Equal(t, key2, pub2) @@ -1284,7 +1285,7 @@ func TestInMemorySignVerify(t *testing.T) { require.Equal(t, i3.Name, n3) // Now try to sign data with a secret-less key - _, _, err = cstore.Sign(n3, d3, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) + _, _, err = cstore.Sign(n3, d3, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) require.Error(t, err) require.Equal(t, "cannot sign with offline keys", err.Error()) } @@ -1380,7 +1381,7 @@ func ExampleNew() { // We need to use passphrase to generate a signature tx := []byte("deadbeef") - sig, pub, err := cstore.Sign("Bob", tx, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) + sig, pub, err := cstore.Sign("Bob", tx, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) if err != nil { fmt.Println("don't accept real passphrase") } @@ -1842,14 +1843,14 @@ func TestAltKeyring_Sign(t *testing.T) { backend string uid string msg []byte - mode signing.SignMode + mode apisigning.SignMode }{ { name: "correct sign", backend: BackendTest, uid: "signKey", msg: []byte("some message"), - mode: signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, + mode: apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, }, } for _, tt := range tests { @@ -1875,14 +1876,14 @@ func TestAltKeyring_SignByAddress(t *testing.T) { backend string uid string msg []byte - mode signing.SignMode + mode apisigning.SignMode }{ { name: "correct sign by address", backend: BackendTest, uid: "signKey", msg: []byte("some message"), - mode: signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, + mode: apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, }, } for _, tt := range tests { diff --git a/crypto/keys/multisig/multisig_test.go b/crypto/keys/multisig/multisig_test.go index 7c3070e924..466a69e898 100644 --- a/crypto/keys/multisig/multisig_test.go +++ b/crypto/keys/multisig/multisig_test.go @@ -6,6 +6,7 @@ import ( "github.com/stretchr/testify/require" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" "cosmossdk.io/core/address" "cosmossdk.io/depinject" "cosmossdk.io/log" @@ -99,7 +100,7 @@ func TestVerifyMultisignature(t *testing.T) { sig *signing.MultiSignatureData ) msg := []byte{1, 2, 3, 4} - signBytesFn := func(mode signing.SignMode) ([]byte, error) { return msg, nil } + signBytesFn := func(mode apisigning.SignMode) ([]byte, error) { return msg, nil } testCases := []struct { msg string @@ -132,7 +133,7 @@ func TestVerifyMultisignature(t *testing.T) { pubKeys, sigs := generatePubKeysAndSignatures(8, msg) pk = kmultisig.NewLegacyAminoPubKey(k, pubKeys) sig = multisig.NewMultisig(len(pubKeys)) - signBytesFn := func(mode signing.SignMode) ([]byte, error) { return msg, nil } + signBytesFn := func(mode apisigning.SignMode) ([]byte, error) { return msg, nil } for i := 0; i < k-1; i++ { signingIndex := signingIndices[i] @@ -264,7 +265,7 @@ func TestMultiSigMigration(t *testing.T) { multisignature := multisig.NewMultisig(3) multisigKey := kmultisig.NewLegacyAminoPubKey(2, pkSet) - signBytesFn := func(mode signing.SignMode) ([]byte, error) { return msg, nil } + signBytesFn := func(mode apisigning.SignMode) ([]byte, error) { return msg, nil } cdc := codec.NewLegacyAmino() @@ -546,7 +547,7 @@ func TestVerifyMultisignatureNMRule(t *testing.T) { } // Create getSignBytes function that returns our test message - getSignBytes := func(mode signing.SignMode) ([]byte, error) { + getSignBytes := func(mode apisigning.SignMode) ([]byte, error) { return msg, nil } diff --git a/crypto/types/multisig/pubkey.go b/crypto/types/multisig/pubkey.go index 2e778bae6f..a3ca8518bb 100644 --- a/crypto/types/multisig/pubkey.go +++ b/crypto/types/multisig/pubkey.go @@ -1,6 +1,8 @@ package multisig import ( + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" + "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/types/tx/signing" ) @@ -24,4 +26,4 @@ type PubKey interface { // GetSignBytesFunc defines a function type which returns sign bytes for a given SignMode or an error. // It will generally be implemented as a closure which wraps whatever signable object signatures are // being verified against. -type GetSignBytesFunc func(mode signing.SignMode) ([]byte, error) +type GetSignBytesFunc func(mode apisigning.SignMode) ([]byte, error) diff --git a/simapp/app.go b/simapp/app.go index 795f32dab0..f6be54ccf4 100644 --- a/simapp/app.go +++ b/simapp/app.go @@ -18,6 +18,7 @@ import ( autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" reflectionv1 "cosmossdk.io/api/cosmos/reflection/v1" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" "cosmossdk.io/client/v2/autocli" clienthelpers "cosmossdk.io/client/v2/helpers" coreaddress "cosmossdk.io/core/address" @@ -102,7 +103,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" "github.com/cosmos/cosmos-sdk/types/msgservice" - sigtypes "github.com/cosmos/cosmos-sdk/types/tx/signing" "github.com/cosmos/cosmos-sdk/version" "github.com/cosmos/cosmos-sdk/x/auth" "github.com/cosmos/cosmos-sdk/x/auth/ante" @@ -347,7 +347,7 @@ func NewSimApp( ) // optional: enable sign mode textual by overwriting the default tx config (after setting the bank keeper) - enabledSignModes := append(authtx.DefaultSignModes, sigtypes.SignMode_SIGN_MODE_TEXTUAL) + enabledSignModes := append(authtx.DefaultSignModes, apisigning.SignMode_SIGN_MODE_TEXTUAL) txConfigOpts := authtx.ConfigOptions{ EnabledSignModes: enabledSignModes, TextualCoinMetadataQueryFn: txmodule.NewBankKeeperCoinMetadataQueryFn(app.BankKeeper), diff --git a/simapp/go.mod b/simapp/go.mod index efbe91dafa..99e9d6e183 100644 --- a/simapp/go.mod +++ b/simapp/go.mod @@ -244,6 +244,7 @@ require ( // replace ( // // ) +replace cosmossdk.io/client/v2 => ../client/v2 // Below are the long-lived replace of the SimApp replace ( diff --git a/simapp/go.sum b/simapp/go.sum index eb19e7bade..7aa8f1acba 100644 --- a/simapp/go.sum +++ b/simapp/go.sum @@ -194,8 +194,6 @@ cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1V cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= cosmossdk.io/api v0.8.2 h1:klzA1RODd9tTawJ2CbBd/34RV/cB9qtd9oJN6rcRqqg= cosmossdk.io/api v0.8.2/go.mod h1:XJUwQrihIDjErzs3+jm1zO/9KRzKf4HMjRzXC+l+Cio= -cosmossdk.io/client/v2 v2.10.0-beta.1 h1:uMF5PUt6cy6QeXRnBf1tuig5Haw3dUaTqtSIYZWf/Cc= -cosmossdk.io/client/v2 v2.10.0-beta.1/go.mod h1:EqHIw/tLdCK1vSAg+8ovNEBq3PeBenP+nQ1WhPMGq94= cosmossdk.io/collections v1.0.0 h1:YCYIe/pIMtc1iLDD0OrVdfWCnIkpwdy7k9NSQpaR5mg= cosmossdk.io/collections v1.0.0/go.mod h1:mFfLxnYT1fV+B3Lx9GLap1qxmffIPqQCND4xBExerps= cosmossdk.io/core v1.0.0 h1:e7XBbISOytLBOXMVwpRPixThXqEkeLGlg8no/qpgS8U= diff --git a/simapp/simd/cmd/root.go b/simapp/simd/cmd/root.go index 7851629e77..ca3729b3a3 100644 --- a/simapp/simd/cmd/root.go +++ b/simapp/simd/cmd/root.go @@ -7,6 +7,7 @@ import ( "github.com/spf13/cobra" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" coretesting "cosmossdk.io/core/testing" "cosmossdk.io/log" "cosmossdk.io/simapp" @@ -20,7 +21,6 @@ import ( "github.com/cosmos/cosmos-sdk/server" simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/tx/signing" "github.com/cosmos/cosmos-sdk/x/auth/tx" authtxconfig "github.com/cosmos/cosmos-sdk/x/auth/tx/config" "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -79,7 +79,7 @@ func NewRootCmd() *cobra.Command { // sets the RPC client needed for SIGN_MODE_TEXTUAL. This sign mode // is only available if the client is online. if !initClientCtx.Offline { - enabledSignModes := append(tx.DefaultSignModes, signing.SignMode_SIGN_MODE_TEXTUAL) + enabledSignModes := append(tx.DefaultSignModes, apisigning.SignMode_SIGN_MODE_TEXTUAL) txConfigOpts := tx.ConfigOptions{ EnabledSignModes: enabledSignModes, TextualCoinMetadataQueryFn: authtxconfig.NewGRPCCoinMetadataQueryFn(initClientCtx), diff --git a/simsx/v2/txutils.go b/simsx/v2/txutils.go index 640d09a114..5038ef820f 100644 --- a/simsx/v2/txutils.go +++ b/simsx/v2/txutils.go @@ -6,9 +6,13 @@ import ( "fmt" "math/rand" + "google.golang.org/protobuf/types/known/anypb" + "cosmossdk.io/core/transaction" + txsigning "cosmossdk.io/x/tx/signing" "github.com/cosmos/cosmos-sdk/client" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/simsx" sdk "github.com/cosmos/cosmos-sdk/types" @@ -91,25 +95,20 @@ func GenSignedMockTx( // create a random length memo memo := simulation.RandStringOfLength(r, simulation.RandIntBetween(r, 0, 100)) - signMode, err := authsign.APISignModeToInternal(txConfig.SignModeHandler().DefaultMode()) - if err != nil { - return nil, err - } - // 1st round: set SignatureV2 with empty signatures, to set correct // signer infos. for i, p := range priv { sigs[i] = signing.SignatureV2{ PubKey: p.PubKey(), Data: &signing.SingleSignatureData{ - SignMode: signMode, + SignMode: txConfig.SignModeHandler().DefaultMode(), }, Sequence: accSeqs[i], } } tx := txConfig.NewTxBuilder() - err = tx.SetMsgs(msgs...) + err := tx.SetMsgs(msgs...) if err != nil { return nil, err } @@ -123,16 +122,21 @@ func GenSignedMockTx( // 2nd round: once all signer infos are set, every signer can sign. for i, p := range priv { - signerData := authsign.SignerData{ + anyPk, err := codectypes.NewAnyWithValue(p.PubKey()) + if err != nil { + return nil, err + } + + signerData := txsigning.SignerData{ Address: sdk.AccAddress(p.PubKey().Address()).String(), ChainID: chainID, AccountNumber: accNums[i], Sequence: accSeqs[i], - PubKey: p.PubKey(), + PubKey: &anypb.Any{TypeUrl: anyPk.TypeUrl, Value: anyPk.Value}, } signBytes, err := authsign.GetSignBytesAdapter( - context.Background(), txConfig.SignModeHandler(), signMode, signerData, + context.Background(), txConfig.SignModeHandler(), txConfig.SignModeHandler().DefaultMode(), signerData, tx.GetTx()) if err != nil { return nil, fmt.Errorf("sign bytes: %w", err) diff --git a/tests/integration/baseapp/block_gas_test.go b/tests/integration/baseapp/block_gas_test.go index 73b3057897..e5ba5bf55e 100644 --- a/tests/integration/baseapp/block_gas_test.go +++ b/tests/integration/baseapp/block_gas_test.go @@ -8,6 +8,7 @@ import ( abci "github.com/cometbft/cometbft/api/cometbft/abci/v1" cmtjson "github.com/cometbft/cometbft/libs/json" "github.com/stretchr/testify/require" + "google.golang.org/protobuf/types/known/anypb" coretesting "cosmossdk.io/core/testing" "cosmossdk.io/depinject" @@ -15,6 +16,7 @@ import ( sdkmath "cosmossdk.io/math" store "cosmossdk.io/store/types" _ "cosmossdk.io/x/accounts" + txsigning "cosmossdk.io/x/tx/signing" baseapptestutil "github.com/cosmos/cosmos-sdk/baseapp/testutil" "github.com/cosmos/cosmos-sdk/client" @@ -190,10 +192,6 @@ func TestBaseApp_BlockGas(t *testing.T) { } func createTestTx(txConfig client.TxConfig, txBuilder client.TxBuilder, privs []cryptotypes.PrivKey, accNums, accSeqs []uint64, chainID string) (xauthsigning.Tx, []byte, error) { - defaultSignMode, err := xauthsigning.APISignModeToInternal(txConfig.SignModeHandler().DefaultMode()) - if err != nil { - return nil, nil, err - } // First round: we gather all the signer infos. We use the "set empty // signature" hack to do that. var sigsV2 []signing.SignatureV2 @@ -201,7 +199,7 @@ func createTestTx(txConfig client.TxConfig, txBuilder client.TxBuilder, privs [] sigV2 := signing.SignatureV2{ PubKey: priv.PubKey(), Data: &signing.SingleSignatureData{ - SignMode: defaultSignMode, + SignMode: txConfig.SignModeHandler().DefaultMode(), Signature: nil, }, Sequence: accSeqs[i], @@ -209,7 +207,7 @@ func createTestTx(txConfig client.TxConfig, txBuilder client.TxBuilder, privs [] sigsV2 = append(sigsV2, sigV2) } - err = txBuilder.SetSignatures(sigsV2...) + err := txBuilder.SetSignatures(sigsV2...) if err != nil { return nil, nil, err } @@ -217,15 +215,20 @@ func createTestTx(txConfig client.TxConfig, txBuilder client.TxBuilder, privs [] // Second round: all signer infos are set, so each signer can sign. sigsV2 = []signing.SignatureV2{} for i, priv := range privs { - signerData := xauthsigning.SignerData{ + anyPk, err := codectypes.NewAnyWithValue(priv.PubKey()) + if err != nil { + return nil, nil, err + } + + signerData := txsigning.SignerData{ Address: sdk.AccAddress(priv.PubKey().Bytes()).String(), ChainID: chainID, AccountNumber: accNums[i], Sequence: accSeqs[i], - PubKey: priv.PubKey(), + PubKey: &anypb.Any{TypeUrl: anyPk.TypeUrl, Value: anyPk.Value}, } sigV2, err := tx.SignWithPrivKey( - context.TODO(), defaultSignMode, signerData, + context.TODO(), txConfig.SignModeHandler().DefaultMode(), signerData, txBuilder, priv, txConfig, accSeqs[i]) if err != nil { return nil, nil, err diff --git a/tests/integration/server/grpc/server_test.go b/tests/integration/server/grpc/server_test.go index e8d6d180b4..7acb01da6f 100644 --- a/tests/integration/server/grpc/server_test.go +++ b/tests/integration/server/grpc/server_test.go @@ -12,6 +12,7 @@ import ( "google.golang.org/grpc" "google.golang.org/grpc/metadata" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" _ "cosmossdk.io/x/accounts" _ "cosmossdk.io/x/bank" banktypes "cosmossdk.io/x/bank/types" @@ -30,7 +31,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" grpctypes "github.com/cosmos/cosmos-sdk/types/grpc" txtypes "github.com/cosmos/cosmos-sdk/types/tx" - "github.com/cosmos/cosmos-sdk/types/tx/signing" _ "github.com/cosmos/cosmos-sdk/x/auth" authclient "github.com/cosmos/cosmos-sdk/x/auth/client" _ "github.com/cosmos/cosmos-sdk/x/auth/tx/config" @@ -277,7 +277,7 @@ func (s *IntegrationTestSuite) mkTxBuilder() client.TxBuilder { WithChainID(val.GetClientCtx().ChainID). WithKeybase(val.GetClientCtx().Keyring). WithTxConfig(val.GetClientCtx().TxConfig). - WithSignMode(signing.SignMode_SIGN_MODE_DIRECT) + WithSignMode(apisigning.SignMode_SIGN_MODE_DIRECT) // Sign Tx. err := authclient.SignTx(txFactory, val.GetClientCtx(), val.GetMoniker(), txBuilder, false, true) diff --git a/tests/integration/tx/benchmark/benchmarks_test.go b/tests/integration/tx/benchmark/benchmarks_test.go index 4d26bc3e3d..f01a98c61f 100644 --- a/tests/integration/tx/benchmark/benchmarks_test.go +++ b/tests/integration/tx/benchmark/benchmarks_test.go @@ -6,6 +6,7 @@ import ( "gotest.tools/v3/assert" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" sdkmath "cosmossdk.io/math" "cosmossdk.io/simapp" banktypes "cosmossdk.io/x/bank/types" @@ -17,7 +18,6 @@ import ( "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/tx" - "github.com/cosmos/cosmos-sdk/types/tx/signing" authclient "github.com/cosmos/cosmos-sdk/x/auth/client" ) @@ -181,7 +181,7 @@ func mkTxBuilder(tb testing.TB, s *TxBenchmarkSuite) client.TxBuilder { WithChainID(val.GetClientCtx().ChainID). WithKeybase(val.GetClientCtx().Keyring). WithTxConfig(val.GetClientCtx().TxConfig). - WithSignMode(signing.SignMode_SIGN_MODE_DIRECT) + WithSignMode(apisigning.SignMode_SIGN_MODE_DIRECT) // Sign Tx. err := authclient.SignTx(txFactory, val.GetClientCtx(), val.GetMoniker(), txBuilder, false, true) diff --git a/tests/integration/tx/decode_test.go b/tests/integration/tx/decode_test.go index 3b58b5c829..ba22f367e4 100644 --- a/tests/integration/tx/decode_test.go +++ b/tests/integration/tx/decode_test.go @@ -11,6 +11,7 @@ import ( "pgregory.net/rapid" msgv1 "cosmossdk.io/api/cosmos/msg/v1" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" "cosmossdk.io/math" authzmodule "cosmossdk.io/x/authz/module" "cosmossdk.io/x/bank" @@ -112,7 +113,7 @@ func TestDecode(t *testing.T) { sig := signing.SignatureV2{ PubKey: pubkey, Data: &signing.SingleSignatureData{ - SignMode: signing.SignMode_SIGN_MODE_DIRECT, + SignMode: apisigning.SignMode_SIGN_MODE_DIRECT, Signature: legacy.Cdc.MustMarshal(pubkey), }, Sequence: accSeq, diff --git a/tests/integration/tx/internal/util.go b/tests/integration/tx/internal/util.go index d2e654a588..6d471d4884 100644 --- a/tests/integration/tx/internal/util.go +++ b/tests/integration/tx/internal/util.go @@ -12,6 +12,7 @@ import ( "google.golang.org/protobuf/reflect/protoreflect" "google.golang.org/protobuf/types/dynamicpb" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" "cosmossdk.io/core/transaction" "cosmossdk.io/x/tx/signing" "cosmossdk.io/x/tx/signing/aminojson" @@ -23,7 +24,6 @@ import ( "github.com/cosmos/cosmos-sdk/tests/integration/tx/internal/pulsar/testpb" "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/module" - signingtypes "github.com/cosmos/cosmos-sdk/types/tx/signing" "github.com/cosmos/cosmos-sdk/x/auth/migrations/legacytx" authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing" "github.com/cosmos/cosmos-sdk/x/auth/tx" @@ -88,8 +88,8 @@ func NewSigningFixture( txConfig, err := tx.NewTxConfigWithOptions( protoCodec, tx.ConfigOptions{ - EnabledSignModes: []signingtypes.SignMode{ - signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, + EnabledSignModes: []apisigning.SignMode{ + apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, }, SigningOptions: signingOptions, }) @@ -141,8 +141,8 @@ func (s *SigningFixture) RequireLegacyAminoEquivalent(t *testing.T, msg transact }() legacyAminoSignHandler := tx.NewSignModeLegacyAminoJSONHandler() legacyBz, err := legacyAminoSignHandler.GetSignBytes( - signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, - authsigning.SignerData{ + apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, + signing.SignerData{ ChainID: signerData.ChainID, Address: signerData.Address, AccountNumber: signerData.AccountNumber, diff --git a/testutil/cli/cmd.go b/testutil/cli/cmd.go index f401902344..f71cc97065 100644 --- a/testutil/cli/cmd.go +++ b/testutil/cli/cmd.go @@ -7,6 +7,7 @@ import ( "github.com/cosmos/gogoproto/proto" "github.com/spf13/cobra" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" sdkmath "cosmossdk.io/math" "github.com/cosmos/cosmos-sdk/client" @@ -15,7 +16,6 @@ import ( "github.com/cosmos/cosmos-sdk/testutil" sdk "github.com/cosmos/cosmos-sdk/types" txtypes "github.com/cosmos/cosmos-sdk/types/tx" - "github.com/cosmos/cosmos-sdk/types/tx/signing" ) // ExecTestCLICmd builds the client context, mocks the output and executes the command. @@ -86,7 +86,7 @@ func SubmitTestTx(clientCtx client.Context, msg proto.Message, from sdk.AccAddre WithChainID(clientCtx.ChainID). WithKeybase(clientCtx.Keyring). WithTxConfig(clientCtx.TxConfig). - WithSignMode(signing.SignMode_SIGN_MODE_DIRECT) + WithSignMode(apisigning.SignMode_SIGN_MODE_DIRECT) if config.Offline { txFactory = txFactory. diff --git a/testutil/sims/tx_helpers.go b/testutil/sims/tx_helpers.go index ac5685de2c..c7056cb9cf 100644 --- a/testutil/sims/tx_helpers.go +++ b/testutil/sims/tx_helpers.go @@ -8,12 +8,15 @@ import ( types2 "github.com/cometbft/cometbft/api/cometbft/abci/v1" "github.com/stretchr/testify/require" + "google.golang.org/protobuf/types/known/anypb" "cosmossdk.io/core/header" "cosmossdk.io/errors" + txsigning "cosmossdk.io/x/tx/signing" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/simulation" @@ -37,28 +40,24 @@ func GenSignedMockTx( // create a random length memo memo := simulation.RandStringOfLength(r, simulation.RandIntBetween(r, 0, 100)) - signMode, err := authsign.APISignModeToInternal(txConfig.SignModeHandler().DefaultMode()) - if err != nil { - return nil, err - } - // 1st round: set SignatureV2 with empty signatures, to set correct // signer infos. for i, p := range priv { sigs[i] = signing.SignatureV2{ PubKey: p.PubKey(), Data: &signing.SingleSignatureData{ - SignMode: signMode, + SignMode: txConfig.SignModeHandler().DefaultMode(), }, Sequence: accSeqs[i], } } tx := txConfig.NewTxBuilder() - err = tx.SetMsgs(msgs...) + err := tx.SetMsgs(msgs...) if err != nil { return nil, err } + err = tx.SetSignatures(sigs...) if err != nil { return nil, err @@ -69,16 +68,21 @@ func GenSignedMockTx( // 2nd round: once all signer infos are set, every signer can sign. for i, p := range priv { - signerData := authsign.SignerData{ + anyPk, err := codectypes.NewAnyWithValue(p.PubKey()) + if err != nil { + return nil, err + } + + signerData := txsigning.SignerData{ Address: sdk.AccAddress(p.PubKey().Address()).String(), ChainID: chainID, AccountNumber: accNums[i], Sequence: accSeqs[i], - PubKey: p.PubKey(), + PubKey: &anypb.Any{TypeUrl: anyPk.TypeUrl, Value: anyPk.Value}, } signBytes, err := authsign.GetSignBytesAdapter( - context.Background(), txConfig.SignModeHandler(), signMode, signerData, + context.Background(), txConfig.SignModeHandler(), txConfig.SignModeHandler().DefaultMode(), signerData, tx.GetTx()) if err != nil { panic(err) diff --git a/types/tx/direct_aux.go b/types/tx/direct_aux.go index d685a837ad..90d00fc48b 100644 --- a/types/tx/direct_aux.go +++ b/types/tx/direct_aux.go @@ -50,10 +50,12 @@ func (a *AuxSignerData) GetSignatureV2() (signing.SignatureV2, error) { return signing.SignatureV2{}, sdkerrors.ErrInvalidType.Wrapf("expected %T, got %T", (cryptotypes.PubKey)(nil), pk) } + signMode, _ := signing.InternalSignModeToAPI(a.Mode) + return signing.SignatureV2{ PubKey: pk, Data: &signing.SingleSignatureData{ - SignMode: a.Mode, + SignMode: signMode, Signature: a.Sig, }, Sequence: a.SignDoc.Sequence, diff --git a/types/tx/direct_aux_test.go b/types/tx/direct_aux_test.go index a1b655531e..62427c576b 100644 --- a/types/tx/direct_aux_test.go +++ b/types/tx/direct_aux_test.go @@ -76,7 +76,8 @@ func TestAuxSignerData(t *testing.T) { require.NoError(t, err) sigV2, err := tc.sd.GetSignatureV2() require.NoError(t, err) - require.Equal(t, tc.sd.Mode, sigV2.Data.(*signing.SingleSignatureData).SignMode) + m, _ := signing.InternalSignModeToAPI(tc.sd.Mode) + require.Equal(t, m, sigV2.Data.(*signing.SingleSignatureData).SignMode) require.Equal(t, tc.sd.Sig, sigV2.Data.(*signing.SingleSignatureData).Signature) require.Equal(t, tc.sd.SignDoc.Sequence, sigV2.Sequence) require.True(t, tc.sd.SignDoc.PublicKey.GetCachedValue().(cryptotypes.PubKey).Equals(sigV2.PubKey)) diff --git a/types/tx/signing/signature.go b/types/tx/signing/signature.go index a27ea27b86..ada0a81076 100644 --- a/types/tx/signing/signature.go +++ b/types/tx/signing/signature.go @@ -32,10 +32,11 @@ type SignatureV2 struct { func SignatureDataToProto(data SignatureData) *SignatureDescriptor_Data { switch data := data.(type) { case *SingleSignatureData: + signMode, _ := APISignModeToInternal(data.SignMode) return &SignatureDescriptor_Data{ Sum: &SignatureDescriptor_Data_Single_{ Single: &SignatureDescriptor_Data_Single{ - Mode: data.SignMode, + Mode: signMode, Signature: data.Signature, }, }, @@ -66,8 +67,9 @@ func SignatureDataToProto(data SignatureData) *SignatureDescriptor_Data { func SignatureDataFromProto(descData *SignatureDescriptor_Data) SignatureData { switch descData := descData.Sum.(type) { case *SignatureDescriptor_Data_Single_: + signMode, _ := InternalSignModeToAPI(descData.Single.Mode) return &SingleSignatureData{ - SignMode: descData.Single.Mode, + SignMode: signMode, Signature: descData.Single.Signature, } case *SignatureDescriptor_Data_Multi_: diff --git a/types/tx/signing/signature_data.go b/types/tx/signing/signature_data.go index 8b5999e314..c27aeabfe5 100644 --- a/types/tx/signing/signature_data.go +++ b/types/tx/signing/signature_data.go @@ -1,6 +1,8 @@ package signing import ( + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" + "github.com/cosmos/cosmos-sdk/crypto/types" ) @@ -14,7 +16,7 @@ type SignatureData interface { // SingleSignatureData represents the signature and SignMode of a single (non-multisig) signer type SingleSignatureData struct { // SignMode represents the SignMode of the signature - SignMode SignMode + SignMode apisigning.SignMode // Signature is the raw signature. Signature []byte diff --git a/types/tx/signing/types.go b/types/tx/signing/types.go new file mode 100644 index 0000000000..9785c3667d --- /dev/null +++ b/types/tx/signing/types.go @@ -0,0 +1,39 @@ +package signing + +import ( + "fmt" + + signingv1beta1 "cosmossdk.io/api/cosmos/tx/signing/v1beta1" +) + +// APISignModeToInternal converts a protobuf SignMode to a SignMode. +func APISignModeToInternal(mode signingv1beta1.SignMode) (SignMode, error) { + switch mode { + case signingv1beta1.SignMode_SIGN_MODE_DIRECT: + return SignMode_SIGN_MODE_DIRECT, nil + case signingv1beta1.SignMode_SIGN_MODE_LEGACY_AMINO_JSON: + return SignMode_SIGN_MODE_LEGACY_AMINO_JSON, nil + case signingv1beta1.SignMode_SIGN_MODE_TEXTUAL: + return SignMode_SIGN_MODE_TEXTUAL, nil + case signingv1beta1.SignMode_SIGN_MODE_DIRECT_AUX: + return SignMode_SIGN_MODE_DIRECT_AUX, nil + default: + return SignMode_SIGN_MODE_UNSPECIFIED, fmt.Errorf("unsupported sign mode %s", mode) + } +} + +// InternalSignModeToAPI converts a SignMode to a protobuf SignMode. +func InternalSignModeToAPI(mode SignMode) (signingv1beta1.SignMode, error) { + switch mode { + case SignMode_SIGN_MODE_DIRECT: + return signingv1beta1.SignMode_SIGN_MODE_DIRECT, nil + case SignMode_SIGN_MODE_LEGACY_AMINO_JSON: + return signingv1beta1.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, nil + case SignMode_SIGN_MODE_TEXTUAL: + return signingv1beta1.SignMode_SIGN_MODE_TEXTUAL, nil + case SignMode_SIGN_MODE_DIRECT_AUX: + return signingv1beta1.SignMode_SIGN_MODE_DIRECT_AUX, nil + default: + return signingv1beta1.SignMode_SIGN_MODE_UNSPECIFIED, fmt.Errorf("unsupported sign mode %s", mode) + } +} diff --git a/x/auth/ante/ante_test.go b/x/auth/ante/ante_test.go index 0078c2a980..5d46f78459 100644 --- a/x/auth/ante/ante_test.go +++ b/x/auth/ante/ante_test.go @@ -10,6 +10,7 @@ import ( "github.com/golang/mock/gomock" "github.com/stretchr/testify/require" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" "cosmossdk.io/core/gas" "cosmossdk.io/core/header" errorsmod "cosmossdk.io/errors" @@ -115,7 +116,7 @@ func TestAnteHandlerSigErrors(t *testing.T) { // Create tx manually to test the tx's signers require.NoError(t, suite.txBuilder.SetMsgs(msgs...)) - tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT) + tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT) require.NoError(t, err) // tx.GetSigners returns addresses in correct order: addr1, addr2, addr3 @@ -1097,7 +1098,7 @@ func TestAnteHandlerSetPubKey(t *testing.T) { suite.txBuilder.SetGasLimit(gasLimit) // Manually create tx, and remove signature. - tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT) + tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT) require.NoError(t, err) txBuilder, err := suite.clientCtx.TxConfig.WrapTxBuilder(tx) require.NoError(t, err) @@ -1322,7 +1323,7 @@ func TestAnteHandlerReCheck(t *testing.T) { // test that operations skipped on recheck do not run privs, accNums, accSeqs := []cryptotypes.PrivKey{accs[0].priv}, []uint64{0}, []uint64{0} - tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT) + tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT) require.NoError(t, err) // make signature array empty which would normally cause ValidateBasicDecorator and SigVerificationDecorator fail @@ -1334,7 +1335,7 @@ func TestAnteHandlerReCheck(t *testing.T) { _, err = suite.anteHandler(suite.ctx, txBuilder.GetTx(), false) require.Nil(t, err, "AnteHandler errored on recheck unexpectedly: %v", err) - tx, err = suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT) + tx, err = suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT) require.NoError(t, err) txBytes, err := json.Marshal(tx) require.Nil(t, err, "Error marshaling tx: %v", err) diff --git a/x/auth/ante/basic_test.go b/x/auth/ante/basic_test.go index 1a5687b92f..ebba84d36b 100644 --- a/x/auth/ante/basic_test.go +++ b/x/auth/ante/basic_test.go @@ -8,6 +8,7 @@ import ( "github.com/stretchr/testify/require" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" appmodulev2 "cosmossdk.io/core/appmodule/v2" "cosmossdk.io/core/header" storetypes "cosmossdk.io/store/types" @@ -37,7 +38,7 @@ func TestValidateBasic(t *testing.T) { suite.txBuilder.SetGasLimit(gasLimit) privs, accNums, accSeqs := []cryptotypes.PrivKey{}, []uint64{}, []uint64{} - invalidTx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT) + invalidTx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT) require.NoError(t, err) vbd := ante.NewValidateBasicDecorator(suite.accountKeeper.GetEnvironment()) @@ -47,7 +48,7 @@ func TestValidateBasic(t *testing.T) { require.ErrorIs(t, err, sdkerrors.ErrNoSignatures, "Did not error on invalid tx") privs, accNums, accSeqs = []cryptotypes.PrivKey{priv1}, []uint64{0}, []uint64{0} - validTx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT) + validTx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT) require.NoError(t, err) _, err = antehandler(suite.ctx, validTx, false) @@ -79,7 +80,7 @@ func TestValidateMemo(t *testing.T) { privs, accNums, accSeqs := []cryptotypes.PrivKey{priv1}, []uint64{0}, []uint64{0} suite.txBuilder.SetMemo(strings.Repeat("01234567890", 500)) - invalidTx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT) + invalidTx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT) require.NoError(t, err) // require that long memos get rejected @@ -90,7 +91,7 @@ func TestValidateMemo(t *testing.T) { require.ErrorIs(t, err, sdkerrors.ErrMemoTooLarge, "Did not error on tx with high memo") suite.txBuilder.SetMemo(strings.Repeat("01234567890", 10)) - validTx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT) + validTx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT) require.NoError(t, err) // require small memos pass ValidateMemo Decorator @@ -131,7 +132,7 @@ func TestConsumeGasForTxSize(t *testing.T) { suite.txBuilder.SetMemo(strings.Repeat("01234567890", 10)) privs, accNums, accSeqs := []cryptotypes.PrivKey{priv1}, []uint64{0}, []uint64{0} - tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT) + tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT) require.NoError(t, err) txBytes, err := suite.clientCtx.TxConfig.TxJSONEncoder()(tx) @@ -233,7 +234,7 @@ func TestTxHeightTimeoutDecorator(t *testing.T) { suite.txBuilder.SetTimeoutTimestamp(tc.timeoutTimestamp) privs, accNums, accSeqs := []cryptotypes.PrivKey{priv1}, []uint64{0}, []uint64{0} - tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT) + tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT) require.NoError(t, err) mockHeaderService.WithBlockHeight(tc.height) diff --git a/x/auth/ante/fee_test.go b/x/auth/ante/fee_test.go index 540f1d211f..608d57f1a0 100644 --- a/x/auth/ante/fee_test.go +++ b/x/auth/ante/fee_test.go @@ -6,13 +6,13 @@ import ( "github.com/golang/mock/gomock" "github.com/stretchr/testify/require" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" "cosmossdk.io/math" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/cosmos/cosmos-sdk/types/tx/signing" "github.com/cosmos/cosmos-sdk/x/auth/ante" authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" ) @@ -35,7 +35,7 @@ func TestDeductFeeDecorator_ZeroGas(t *testing.T) { s.txBuilder.SetGasLimit(0) privs, accNums, accSeqs := []cryptotypes.PrivKey{accs[0].priv}, []uint64{0}, []uint64{0} - tx, err := s.CreateTestTx(s.ctx, privs, accNums, accSeqs, s.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT) + tx, err := s.CreateTestTx(s.ctx, privs, accNums, accSeqs, s.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT) require.NoError(t, err) // Set IsCheckTx to true @@ -76,7 +76,7 @@ func TestEnsureMempoolFees(t *testing.T) { s.bankKeeper.EXPECT().SendCoinsFromAccountToModule(gomock.Any(), accs[0].acc.GetAddress(), authtypes.FeeCollectorName, feeAmount).Return(nil).Times(3) privs, accNums, accSeqs := []cryptotypes.PrivKey{accs[0].priv}, []uint64{0}, []uint64{0} - tx, err := s.CreateTestTx(s.ctx, privs, accNums, accSeqs, s.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT) + tx, err := s.CreateTestTx(s.ctx, privs, accNums, accSeqs, s.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT) require.NoError(t, err) // Set high gas price so standard test fee fails @@ -126,7 +126,7 @@ func TestDeductFees(t *testing.T) { s.txBuilder.SetGasLimit(gasLimit) privs, accNums, accSeqs := []cryptotypes.PrivKey{accs[0].priv}, []uint64{0}, []uint64{0} - tx, err := s.CreateTestTx(s.ctx, privs, accNums, accSeqs, s.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT) + tx, err := s.CreateTestTx(s.ctx, privs, accNums, accSeqs, s.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT) require.NoError(t, err) dfd := ante.NewDeductFeeDecorator(s.accountKeeper, s.bankKeeper, nil, nil) diff --git a/x/auth/ante/feegrant_test.go b/x/auth/ante/feegrant_test.go index 234b7eadd7..37c073eec2 100644 --- a/x/auth/ante/feegrant_test.go +++ b/x/auth/ante/feegrant_test.go @@ -9,9 +9,14 @@ import ( "github.com/golang/mock/gomock" "github.com/stretchr/testify/require" + "google.golang.org/protobuf/types/known/anypb" + + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" + txsigning "cosmossdk.io/x/tx/signing" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/codec" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" @@ -199,7 +204,7 @@ func genTxWithFeeGranter(gen client.TxConfig, msgs []sdk.Msg, feeAmt sdk.Coins, memo := simulation.RandStringOfLength(r, simulation.RandIntBetween(r, 0, 100)) - signMode := signing.SignMode_SIGN_MODE_DIRECT + signMode := apisigning.SignMode_SIGN_MODE_DIRECT // 1st round: set SignatureV2 with empty signatures, to set correct // signer infos. @@ -229,11 +234,16 @@ func genTxWithFeeGranter(gen client.TxConfig, msgs []sdk.Msg, feeAmt sdk.Coins, // 2nd round: once all signer infos are set, every signer can sign. for i, p := range priv { - signerData := authsign.SignerData{ + anyPk, err := codectypes.NewAnyWithValue(p.PubKey()) + if err != nil { + return nil, err + } + + signerData := txsigning.SignerData{ ChainID: chainID, AccountNumber: accNums[i], Sequence: accSeqs[i], - PubKey: p.PubKey(), + PubKey: &anypb.Any{TypeUrl: anyPk.TypeUrl, Value: anyPk.Value}, } signBytes, err := authsign.GetSignBytesAdapter( context.Background(), gen.SignModeHandler(), signMode, signerData, tx.GetTx()) diff --git a/x/auth/ante/setup_test.go b/x/auth/ante/setup_test.go index 3e8a2b7fad..7db0335ca9 100644 --- a/x/auth/ante/setup_test.go +++ b/x/auth/ante/setup_test.go @@ -5,13 +5,13 @@ import ( "github.com/stretchr/testify/require" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" storetypes "cosmossdk.io/store/types" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/cosmos/cosmos-sdk/types/tx/signing" "github.com/cosmos/cosmos-sdk/x/auth/ante" ) @@ -30,7 +30,7 @@ func TestSetupDecorator_BlockMaxGas(t *testing.T) { suite.txBuilder.SetGasLimit(10000000000) privs, accNums, accSeqs := []cryptotypes.PrivKey{priv1}, []uint64{0}, []uint64{0} - tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT) + tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT) require.NoError(t, err) sud := ante.NewSetUpContextDecorator(suite.env, suite.consensusKeeper) @@ -60,7 +60,7 @@ func TestSetup(t *testing.T) { suite.txBuilder.SetGasLimit(gasLimit) privs, accNums, accSeqs := []cryptotypes.PrivKey{priv1}, []uint64{0}, []uint64{0} - tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT) + tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT) require.NoError(t, err) sud := ante.NewSetUpContextDecorator(suite.env, suite.consensusKeeper) @@ -95,7 +95,7 @@ func TestRecoverPanic(t *testing.T) { suite.txBuilder.SetGasLimit(gasLimit) privs, accNums, accSeqs := []cryptotypes.PrivKey{priv1}, []uint64{0}, []uint64{0} - tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT) + tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT) require.NoError(t, err) sud := ante.NewSetUpContextDecorator(suite.env, suite.consensusKeeper) diff --git a/x/auth/ante/sigverify.go b/x/auth/ante/sigverify.go index fc93c3861a..0e52f349a3 100644 --- a/x/auth/ante/sigverify.go +++ b/x/auth/ante/sigverify.go @@ -10,6 +10,7 @@ import ( secp256k1dcrd "github.com/decred/dcrd/dcrec/secp256k1/v4" "google.golang.org/protobuf/types/known/anypb" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" "cosmossdk.io/core/event" "cosmossdk.io/core/gas" "cosmossdk.io/core/transaction" @@ -98,7 +99,7 @@ func NewSigVerificationDecoratorWithVerifyOnCurve(ak AccountKeeper, signModeHand func OnlyLegacyAminoSigners(sigData signing.SignatureData) bool { switch v := sigData.(type) { case *signing.SingleSignatureData: - return v.SignMode == signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON + return v.SignMode == apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON case *signing.MultiSignatureData: for _, s := range v.Signatures { if !OnlyLegacyAminoSigners(s) { diff --git a/x/auth/ante/sigverify_test.go b/x/auth/ante/sigverify_test.go index 3025706bf7..b014ba5100 100644 --- a/x/auth/ante/sigverify_test.go +++ b/x/auth/ante/sigverify_test.go @@ -8,6 +8,7 @@ import ( "go.uber.org/mock/gomock" bankv1beta1 "cosmossdk.io/api/cosmos/bank/v1beta1" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" "cosmossdk.io/core/gas" "cosmossdk.io/core/header" gastestutil "cosmossdk.io/core/testing/gas" @@ -26,7 +27,6 @@ import ( "github.com/cosmos/cosmos-sdk/types/tx/signing" "github.com/cosmos/cosmos-sdk/x/auth/ante" "github.com/cosmos/cosmos-sdk/x/auth/migrations/legacytx" - authsign "github.com/cosmos/cosmos-sdk/x/auth/signing" authtx "github.com/cosmos/cosmos-sdk/x/auth/tx" txmodule "github.com/cosmos/cosmos-sdk/x/auth/tx/config" "github.com/cosmos/cosmos-sdk/x/auth/types" @@ -137,7 +137,7 @@ func TestSigVerification(t *testing.T) { suite := SetupTestSuite(t, true) suite.txBankKeeper.EXPECT().DenomMetadataV2(gomock.Any(), gomock.Any()).Return(&bankv1beta1.QueryDenomMetadataResponse{}, nil).AnyTimes() - enabledSignModes := []signing.SignMode{signing.SignMode_SIGN_MODE_DIRECT, signing.SignMode_SIGN_MODE_TEXTUAL, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON} + enabledSignModes := []apisigning.SignMode{apisigning.SignMode_SIGN_MODE_DIRECT, apisigning.SignMode_SIGN_MODE_TEXTUAL, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON} // Since TEXTUAL is not enabled by default, we create a custom TxConfig // here which includes it. cdc := codec.NewProtoCodec(suite.encCfg.InterfaceRegistry) @@ -150,10 +150,7 @@ func TestSigVerification(t *testing.T) { }, } var err error - suite.clientCtx.TxConfig, err = authtx.NewTxConfigWithOptions( - cdc, - txConfigOpts, - ) + suite.clientCtx.TxConfig, err = authtx.NewTxConfigWithOptions(cdc, txConfigOpts) require.NoError(t, err) suite.txBuilder = suite.clientCtx.TxConfig.NewTxBuilder() @@ -181,14 +178,8 @@ func TestSigVerification(t *testing.T) { feeAmount := testdata.NewTestFeeAmount() gasLimit := testdata.NewTestGasLimit() - txConfigOpts = authtx.ConfigOptions{ - TextualCoinMetadataQueryFn: txmodule.NewBankKeeperCoinMetadataQueryFn(suite.txBankKeeper), - EnabledSignModes: enabledSignModes, - SigningOptions: &txsigning.Options{ - AddressCodec: cdc.InterfaceRegistry().SigningContext().AddressCodec(), - ValidatorAddressCodec: cdc.InterfaceRegistry().SigningContext().ValidatorAddressCodec(), - }, - } + // override the medata query function to use the bank keeper in ante handler + txConfigOpts.TextualCoinMetadataQueryFn = txmodule.NewBankKeeperCoinMetadataQueryFn(suite.txBankKeeper) anteTxConfig, err := authtx.NewTxConfigWithOptions( codec.NewProtoCodec(suite.encCfg.InterfaceRegistry), txConfigOpts, @@ -197,8 +188,6 @@ func TestSigVerification(t *testing.T) { noOpGasConsume := func(_ gas.Meter, _ signing.SignatureV2, _ types.Params) error { return nil } svd := ante.NewSigVerificationDecorator(suite.accountKeeper, anteTxConfig.SignModeHandler(), noOpGasConsume, nil) antehandler := sdk.ChainAnteDecorators(svd) - defaultSignMode, err := authsign.APISignModeToInternal(anteTxConfig.SignModeHandler().DefaultMode()) - require.NoError(t, err) type testCase struct { name string @@ -248,7 +237,7 @@ func TestSigVerification(t *testing.T) { txSigs[0] = signing.SignatureV2{ PubKey: tc.privs[0].PubKey(), Data: &signing.SingleSignatureData{ - SignMode: defaultSignMode, + SignMode: anteTxConfig.SignModeHandler().DefaultMode(), Signature: badSig, }, Sequence: tc.accSeqs[0], @@ -332,7 +321,7 @@ func runSigDecorators(t *testing.T, params types.Params, privs ...cryptotypes.Pr suite.txBuilder.SetFeeAmount(feeAmount) suite.txBuilder.SetGasLimit(gasLimit) - tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT) + tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT) require.NoError(t, err) svd := ante.NewSigVerificationDecorator(suite.accountKeeper, suite.clientCtx.TxConfig.SignModeHandler(), ante.DefaultSigVerificationGasConsumer, nil) @@ -356,7 +345,7 @@ func TestAnteHandlerChecks(t *testing.T) { feeAmount := testdata.NewTestFeeAmount() gasLimit := testdata.NewTestGasLimit() - enabledSignModes := []signing.SignMode{signing.SignMode_SIGN_MODE_DIRECT, signing.SignMode_SIGN_MODE_TEXTUAL, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON} + enabledSignModes := []apisigning.SignMode{apisigning.SignMode_SIGN_MODE_DIRECT, apisigning.SignMode_SIGN_MODE_TEXTUAL, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON} // Since TEXTUAL is not enabled by default, we create a custom TxConfig // here which includes it. cdc := codec.NewProtoCodec(suite.encCfg.InterfaceRegistry) @@ -426,7 +415,7 @@ func TestAnteHandlerChecks(t *testing.T) { suite.txBuilder.SetFeeAmount(feeAmount) suite.txBuilder.SetGasLimit(gasLimit) - tx, err := suite.CreateTestTx(suite.ctx, tc.privs, tc.accNums, tc.accSeqs, suite.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT) + tx, err := suite.CreateTestTx(suite.ctx, tc.privs, tc.accNums, tc.accSeqs, suite.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT) require.NoError(t, err) txBytes, err := suite.clientCtx.TxConfig.TxEncoder()(tx) diff --git a/x/auth/ante/testutil_test.go b/x/auth/ante/testutil_test.go index d6d2f5c7ef..f8c2c26f99 100644 --- a/x/auth/ante/testutil_test.go +++ b/x/auth/ante/testutil_test.go @@ -6,20 +6,24 @@ import ( "github.com/golang/mock/gomock" "github.com/stretchr/testify/require" + "google.golang.org/protobuf/types/known/anypb" // TODO We don't need to import these API types if we use gogo's registry // ref: https://github.com/cosmos/cosmos-sdk/issues/14647 _ "cosmossdk.io/api/cosmos/bank/v1beta1" _ "cosmossdk.io/api/cosmos/crypto/secp256k1" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" "cosmossdk.io/core/appmodule" "cosmossdk.io/core/header" coretesting "cosmossdk.io/core/testing" storetypes "cosmossdk.io/store/types" + txsigning "cosmossdk.io/x/tx/signing" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/tx" codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil" + codectypes "github.com/cosmos/cosmos-sdk/codec/types" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/runtime" "github.com/cosmos/cosmos-sdk/testutil" @@ -192,7 +196,7 @@ func (suite *AnteTestSuite) DeliverMsgs(t *testing.T, privs []cryptotypes.PrivKe suite.txBuilder.SetFeeAmount(feeAmount) suite.txBuilder.SetGasLimit(gasLimit) - tx, txErr := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, chainID, signing.SignMode_SIGN_MODE_DIRECT) + tx, txErr := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, chainID, apisigning.SignMode_SIGN_MODE_DIRECT) require.NoError(t, txErr) txBytes, err := suite.clientCtx.TxConfig.TxEncoder()(tx) bytesCtx := suite.ctx.WithTxBytes(txBytes) @@ -209,7 +213,7 @@ func (suite *AnteTestSuite) RunTestCase(t *testing.T, tc TestCase, args TestCase // Theoretically speaking, ante handler unit tests should only test // ante handlers, but here we sometimes also test the tx creation // process. - tx, txErr := suite.CreateTestTx(suite.ctx, args.privs, args.accNums, args.accSeqs, args.chainID, signing.SignMode_SIGN_MODE_DIRECT) + tx, txErr := suite.CreateTestTx(suite.ctx, args.privs, args.accNums, args.accSeqs, args.chainID, apisigning.SignMode_SIGN_MODE_DIRECT) txBytes, err := suite.clientCtx.TxConfig.TxEncoder()(tx) require.NoError(t, err) bytesCtx := suite.ctx.WithTxBytes(txBytes) @@ -241,7 +245,7 @@ func (suite *AnteTestSuite) RunTestCase(t *testing.T, tc TestCase, args TestCase func (suite *AnteTestSuite) CreateTestTx( ctx sdk.Context, privs []cryptotypes.PrivKey, accNums, accSeqs []uint64, - chainID string, signMode signing.SignMode, + chainID string, signMode apisigning.SignMode, ) (xauthsigning.Tx, error) { // First round: we gather all the signer infos. We use the "set empty // signature" hack to do that. @@ -266,12 +270,17 @@ func (suite *AnteTestSuite) CreateTestTx( // Second round: all signer infos are set, so each signer can sign. sigsV2 = []signing.SignatureV2{} for i, priv := range privs { - signerData := xauthsigning.SignerData{ + anyPk, err := codectypes.NewAnyWithValue(priv.PubKey()) + if err != nil { + return nil, err + } + + signerData := txsigning.SignerData{ Address: sdk.AccAddress(priv.PubKey().Address()).String(), ChainID: chainID, AccountNumber: accNums[i], Sequence: accSeqs[i], - PubKey: priv.PubKey(), + PubKey: &anypb.Any{TypeUrl: anyPk.TypeUrl, Value: anyPk.Value}, } sigV2, err := tx.SignWithPrivKey( ctx, signMode, signerData, diff --git a/x/auth/ante/unordered_test.go b/x/auth/ante/unordered_test.go index 41100856b5..8a3e7dc460 100644 --- a/x/auth/ante/unordered_test.go +++ b/x/auth/ante/unordered_test.go @@ -6,13 +6,13 @@ import ( "github.com/stretchr/testify/require" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" "cosmossdk.io/core/header" storetypes "cosmossdk.io/store/types" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/tx/signing" "github.com/cosmos/cosmos-sdk/x/auth/ante" "github.com/cosmos/cosmos-sdk/x/auth/ante/unorderedtx" ) @@ -162,7 +162,7 @@ func genUnorderedTx(t *testing.T, unordered bool, timestamp time.Time) (sdk.Tx, s.txBuilder.SetTimeoutTimestamp(timestamp) privKeys, accNums, accSeqs := []cryptotypes.PrivKey{priv1}, []uint64{0}, []uint64{0} - tx, err := s.CreateTestTx(s.ctx, privKeys, accNums, accSeqs, s.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT) + tx, err := s.CreateTestTx(s.ctx, privKeys, accNums, accSeqs, s.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT) require.NoError(t, err) txBz, err := ante.TxIdentifier(uint64(timestamp.Unix()), tx) diff --git a/x/auth/client/cli/tx_multisign.go b/x/auth/client/cli/tx_multisign.go index 8b7d1ee3a2..15e23aa209 100644 --- a/x/auth/client/cli/tx_multisign.go +++ b/x/auth/client/cli/tx_multisign.go @@ -10,6 +10,7 @@ import ( "github.com/spf13/viper" "google.golang.org/protobuf/types/known/anypb" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" errorsmod "cosmossdk.io/errors" txsigning "cosmossdk.io/x/tx/signing" @@ -91,8 +92,8 @@ func makeMultiSignCmd() func(cmd *cobra.Command, args []string) (err error) { if err != nil { return err } - if txFactory.SignMode() == signingtypes.SignMode_SIGN_MODE_UNSPECIFIED { - txFactory = txFactory.WithSignMode(signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) + if txFactory.SignMode() == apisigning.SignMode_SIGN_MODE_UNSPECIFIED { + txFactory = txFactory.WithSignMode(apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) } txCfg := clientCtx.TxConfig @@ -262,8 +263,8 @@ func makeBatchMultisignCmd() func(cmd *cobra.Command, args []string) error { if err != nil { return err } - if txFactory.SignMode() == signingtypes.SignMode_SIGN_MODE_UNSPECIFIED { - txFactory = txFactory.WithSignMode(signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) + if txFactory.SignMode() == apisigning.SignMode_SIGN_MODE_UNSPECIFIED { + txFactory = txFactory.WithSignMode(apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) } // reads tx from args[0] diff --git a/x/auth/client/cli/validate_sigs.go b/x/auth/client/cli/validate_sigs.go index 98ec9a6c3d..7a531c53ae 100644 --- a/x/auth/client/cli/validate_sigs.go +++ b/x/auth/client/cli/validate_sigs.go @@ -118,23 +118,17 @@ func printAndValidateSigs( return false } - signingData := authsigning.SignerData{ - Address: sigAddr.String(), - ChainID: chainID, - AccountNumber: accNum, - Sequence: accSeq, - PubKey: pubKey, - } anyPk, err := codectypes.NewAnyWithValue(pubKey) if err != nil { cmd.PrintErrf("failed to pack public key: %v", err) return false } + txSignerData := txsigning.SignerData{ - ChainID: signingData.ChainID, - AccountNumber: signingData.AccountNumber, - Sequence: signingData.Sequence, - Address: signingData.Address, + ChainID: chainID, + AccountNumber: accNum, + Sequence: accSeq, + Address: sigAddr.String(), PubKey: &anypb.Any{ TypeUrl: anyPk.TypeUrl, Value: anyPk.Value, diff --git a/x/auth/client/tx.go b/x/auth/client/tx.go index 5904a25e15..394a193a27 100644 --- a/x/auth/client/tx.go +++ b/x/auth/client/tx.go @@ -12,12 +12,13 @@ import ( "github.com/cosmos/gogoproto/jsonpb" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" + "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/tx" "github.com/cosmos/cosmos-sdk/crypto/keyring" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/cosmos/cosmos-sdk/types/tx/signing" ) // GasEstimateResponse defines a response definition for tx gas estimation. @@ -39,9 +40,9 @@ func SignTx(txFactory tx.Factory, clientCtx client.Context, name string, txBuild } // Ledger and Multisigs only support LEGACY_AMINO_JSON signing. - if txFactory.SignMode() == signing.SignMode_SIGN_MODE_UNSPECIFIED && + if txFactory.SignMode() == apisigning.SignMode_SIGN_MODE_UNSPECIFIED && (k.GetType() == keyring.TypeLedger || k.GetType() == keyring.TypeMulti) { - txFactory = txFactory.WithSignMode(signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) + txFactory = txFactory.WithSignMode(apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) } pubKey, err := k.GetPubKey() @@ -75,8 +76,8 @@ func SignTxWithSignerAddress(txFactory tx.Factory, clientCtx client.Context, add name string, txBuilder client.TxBuilder, offline, overwrite bool, ) (err error) { // Multisigs only support LEGACY_AMINO_JSON signing. - if txFactory.SignMode() == signing.SignMode_SIGN_MODE_UNSPECIFIED { - txFactory = txFactory.WithSignMode(signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) + if txFactory.SignMode() == apisigning.SignMode_SIGN_MODE_UNSPECIFIED { + txFactory = txFactory.WithSignMode(apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON) } if !offline { diff --git a/x/auth/migrations/legacytx/amino_signing.go b/x/auth/migrations/legacytx/amino_signing.go index 851366aa9b..8bb37fbd83 100644 --- a/x/auth/migrations/legacytx/amino_signing.go +++ b/x/auth/migrations/legacytx/amino_signing.go @@ -3,6 +3,7 @@ package legacytx import ( "fmt" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" "cosmossdk.io/errors" "github.com/cosmos/cosmos-sdk/codec" @@ -15,9 +16,9 @@ import ( func SignatureDataToAminoSignature(cdc *codec.LegacyAmino, data signingtypes.SignatureData) ([]byte, error) { switch data := data.(type) { case *signingtypes.SingleSignatureData: - if data.SignMode != signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON { + if data.SignMode != apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON { return nil, fmt.Errorf("wrong SignMode. Expected %s, got %s", - signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, data.SignMode) + apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, data.SignMode) } return data.Signature, nil diff --git a/x/auth/migrations/legacytx/stdsign.go b/x/auth/migrations/legacytx/stdsign.go index 6ef08f4c8a..92ff907b0f 100644 --- a/x/auth/migrations/legacytx/stdsign.go +++ b/x/auth/migrations/legacytx/stdsign.go @@ -8,6 +8,7 @@ import ( gogoprotoany "github.com/cosmos/gogoproto/types/any" "sigs.k8s.io/yaml" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" errorsmod "cosmossdk.io/errors" "github.com/cosmos/cosmos-sdk/codec" @@ -153,7 +154,7 @@ func pubKeySigToSigData(cdc *codec.LegacyAmino, key cryptotypes.PubKey, sig []by multiPK, ok := key.(multisig.PubKey) if !ok { return &signing.SingleSignatureData{ - SignMode: signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, + SignMode: apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, Signature: sig, }, nil } diff --git a/x/auth/migrations/legacytx/stdtx_test.go b/x/auth/migrations/legacytx/stdtx_test.go index 27156448d9..24ee9558b1 100644 --- a/x/auth/migrations/legacytx/stdtx_test.go +++ b/x/auth/migrations/legacytx/stdtx_test.go @@ -10,6 +10,7 @@ import ( "google.golang.org/protobuf/types/known/anypb" basev1beta1 "cosmossdk.io/api/cosmos/base/v1beta1" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" txv1beta1 "cosmossdk.io/api/cosmos/tx/v1beta1" txsigning "cosmossdk.io/x/tx/signing" "cosmossdk.io/x/tx/signing/aminojson" @@ -136,7 +137,7 @@ func TestSignatureV2Conversions(t *testing.T) { require.NoError(t, err) require.Equal(t, pubKey, sigV2.PubKey) require.Equal(t, &signing.SingleSignatureData{ - SignMode: signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, + SignMode: apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, Signature: dummy, }, sigV2.Data) @@ -157,11 +158,11 @@ func TestSignatureV2Conversions(t *testing.T) { BitArray: bitArray, Signatures: []signing.SignatureData{ &signing.SingleSignatureData{ - SignMode: signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, + SignMode: apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, Signature: dummy, }, &signing.SingleSignatureData{ - SignMode: signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, + SignMode: apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, Signature: dummy2, }, }, @@ -197,7 +198,7 @@ func TestGetSignaturesV2(t *testing.T) { require.Equal(t, cdc.MustMarshal(sigs[0].PubKey), cdc.MustMarshal(sig.GetPubKey())) require.Equal(t, sigs[0].Data, &signing.SingleSignatureData{ - SignMode: signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, + SignMode: apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, Signature: sig.GetSignature(), }) } diff --git a/x/auth/signing/adapter.go b/x/auth/signing/adapter.go index 42b1b82fdc..83c24c0e99 100644 --- a/x/auth/signing/adapter.go +++ b/x/auth/signing/adapter.go @@ -6,11 +6,10 @@ import ( "google.golang.org/protobuf/types/known/anypb" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" txsigning "cosmossdk.io/x/tx/signing" - codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/tx/signing" ) // V2AdaptableTx is an interface that wraps the GetSigningTxData method. @@ -26,8 +25,8 @@ type V2AdaptableTx interface { func GetSignBytesAdapter( ctx context.Context, handlerMap *txsigning.HandlerMap, - mode signing.SignMode, - signerData SignerData, + mode apisigning.SignMode, + signerData txsigning.SignerData, tx sdk.Tx, ) ([]byte, error) { adaptableTx, ok := tx.(V2AdaptableTx) @@ -36,21 +35,11 @@ func GetSignBytesAdapter( } txData := adaptableTx.GetSigningTxData() - txSignMode, err := internalSignModeToAPI(mode) - if err != nil { - return nil, err - } - var pubKey *anypb.Any if signerData.PubKey != nil { - anyPk, err := codectypes.NewAnyWithValue(signerData.PubKey) - if err != nil { - return nil, err - } - pubKey = &anypb.Any{ - TypeUrl: anyPk.TypeUrl, - Value: anyPk.Value, + TypeUrl: signerData.PubKey.TypeUrl, + Value: signerData.PubKey.Value, } } txSignerData := txsigning.SignerData{ @@ -61,5 +50,5 @@ func GetSignBytesAdapter( PubKey: pubKey, } // Generate the bytes to be signed. - return handlerMap.GetSignBytes(ctx, txSignMode, txSignerData, txData) + return handlerMap.GetSignBytes(ctx, mode, txSignerData, txData) } diff --git a/x/auth/signing/adapter_test.go b/x/auth/signing/adapter_test.go index af163ac016..e250cf332e 100644 --- a/x/auth/signing/adapter_test.go +++ b/x/auth/signing/adapter_test.go @@ -6,10 +6,12 @@ import ( "github.com/stretchr/testify/require" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" + txsigning "cosmossdk.io/x/tx/signing" + codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil" "github.com/cosmos/cosmos-sdk/testutil/testdata" moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" - "github.com/cosmos/cosmos-sdk/types/tx/signing" authsign "github.com/cosmos/cosmos-sdk/x/auth/signing" ) @@ -17,7 +19,7 @@ func TestGetSignBytesAdapterNoPublicKey(t *testing.T) { encodingConfig := moduletestutil.MakeTestEncodingConfig(codectestutil.CodecOptions{}) txConfig := encodingConfig.TxConfig _, _, addr := testdata.KeyTestPubAddr() - signerData := authsign.SignerData{ + signerData := txsigning.SignerData{ Address: addr.String(), ChainID: "test-chain", AccountNumber: 11, @@ -27,7 +29,7 @@ func TestGetSignBytesAdapterNoPublicKey(t *testing.T) { _, err := authsign.GetSignBytesAdapter( context.Background(), txConfig.SignModeHandler(), - signing.SignMode_SIGN_MODE_DIRECT, + apisigning.SignMode_SIGN_MODE_DIRECT, signerData, w.GetTx()) require.NoError(t, err) diff --git a/x/auth/signing/sign_mode_handler.go b/x/auth/signing/sign_mode_handler.go index 277fec08f6..0e244bbdd3 100644 --- a/x/auth/signing/sign_mode_handler.go +++ b/x/auth/signing/sign_mode_handler.go @@ -1,11 +1,10 @@ package signing import ( - "context" + apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1" + "cosmossdk.io/x/tx/signing" - cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/tx/signing" ) // SignModeHandler defines a interface to be implemented by types which will handle @@ -13,57 +12,15 @@ import ( type SignModeHandler interface { // DefaultMode is the default mode that is to be used with this handler if no // other mode is specified. This can be useful for testing and CLI usage - DefaultMode() signing.SignMode + DefaultMode() apisigning.SignMode // Modes is the list of modes supporting by this handler - Modes() []signing.SignMode + Modes() []apisigning.SignMode // GetSignBytes returns the sign bytes for the provided SignMode, SignerData and Tx, // or an error - GetSignBytes(mode signing.SignMode, data SignerData, tx sdk.Tx) ([]byte, error) + GetSignBytes(mode apisigning.SignMode, data signing.SignerData, tx sdk.Tx) ([]byte, error) } -// SignModeHandlerWithContext is like SignModeHandler, with a new GetSignBytes -// method which takes an additional context.Context argument, to be used to -// access state. Consumers should preferably type-cast to this interface and -// pass in the context.Context arg, and default to SignModeHandler otherwise. -// This interface is created for backwards compatibility, and will be -// deleted once SDK versions