From fffc9d07d5c7018ee52326deb55e0da5d3eb0826 Mon Sep 17 00:00:00 2001 From: Amaury <1293565+amaurym@users.noreply.github.com> Date: Tue, 29 Nov 2022 19:49:51 +0100 Subject: [PATCH] refactor!: Add context arg to sign mode handler `GetSignBytes` (#13701) * refactor!: Add context arg to sign mode handler `GetSignBytes` * fix build * fix tests * Fix goling * fix lint * Fix lint * Fix test * Update CHANGELOG.md Co-authored-by: Aleksandr Bezobchuk * Fix tests * Fix rosetta deps * fix * go mod tidy all * go mod tidy Co-authored-by: Aleksandr Bezobchuk Co-authored-by: Marko Co-authored-by: Julien Robert --- CHANGELOG.md | 1 + baseapp/block_gas_test.go | 2 +- baseapp/msg_service_router_test.go | 2 +- client/tx/tx.go | 10 ++++++---- client/tx/tx_test.go | 4 ++-- go.mod | 3 +++ go.sum | 2 -- simapp/go.mod | 3 +++ simapp/go.sum | 2 -- simapp/simd/cmd/testnet.go | 4 +++- tests/go.mod | 2 ++ tests/go.sum | 2 -- testutil/network/network.go | 3 ++- testutil/sims/tx_helpers.go | 4 +++- tools/rosetta/converter.go | 3 ++- x/auth/ante/feegrant_test.go | 2 +- x/auth/ante/sigverify.go | 2 +- x/auth/ante/testutil_test.go | 2 +- x/auth/client/cli/tx_multisign.go | 7 +++++-- x/auth/client/cli/validate_sigs.go | 4 +++- x/auth/client/tx.go | 7 +++++-- x/auth/migrations/legacytx/amino_signing.go | 3 ++- x/auth/migrations/legacytx/amino_signing_test.go | 4 ++-- x/auth/signing/handler_map.go | 5 +++-- x/auth/signing/handler_map_test.go | 6 +++--- x/auth/signing/sign_mode_handler.go | 4 +++- x/auth/signing/verify.go | 7 ++++--- x/auth/signing/verify_test.go | 4 ++-- x/auth/tx/aux_test.go | 2 +- x/auth/tx/direct.go | 3 ++- x/auth/tx/direct_aux.go | 3 ++- x/auth/tx/direct_aux_test.go | 10 +++++----- x/auth/tx/direct_test.go | 8 ++++---- x/auth/tx/encode_decode_test.go | 2 +- x/auth/tx/legacy_amino_json.go | 3 ++- x/auth/tx/legacy_amino_json_test.go | 8 ++++---- x/auth/tx/testutil/suite.go | 5 +++-- 37 files changed, 88 insertions(+), 60 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bc4e2012a8..2fac8bce03 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -176,6 +176,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * [#13794](https://github.com/cosmos/cosmos-sdk/pull/13794) Most methods on `types/module.AppModule` have been moved to extension interfaces. `module.Manager.Modules` is now of type `map[string]interface{}` to support in parallel the new `cosmossdk.io/core/appmodule.AppModule` API. +* (signing) [#13701](https://github.com/cosmos/cosmos-sdk/pull/) Add `context.Context` as an argument to SignModeHandler's `GetSignBytes` method and `x/auth/signing.VerifySignature`. You can pass `nil` for now, it will only be used once SIGN_MODE_TEXTUAL is live. * (x/group) [#13876](https://github.com/cosmos/cosmos-sdk/pull/13876) Add `GetMinExecutionPeriod` method on DecisionPolicy interface. * (x/auth)[#13780](https://github.com/cosmos/cosmos-sdk/pull/13780) Querying with `id` (type of int64) in `AccountAddressByID` grpc query now throws error, use account-id(type of uint64) instead. * (baseapp) [#14050](https://github.com/cosmos/cosmos-sdk/pull/14050) refactor `ABCIListener` interface to accept go contexts diff --git a/baseapp/block_gas_test.go b/baseapp/block_gas_test.go index 4f765e340f..f3418ccd03 100644 --- a/baseapp/block_gas_test.go +++ b/baseapp/block_gas_test.go @@ -214,7 +214,7 @@ func createTestTx(txConfig client.TxConfig, txBuilder client.TxBuilder, privs [] Sequence: accSeqs[i], } sigV2, err := tx.SignWithPrivKey( - txConfig.SignModeHandler().DefaultMode(), signerData, + nil, txConfig.SignModeHandler().DefaultMode(), signerData, txBuilder, priv, txConfig, accSeqs[i]) if err != nil { return nil, nil, err diff --git a/baseapp/msg_service_router_test.go b/baseapp/msg_service_router_test.go index 06e5bc3e9c..6c0c1adcf4 100644 --- a/baseapp/msg_service_router_test.go +++ b/baseapp/msg_service_router_test.go @@ -131,7 +131,7 @@ func TestMsgService(t *testing.T) { Sequence: 0, } sigV2, err = tx.SignWithPrivKey( - txConfig.SignModeHandler().DefaultMode(), signerData, + nil, txConfig.SignModeHandler().DefaultMode(), signerData, txBuilder, priv, txConfig, 0) require.NoError(t, err) err = txBuilder.SetSignatures(sigV2) diff --git a/client/tx/tx.go b/client/tx/tx.go index 2463d1d4cf..b4188aee5c 100644 --- a/client/tx/tx.go +++ b/client/tx/tx.go @@ -106,7 +106,8 @@ func BroadcastTx(clientCtx client.Context, txf Factory, msgs ...sdk.Msg) error { } } - err = Sign(txf, clientCtx.GetFromName(), tx, true) + // When Textual is wired up, the context argument should be retrieved from the client context. + err = Sign(context.TODO(), txf, clientCtx.GetFromName(), tx, true) if err != nil { return err } @@ -149,6 +150,7 @@ func CalculateGas( // SignWithPrivKey signs a given tx with the given private key, and returns the // corresponding SignatureV2 if the signing is successful. func SignWithPrivKey( + ctx context.Context, signMode signing.SignMode, signerData authsigning.SignerData, txBuilder client.TxBuilder, priv cryptotypes.PrivKey, txConfig client.TxConfig, accSeq uint64, @@ -156,7 +158,7 @@ func SignWithPrivKey( var sigV2 signing.SignatureV2 // Generate the bytes to be signed. - signBytes, err := txConfig.SignModeHandler().GetSignBytes(signMode, signerData, txBuilder.GetTx()) + signBytes, err := txConfig.SignModeHandler().GetSignBytes(ctx, signMode, signerData, txBuilder.GetTx()) if err != nil { return sigV2, err } @@ -227,7 +229,7 @@ func checkMultipleSigners(tx authsigning.Tx) error { // Signing a transaction with mutltiple signers in the DIRECT mode is not supprted and will // return an error. // An error is returned upon failure. -func Sign(txf Factory, name string, txBuilder client.TxBuilder, overwriteSig bool) error { +func Sign(ctx context.Context, txf Factory, name string, txBuilder client.TxBuilder, overwriteSig bool) error { if txf.keybase == nil { return errors.New("keybase must be set prior to signing a transaction") } @@ -298,7 +300,7 @@ func Sign(txf Factory, name string, txBuilder client.TxBuilder, overwriteSig boo } // Generate the bytes to be signed. - bytesToSign, err := txf.txConfig.SignModeHandler().GetSignBytes(signMode, signerData, txBuilder.GetTx()) + bytesToSign, err := txf.txConfig.SignModeHandler().GetSignBytes(ctx, signMode, signerData, txBuilder.GetTx()) if err != nil { return err } diff --git a/client/tx/tx_test.go b/client/tx/tx_test.go index 9c687a42eb..d42c5c59b4 100644 --- a/client/tx/tx_test.go +++ b/client/tx/tx_test.go @@ -353,7 +353,7 @@ func TestSign(t *testing.T) { var prevSigs []signingtypes.SignatureV2 for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - err = tx.Sign(tc.txf, tc.from, tc.txb, tc.overwrite) + err = tx.Sign(nil, tc.txf, tc.from, tc.txb, tc.overwrite) if len(tc.expectedPKs) == 0 { requireT.Error(err) } else { @@ -423,7 +423,7 @@ func TestPreprocessHook(t *testing.T) { msg2 := banktypes.NewMsgSend(addr2, sdk.AccAddress("to"), nil) txb, err := txfDirect.BuildUnsignedTx(msg1, msg2) - err = tx.Sign(txfDirect, from, txb, false) + err = tx.Sign(nil, txfDirect, from, txb, false) requireT.NoError(err) // Run preprocessing diff --git a/go.mod b/go.mod index 214a4ce4c5..56674e1acd 100644 --- a/go.mod +++ b/go.mod @@ -165,6 +165,9 @@ require ( ) replace ( + // Temporary until we tag a new version + cosmossdk.io/tools/rosetta => ./tools/rosetta + github.com/99designs/keyring => github.com/cosmos/keyring v1.2.0 // Update to rosetta-sdk-go temporarly to have `check:spec` passing. See https://github.com/coinbase/rosetta-sdk-go/issues/449 github.com/coinbase/rosetta-sdk-go => github.com/coinbase/rosetta-sdk-go v0.8.2-0.20221007214527-e03849ba430a diff --git a/go.sum b/go.sum index fcdf7ce405..7a3fc2f108 100644 --- a/go.sum +++ b/go.sum @@ -56,8 +56,6 @@ cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE= cosmossdk.io/math v1.0.0-beta.4 h1:JtKedVLGzA0vv84xjYmZ75RKG35Kf2WwcFu8IjRkIIw= cosmossdk.io/math v1.0.0-beta.4/go.mod h1:An0MllWJY6PxibUpnwGk8jOm+a/qIxlKmL5Zyp9NnaM= -cosmossdk.io/tools/rosetta v0.1.0 h1:rJ0sp9bTuGzava+C2b0MFaci/zhINdxSOiJE1FC/UJw= -cosmossdk.io/tools/rosetta v0.1.0/go.mod h1:9wDBVqKC7BDJjk+RWvoE4VXs3Ub/i5rLBrieKpoH+Zw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= diff --git a/simapp/go.mod b/simapp/go.mod index 9e4e8a2810..77000d8326 100644 --- a/simapp/go.mod +++ b/simapp/go.mod @@ -161,6 +161,9 @@ require ( ) replace ( + // Temporary until we tag a new version + cosmossdk.io/tools/rosetta => ../tools/rosetta + github.com/99designs/keyring => github.com/cosmos/keyring v1.2.0 // Update to rosetta-sdk-go temporarly to have `check:spec` passing. See https://github.com/coinbase/rosetta-sdk-go/issues/449 github.com/coinbase/rosetta-sdk-go => github.com/coinbase/rosetta-sdk-go v0.8.2-0.20221007214527-e03849ba430a diff --git a/simapp/go.sum b/simapp/go.sum index 2b461133df..bf49f52275 100644 --- a/simapp/go.sum +++ b/simapp/go.sum @@ -56,8 +56,6 @@ cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE= cosmossdk.io/math v1.0.0-beta.4 h1:JtKedVLGzA0vv84xjYmZ75RKG35Kf2WwcFu8IjRkIIw= cosmossdk.io/math v1.0.0-beta.4/go.mod h1:An0MllWJY6PxibUpnwGk8jOm+a/qIxlKmL5Zyp9NnaM= -cosmossdk.io/tools/rosetta v0.1.0 h1:rJ0sp9bTuGzava+C2b0MFaci/zhINdxSOiJE1FC/UJw= -cosmossdk.io/tools/rosetta v0.1.0/go.mod h1:9wDBVqKC7BDJjk+RWvoE4VXs3Ub/i5rLBrieKpoH+Zw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= diff --git a/simapp/simd/cmd/testnet.go b/simapp/simd/cmd/testnet.go index db27a64002..9f5cb2e9bc 100644 --- a/simapp/simd/cmd/testnet.go +++ b/simapp/simd/cmd/testnet.go @@ -2,6 +2,7 @@ package cmd import ( "bufio" + "context" "encoding/json" "fmt" "net" @@ -314,7 +315,8 @@ func initTestnetFiles( WithKeybase(kb). WithTxConfig(clientCtx.TxConfig) - if err := tx.Sign(txFactory, nodeDirName, txBuilder, true); err != nil { + // When Textual is wired up, the context argument should be retrieved from the client context. + if err := tx.Sign(context.TODO(), txFactory, nodeDirName, txBuilder, true); err != nil { return err } diff --git a/tests/go.mod b/tests/go.mod index 1eb50d27a9..d8e27d9240 100644 --- a/tests/go.mod +++ b/tests/go.mod @@ -165,6 +165,8 @@ require ( replace ( // We always want to test against the latest version of the simapp. cosmossdk.io/simapp => ../simapp + // Temporary until we tag a new version + cosmossdk.io/tools/rosetta => ../tools/rosetta github.com/99designs/keyring => github.com/cosmos/keyring v1.2.0 // Update to rosetta-sdk-go temporarly to have `check:spec` passing. See https://github.com/coinbase/rosetta-sdk-go/issues/449 github.com/coinbase/rosetta-sdk-go => github.com/coinbase/rosetta-sdk-go v0.8.2-0.20221007214527-e03849ba430a diff --git a/tests/go.sum b/tests/go.sum index d3a12ee222..657a0c6620 100644 --- a/tests/go.sum +++ b/tests/go.sum @@ -56,8 +56,6 @@ cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE= cosmossdk.io/math v1.0.0-beta.4 h1:JtKedVLGzA0vv84xjYmZ75RKG35Kf2WwcFu8IjRkIIw= cosmossdk.io/math v1.0.0-beta.4/go.mod h1:An0MllWJY6PxibUpnwGk8jOm+a/qIxlKmL5Zyp9NnaM= -cosmossdk.io/tools/rosetta v0.1.0 h1:rJ0sp9bTuGzava+C2b0MFaci/zhINdxSOiJE1FC/UJw= -cosmossdk.io/tools/rosetta v0.1.0/go.mod h1:9wDBVqKC7BDJjk+RWvoE4VXs3Ub/i5rLBrieKpoH+Zw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= diff --git a/testutil/network/network.go b/testutil/network/network.go index 470377fe50..f7e2df4b0d 100644 --- a/testutil/network/network.go +++ b/testutil/network/network.go @@ -514,7 +514,8 @@ func New(l Logger, baseDir string, cfg Config) (*Network, error) { WithKeybase(kb). WithTxConfig(cfg.TxConfig) - err = tx.Sign(txFactory, nodeDirName, txBuilder, true) + // When Textual is wired up, the context argument should be retrieved from the client context. + err = tx.Sign(context.TODO(), txFactory, nodeDirName, txBuilder, true) if err != nil { return nil, err } diff --git a/testutil/sims/tx_helpers.go b/testutil/sims/tx_helpers.go index 0b9a17069e..620cc84b31 100644 --- a/testutil/sims/tx_helpers.go +++ b/testutil/sims/tx_helpers.go @@ -1,6 +1,7 @@ package sims import ( + "context" "math/rand" "testing" "time" @@ -61,7 +62,8 @@ func GenSignedMockTx(r *rand.Rand, txConfig client.TxConfig, msgs []sdk.Msg, fee Sequence: accSeqs[i], PubKey: p.PubKey(), } - signBytes, err := txConfig.SignModeHandler().GetSignBytes(signMode, signerData, tx.GetTx()) + // When Textual is wired up, the context argument should be retrieved from the client context. + signBytes, err := txConfig.SignModeHandler().GetSignBytes(context.TODO(), signMode, signerData, tx.GetTx()) if err != nil { panic(err) } diff --git a/tools/rosetta/converter.go b/tools/rosetta/converter.go index 4fd1f8366d..aede4b0d48 100644 --- a/tools/rosetta/converter.go +++ b/tools/rosetta/converter.go @@ -2,6 +2,7 @@ package rosetta import ( "bytes" + "context" "encoding/json" "fmt" "reflect" @@ -114,7 +115,7 @@ func NewConverter(cdc *codec.ProtoCodec, ir codectypes.InterfaceRegistry, cfg sd txDecode: cfg.TxDecoder(), txEncode: cfg.TxEncoder(), bytesToSign: func(tx authsigning.Tx, signerData authsigning.SignerData) (b []byte, err error) { - bytesToSign, err := cfg.SignModeHandler().GetSignBytes(signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, signerData, tx) + bytesToSign, err := cfg.SignModeHandler().GetSignBytes(context.TODO(), signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, signerData, tx) if err != nil { return nil, err } diff --git a/x/auth/ante/feegrant_test.go b/x/auth/ante/feegrant_test.go index d14b798df1..9c75e740ff 100644 --- a/x/auth/ante/feegrant_test.go +++ b/x/auth/ante/feegrant_test.go @@ -232,7 +232,7 @@ func genTxWithFeeGranter(gen client.TxConfig, msgs []sdk.Msg, feeAmt sdk.Coins, AccountNumber: accNums[i], Sequence: accSeqs[i], } - signBytes, err := gen.SignModeHandler().GetSignBytes(signMode, signerData, tx.GetTx()) + signBytes, err := gen.SignModeHandler().GetSignBytes(nil, signMode, signerData, tx.GetTx()) if err != nil { panic(err) } diff --git a/x/auth/ante/sigverify.go b/x/auth/ante/sigverify.go index a24af86667..3905613652 100644 --- a/x/auth/ante/sigverify.go +++ b/x/auth/ante/sigverify.go @@ -289,7 +289,7 @@ func (svd SigVerificationDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simul // no need to verify signatures on recheck tx if !simulate && !ctx.IsReCheckTx() { - err := authsigning.VerifySignature(pubKey, signerData, sig.Data, svd.signModeHandler, tx) + err := authsigning.VerifySignature(sdk.WrapSDKContext(ctx), pubKey, signerData, sig.Data, svd.signModeHandler, tx) if err != nil { var errMsg string if OnlyLegacyAminoSigners(sig.Data) { diff --git a/x/auth/ante/testutil_test.go b/x/auth/ante/testutil_test.go index 93318e7fdb..c00846057d 100644 --- a/x/auth/ante/testutil_test.go +++ b/x/auth/ante/testutil_test.go @@ -205,7 +205,7 @@ func (suite *AnteTestSuite) CreateTestTx(privs []cryptotypes.PrivKey, accNums [] Sequence: accSeqs[i], } sigV2, err := tx.SignWithPrivKey( - suite.clientCtx.TxConfig.SignModeHandler().DefaultMode(), signerData, + nil, suite.clientCtx.TxConfig.SignModeHandler().DefaultMode(), signerData, suite.txBuilder, priv, suite.clientCtx.TxConfig, accSeqs[i]) if err != nil { return nil, err diff --git a/x/auth/client/cli/tx_multisign.go b/x/auth/client/cli/tx_multisign.go index ea91580a7f..e8a7453c08 100644 --- a/x/auth/client/cli/tx_multisign.go +++ b/x/auth/client/cli/tx_multisign.go @@ -1,6 +1,7 @@ package cli import ( + "context" "fmt" "os" "strings" @@ -136,7 +137,8 @@ func makeMultiSignCmd() func(cmd *cobra.Command, args []string) (err error) { PubKey: sig.PubKey, } - err = signing.VerifySignature(sig.PubKey, signingData, sig.Data, txCfg.SignModeHandler(), txBuilder.GetTx()) + // When Textual is wired up, the context argument should be retrieved from the client context. + err = signing.VerifySignature(context.TODO(), sig.PubKey, signingData, sig.Data, txCfg.SignModeHandler(), txBuilder.GetTx()) if err != nil { addr, _ := sdk.AccAddressFromHexUnsafe(sig.PubKey.Address().String()) return fmt.Errorf("couldn't verify signature for address %s", addr) @@ -323,7 +325,8 @@ func makeBatchMultisignCmd() func(cmd *cobra.Command, args []string) error { } for _, sig := range signatureBatch { - err = signing.VerifySignature(sig[i].PubKey, signingData, sig[i].Data, txCfg.SignModeHandler(), txBldr.GetTx()) + // When Textual is wired up, the context argument should be retrieved from the client context. + err = signing.VerifySignature(context.TODO(), sig[i].PubKey, signingData, sig[i].Data, txCfg.SignModeHandler(), txBldr.GetTx()) if err != nil { return fmt.Errorf("couldn't verify signature: %w %v", err, sig) } diff --git a/x/auth/client/cli/validate_sigs.go b/x/auth/client/cli/validate_sigs.go index 0ad65c71e3..784cac89d9 100644 --- a/x/auth/client/cli/validate_sigs.go +++ b/x/auth/client/cli/validate_sigs.go @@ -1,6 +1,7 @@ package cli import ( + "context" "fmt" "github.com/spf13/cobra" @@ -111,7 +112,8 @@ func printAndValidateSigs( Sequence: accSeq, PubKey: pubKey, } - err = authsigning.VerifySignature(pubKey, signingData, sig.Data, signModeHandler, sigTx) + // When Textual is wired up, the context argument should be retrieved from the client context. + err = authsigning.VerifySignature(context.TODO(), pubKey, signingData, sig.Data, signModeHandler, sigTx) if err != nil { return false } diff --git a/x/auth/client/tx.go b/x/auth/client/tx.go index 740f401b4c..98d351c796 100644 --- a/x/auth/client/tx.go +++ b/x/auth/client/tx.go @@ -3,6 +3,7 @@ package client import ( "bufio" "bytes" + "context" "fmt" "io" "os" @@ -60,7 +61,8 @@ func SignTx(txFactory tx.Factory, clientCtx client.Context, name string, txBuild } } - return tx.Sign(txFactory, name, txBuilder, overwriteSig) + // When Textual is wired up, the context argument should be retrieved from the client context. + return tx.Sign(context.TODO(), txFactory, name, txBuilder, overwriteSig) } // SignTxWithSignerAddress attaches a signature to a transaction. @@ -88,7 +90,8 @@ func SignTxWithSignerAddress(txFactory tx.Factory, clientCtx client.Context, add } } - return tx.Sign(txFactory, name, txBuilder, overwrite) + // When Textual is wired up, the context argument should be retrieved from the client context. + return tx.Sign(context.TODO(), txFactory, name, txBuilder, overwrite) } // Read and decode a StdTx from the given filename. Can pass "-" to read from stdin. diff --git a/x/auth/migrations/legacytx/amino_signing.go b/x/auth/migrations/legacytx/amino_signing.go index 4115efa704..8dd6ec80a1 100644 --- a/x/auth/migrations/legacytx/amino_signing.go +++ b/x/auth/migrations/legacytx/amino_signing.go @@ -1,6 +1,7 @@ package legacytx import ( + "context" "fmt" "github.com/cosmos/cosmos-sdk/codec" @@ -32,7 +33,7 @@ func (stdTxSignModeHandler) Modes() []signingtypes.SignMode { } // DefaultMode implements SignModeHandler.GetSignBytes -func (stdTxSignModeHandler) GetSignBytes(mode signingtypes.SignMode, data signing.SignerData, tx sdk.Tx) ([]byte, error) { +func (stdTxSignModeHandler) GetSignBytes(_ context.Context, mode signingtypes.SignMode, data signing.SignerData, tx sdk.Tx) ([]byte, error) { if mode != signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON { return nil, fmt.Errorf("expected %s, got %s", signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, mode) } diff --git a/x/auth/migrations/legacytx/amino_signing_test.go b/x/auth/migrations/legacytx/amino_signing_test.go index 568ea8b7c2..0ee548592a 100644 --- a/x/auth/migrations/legacytx/amino_signing_test.go +++ b/x/auth/migrations/legacytx/amino_signing_test.go @@ -52,7 +52,7 @@ func TestLegacyAminoJSONHandler_GetSignBytes(t *testing.T) { Sequence: seqNum, PubKey: priv1.PubKey(), } - signBz, err := handler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, signingData, tx) + signBz, err := handler.GetSignBytes(nil, signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, signingData, tx) require.NoError(t, err) expectedSignBz := StdSignBytes(chainId, accNum, seqNum, timeoutHeight, fee, msgs, memo, nil) @@ -60,7 +60,7 @@ func TestLegacyAminoJSONHandler_GetSignBytes(t *testing.T) { require.Equal(t, expectedSignBz, signBz) // expect error with wrong sign mode - _, err = handler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_DIRECT, signingData, tx) + _, err = handler.GetSignBytes(nil, signingtypes.SignMode_SIGN_MODE_DIRECT, signingData, tx) require.Error(t, err) } diff --git a/x/auth/signing/handler_map.go b/x/auth/signing/handler_map.go index 936de47da5..494dc3a06b 100644 --- a/x/auth/signing/handler_map.go +++ b/x/auth/signing/handler_map.go @@ -1,6 +1,7 @@ package signing import ( + "context" "fmt" "github.com/cosmos/cosmos-sdk/types/tx/signing" @@ -51,10 +52,10 @@ func (h SignModeHandlerMap) Modes() []signing.SignMode { } // DefaultMode implements SignModeHandler.GetSignBytes -func (h SignModeHandlerMap) GetSignBytes(mode signing.SignMode, data SignerData, tx sdk.Tx) ([]byte, error) { +func (h SignModeHandlerMap) GetSignBytes(ctx context.Context, mode signing.SignMode, data SignerData, tx sdk.Tx) ([]byte, error) { handler, found := h.signModeHandlers[mode] if !found { return nil, fmt.Errorf("can't verify sign mode %s", mode.String()) } - return handler.GetSignBytes(mode, data, tx) + return handler.GetSignBytes(ctx, mode, data, tx) } diff --git a/x/auth/signing/handler_map_test.go b/x/auth/signing/handler_map_test.go index c672ff37ae..fbe25e2643 100644 --- a/x/auth/signing/handler_map_test.go +++ b/x/auth/signing/handler_map_test.go @@ -66,16 +66,16 @@ func TestHandlerMap_GetSignBytes(t *testing.T) { Sequence: seqNum, PubKey: priv1.PubKey(), } - signBz, err := handler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, signingData, tx) + signBz, err := handler.GetSignBytes(nil, signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, signingData, tx) require.NoError(t, err) - expectedSignBz, err := aminoJSONHandler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, signingData, tx) + expectedSignBz, err := aminoJSONHandler.GetSignBytes(nil, signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, signingData, tx) require.NoError(t, err) require.Equal(t, expectedSignBz, signBz) // expect error with wrong sign mode - _, err = aminoJSONHandler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_DIRECT, signingData, tx) + _, err = aminoJSONHandler.GetSignBytes(nil, signingtypes.SignMode_SIGN_MODE_DIRECT, signingData, tx) require.Error(t, err) } diff --git a/x/auth/signing/sign_mode_handler.go b/x/auth/signing/sign_mode_handler.go index d4faff3d05..c0a8a445ba 100644 --- a/x/auth/signing/sign_mode_handler.go +++ b/x/auth/signing/sign_mode_handler.go @@ -1,6 +1,8 @@ package signing import ( + "context" + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/tx/signing" @@ -18,7 +20,7 @@ type SignModeHandler interface { // 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(ctx context.Context, mode signing.SignMode, data SignerData, tx sdk.Tx) ([]byte, error) } // SignerData is the specific information needed to sign a transaction that generally diff --git a/x/auth/signing/verify.go b/x/auth/signing/verify.go index 5a5395de69..f5069a309d 100644 --- a/x/auth/signing/verify.go +++ b/x/auth/signing/verify.go @@ -1,6 +1,7 @@ package signing import ( + "context" "fmt" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" @@ -11,10 +12,10 @@ import ( // VerifySignature verifies a transaction signature contained in SignatureData abstracting over different signing modes // and single vs multi-signatures. -func VerifySignature(pubKey cryptotypes.PubKey, signerData SignerData, sigData signing.SignatureData, handler SignModeHandler, tx sdk.Tx) error { +func VerifySignature(ctx context.Context, pubKey cryptotypes.PubKey, signerData SignerData, sigData signing.SignatureData, handler SignModeHandler, tx sdk.Tx) error { switch data := sigData.(type) { case *signing.SingleSignatureData: - signBytes, err := handler.GetSignBytes(data.SignMode, signerData, tx) + signBytes, err := handler.GetSignBytes(ctx, data.SignMode, signerData, tx) if err != nil { return err } @@ -29,7 +30,7 @@ func VerifySignature(pubKey cryptotypes.PubKey, signerData SignerData, sigData s return fmt.Errorf("expected %T, got %T", (multisig.PubKey)(nil), pubKey) } err := multiPK.VerifyMultisignature(func(mode signing.SignMode) ([]byte, error) { - return handler.GetSignBytes(mode, signerData, tx) + return handler.GetSignBytes(ctx, mode, signerData, tx) }, data) if err != nil { return err diff --git a/x/auth/signing/verify_test.go b/x/auth/signing/verify_test.go index fa06ef5720..29deaaaa4d 100644 --- a/x/auth/signing/verify_test.go +++ b/x/auth/signing/verify_test.go @@ -82,7 +82,7 @@ func TestVerifySignature(t *testing.T) { handler := MakeTestHandlerMap() stdTx := legacytx.NewStdTx(msgs, fee, []legacytx.StdSignature{stdSig}, memo) stdTx.TimeoutHeight = 10 - err = signing.VerifySignature(pubKey, signerData, sigV2.Data, handler, stdTx) + err = signing.VerifySignature(nil, pubKey, signerData, sigV2.Data, handler, stdTx) require.NoError(t, err) pkSet := []cryptotypes.PubKey{pubKey, pubKey1} @@ -111,6 +111,6 @@ func TestVerifySignature(t *testing.T) { stdTx = legacytx.NewStdTx(msgs, fee, []legacytx.StdSignature{stdSig1, stdSig2}, memo) stdTx.TimeoutHeight = 10 - err = signing.VerifySignature(multisigKey, signerData, multisignature, handler, stdTx) + err = signing.VerifySignature(nil, multisigKey, signerData, multisignature, handler, stdTx) require.NoError(t, err) } diff --git a/x/auth/tx/aux_test.go b/x/auth/tx/aux_test.go index 023b7b477a..51c37752a9 100644 --- a/x/auth/tx/aux_test.go +++ b/x/auth/tx/aux_test.go @@ -141,7 +141,7 @@ func TestBuilderWithAux(t *testing.T) { Sequence: 15, }) signBz, err = txConfig.SignModeHandler().GetSignBytes( - signing.SignMode_SIGN_MODE_DIRECT, + nil, signing.SignMode_SIGN_MODE_DIRECT, authsigning.SignerData{ Address: feepayerAddr.String(), ChainID: chainID, diff --git a/x/auth/tx/direct.go b/x/auth/tx/direct.go index 4acc52a08d..3b02d8bca9 100644 --- a/x/auth/tx/direct.go +++ b/x/auth/tx/direct.go @@ -1,6 +1,7 @@ package tx import ( + "context" "fmt" signingtypes "github.com/cosmos/cosmos-sdk/types/tx/signing" @@ -26,7 +27,7 @@ func (signModeDirectHandler) Modes() []signingtypes.SignMode { } // GetSignBytes implements SignModeHandler.GetSignBytes -func (signModeDirectHandler) GetSignBytes(mode signingtypes.SignMode, data signing.SignerData, tx sdk.Tx) ([]byte, error) { +func (signModeDirectHandler) GetSignBytes(_ context.Context, mode signingtypes.SignMode, data signing.SignerData, tx sdk.Tx) ([]byte, error) { if mode != signingtypes.SignMode_SIGN_MODE_DIRECT { return nil, fmt.Errorf("expected %s, got %s", signingtypes.SignMode_SIGN_MODE_DIRECT, mode) } diff --git a/x/auth/tx/direct_aux.go b/x/auth/tx/direct_aux.go index 6361309813..37a8d0e757 100644 --- a/x/auth/tx/direct_aux.go +++ b/x/auth/tx/direct_aux.go @@ -1,6 +1,7 @@ package tx import ( + "context" "fmt" codectypes "github.com/cosmos/cosmos-sdk/codec/types" @@ -28,7 +29,7 @@ func (signModeDirectAuxHandler) Modes() []signingtypes.SignMode { // GetSignBytes implements SignModeHandler.GetSignBytes func (signModeDirectAuxHandler) GetSignBytes( - mode signingtypes.SignMode, data signing.SignerData, tx sdk.Tx, + _ context.Context, mode signingtypes.SignMode, data signing.SignerData, tx sdk.Tx, ) ([]byte, error) { if mode != signingtypes.SignMode_SIGN_MODE_DIRECT_AUX { return nil, fmt.Errorf("expected %s, got %s", signingtypes.SignMode_SIGN_MODE_DIRECT_AUX, mode) diff --git a/x/auth/tx/direct_aux_test.go b/x/auth/tx/direct_aux_test.go index 27a5764dbe..08e18c6ce4 100644 --- a/x/auth/tx/direct_aux_test.go +++ b/x/auth/tx/direct_aux_test.go @@ -80,11 +80,11 @@ func TestDirectAuxHandler(t *testing.T) { modeHandler := signModeDirectAuxHandler{} t.Log("verify fee payer cannot use SIGN_MODE_DIRECT_AUX") - _, err = modeHandler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_DIRECT_AUX, feePayerSigningData, txBuilder.GetTx()) + _, err = modeHandler.GetSignBytes(nil, signingtypes.SignMode_SIGN_MODE_DIRECT_AUX, feePayerSigningData, txBuilder.GetTx()) require.EqualError(t, err, fmt.Sprintf("fee payer %s cannot sign with %s: unauthorized", feePayerAddr.String(), signingtypes.SignMode_SIGN_MODE_DIRECT_AUX)) t.Log("verify GetSignBytes with generating sign bytes by marshaling signDocDirectAux") - signBytes, err := modeHandler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_DIRECT_AUX, signingData, txBuilder.GetTx()) + signBytes, err := modeHandler.GetSignBytes(nil, signingtypes.SignMode_SIGN_MODE_DIRECT_AUX, signingData, txBuilder.GetTx()) require.NoError(t, err) require.NotNil(t, signBytes) @@ -121,7 +121,7 @@ func TestDirectAuxHandler(t *testing.T) { require.NoError(t, err) err = txBuilder.SetSignatures(sig) require.NoError(t, err) - signBytes, err = modeHandler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_DIRECT_AUX, signingData, txBuilder.GetTx()) + signBytes, err = modeHandler.GetSignBytes(nil, signingtypes.SignMode_SIGN_MODE_DIRECT_AUX, signingData, txBuilder.GetTx()) require.NoError(t, err) require.Equal(t, expectedSignBytes, signBytes) @@ -148,7 +148,7 @@ func TestDirectAuxModeHandler_nonDIRECT_MODE(t *testing.T) { t.Run(invalidMode.String(), func(t *testing.T) { var dh signModeDirectAuxHandler var signingData signing.SignerData - _, err := dh.GetSignBytes(invalidMode, signingData, nil) + _, err := dh.GetSignBytes(nil, invalidMode, signingData, nil) require.Error(t, err) wantErr := fmt.Errorf("expected %s, got %s", signingtypes.SignMode_SIGN_MODE_DIRECT_AUX, invalidMode) require.Equal(t, err, wantErr) @@ -160,7 +160,7 @@ func TestDirectAuxModeHandler_nonProtoTx(t *testing.T) { var dh signModeDirectAuxHandler var signingData signing.SignerData tx := new(nonProtoTx) - _, err := dh.GetSignBytes(signingtypes.SignMode_SIGN_MODE_DIRECT_AUX, signingData, tx) + _, err := dh.GetSignBytes(nil, signingtypes.SignMode_SIGN_MODE_DIRECT_AUX, signingData, tx) require.Error(t, err) wantErr := fmt.Errorf("can only handle a protobuf Tx, got %T", tx) require.Equal(t, err, wantErr) diff --git a/x/auth/tx/direct_test.go b/x/auth/tx/direct_test.go index 2230963965..bcc222a948 100644 --- a/x/auth/tx/direct_test.go +++ b/x/auth/tx/direct_test.go @@ -75,7 +75,7 @@ func TestDirectModeHandler(t *testing.T) { PubKey: pubkey, } - signBytes, err := modeHandler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_DIRECT, signingData, txBuilder.GetTx()) + signBytes, err := modeHandler.GetSignBytes(nil, signingtypes.SignMode_SIGN_MODE_DIRECT, signingData, txBuilder.GetTx()) require.NoError(t, err) require.NotNil(t, signBytes) @@ -120,7 +120,7 @@ func TestDirectModeHandler(t *testing.T) { require.NoError(t, err) err = txBuilder.SetSignatures(sig) require.NoError(t, err) - signBytes, err = modeHandler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_DIRECT, signingData, txBuilder.GetTx()) + signBytes, err = modeHandler.GetSignBytes(nil, signingtypes.SignMode_SIGN_MODE_DIRECT, signingData, txBuilder.GetTx()) require.NoError(t, err) require.Equal(t, expectedSignBytes, signBytes) @@ -141,7 +141,7 @@ func TestDirectModeHandler_nonDIRECT_MODE(t *testing.T) { t.Run(invalidMode.String(), func(t *testing.T) { var dh signModeDirectHandler var signingData signing.SignerData - _, err := dh.GetSignBytes(invalidMode, signingData, nil) + _, err := dh.GetSignBytes(nil, invalidMode, signingData, nil) require.Error(t, err) wantErr := fmt.Errorf("expected %s, got %s", signingtypes.SignMode_SIGN_MODE_DIRECT, invalidMode) require.Equal(t, err, wantErr) @@ -160,7 +160,7 @@ func TestDirectModeHandler_nonProtoTx(t *testing.T) { var dh signModeDirectHandler var signingData signing.SignerData tx := new(nonProtoTx) - _, err := dh.GetSignBytes(signingtypes.SignMode_SIGN_MODE_DIRECT, signingData, tx) + _, err := dh.GetSignBytes(nil, signingtypes.SignMode_SIGN_MODE_DIRECT, signingData, tx) require.Error(t, err) wantErr := fmt.Errorf("can only handle a protobuf Tx, got %T", tx) require.Equal(t, err, wantErr) diff --git a/x/auth/tx/encode_decode_test.go b/x/auth/tx/encode_decode_test.go index db6c3d995e..93caa5115e 100644 --- a/x/auth/tx/encode_decode_test.go +++ b/x/auth/tx/encode_decode_test.go @@ -128,7 +128,7 @@ func TestUnknownFields(t *testing.T) { decoder := DefaultTxDecoder(codec.NewProtoCodec(codectypes.NewInterfaceRegistry())) theTx, err := decoder(txBz) require.NoError(t, err) - _, err = handler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, signing.SignerData{}, theTx) + _, err = handler.GetSignBytes(nil, signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, signing.SignerData{}, theTx) require.EqualError(t, err, tt.shouldAminoErr) } }) diff --git a/x/auth/tx/legacy_amino_json.go b/x/auth/tx/legacy_amino_json.go index 01274f9f6e..e0003a5273 100644 --- a/x/auth/tx/legacy_amino_json.go +++ b/x/auth/tx/legacy_amino_json.go @@ -1,6 +1,7 @@ package tx import ( + "context" "fmt" sdk "github.com/cosmos/cosmos-sdk/types" @@ -26,7 +27,7 @@ func (s signModeLegacyAminoJSONHandler) Modes() []signingtypes.SignMode { return []signingtypes.SignMode{signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON} } -func (s signModeLegacyAminoJSONHandler) GetSignBytes(mode signingtypes.SignMode, data signing.SignerData, tx sdk.Tx) ([]byte, error) { +func (s signModeLegacyAminoJSONHandler) GetSignBytes(_ context.Context, mode signingtypes.SignMode, data signing.SignerData, tx sdk.Tx) ([]byte, error) { if mode != signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON { return nil, fmt.Errorf("expected %s, got %s", signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, mode) } diff --git a/x/auth/tx/legacy_amino_json_test.go b/x/auth/tx/legacy_amino_json_test.go index 7df42f92b1..f2efb41aa3 100644 --- a/x/auth/tx/legacy_amino_json_test.go +++ b/x/auth/tx/legacy_amino_json_test.go @@ -97,7 +97,7 @@ func TestLegacyAminoJSONHandler_GetSignBytes(t *testing.T) { AccountNumber: accNum, Sequence: seqNum, } - signBz, err := handler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, signingData, tx) + signBz, err := handler.GetSignBytes(nil, signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, signingData, tx) require.NoError(t, err) require.Equal(t, tc.expectedSignBz, signBz) @@ -116,7 +116,7 @@ func TestLegacyAminoJSONHandler_GetSignBytes(t *testing.T) { } // expect error with wrong sign mode - _, err := handler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_DIRECT, signingData, tx) + _, err := handler.GetSignBytes(nil, signingtypes.SignMode_SIGN_MODE_DIRECT, signingData, tx) require.Error(t, err) // expect error with extension options @@ -126,7 +126,7 @@ func TestLegacyAminoJSONHandler_GetSignBytes(t *testing.T) { require.NoError(t, err) bldr.tx.Body.ExtensionOptions = []*cdctypes.Any{any} tx = bldr.GetTx() - _, err = handler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, signingData, tx) + _, err = handler.GetSignBytes(nil, signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, signingData, tx) require.Error(t, err) // expect error with non-critical extension options @@ -134,7 +134,7 @@ func TestLegacyAminoJSONHandler_GetSignBytes(t *testing.T) { buildTx(t, bldr) bldr.tx.Body.NonCriticalExtensionOptions = []*cdctypes.Any{any} tx = bldr.GetTx() - _, err = handler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, signingData, tx) + _, err = handler.GetSignBytes(nil, signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, signingData, tx) require.Error(t, err) } diff --git a/x/auth/tx/testutil/suite.go b/x/auth/tx/testutil/suite.go index 7b6ad4673b..93ec6aa3f7 100644 --- a/x/auth/tx/testutil/suite.go +++ b/x/auth/tx/testutil/suite.go @@ -2,6 +2,7 @@ package tx import ( "bytes" + "context" "github.com/stretchr/testify/suite" @@ -134,7 +135,7 @@ func (s *TxConfigTestSuite) TestTxBuilderSetSignatures() { Sequence: seq1, PubKey: pubkey, } - signBytes, err := signModeHandler.GetSignBytes(signModeHandler.DefaultMode(), signerData, sigTx) + signBytes, err := signModeHandler.GetSignBytes(context.TODO(), signModeHandler.DefaultMode(), signerData, sigTx) s.Require().NoError(err) sigBz, err := privKey.Sign(signBytes) s.Require().NoError(err) @@ -146,7 +147,7 @@ func (s *TxConfigTestSuite) TestTxBuilderSetSignatures() { Sequence: mseq, PubKey: multisigPk, } - mSignBytes, err := signModeHandler.GetSignBytes(signModeHandler.DefaultMode(), signerData, sigTx) + mSignBytes, err := signModeHandler.GetSignBytes(context.TODO(), signModeHandler.DefaultMode(), signerData, sigTx) s.Require().NoError(err) mSigBz1, err := privKey.Sign(mSignBytes) s.Require().NoError(err)