From a32d5a46d7017154abc0f87ffcda228a4632efbd Mon Sep 17 00:00:00 2001 From: Alessio Treglia Date: Fri, 7 Jun 2019 14:21:35 +0100 Subject: [PATCH] Generalize auth/types.StdSignature (#4507) New Signature interface available in the top level types package. auth.StdSignature implements such interface. User defined auth module can now define their own custom signature types. Work carried out in the context of the following issues: - #4488 - #4487 --- .pending/breaking/sdk/4507-New-Signature-g | 3 +++ client/keys/import.go | 3 ++- client/keys/list.go | 3 ++- client/keys/mnemonic_test.go | 3 ++- client/keys/update.go | 3 ++- client/utils/utils_test.go | 8 +++---- contrib/runsim/main.go | 2 +- docs/spec/auth/03_types.md | 6 ++--- simapp/test_util.go | 3 ++- types/codec.go | 1 + types/coin_test.go | 3 ++- types/tx_msg.go | 8 +++++++ x/auth/alias.go | 1 + x/auth/ante.go | 21 ++++++++--------- x/auth/ante_test.go | 13 ++++++----- x/auth/client/cli/tx_multisign.go | 4 +++- x/auth/client/cli/tx_sign.go | 8 +++---- x/auth/genaccounts/genesis_state_test.go | 5 +++-- x/auth/types/codec.go | 1 + x/auth/types/stdtx.go | 26 ++++++++++++++++------ x/auth/types/stdtx_test.go | 14 ++++++++++-- x/auth/types/test_common.go | 12 +++++----- x/auth/types/txbuilder.go | 16 ++++++------- x/distribution/proposal_handler_test.go | 3 ++- x/genutil/genesis_state_test.go | 5 +++-- x/gov/types/keys_test.go | 3 ++- x/mock/app.go | 7 ++---- x/mock/app_test.go | 14 ++++++------ x/staking/exported/exported.go | 3 ++- 29 files changed, 124 insertions(+), 78 deletions(-) create mode 100644 .pending/breaking/sdk/4507-New-Signature-g diff --git a/.pending/breaking/sdk/4507-New-Signature-g b/.pending/breaking/sdk/4507-New-Signature-g new file mode 100644 index 000000000..80e1b83d1 --- /dev/null +++ b/.pending/breaking/sdk/4507-New-Signature-g @@ -0,0 +1,3 @@ +#4507 New `Signature` generic interface available in the top level types package. +`auth.StdSignature` implements such interface. User defined auth module can now +define their own custom signature types. diff --git a/client/keys/import.go b/client/keys/import.go index 433c703a6..944267fdc 100644 --- a/client/keys/import.go +++ b/client/keys/import.go @@ -3,8 +3,9 @@ package keys import ( "io/ioutil" - "github.com/cosmos/cosmos-sdk/client/input" "github.com/spf13/cobra" + + "github.com/cosmos/cosmos-sdk/client/input" ) func importKeyCommand() *cobra.Command { diff --git a/client/keys/list.go b/client/keys/list.go index 1600d345b..7edec8541 100644 --- a/client/keys/list.go +++ b/client/keys/list.go @@ -1,8 +1,9 @@ package keys import ( - "github.com/cosmos/cosmos-sdk/client/flags" "github.com/spf13/cobra" + + "github.com/cosmos/cosmos-sdk/client/flags" ) func listKeysCmd() *cobra.Command { diff --git a/client/keys/mnemonic_test.go b/client/keys/mnemonic_test.go index 617a2ecc7..62abef02c 100644 --- a/client/keys/mnemonic_test.go +++ b/client/keys/mnemonic_test.go @@ -5,9 +5,10 @@ import ( "strings" "testing" - "github.com/cosmos/cosmos-sdk/client/input" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + + "github.com/cosmos/cosmos-sdk/client/input" ) func Test_RunMnemonicCmdNormal(t *testing.T) { diff --git a/client/keys/update.go b/client/keys/update.go index 3e1160fe8..39131a3b4 100644 --- a/client/keys/update.go +++ b/client/keys/update.go @@ -3,8 +3,9 @@ package keys import ( "fmt" - "github.com/cosmos/cosmos-sdk/client/input" "github.com/spf13/cobra" + + "github.com/cosmos/cosmos-sdk/client/input" ) func updateKeyCommand() *cobra.Command { diff --git a/client/utils/utils_test.go b/client/utils/utils_test.go index 94df3e797..dd023510d 100644 --- a/client/utils/utils_test.go +++ b/client/utils/utils_test.go @@ -100,7 +100,7 @@ func TestReadStdTxFromFile(t *testing.T) { // Build a test transaction fee := authtypes.NewStdFee(50000, sdk.Coins{sdk.NewInt64Coin("atom", 150)}) - stdTx := authtypes.NewStdTx([]sdk.Msg{}, fee, []authtypes.StdSignature{}, "foomemo") + stdTx := authtypes.NewStdTx([]sdk.Msg{}, fee, nil, "foomemo") // Write it to the file encodedTx, _ := cdc.MarshalJSON(stdTx) @@ -143,8 +143,8 @@ func TestValidateCmd(t *testing.T) { }{ {"misspelled command", []string{"comission"}, true}, {"no command provided", []string{}, false}, - {"help flag", []string{"comission", "--help"}, false}, - {"shorthand help flag", []string{"comission", "-h"}, false}, + {"help flag", []string{"commission", "--help"}, false}, + {"shorthand help flag", []string{"commission", "-h"}, false}, } for _, tt := range tests { @@ -158,7 +158,7 @@ func TestValidateCmd(t *testing.T) { func compareEncoders(t *testing.T, expected sdk.TxEncoder, actual sdk.TxEncoder) { msgs := []sdk.Msg{sdk.NewTestMsg(addr)} - tx := authtypes.NewStdTx(msgs, authtypes.StdFee{}, []authtypes.StdSignature{}, "") + tx := authtypes.NewStdTx(msgs, authtypes.StdFee{}, []sdk.Signature{}, "") defaultEncoderBytes, err := expected(tx) require.NoError(t, err) diff --git a/contrib/runsim/main.go b/contrib/runsim/main.go index ba96c5cae..b54be8ba7 100644 --- a/contrib/runsim/main.go +++ b/contrib/runsim/main.go @@ -26,7 +26,7 @@ var ( 989182, 89182391, 11, 22, 44, 77, 99, 2020, 3232, 123123, 124124, 582582, 18931893, 29892989, 30123012, 47284728, 7601778, 8090485, - 977367484, 491163361, 424254581, 673398983, + 977367484, 491163361, 424254581, 673398983, } // goroutine-safe process map diff --git a/docs/spec/auth/03_types.md b/docs/spec/auth/03_types.md index 4d37c55c8..41ade660c 100644 --- a/docs/spec/auth/03_types.md +++ b/docs/spec/auth/03_types.md @@ -20,9 +20,9 @@ type StdFee struct { ## StdSignature -A `StdSignature` is the combination of an optional public key and a cryptographic signature -as a byte array. The SDK is agnostic to particular key or signature formats and supports any -supported by the `PubKey` interface. +`StdSignature` implements the `sdk.Signature` interface and consists of a combination of an +optional public key and a cryptographic signature as a byte slice. The SDK is agnostic to +particular key or signature formats and supports any supported by the `PubKey` interface. ```golang type StdSignature struct { diff --git a/simapp/test_util.go b/simapp/test_util.go index 8b79e757a..8337a1cc4 100644 --- a/simapp/test_util.go +++ b/simapp/test_util.go @@ -5,10 +5,11 @@ import ( "github.com/tendermint/tendermint/libs/log" + dbm "github.com/tendermint/tendermint/libs/db" + bam "github.com/cosmos/cosmos-sdk/baseapp" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/staking" - dbm "github.com/tendermint/tendermint/libs/db" ) // NewSimAppUNSAFE is used for debugging purposes only. diff --git a/types/codec.go b/types/codec.go index 3d789afe9..8606ef0ad 100644 --- a/types/codec.go +++ b/types/codec.go @@ -6,4 +6,5 @@ import "github.com/cosmos/cosmos-sdk/codec" func RegisterCodec(cdc *codec.Codec) { cdc.RegisterInterface((*Msg)(nil), nil) cdc.RegisterInterface((*Tx)(nil), nil) + cdc.RegisterInterface((*Signature)(nil), nil) } diff --git a/types/coin_test.go b/types/coin_test.go index 9d6177afe..7643b221c 100644 --- a/types/coin_test.go +++ b/types/coin_test.go @@ -4,9 +4,10 @@ import ( "strings" "testing" - "github.com/cosmos/cosmos-sdk/codec" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + + "github.com/cosmos/cosmos-sdk/codec" ) var ( diff --git a/types/tx_msg.go b/types/tx_msg.go index bc4c2540d..15a9ea587 100644 --- a/types/tx_msg.go +++ b/types/tx_msg.go @@ -2,6 +2,8 @@ package types import ( "encoding/json" + + "github.com/tendermint/tendermint/crypto" ) // Transactions messages must fulfill the Msg @@ -42,6 +44,12 @@ type Tx interface { //__________________________________________________________ +// Signature defines the properties of the signature payload. +type Signature interface { + GetPubKey() crypto.PubKey + GetSignature() []byte +} + // TxDecoder unmarshals transaction bytes type TxDecoder func(txBytes []byte) (Tx, Error) diff --git a/x/auth/alias.go b/x/auth/alias.go index 3c1fe15fd..5b0308752 100644 --- a/x/auth/alias.go +++ b/x/auth/alias.go @@ -46,6 +46,7 @@ var ( NewStdTx = types.NewStdTx CountSubKeys = types.CountSubKeys NewStdFee = types.NewStdFee + NewStdSignature = types.NewStdSignature StdSignBytes = types.StdSignBytes DefaultTxDecoder = types.DefaultTxDecoder DefaultTxEncoder = types.DefaultTxEncoder diff --git a/x/auth/ante.go b/x/auth/ante.go index 28a16821e..04a9f0b99 100644 --- a/x/auth/ante.go +++ b/x/auth/ante.go @@ -136,7 +136,8 @@ func NewAnteHandler(ak AccountKeeper, fck FeeCollectionKeeper, sigGasConsumer Si // check signature, return account with incremented nonce signBytes := GetSignBytes(newCtx.ChainID(), stdTx, signerAccs[i], isGenesis) - signerAccs[i], res = processSig(newCtx, signerAccs[i], stdSigs[i], signBytes, simulate, params, sigGasConsumer) + signerAccs[i], res = processSig(newCtx, signerAccs[i], stdSigs[i], signBytes, + simulate, params, sigGasConsumer) if !res.IsOK() { return newCtx, res, true } @@ -165,7 +166,7 @@ func ValidateSigCount(stdTx StdTx, params Params) sdk.Result { sigCount := 0 for i := 0; i < len(stdSigs); i++ { - sigCount += CountSubKeys(stdSigs[i].PubKey) + sigCount += CountSubKeys(stdSigs[i].GetPubKey()) if uint64(sigCount) > params.TxSigLimit { return sdk.ErrTooManySignatures( fmt.Sprintf("signatures: %d, limit: %d", sigCount, params.TxSigLimit), @@ -194,7 +195,7 @@ func ValidateMemo(stdTx StdTx, params Params) sdk.Result { // verify the signature and increment the sequence. If the account doesn't have // a pubkey, set it. func processSig( - ctx sdk.Context, acc Account, sig StdSignature, signBytes []byte, simulate bool, params Params, + ctx sdk.Context, acc Account, sig sdk.Signature, signBytes []byte, simulate bool, params Params, sigGasConsumer SignatureVerificationGasConsumer, ) (updatedAcc Account, res sdk.Result) { @@ -216,11 +217,11 @@ func processSig( consumeSimSigGas(ctx.GasMeter(), pubKey, sig, params) } - if res := sigGasConsumer(ctx.GasMeter(), sig.Signature, pubKey, params); !res.IsOK() { + if res := sigGasConsumer(ctx.GasMeter(), sig.GetSignature(), pubKey, params); !res.IsOK() { return nil, res } - if !simulate && !pubKey.VerifyBytes(signBytes, sig.Signature) { + if !simulate && !pubKey.VerifyBytes(signBytes, sig.GetSignature()) { return nil, sdk.ErrUnauthorized("signature verification failed; verify correct account sequence and chain-id").Result() } @@ -231,9 +232,9 @@ func processSig( return acc, res } -func consumeSimSigGas(gasmeter sdk.GasMeter, pubkey crypto.PubKey, sig StdSignature, params Params) { - simSig := StdSignature{PubKey: pubkey} - if len(sig.Signature) == 0 { +func consumeSimSigGas(gasmeter sdk.GasMeter, pubkey crypto.PubKey, sig sdk.Signature, params Params) { + simSig := NewStdSignature(pubkey, nil) + if len(sig.GetSignature()) == 0 { simSig.Signature = simSecp256k1Sig[:] } @@ -252,7 +253,7 @@ func consumeSimSigGas(gasmeter sdk.GasMeter, pubkey crypto.PubKey, sig StdSignat // ProcessPubKey verifies that the given account address matches that of the // StdSignature. In addition, it will set the public key of the account if it // has not been set. -func ProcessPubKey(acc Account, sig StdSignature, simulate bool) (crypto.PubKey, sdk.Result) { +func ProcessPubKey(acc Account, sig sdk.Signature, simulate bool) (crypto.PubKey, sdk.Result) { // If pubkey is not known for account, set it from the StdSignature. pubKey := acc.GetPubKey() if simulate { @@ -268,7 +269,7 @@ func ProcessPubKey(acc Account, sig StdSignature, simulate bool) (crypto.PubKey, } if pubKey == nil { - pubKey = sig.PubKey + pubKey = sig.GetPubKey() if pubKey == nil { return nil, sdk.ErrInvalidPubKey("PubKey not found").Result() } diff --git a/x/auth/ante_test.go b/x/auth/ante_test.go index f0c312514..3fe0d4f06 100644 --- a/x/auth/ante_test.go +++ b/x/auth/ante_test.go @@ -515,7 +515,8 @@ func TestAnteHandlerSetPubKey(t *testing.T) { msgs = []sdk.Msg{msg} tx = NewTestTx(ctx, msgs, privs, []uint64{1}, seqs, fee) sigs := tx.(types.StdTx).GetSignatures() - sigs[0].PubKey = nil + sig := sigs[0].(StdSignature) + sig.PubKey = nil checkInvalidTx(t, anteHandler, ctx, tx, false, sdk.CodeInvalidPubKey) acc2 = input.ak.GetAccount(ctx, addr2) @@ -551,11 +552,11 @@ func TestProcessPubKey(t *testing.T) { args args wantErr bool }{ - {"no sigs, simulate off", args{acc1, StdSignature{}, false}, true}, - {"no sigs, simulate on", args{acc1, StdSignature{}, true}, false}, - {"no sigs, account with pub, simulate on", args{acc2, StdSignature{}, true}, false}, - {"pubkey doesn't match addr, simulate off", args{acc1, StdSignature{PubKey: priv2.PubKey()}, false}, true}, - {"pubkey doesn't match addr, simulate on", args{acc1, StdSignature{PubKey: priv2.PubKey()}, true}, false}, + {"no sigs, simulate off", args{acc1, NewStdSignature(nil, nil), false}, true}, + {"no sigs, simulate on", args{acc1, NewStdSignature(nil, nil), true}, false}, + {"no sigs, account with pub, simulate on", args{acc2, NewStdSignature(nil, nil), true}, false}, + {"pubkey doesn't match addr, simulate off", args{acc1, NewStdSignature(priv2.PubKey(), nil), false}, true}, + {"pubkey doesn't match addr, simulate on", args{acc1, NewStdSignature(priv2.PubKey(), nil), true}, false}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { diff --git a/x/auth/client/cli/tx_multisign.go b/x/auth/client/cli/tx_multisign.go index c1a88a6a0..6505811d5 100644 --- a/x/auth/client/cli/tx_multisign.go +++ b/x/auth/client/cli/tx_multisign.go @@ -18,6 +18,7 @@ import ( "github.com/cosmos/cosmos-sdk/client/utils" "github.com/cosmos/cosmos-sdk/codec" crkeys "github.com/cosmos/cosmos-sdk/crypto/keys" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/version" "github.com/cosmos/cosmos-sdk/x/auth/types" ) @@ -119,7 +120,8 @@ func makeMultiSignCmd(cdc *codec.Codec) func(cmd *cobra.Command, args []string) } newStdSig := types.StdSignature{Signature: cdc.MustMarshalBinaryBare(multisigSig), PubKey: multisigPub} - newTx := types.NewStdTx(stdTx.GetMsgs(), stdTx.Fee, []types.StdSignature{newStdSig}, stdTx.GetMemo()) + newTx := types.NewStdTx(stdTx.GetMsgs(), stdTx.Fee, []sdk.Signature{newStdSig}, + stdTx.GetMemo()) sigOnly := viper.GetBool(flagSigOnly) var json []byte diff --git a/x/auth/client/cli/tx_sign.go b/x/auth/client/cli/tx_sign.go index f7be33501..f3c701e49 100644 --- a/x/auth/client/cli/tx_sign.go +++ b/x/auth/client/cli/tx_sign.go @@ -206,7 +206,7 @@ func printAndValidateSigs( } for i, sig := range sigs { - sigAddr := sdk.AccAddress(sig.Address()) + sigAddr := sdk.AccAddress(sig.GetPubKey().Address()) sigSanity := "OK" var ( @@ -233,16 +233,16 @@ func printAndValidateSigs( stdTx.Fee, stdTx.GetMsgs(), stdTx.GetMemo(), ) - if ok := sig.VerifyBytes(sigBytes, sig.Signature); !ok { + if ok := sig.GetPubKey().VerifyBytes(sigBytes, sig.GetSignature()); !ok { sigSanity = "ERROR: signature invalid" success = false } } - multiPK, ok := sig.PubKey.(multisig.PubKeyMultisigThreshold) + multiPK, ok := sig.GetPubKey().(multisig.PubKeyMultisigThreshold) if ok { var multiSig multisig.Multisignature - cliCtx.Codec.MustUnmarshalBinaryBare(sig.Signature, &multiSig) + cliCtx.Codec.MustUnmarshalBinaryBare(sig.GetSignature(), &multiSig) var b strings.Builder b.WriteString("\n MultiSig Signatures:\n") diff --git a/x/auth/genaccounts/genesis_state_test.go b/x/auth/genaccounts/genesis_state_test.go index 4977fab37..bca4fbcc3 100644 --- a/x/auth/genaccounts/genesis_state_test.go +++ b/x/auth/genaccounts/genesis_state_test.go @@ -3,10 +3,11 @@ package genaccounts import ( "testing" - sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/x/auth" "github.com/stretchr/testify/require" "github.com/tendermint/tendermint/crypto/ed25519" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/x/auth" ) func TestSanitize(t *testing.T) { diff --git a/x/auth/types/codec.go b/x/auth/types/codec.go index 296c2b148..de917de6e 100644 --- a/x/auth/types/codec.go +++ b/x/auth/types/codec.go @@ -13,6 +13,7 @@ func RegisterCodec(cdc *codec.Codec) { cdc.RegisterConcrete(&ContinuousVestingAccount{}, "auth/ContinuousVestingAccount", nil) cdc.RegisterConcrete(&DelayedVestingAccount{}, "auth/DelayedVestingAccount", nil) cdc.RegisterConcrete(StdTx{}, "auth/StdTx", nil) + cdc.RegisterConcrete(StdSignature{}, "auth/StdSignature", nil) } // RegisterBaseAccount most users shouldn't use this, but this comes in handy for tests. diff --git a/x/auth/types/stdtx.go b/x/auth/types/stdtx.go index 18cdfaf0a..b57752220 100644 --- a/x/auth/types/stdtx.go +++ b/x/auth/types/stdtx.go @@ -12,7 +12,8 @@ import ( ) var ( - _ sdk.Tx = (*StdTx)(nil) + _ sdk.Tx = (*StdTx)(nil) + _ sdk.Signature = (*StdSignature)(nil) maxGasWanted = uint64((1 << 63) - 1) ) @@ -20,13 +21,13 @@ var ( // StdTx is a standard way to wrap a Msg with Fee and Signatures. // NOTE: the first signature is the fee payer (Signatures must not be nil). type StdTx struct { - Msgs []sdk.Msg `json:"msg"` - Fee StdFee `json:"fee"` - Signatures []StdSignature `json:"signatures"` - Memo string `json:"memo"` + Msgs []sdk.Msg `json:"msg"` + Fee StdFee `json:"fee"` + Signatures []sdk.Signature `json:"signatures"` + Memo string `json:"memo"` } -func NewStdTx(msgs []sdk.Msg, fee StdFee, sigs []StdSignature, memo string) StdTx { +func NewStdTx(msgs []sdk.Msg, fee StdFee, sigs []sdk.Signature, memo string) StdTx { return StdTx{ Msgs: msgs, Fee: fee, @@ -104,7 +105,7 @@ func (tx StdTx) GetMemo() string { return tx.Memo } // CONTRACT: If the signature is missing (ie the Msg is // invalid), then the corresponding signature is // .Empty(). -func (tx StdTx) GetSignatures() []StdSignature { return tx.Signatures } +func (tx StdTx) GetSignatures() []sdk.Signature { return tx.Signatures } //__________________________________________________________ @@ -191,6 +192,17 @@ type StdSignature struct { Signature []byte `json:"signature"` } +// NewStdSignature constructs a new StdSignature instance. +func NewStdSignature(pubKey crypto.PubKey, signature []byte) StdSignature { + return StdSignature{PubKey: pubKey, Signature: signature} +} + +// GetPubKey returns the embedded crypto.PubKey type. +func (sig StdSignature) GetPubKey() crypto.PubKey { return sig.PubKey } + +// GetSignature returns the embedded byte signature. +func (sig StdSignature) GetSignature() []byte { return sig.Signature } + // DefaultTxDecoder logic for standard transaction decoding func DefaultTxDecoder(cdc *codec.Codec) sdk.TxDecoder { return func(txBytes []byte) (sdk.Tx, sdk.Error) { diff --git a/x/auth/types/stdtx_test.go b/x/auth/types/stdtx_test.go index d6315d5fb..270788215 100644 --- a/x/auth/types/stdtx_test.go +++ b/x/auth/types/stdtx_test.go @@ -1,10 +1,12 @@ package types import ( + "bytes" "fmt" "testing" "github.com/stretchr/testify/require" + abci "github.com/tendermint/tendermint/abci/types" "github.com/tendermint/tendermint/crypto" "github.com/tendermint/tendermint/crypto/ed25519" @@ -22,7 +24,7 @@ var ( func TestStdTx(t *testing.T) { msgs := []sdk.Msg{sdk.NewTestMsg(addr)} fee := NewTestStdFee() - sigs := []StdSignature{} + sigs := []sdk.Signature{} tx := NewStdTx(msgs, fee, sigs, "") require.Equal(t, msgs, tx.GetMsgs()) @@ -121,7 +123,7 @@ func TestDefaultTxEncoder(t *testing.T) { msgs := []sdk.Msg{sdk.NewTestMsg(addr)} fee := NewTestStdFee() - sigs := []StdSignature{} + sigs := []sdk.Signature{} tx := NewStdTx(msgs, fee, sigs, "") @@ -133,3 +135,11 @@ func TestDefaultTxEncoder(t *testing.T) { require.NoError(t, err) require.Equal(t, cdcBytes, encoderBytes) } + +func TestNewStdSignature(t *testing.T) { + pub := ed25519.GenPrivKey().PubKey() + sigBytes := []byte("data") + got := NewStdSignature(pub, sigBytes) + require.True(t, bytes.Equal(got.GetSignature(), sigBytes)) + require.True(t, got.GetPubKey().Equals(pub)) +} diff --git a/x/auth/types/test_common.go b/x/auth/types/test_common.go index c6f4d26b1..8b12d3055 100644 --- a/x/auth/types/test_common.go +++ b/x/auth/types/test_common.go @@ -70,7 +70,7 @@ func KeyTestPubAddr() (crypto.PrivKey, crypto.PubKey, sdk.AccAddress) { } func NewTestTx(ctx sdk.Context, msgs []sdk.Msg, privs []crypto.PrivKey, accNums []uint64, seqs []uint64, fee StdFee) sdk.Tx { - sigs := make([]StdSignature, len(privs)) + sigs := make([]sdk.Signature, len(privs)) for i, priv := range privs { signBytes := StdSignBytes(ctx.ChainID(), accNums[i], seqs[i], fee, msgs, "") @@ -79,7 +79,7 @@ func NewTestTx(ctx sdk.Context, msgs []sdk.Msg, privs []crypto.PrivKey, accNums panic(err) } - sigs[i] = StdSignature{PubKey: priv.PubKey(), Signature: sig} + sigs[i] = NewStdSignature(priv.PubKey(), sig) } tx := NewStdTx(msgs, fee, sigs, "") @@ -87,7 +87,7 @@ func NewTestTx(ctx sdk.Context, msgs []sdk.Msg, privs []crypto.PrivKey, accNums } func NewTestTxWithMemo(ctx sdk.Context, msgs []sdk.Msg, privs []crypto.PrivKey, accNums []uint64, seqs []uint64, fee StdFee, memo string) sdk.Tx { - sigs := make([]StdSignature, len(privs)) + sigs := make([]sdk.Signature, len(privs)) for i, priv := range privs { signBytes := StdSignBytes(ctx.ChainID(), accNums[i], seqs[i], fee, msgs, memo) @@ -96,7 +96,7 @@ func NewTestTxWithMemo(ctx sdk.Context, msgs []sdk.Msg, privs []crypto.PrivKey, panic(err) } - sigs[i] = StdSignature{PubKey: priv.PubKey(), Signature: sig} + sigs[i] = NewStdSignature(priv.PubKey(), sig) } tx := NewStdTx(msgs, fee, sigs, memo) @@ -104,14 +104,14 @@ func NewTestTxWithMemo(ctx sdk.Context, msgs []sdk.Msg, privs []crypto.PrivKey, } func NewTestTxWithSignBytes(msgs []sdk.Msg, privs []crypto.PrivKey, accNums []uint64, seqs []uint64, fee StdFee, signBytes []byte, memo string) sdk.Tx { - sigs := make([]StdSignature, len(privs)) + sigs := make([]sdk.Signature, len(privs)) for i, priv := range privs { sig, err := priv.Sign(signBytes) if err != nil { panic(err) } - sigs[i] = StdSignature{PubKey: priv.PubKey(), Signature: sig} + sigs[i] = NewStdSignature(priv.PubKey(), sig) } tx := NewStdTx(msgs, fee, sigs, memo) diff --git a/x/auth/types/txbuilder.go b/x/auth/types/txbuilder.go index b29d977fd..c9375c431 100644 --- a/x/auth/types/txbuilder.go +++ b/x/auth/types/txbuilder.go @@ -214,7 +214,7 @@ func (bldr TxBuilder) Sign(name, passphrase string, msg StdSignMsg) ([]byte, err return nil, err } - return bldr.txEncoder(NewStdTx(msg.Msgs, msg.Fee, []StdSignature{sig}, msg.Memo)) + return bldr.txEncoder(NewStdTx(msg.Msgs, msg.Fee, []sdk.Signature{sig}, msg.Memo)) } // BuildAndSign builds a single message to be signed, and signs a transaction @@ -237,7 +237,7 @@ func (bldr TxBuilder) BuildTxForSim(msgs []sdk.Msg) ([]byte, error) { } // the ante handler will populate with a sentinel pubkey - sigs := []StdSignature{{}} + sigs := []sdk.Signature{NewStdSignature(nil, nil)} return bldr.txEncoder(NewStdTx(signMsg.Msgs, signMsg.Fee, sigs, signMsg.Memo)) } @@ -262,7 +262,7 @@ func (bldr TxBuilder) SignStdTx(name, passphrase string, stdTx StdTx, appendSig sigs := stdTx.GetSignatures() if len(sigs) == 0 || !appendSig { - sigs = []StdSignature{stdSignature} + sigs = []sdk.Signature{stdSignature} } else { sigs = append(sigs, stdSignature) } @@ -271,8 +271,8 @@ func (bldr TxBuilder) SignStdTx(name, passphrase string, stdTx StdTx, appendSig } // MakeSignature builds a StdSignature given keybase, key name, passphrase, and a StdSignMsg. -func MakeSignature(keybase crkeys.Keybase, name, passphrase string, - msg StdSignMsg) (sig StdSignature, err error) { +func MakeSignature(keybase crkeys.Keybase, name, + passphrase string, msg StdSignMsg) (sig sdk.Signature, err error) { if keybase == nil { keybase, err = keys.NewKeyBaseFromHomeFlag() if err != nil { @@ -284,8 +284,6 @@ func MakeSignature(keybase crkeys.Keybase, name, passphrase string, if err != nil { return } - return StdSignature{ - PubKey: pubkey, - Signature: sigBytes, - }, nil + + return NewStdSignature(pubkey, sigBytes), nil } diff --git a/x/distribution/proposal_handler_test.go b/x/distribution/proposal_handler_test.go index 8d26753dc..9551e2bc9 100644 --- a/x/distribution/proposal_handler_test.go +++ b/x/distribution/proposal_handler_test.go @@ -5,9 +5,10 @@ import ( "github.com/tendermint/tendermint/crypto/ed25519" + "github.com/stretchr/testify/require" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/distribution/types" - "github.com/stretchr/testify/require" ) var ( diff --git a/x/genutil/genesis_state_test.go b/x/genutil/genesis_state_test.go index c835de44c..78175f214 100644 --- a/x/genutil/genesis_state_test.go +++ b/x/genutil/genesis_state_test.go @@ -3,11 +3,12 @@ package genutil import ( "testing" + "github.com/stretchr/testify/require" + "github.com/tendermint/tendermint/crypto/ed25519" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/auth" "github.com/cosmos/cosmos-sdk/x/staking" - "github.com/stretchr/testify/require" - "github.com/tendermint/tendermint/crypto/ed25519" ) var ( diff --git a/x/gov/types/keys_test.go b/x/gov/types/keys_test.go index 93434d457..80d77c660 100644 --- a/x/gov/types/keys_test.go +++ b/x/gov/types/keys_test.go @@ -4,9 +4,10 @@ import ( "testing" "time" - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" "github.com/tendermint/tendermint/crypto/ed25519" + + sdk "github.com/cosmos/cosmos-sdk/types" ) var addr = sdk.AccAddress(ed25519.GenPrivKey().PubKey().Address()) diff --git a/x/mock/app.go b/x/mock/app.go index 75deed6a5..3f36c3f2a 100644 --- a/x/mock/app.go +++ b/x/mock/app.go @@ -217,7 +217,7 @@ func GenTx(msgs []sdk.Msg, accnums []uint64, seq []uint64, priv ...crypto.PrivKe Gas: 100000, } - sigs := make([]auth.StdSignature, len(priv)) + sigs := make([]sdk.Signature, len(priv)) memo := "testmemotestmemo" for i, p := range priv { @@ -226,10 +226,7 @@ func GenTx(msgs []sdk.Msg, accnums []uint64, seq []uint64, priv ...crypto.PrivKe panic(err) } - sigs[i] = auth.StdSignature{ - PubKey: p.PubKey(), - Signature: sig, - } + sigs[i] = auth.NewStdSignature(p.PubKey(), sig) } return auth.NewStdTx(msgs, fee, sigs, memo) diff --git a/x/mock/app_test.go b/x/mock/app_test.go index 7a2b6adfd..91d9e3406 100644 --- a/x/mock/app_test.go +++ b/x/mock/app_test.go @@ -24,13 +24,13 @@ type testMsg struct { positiveNum int64 } -func (tx testMsg) Route() string { return msgRoute } -func (tx testMsg) Type() string { return "test" } -func (tx testMsg) GetMsg() sdk.Msg { return tx } -func (tx testMsg) GetMemo() string { return "" } -func (tx testMsg) GetSignBytes() []byte { return nil } -func (tx testMsg) GetSigners() []sdk.AccAddress { return tx.signers } -func (tx testMsg) GetSignatures() []auth.StdSignature { return nil } +func (tx testMsg) Route() string { return msgRoute } +func (tx testMsg) Type() string { return "test" } +func (tx testMsg) GetMsg() sdk.Msg { return tx } +func (tx testMsg) GetMemo() string { return "" } +func (tx testMsg) GetSignBytes() []byte { return nil } +func (tx testMsg) GetSigners() []sdk.AccAddress { return tx.signers } +func (tx testMsg) GetSignatures() []sdk.Signature { return nil } func (tx testMsg) ValidateBasic() sdk.Error { if tx.positiveNum >= 0 { return nil diff --git a/x/staking/exported/exported.go b/x/staking/exported/exported.go index 496fda5a5..121bf20a0 100644 --- a/x/staking/exported/exported.go +++ b/x/staking/exported/exported.go @@ -1,8 +1,9 @@ package exported import ( - sdk "github.com/cosmos/cosmos-sdk/types" "github.com/tendermint/tendermint/crypto" + + sdk "github.com/cosmos/cosmos-sdk/types" ) // DelegationI delegation bond for a delegated proof of stake system