From 2659618502be52bdf487cfc0ad23a4233ebb8fad Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Fri, 11 Feb 2022 14:18:15 +0530 Subject: [PATCH 01/15] fix keys show cmd --- client/keys/show.go | 19 +++++++++++-------- crypto/keyring/keyring.go | 4 +++- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/client/keys/show.go b/client/keys/show.go index d97b4a67d842..125ae0b296a4 100644 --- a/client/keys/show.go +++ b/client/keys/show.go @@ -3,6 +3,7 @@ package keys import ( "errors" "fmt" + "strings" "github.com/spf13/cobra" "github.com/tendermint/tendermint/libs/cli" @@ -165,20 +166,22 @@ func runShowCmd(cmd *cobra.Command, args []string) (err error) { func fetchKey(kb keyring.Keyring, keyref string) (*keyring.Record, error) { // firstly check if the keyref is a key name of a key registered in a keyring. k, err := kb.Key(keyref) + if (strings.HasPrefix(keyref, sdk.Bech32PrefixAccAddr)) && (len(keyref) > 6) { + accAddr, err := sdk.AccAddressFromBech32(keyref) + if err != nil { + return k, err + } + + k, err = kb.KeyByAddress(accAddr) + return k, sdkerr.Wrap(err, "Invalid key") + } // if the key is not there or if we have a problem with a keyring itself then we move to a // fallback: searching for key by address. - if err == nil || !sdkerr.IsOf(err, sdkerr.ErrIO, sdkerr.ErrKeyNotFound) { return k, err } + return k, err - accAddr, err := sdk.AccAddressFromBech32(keyref) - if err != nil { - return k, err - } - - k, err = kb.KeyByAddress(accAddr) - return k, sdkerr.Wrap(err, "Invalid key") } func validateMultisigThreshold(k, nKeys int) error { diff --git a/crypto/keyring/keyring.go b/crypto/keyring/keyring.go index 4011b2a2847e..0a1c6d7a23ae 100644 --- a/crypto/keyring/keyring.go +++ b/crypto/keyring/keyring.go @@ -879,7 +879,9 @@ func (ks keystore) MigrateAll() (bool, error) { // migrate converts keyring.Item from amino to proto serialization format. func (ks keystore) migrate(key string) (*Record, bool, error) { - if !(strings.HasSuffix(key, infoSuffix)) && !(strings.HasPrefix(key, sdk.Bech32PrefixAccAddr)) { + if ((strings.HasPrefix(key, sdk.Bech32PrefixAccAddr)) && (len(key) == 6)) || (strings.HasSuffix(key, infoSuffix) && len(key) == 4) { + key = infoKey(key) + } else if !(strings.HasSuffix(key, infoSuffix)) && !(strings.HasPrefix(key, sdk.Bech32PrefixAccAddr)) { key = infoKey(key) } item, err := ks.db.Get(key) From 2565d02cc63f85381fd984e75d11ba906dbdf7b7 Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Mon, 14 Feb 2022 12:41:22 +0530 Subject: [PATCH 02/15] wip: fix something --- x/auth/client/cli/tx_sign.go | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/x/auth/client/cli/tx_sign.go b/x/auth/client/cli/tx_sign.go index 6c869d4b97b2..1ca75f98d0c6 100644 --- a/x/auth/client/cli/tx_sign.go +++ b/x/auth/client/cli/tx_sign.go @@ -233,11 +233,6 @@ func makeSignCmd() func(cmd *cobra.Command, args []string) error { if err != nil { return err } - from, _ := cmd.Flags().GetString(flags.FlagFrom) - _, fromName, _, err := client.GetFromFields(txF.Keybase(), from, clientCtx.GenerateOnly) - if err != nil { - return fmt.Errorf("error getting account from keybase: %w", err) - } overwrite, _ := f.GetBool(flagOverwrite) if multisig != "" { @@ -245,8 +240,12 @@ func makeSignCmd() func(cmd *cobra.Command, args []string) error { if err != nil { return fmt.Errorf("error getting account from keybase: %w", err) } + multisigKey, err := txFactory.Keybase().KeyByAddress(multisigAddr) + if err != nil { + return err + } err = authclient.SignTxWithSignerAddress( - txF, clientCtx, multisigAddr, fromName, txBuilder, clientCtx.Offline, overwrite) + txF, clientCtx, multisigAddr, multisigKey.Name, txBuilder, clientCtx.Offline, overwrite) if err != nil { return err } From 05e510c90f7ecf688985807b0905e888aee2c2b9 Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Tue, 15 Feb 2022 18:21:12 +0530 Subject: [PATCH 03/15] nit --- client/keys/show.go | 1 + 1 file changed, 1 insertion(+) diff --git a/client/keys/show.go b/client/keys/show.go index 125ae0b296a4..8a5bd2a7cc12 100644 --- a/client/keys/show.go +++ b/client/keys/show.go @@ -177,6 +177,7 @@ func fetchKey(kb keyring.Keyring, keyref string) (*keyring.Record, error) { } // if the key is not there or if we have a problem with a keyring itself then we move to a // fallback: searching for key by address. + if err == nil || !sdkerr.IsOf(err, sdkerr.ErrIO, sdkerr.ErrKeyNotFound) { return k, err } From 5bbcc88a78b496a715c154f4860b9f28db232ecf Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Tue, 15 Feb 2022 18:39:20 +0530 Subject: [PATCH 04/15] fix for sign-batch --- x/auth/client/cli/tx_sign.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/x/auth/client/cli/tx_sign.go b/x/auth/client/cli/tx_sign.go index 1ca75f98d0c6..52617ee90460 100644 --- a/x/auth/client/cli/tx_sign.go +++ b/x/auth/client/cli/tx_sign.go @@ -118,8 +118,12 @@ func makeSignBatchCmd() func(cmd *cobra.Command, args []string) error { if err != nil { return fmt.Errorf("error getting account from keybase: %w", err) } + multisigKey, err := txFactory.Keybase().KeyByAddress(multisigAddr) + if err != nil { + return err + } err = authclient.SignTxWithSignerAddress( - txFactory, clientCtx, multisigAddr, clientCtx.GetFromName(), txBuilder, clientCtx.Offline, true) + txFactory, clientCtx, multisigAddr, multisigKey.Name, txBuilder, clientCtx.Offline, true) if err != nil { return err } From 276ebe64518b8fbf6366f6f87970c5ef65f96411 Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Tue, 15 Feb 2022 18:42:20 +0530 Subject: [PATCH 05/15] add changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d70f1886f28..9e11a3d3e880 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -167,6 +167,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Bug Fixes +* [\#11197](https://github.com/cosmos/cosmos-sdk/pull/11197) Signing with multisig flag now works with both multisig name and its address * [\#10844](https://github.com/cosmos/cosmos-sdk/pull/10844) Automatic recovering non-consistent keyring storage during public key import * (store) [\#11117](https://github.com/cosmos/cosmos-sdk/pull/11117) Fix data race in store trace component * (cli) [\#11065](https://github.com/cosmos/cosmos-sdk/pull/11065) Ensure the `tendermint-validator-set` query command respects the `-o` output flag. From b014b540af33526f13667f8bb46df22c10cc8caa Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Mon, 28 Feb 2022 16:40:24 +0530 Subject: [PATCH 06/15] remove unnecessary changes --- x/auth/client/cli/tx_sign.go | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/x/auth/client/cli/tx_sign.go b/x/auth/client/cli/tx_sign.go index 52617ee90460..6c869d4b97b2 100644 --- a/x/auth/client/cli/tx_sign.go +++ b/x/auth/client/cli/tx_sign.go @@ -118,12 +118,8 @@ func makeSignBatchCmd() func(cmd *cobra.Command, args []string) error { if err != nil { return fmt.Errorf("error getting account from keybase: %w", err) } - multisigKey, err := txFactory.Keybase().KeyByAddress(multisigAddr) - if err != nil { - return err - } err = authclient.SignTxWithSignerAddress( - txFactory, clientCtx, multisigAddr, multisigKey.Name, txBuilder, clientCtx.Offline, true) + txFactory, clientCtx, multisigAddr, clientCtx.GetFromName(), txBuilder, clientCtx.Offline, true) if err != nil { return err } @@ -237,6 +233,11 @@ func makeSignCmd() func(cmd *cobra.Command, args []string) error { if err != nil { return err } + from, _ := cmd.Flags().GetString(flags.FlagFrom) + _, fromName, _, err := client.GetFromFields(txF.Keybase(), from, clientCtx.GenerateOnly) + if err != nil { + return fmt.Errorf("error getting account from keybase: %w", err) + } overwrite, _ := f.GetBool(flagOverwrite) if multisig != "" { @@ -244,12 +245,8 @@ func makeSignCmd() func(cmd *cobra.Command, args []string) error { if err != nil { return fmt.Errorf("error getting account from keybase: %w", err) } - multisigKey, err := txFactory.Keybase().KeyByAddress(multisigAddr) - if err != nil { - return err - } err = authclient.SignTxWithSignerAddress( - txF, clientCtx, multisigAddr, multisigKey.Name, txBuilder, clientCtx.Offline, overwrite) + txF, clientCtx, multisigAddr, fromName, txBuilder, clientCtx.Offline, overwrite) if err != nil { return err } From 10553636e0b04c37ec5262ad3b5876e2e7bc558a Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Fri, 4 Mar 2022 15:21:33 +0530 Subject: [PATCH 07/15] wip --- client/keys/show.go | 18 +++++++----------- crypto/keyring/keyring.go | 4 +--- x/auth/client/cli/tx_sign.go | 12 +++++++++--- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/client/keys/show.go b/client/keys/show.go index 8a5bd2a7cc12..d97b4a67d842 100644 --- a/client/keys/show.go +++ b/client/keys/show.go @@ -3,7 +3,6 @@ package keys import ( "errors" "fmt" - "strings" "github.com/spf13/cobra" "github.com/tendermint/tendermint/libs/cli" @@ -166,23 +165,20 @@ func runShowCmd(cmd *cobra.Command, args []string) (err error) { func fetchKey(kb keyring.Keyring, keyref string) (*keyring.Record, error) { // firstly check if the keyref is a key name of a key registered in a keyring. k, err := kb.Key(keyref) - if (strings.HasPrefix(keyref, sdk.Bech32PrefixAccAddr)) && (len(keyref) > 6) { - accAddr, err := sdk.AccAddressFromBech32(keyref) - if err != nil { - return k, err - } - - k, err = kb.KeyByAddress(accAddr) - return k, sdkerr.Wrap(err, "Invalid key") - } // if the key is not there or if we have a problem with a keyring itself then we move to a // fallback: searching for key by address. if err == nil || !sdkerr.IsOf(err, sdkerr.ErrIO, sdkerr.ErrKeyNotFound) { return k, err } - return k, err + accAddr, err := sdk.AccAddressFromBech32(keyref) + if err != nil { + return k, err + } + + k, err = kb.KeyByAddress(accAddr) + return k, sdkerr.Wrap(err, "Invalid key") } func validateMultisigThreshold(k, nKeys int) error { diff --git a/crypto/keyring/keyring.go b/crypto/keyring/keyring.go index 0731d8277038..db4eb8fbb9ca 100644 --- a/crypto/keyring/keyring.go +++ b/crypto/keyring/keyring.go @@ -890,9 +890,7 @@ func (ks keystore) MigrateAll() (bool, error) { // migrate converts keyring.Item from amino to proto serialization format. func (ks keystore) migrate(key string) (*Record, bool, error) { - if ((strings.HasPrefix(key, sdk.Bech32PrefixAccAddr)) && (len(key) == 6)) || (strings.HasSuffix(key, infoSuffix) && len(key) == 4) { - key = infoKey(key) - } else if !(strings.HasSuffix(key, infoSuffix)) && !(strings.HasPrefix(key, sdk.Bech32PrefixAccAddr)) { + if !(strings.HasSuffix(key, infoSuffix)) && !(strings.HasPrefix(key, sdk.Bech32PrefixAccAddr)) { key = infoKey(key) } item, err := ks.db.Get(key) diff --git a/x/auth/client/cli/tx_sign.go b/x/auth/client/cli/tx_sign.go index 6c869d4b97b2..dae627b0f406 100644 --- a/x/auth/client/cli/tx_sign.go +++ b/x/auth/client/cli/tx_sign.go @@ -9,6 +9,7 @@ import ( "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/client/flags" "github.com/cosmos/cosmos-sdk/client/tx" + sdk "github.com/cosmos/cosmos-sdk/types" authclient "github.com/cosmos/cosmos-sdk/x/auth/client" ) @@ -240,10 +241,15 @@ func makeSignCmd() func(cmd *cobra.Command, args []string) error { } overwrite, _ := f.GetBool(flagOverwrite) + var multisigAddr sdk.AccAddress if multisig != "" { - multisigAddr, _, _, err := client.GetFromFields(txFactory.Keybase(), multisig, clientCtx.GenerateOnly) - if err != nil { - return fmt.Errorf("error getting account from keybase: %w", err) + if multisigAddr, err = sdk.AccAddressFromBech32(multisig); err != nil { + if err != nil { + multisigAddr, _, _, err = client.GetFromFields(txFactory.Keybase(), multisig, clientCtx.GenerateOnly) + if err != nil { + return fmt.Errorf("error getting account from keybase: %w", err) + } + } } err = authclient.SignTxWithSignerAddress( txF, clientCtx, multisigAddr, fromName, txBuilder, clientCtx.Offline, overwrite) From cb075440151653449c92c44ea73759cce1da5326 Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Fri, 4 Mar 2022 15:44:55 +0530 Subject: [PATCH 08/15] nit: improvement --- x/auth/client/cli/tx_sign.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/x/auth/client/cli/tx_sign.go b/x/auth/client/cli/tx_sign.go index dae627b0f406..1aa602fe8f7e 100644 --- a/x/auth/client/cli/tx_sign.go +++ b/x/auth/client/cli/tx_sign.go @@ -243,12 +243,12 @@ func makeSignCmd() func(cmd *cobra.Command, args []string) error { overwrite, _ := f.GetBool(flagOverwrite) var multisigAddr sdk.AccAddress if multisig != "" { - if multisigAddr, err = sdk.AccAddressFromBech32(multisig); err != nil { + multisigAddr, err = sdk.AccAddressFromBech32(multisig) + if err != nil { + // Bech32 decode error, maybe it's a name, we try to fetch from keyring + multisigAddr, _, _, err = client.GetFromFields(txFactory.Keybase(), multisig, clientCtx.GenerateOnly) if err != nil { - multisigAddr, _, _, err = client.GetFromFields(txFactory.Keybase(), multisig, clientCtx.GenerateOnly) - if err != nil { - return fmt.Errorf("error getting account from keybase: %w", err) - } + return fmt.Errorf("error getting account from keybase: %w", err) } } err = authclient.SignTxWithSignerAddress( From 734e35dd92e60e519eea05b49028dc35110e99ff Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Fri, 4 Mar 2022 18:41:54 +0530 Subject: [PATCH 09/15] add tests adn changelog --- CHANGELOG.md | 1 + x/auth/client/testutil/suite.go | 34 +++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 715f51705d3f..4c37d22de6d0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -182,6 +182,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Bug Fixes +* [\#11197](https://github.com/cosmos/cosmos-sdk/pull/11197) Signing with multisig now works with multisig address which is not in the keyring. * (makefile) [\#11285](https://github.com/cosmos/cosmos-sdk/pull/11285) Fix lint-fix make target. * (client) [\#11283](https://github.com/cosmos/cosmos-sdk/issues/11283) Support multiple keys for tx simulation and setting automatic gas for txs. * (store) [\#11177](https://github.com/cosmos/cosmos-sdk/pull/11177) Update the prune `everything` strategy to store the last two heights. diff --git a/x/auth/client/testutil/suite.go b/x/auth/client/testutil/suite.go index 4c9d7da5d132..e710f68161ba 100644 --- a/x/auth/client/testutil/suite.go +++ b/x/auth/client/testutil/suite.go @@ -984,6 +984,10 @@ func (s *IntegrationTestSuite) TestCLIMultisign() { multisigRecord, err := val1.ClientCtx.Keyring.Key("multi") s.Require().NoError(err) + dummyMultisig := "cosmos1hd6fsrvnz6qkp87s3u86ludegq97agxsdkwzyh" + dummyMultisigAddr, err := sdk.AccAddressFromBech32(dummyMultisig) + s.Require().NoError(err) + addr, err := multisigRecord.GetAddress() s.Require().NoError(err) @@ -1006,6 +1010,14 @@ func (s *IntegrationTestSuite) TestCLIMultisign() { s.Require().NoError(err) s.Require().True(sendTokens.Amount.Equal(balRes.Balances.AmountOf(s.cfg.BondDenom))) + // Send coins from validator to dummy multisig. + s.Require().NoError(s.network.WaitForNextBlock()) + _, err = s.createBankMsg( + val1, dummyMultisigAddr, + sdk.NewCoins(sendTokens), + ) + s.Require().NoError(err) + // Generate multisig transaction. multiGeneratedTx, err := bankcli.MsgSendExec( val1.ClientCtx, @@ -1021,9 +1033,27 @@ func (s *IntegrationTestSuite) TestCLIMultisign() { ) s.Require().NoError(err) + // Generate multisig transaction with dummy multisig address. + dummyMultisigTx, err := bankcli.MsgSendExec( + val1.ClientCtx, + dummyMultisigAddr, + val1.Address, + sdk.NewCoins( + sdk.NewInt64Coin(s.cfg.BondDenom, 5), + ), + fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=true", flags.FlagGenerateOnly), + ) + s.Require().NoError(err) + // Save tx to file multiGeneratedTxFile := testutil.WriteToNewTempFile(s.T(), multiGeneratedTx.String()) + // Save dummy multi tx to file + multiGeneratedTx2File := testutil.WriteToNewTempFile(s.T(), dummyMultisigTx.String()) + addr1, err := account1.GetAddress() s.Require().NoError(err) // Sign with account1 @@ -1041,6 +1071,10 @@ func (s *IntegrationTestSuite) TestCLIMultisign() { sign2File := testutil.WriteToNewTempFile(s.T(), account2Signature.String()) + // Sign with dummy multisig account + _, _ = TxSignExec(val1.ClientCtx, addr1, multiGeneratedTx2File.Name(), "--multisig", dummyMultisigAddr.String()) + s.Require().NoError(err) + // Does not work in offline mode. _, err = TxMultiSignExec(val1.ClientCtx, multisigRecord.Name, multiGeneratedTxFile.Name(), "--offline", sign1File.Name(), sign2File.Name()) s.Require().EqualError(err, fmt.Sprintf("couldn't verify signature for address %s", addr1)) From 1e4ff4d57cea0ce9e435d990a1a1393b93290bdd Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Fri, 4 Mar 2022 19:01:24 +0530 Subject: [PATCH 10/15] nit --- x/auth/client/cli/tx_sign.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/x/auth/client/cli/tx_sign.go b/x/auth/client/cli/tx_sign.go index 1aa602fe8f7e..fd32d96767fe 100644 --- a/x/auth/client/cli/tx_sign.go +++ b/x/auth/client/cli/tx_sign.go @@ -241,9 +241,8 @@ func makeSignCmd() func(cmd *cobra.Command, args []string) error { } overwrite, _ := f.GetBool(flagOverwrite) - var multisigAddr sdk.AccAddress if multisig != "" { - multisigAddr, err = sdk.AccAddressFromBech32(multisig) + multisigAddr, err := sdk.AccAddressFromBech32(multisig) if err != nil { // Bech32 decode error, maybe it's a name, we try to fetch from keyring multisigAddr, _, _, err = client.GetFromFields(txFactory.Keybase(), multisig, clientCtx.GenerateOnly) From b2194a472c7e0a66343fa0f9bf146bbaf6584035 Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Fri, 4 Mar 2022 19:58:07 +0530 Subject: [PATCH 11/15] create a separate test for signing with multisig --- x/auth/client/testutil/suite.go | 81 +++++++++++++++++++-------------- 1 file changed, 47 insertions(+), 34 deletions(-) diff --git a/x/auth/client/testutil/suite.go b/x/auth/client/testutil/suite.go index e710f68161ba..ba2143f69897 100644 --- a/x/auth/client/testutil/suite.go +++ b/x/auth/client/testutil/suite.go @@ -971,6 +971,53 @@ func (s *IntegrationTestSuite) TestCLIMultisignSortSignatures() { s.Require().NoError(s.network.WaitForNextBlock()) } +func (s *IntegrationTestSuite) TestSignWithMultisig() { + val1 := s.network.Validators[0] + + // Generate a account for signing. + account1, err := val1.ClientCtx.Keyring.Key("newAccount1") + s.Require().NoError(err) + + addr1, err := account1.GetAddress() + s.Require().NoError(err) + + // Create a dummy multisig address + dummyMultisig := "cosmos1hd6fsrvnz6qkp87s3u86ludegq97agxsdkwzyh" + dummyMultisigAddr, err := sdk.AccAddressFromBech32(dummyMultisig) + s.Require().NoError(err) + + // Send coins from validator to dummy multisig. + sendTokens := sdk.NewInt64Coin(s.cfg.BondDenom, 10) + s.Require().NoError(s.network.WaitForNextBlock()) + _, err = s.createBankMsg( + val1, dummyMultisigAddr, + sdk.NewCoins(sendTokens), + ) + s.Require().NoError(err) + + // Generate multisig transaction with dummy multisig address. + dummyMultisigTx, err := bankcli.MsgSendExec( + val1.ClientCtx, + dummyMultisigAddr, + val1.Address, + sdk.NewCoins( + sdk.NewInt64Coin(s.cfg.BondDenom, 5), + ), + fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), + fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), + fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), + fmt.Sprintf("--%s=true", flags.FlagGenerateOnly), + ) + s.Require().NoError(err) + + // Save dummy multi tx to file + multiGeneratedTx2File := testutil.WriteToNewTempFile(s.T(), dummyMultisigTx.String()) + + // Sign with dummy multisig account + _, _ = TxSignExec(val1.ClientCtx, addr1, multiGeneratedTx2File.Name(), "--multisig", dummyMultisigAddr.String()) + s.Require().NoError(err) +} + func (s *IntegrationTestSuite) TestCLIMultisign() { val1 := s.network.Validators[0] @@ -984,10 +1031,6 @@ func (s *IntegrationTestSuite) TestCLIMultisign() { multisigRecord, err := val1.ClientCtx.Keyring.Key("multi") s.Require().NoError(err) - dummyMultisig := "cosmos1hd6fsrvnz6qkp87s3u86ludegq97agxsdkwzyh" - dummyMultisigAddr, err := sdk.AccAddressFromBech32(dummyMultisig) - s.Require().NoError(err) - addr, err := multisigRecord.GetAddress() s.Require().NoError(err) @@ -1010,14 +1053,6 @@ func (s *IntegrationTestSuite) TestCLIMultisign() { s.Require().NoError(err) s.Require().True(sendTokens.Amount.Equal(balRes.Balances.AmountOf(s.cfg.BondDenom))) - // Send coins from validator to dummy multisig. - s.Require().NoError(s.network.WaitForNextBlock()) - _, err = s.createBankMsg( - val1, dummyMultisigAddr, - sdk.NewCoins(sendTokens), - ) - s.Require().NoError(err) - // Generate multisig transaction. multiGeneratedTx, err := bankcli.MsgSendExec( val1.ClientCtx, @@ -1033,27 +1068,9 @@ func (s *IntegrationTestSuite) TestCLIMultisign() { ) s.Require().NoError(err) - // Generate multisig transaction with dummy multisig address. - dummyMultisigTx, err := bankcli.MsgSendExec( - val1.ClientCtx, - dummyMultisigAddr, - val1.Address, - sdk.NewCoins( - sdk.NewInt64Coin(s.cfg.BondDenom, 5), - ), - fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation), - fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync), - fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), - fmt.Sprintf("--%s=true", flags.FlagGenerateOnly), - ) - s.Require().NoError(err) - // Save tx to file multiGeneratedTxFile := testutil.WriteToNewTempFile(s.T(), multiGeneratedTx.String()) - // Save dummy multi tx to file - multiGeneratedTx2File := testutil.WriteToNewTempFile(s.T(), dummyMultisigTx.String()) - addr1, err := account1.GetAddress() s.Require().NoError(err) // Sign with account1 @@ -1071,10 +1088,6 @@ func (s *IntegrationTestSuite) TestCLIMultisign() { sign2File := testutil.WriteToNewTempFile(s.T(), account2Signature.String()) - // Sign with dummy multisig account - _, _ = TxSignExec(val1.ClientCtx, addr1, multiGeneratedTx2File.Name(), "--multisig", dummyMultisigAddr.String()) - s.Require().NoError(err) - // Does not work in offline mode. _, err = TxMultiSignExec(val1.ClientCtx, multisigRecord.Name, multiGeneratedTxFile.Name(), "--offline", sign1File.Name(), sign2File.Name()) s.Require().EqualError(err, fmt.Sprintf("couldn't verify signature for address %s", addr1)) From cd692e3585819e18f1cd82f833799fa74bfd0d24 Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Fri, 4 Mar 2022 21:01:29 +0530 Subject: [PATCH 12/15] fix tests --- x/auth/client/testutil/suite.go | 28 +++++++--------------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/x/auth/client/testutil/suite.go b/x/auth/client/testutil/suite.go index ba2143f69897..26451a3f6d0a 100644 --- a/x/auth/client/testutil/suite.go +++ b/x/auth/client/testutil/suite.go @@ -981,24 +981,10 @@ func (s *IntegrationTestSuite) TestSignWithMultisig() { addr1, err := account1.GetAddress() s.Require().NoError(err) - // Create a dummy multisig address - dummyMultisig := "cosmos1hd6fsrvnz6qkp87s3u86ludegq97agxsdkwzyh" - dummyMultisigAddr, err := sdk.AccAddressFromBech32(dummyMultisig) - s.Require().NoError(err) - - // Send coins from validator to dummy multisig. - sendTokens := sdk.NewInt64Coin(s.cfg.BondDenom, 10) - s.Require().NoError(s.network.WaitForNextBlock()) - _, err = s.createBankMsg( - val1, dummyMultisigAddr, - sdk.NewCoins(sendTokens), - ) - s.Require().NoError(err) - - // Generate multisig transaction with dummy multisig address. - dummyMultisigTx, err := bankcli.MsgSendExec( + // Generate multisig transaction. + multisigTx, err := bankcli.MsgSendExec( val1.ClientCtx, - dummyMultisigAddr, + val1.Address, val1.Address, sdk.NewCoins( sdk.NewInt64Coin(s.cfg.BondDenom, 5), @@ -1010,11 +996,11 @@ func (s *IntegrationTestSuite) TestSignWithMultisig() { ) s.Require().NoError(err) - // Save dummy multi tx to file - multiGeneratedTx2File := testutil.WriteToNewTempFile(s.T(), dummyMultisigTx.String()) + // Save multisig tx to file + multiGeneratedTx2File := testutil.WriteToNewTempFile(s.T(), multisigTx.String()) - // Sign with dummy multisig account - _, _ = TxSignExec(val1.ClientCtx, addr1, multiGeneratedTx2File.Name(), "--multisig", dummyMultisigAddr.String()) + // Sign using multisig + _, _ = TxSignExec(val1.ClientCtx, addr1, multiGeneratedTx2File.Name(), "--multisig", val1.Address.String()) s.Require().NoError(err) } From bbb421b5cc59202498c701750e3452072d124b61 Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Fri, 4 Mar 2022 23:30:03 +0530 Subject: [PATCH 13/15] fix something --- x/auth/client/testutil/suite.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/x/auth/client/testutil/suite.go b/x/auth/client/testutil/suite.go index 26451a3f6d0a..a4174bd2f52c 100644 --- a/x/auth/client/testutil/suite.go +++ b/x/auth/client/testutil/suite.go @@ -981,7 +981,12 @@ func (s *IntegrationTestSuite) TestSignWithMultisig() { addr1, err := account1.GetAddress() s.Require().NoError(err) - // Generate multisig transaction. + // Create a multisig address that is not in the keyring. + multisig := "cosmos1hd6fsrvnz6qkp87s3u86ludegq97agxsdkwzyh" + multisigAddr, err := sdk.AccAddressFromBech32(multisig) + s.Require().NoError(err) + + // Generate a transaction for testing --multisig with an address not in the keyring. multisigTx, err := bankcli.MsgSendExec( val1.ClientCtx, val1.Address, @@ -996,11 +1001,11 @@ func (s *IntegrationTestSuite) TestSignWithMultisig() { ) s.Require().NoError(err) - // Save multisig tx to file + // Save multi tx to file multiGeneratedTx2File := testutil.WriteToNewTempFile(s.T(), multisigTx.String()) // Sign using multisig - _, _ = TxSignExec(val1.ClientCtx, addr1, multiGeneratedTx2File.Name(), "--multisig", val1.Address.String()) + _, _ = TxSignExec(val1.ClientCtx, addr1, multiGeneratedTx2File.Name(), "--multisig", multisigAddr.String()) s.Require().NoError(err) } From b6d15057f34b6e64bf27d1d565f70cfd4012ab58 Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Fri, 4 Mar 2022 23:47:10 +0530 Subject: [PATCH 14/15] add comments in test --- x/auth/client/testutil/suite.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/x/auth/client/testutil/suite.go b/x/auth/client/testutil/suite.go index f391499caeb9..c1d55c39cd35 100644 --- a/x/auth/client/testutil/suite.go +++ b/x/auth/client/testutil/suite.go @@ -981,7 +981,7 @@ func (s *IntegrationTestSuite) TestSignWithMultisig() { addr1, err := account1.GetAddress() s.Require().NoError(err) - // Create a multisig address that is not in the keyring. + // Create an address that is not in the keyring, will be used to simulate `--multisig` multisig := "cosmos1hd6fsrvnz6qkp87s3u86ludegq97agxsdkwzyh" multisigAddr, err := sdk.AccAddressFromBech32(multisig) s.Require().NoError(err) @@ -1004,7 +1004,10 @@ func (s *IntegrationTestSuite) TestSignWithMultisig() { // Save multi tx to file multiGeneratedTx2File := testutil.WriteToNewTempFile(s.T(), multisigTx.String()) - // Sign using multisig + // Sign using multisig. We're signing a tx on behalf of the multisig address, + // even though the tx signer is NOT the multisig address. This is fine though, + // as the main point of this test is to test the `--multisig` flag with an address + // that is not in the keyring. _, _ = TxSignExec(val1.ClientCtx, addr1, multiGeneratedTx2File.Name(), "--multisig", multisigAddr.String()) s.Require().NoError(err) } From eadf1625feff92c420dc9c20227433d5f18ec0ae Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Wed, 9 Mar 2022 15:01:39 +0530 Subject: [PATCH 15/15] check for err --- x/auth/client/testutil/suite.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/x/auth/client/testutil/suite.go b/x/auth/client/testutil/suite.go index c1d55c39cd35..8e5d25d652e7 100644 --- a/x/auth/client/testutil/suite.go +++ b/x/auth/client/testutil/suite.go @@ -1008,8 +1008,8 @@ func (s *IntegrationTestSuite) TestSignWithMultisig() { // even though the tx signer is NOT the multisig address. This is fine though, // as the main point of this test is to test the `--multisig` flag with an address // that is not in the keyring. - _, _ = TxSignExec(val1.ClientCtx, addr1, multiGeneratedTx2File.Name(), "--multisig", multisigAddr.String()) - s.Require().NoError(err) + _, err = TxSignExec(val1.ClientCtx, addr1, multiGeneratedTx2File.Name(), "--multisig", multisigAddr.String()) + s.Require().Contains(err.Error(), "tx intended signer does not match the given signer") } func (s *IntegrationTestSuite) TestCLIMultisign() {