refactor!: simplify signing packages (backport #23470) (#23475)

Co-authored-by: Julien Robert <julien@rbrt.fr>
This commit is contained in:
mergify[bot] 2025-01-22 13:02:05 +01:00 committed by GitHub
parent 9c528d5061
commit bc49a8e7fd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
58 changed files with 389 additions and 400 deletions

View File

@ -52,6 +52,10 @@ Every module contains its own CHANGELOG.md. Please refer to the module you are i
### Improvements
* [#23470](https://github.com/cosmos/cosmos-sdk/pull/23470) Converge to use of one single sign mode type and signer data:
* Use api's signmode throughout the SDK to align with `cosmossdk.io/tx`. This allows developer not to juggle between sign mode types
* Deprecate `authsigning.SignerData` in favor of txsigning.SignerData and replace its usage
* Move helpers to go from one sign mode enum to another to `types/signing` instead of `x/auth/signing` (less dependency on `x`)
* (all) [#23445](https://github.com/cosmos/cosmos-sdk/pull/23445) Remove `v2` code from codebase.
* (codec) [#22988](https://github.com/cosmos/cosmos-sdk/pull/22988) Improve edge case handling for recursion limits.
* (proto) [#23437](https://github.com/cosmos/cosmos-sdk/pull/23437) Deprecate `Block` field from `GetBlockByHeightResponse` and return empty comet block for `GetBlockByHeight`.

View File

@ -6,10 +6,12 @@ import (
abci "github.com/cometbft/cometbft/api/cometbft/abci/v1"
"github.com/stretchr/testify/require"
"google.golang.org/protobuf/types/known/anypb"
coretesting "cosmossdk.io/core/testing"
"cosmossdk.io/depinject"
"cosmossdk.io/log"
txsigning "cosmossdk.io/x/tx/signing"
"github.com/cosmos/cosmos-sdk/client/tx"
"github.com/cosmos/cosmos-sdk/codec"
@ -17,7 +19,6 @@ import (
"github.com/cosmos/cosmos-sdk/runtime"
"github.com/cosmos/cosmos-sdk/testutil/testdata"
"github.com/cosmos/cosmos-sdk/types/tx/signing"
authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing"
authtx "github.com/cosmos/cosmos-sdk/x/auth/tx"
)
@ -143,9 +144,6 @@ func TestMsgService(t *testing.T) {
// set the TxDecoder in the BaseApp for minimal tx simulations
app.SetTxDecoder(txConfig.TxDecoder())
defaultSignMode, err := authsigning.APISignModeToInternal(txConfig.SignModeHandler().DefaultMode())
require.NoError(t, err)
testdata.RegisterInterfaces(interfaceRegistry)
testdata.RegisterMsgServer(
app.MsgServiceRouter(),
@ -173,7 +171,7 @@ func TestMsgService(t *testing.T) {
sigV2 := signing.SignatureV2{
PubKey: priv.PubKey(),
Data: &signing.SingleSignatureData{
SignMode: defaultSignMode,
SignMode: txConfig.SignModeHandler().DefaultMode(),
Signature: nil,
},
Sequence: 0,
@ -183,14 +181,20 @@ func TestMsgService(t *testing.T) {
require.NoError(t, err)
// Second round: all signer infos are set, so each signer can sign.
signerData := authsigning.SignerData{
anyPk, err := codectypes.NewAnyWithValue(priv.PubKey())
require.NoError(t, err)
signerData := txsigning.SignerData{
ChainID: "test",
AccountNumber: 0,
Sequence: 0,
PubKey: priv.PubKey(),
PubKey: &anypb.Any{
TypeUrl: anyPk.TypeUrl,
Value: anyPk.Value,
},
}
sigV2, err = tx.SignWithPrivKey(
context.TODO(), defaultSignMode, signerData,
context.TODO(), txConfig.SignModeHandler().DefaultMode(), signerData,
txBuilder, priv, txConfig, 0)
require.NoError(t, err)
err = txBuilder.SetSignatures(sigV2)

View File

@ -8,6 +8,7 @@ import (
"google.golang.org/protobuf/types/known/anypb"
"google.golang.org/protobuf/types/known/timestamppb"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
txv1beta1 "cosmossdk.io/api/cosmos/tx/v1beta1"
txsigning "cosmossdk.io/x/tx/signing"
"cosmossdk.io/x/tx/signing/aminojson"
@ -127,15 +128,15 @@ func (b *AuxTxBuilder) SetPubKey(pk cryptotypes.PubKey) error {
// SetSignMode sets the aux signer's sign mode. Allowed sign modes are
// DIRECT_AUX and LEGACY_AMINO_JSON.
func (b *AuxTxBuilder) SetSignMode(mode signing.SignMode) error {
func (b *AuxTxBuilder) SetSignMode(mode apisigning.SignMode) error {
switch mode {
case signing.SignMode_SIGN_MODE_DIRECT_AUX, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON:
case apisigning.SignMode_SIGN_MODE_DIRECT_AUX, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON:
default:
return sdkerrors.ErrInvalidRequest.Wrapf("AuxTxBuilder can only sign with %s or %s",
signing.SignMode_SIGN_MODE_DIRECT_AUX, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
apisigning.SignMode_SIGN_MODE_DIRECT_AUX, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
}
b.auxSignerData.Mode = mode
b.auxSignerData.Mode, _ = signing.APISignModeToInternal(mode)
return nil
}

View File

@ -5,6 +5,8 @@ import (
"github.com/stretchr/testify/require"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
"github.com/cosmos/cosmos-sdk/client/tx"
"github.com/cosmos/cosmos-sdk/codec"
"github.com/cosmos/cosmos-sdk/codec/testutil"
@ -53,7 +55,7 @@ func TestAuxTxBuilder(t *testing.T) {
{
"cannot set SIGN_MODE_DIRECT",
func() error {
return b.SetSignMode(signing.SignMode_SIGN_MODE_DIRECT)
return b.SetSignMode(apisigning.SignMode_SIGN_MODE_DIRECT)
},
true, "AuxTxBuilder can only sign with SIGN_MODE_DIRECT_AUX or SIGN_MODE_LEGACY_AMINO_JSON",
},
@ -105,7 +107,7 @@ func TestAuxTxBuilder(t *testing.T) {
func() error {
require.NoError(t, b.SetMsgs(msg1))
require.NoError(t, b.SetPubKey(pub1))
require.NoError(t, b.SetSignMode(signing.SignMode_SIGN_MODE_DIRECT_AUX))
require.NoError(t, b.SetSignMode(apisigning.SignMode_SIGN_MODE_DIRECT_AUX))
_, err := b.GetSignBytes()
return err
@ -117,7 +119,7 @@ func TestAuxTxBuilder(t *testing.T) {
func() error {
require.NoError(t, b.SetMsgs(msg1))
require.NoError(t, b.SetPubKey(pub1))
require.NoError(t, b.SetSignMode(signing.SignMode_SIGN_MODE_DIRECT_AUX))
require.NoError(t, b.SetSignMode(apisigning.SignMode_SIGN_MODE_DIRECT_AUX))
_, err := b.GetSignBytes()
require.NoError(t, err)
@ -133,7 +135,7 @@ func TestAuxTxBuilder(t *testing.T) {
require.NoError(t, b.SetMsgs(msg1))
require.NoError(t, b.SetPubKey(pub1))
b.SetAddress(addr1Str)
require.NoError(t, b.SetSignMode(signing.SignMode_SIGN_MODE_DIRECT_AUX))
require.NoError(t, b.SetSignMode(apisigning.SignMode_SIGN_MODE_DIRECT_AUX))
_, err := b.GetSignBytes()
require.NoError(t, err)
@ -154,7 +156,7 @@ func TestAuxTxBuilder(t *testing.T) {
require.NoError(t, b.SetMsgs(msg1))
require.NoError(t, b.SetPubKey(pub1))
b.SetAddress(addr1Str)
err := b.SetSignMode(signing.SignMode_SIGN_MODE_DIRECT_AUX)
err := b.SetSignMode(apisigning.SignMode_SIGN_MODE_DIRECT_AUX)
require.NoError(t, err)
_, err = b.GetSignBytes()
@ -164,7 +166,7 @@ func TestAuxTxBuilder(t *testing.T) {
auxSignerData, err := b.GetAuxSignerData()
// Make sure auxSignerData is correctly populated
checkCorrectData(t, cdc, auxSignerData, signing.SignMode_SIGN_MODE_DIRECT_AUX)
checkCorrectData(t, cdc, auxSignerData, apisigning.SignMode_SIGN_MODE_DIRECT_AUX)
return err
},
@ -176,7 +178,7 @@ func TestAuxTxBuilder(t *testing.T) {
require.NoError(t, b.SetMsgs(msg1))
require.NoError(t, b.SetPubKey(pub1))
b.SetAddress(addr1Str)
err := b.SetSignMode(signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
err := b.SetSignMode(apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
require.NoError(t, err)
_, err = b.GetSignBytes()
@ -195,7 +197,7 @@ func TestAuxTxBuilder(t *testing.T) {
require.NoError(t, b.SetMsgs(msg1))
require.NoError(t, b.SetPubKey(pub1))
b.SetAddress(addr1Str)
err := b.SetSignMode(signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
err := b.SetSignMode(apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
require.NoError(t, err)
_, err = b.GetSignBytes()
@ -205,7 +207,7 @@ func TestAuxTxBuilder(t *testing.T) {
auxSignerData, err := b.GetAuxSignerData()
// Make sure auxSignerData is correctly populated
checkCorrectData(t, cdc, auxSignerData, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
checkCorrectData(t, cdc, auxSignerData, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
return err
},
@ -229,7 +231,7 @@ func TestAuxTxBuilder(t *testing.T) {
}
// checkCorrectData that the auxSignerData's content matches the inputs we gave.
func checkCorrectData(t *testing.T, cdc codec.Codec, auxSignerData typestx.AuxSignerData, signMode signing.SignMode) {
func checkCorrectData(t *testing.T, cdc codec.Codec, auxSignerData typestx.AuxSignerData, signMode apisigning.SignMode) {
t.Helper()
pkAny, err := codectypes.NewAnyWithValue(pub1)
require.NoError(t, err)
@ -247,6 +249,7 @@ func checkCorrectData(t *testing.T, cdc codec.Codec, auxSignerData typestx.AuxSi
require.Equal(t, chainID, auxSignerData.SignDoc.ChainId)
require.Equal(t, msgAny, body.GetMessages()[0])
require.Equal(t, pkAny, auxSignerData.SignDoc.PublicKey)
require.Equal(t, signMode, auxSignerData.Mode)
m, _ := signing.InternalSignModeToAPI(auxSignerData.Mode)
require.Equal(t, signMode, m)
require.Equal(t, rawSig, auxSignerData.Sig)
}

View File

@ -11,6 +11,7 @@ import (
"github.com/cosmos/go-bip39"
"github.com/spf13/pflag"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
"cosmossdk.io/math"
"github.com/cosmos/cosmos-sdk/client"
@ -47,7 +48,7 @@ type Factory struct {
feePayer sdk.AccAddress
gasPrices sdk.DecCoins
extOptions []*codectypes.Any
signMode signing.SignMode
signMode apisigning.SignMode
simulateAndExecute bool
preprocessTxHook client.PreprocessTxFn
}
@ -62,18 +63,18 @@ func NewFactoryCLI(clientCtx client.Context, flagSet *pflag.FlagSet) (Factory, e
return Factory{}, fmt.Errorf("failed to bind flags to viper: %w", err)
}
signMode := signing.SignMode_SIGN_MODE_UNSPECIFIED
signMode := apisigning.SignMode_SIGN_MODE_UNSPECIFIED
switch clientCtx.SignModeStr {
case flags.SignModeDirect:
signMode = signing.SignMode_SIGN_MODE_DIRECT
signMode = apisigning.SignMode_SIGN_MODE_DIRECT
case flags.SignModeLegacyAminoJSON:
signMode = signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON
signMode = apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON
case flags.SignModeDirectAux:
signMode = signing.SignMode_SIGN_MODE_DIRECT_AUX
signMode = apisigning.SignMode_SIGN_MODE_DIRECT_AUX
case flags.SignModeTextual:
signMode = signing.SignMode_SIGN_MODE_TEXTUAL
signMode = apisigning.SignMode_SIGN_MODE_TEXTUAL
case flags.SignModeEIP191:
signMode = signing.SignMode_SIGN_MODE_EIP_191
signMode = apisigning.SignMode_SIGN_MODE_EIP_191 //nolint:staticcheck // We still need to check if it was called
}
var accNum, accSeq uint64
@ -237,12 +238,12 @@ func (f Factory) WithSimulateAndExecute(sim bool) Factory {
}
// SignMode returns the sign mode configured in the Factory
func (f Factory) SignMode() signing.SignMode {
func (f Factory) SignMode() apisigning.SignMode {
return f.signMode
}
// WithSignMode returns a copy of the Factory with an updated sign mode value.
func (f Factory) WithSignMode(mode signing.SignMode) Factory {
func (f Factory) WithSignMode(mode apisigning.SignMode) Factory {
f.signMode = mode
return f
}

View File

@ -10,9 +10,14 @@ import (
gogogrpc "github.com/cosmos/gogoproto/grpc"
"github.com/spf13/pflag"
"google.golang.org/protobuf/types/known/anypb"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
txsigning "cosmossdk.io/x/tx/signing"
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/client/input"
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
@ -168,7 +173,7 @@ func CalculateGas(
// corresponding SignatureV2 if the signing is successful.
func SignWithPrivKey(
ctx context.Context,
signMode signing.SignMode, signerData authsigning.SignerData,
signMode apisigning.SignMode, signerData txsigning.SignerData,
txBuilder client.TxBuilder, priv cryptotypes.PrivKey, txConfig client.TxConfig,
accSeq uint64,
) (signing.SignatureV2, error) {
@ -206,7 +211,7 @@ func SignWithPrivKey(
func countDirectSigners(data signing.SignatureData) int {
switch data := data.(type) {
case *signing.SingleSignatureData:
if data.SignMode == signing.SignMode_SIGN_MODE_DIRECT {
if data.SignMode == apisigning.SignMode_SIGN_MODE_DIRECT {
return 1
}
@ -254,12 +259,9 @@ func Sign(ctx client.Context, txf Factory, name string, txBuilder client.TxBuild
var err error
signMode := txf.signMode
if signMode == signing.SignMode_SIGN_MODE_UNSPECIFIED {
if signMode == apisigning.SignMode_SIGN_MODE_UNSPECIFIED {
// use the SignModeHandler's default mode if unspecified
signMode, err = authsigning.APISignModeToInternal(txf.txConfig.SignModeHandler().DefaultMode())
if err != nil {
return err
}
signMode = txf.txConfig.SignModeHandler().DefaultMode()
}
k, err := txf.keybase.Key(name)
@ -277,12 +279,17 @@ func Sign(ctx client.Context, txf Factory, name string, txBuilder client.TxBuild
return err
}
signerData := authsigning.SignerData{
anyPk, err := codectypes.NewAnyWithValue(pubKey)
if err != nil {
return err
}
signerData := txsigning.SignerData{
ChainID: txf.chainID,
AccountNumber: txf.accountNumber,
Sequence: txf.sequence,
PubKey: pubKey,
Address: addressStr,
PubKey: &anypb.Any{TypeUrl: anyPk.TypeUrl, Value: anyPk.Value},
}
// For SIGN_MODE_DIRECT, calling SetSignatures calls setSignerInfos on

View File

@ -9,6 +9,8 @@ import (
"github.com/stretchr/testify/require"
"google.golang.org/grpc"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/codec"
addresscodec "github.com/cosmos/cosmos-sdk/codec/address"
@ -81,12 +83,10 @@ func TestCalculateGas(t *testing.T) {
for _, tc := range testCases {
txCfg, _ := newTestTxConfig()
defaultSignMode, err := signing.APISignModeToInternal(txCfg.SignModeHandler().DefaultMode())
require.NoError(t, err)
txf := Factory{}.
WithChainID("test-chain").
WithTxConfig(txCfg).WithSignMode(defaultSignMode)
WithTxConfig(txCfg).WithSignMode(txCfg.SignModeHandler().DefaultMode())
t.Run(tc.name, func(t *testing.T) {
mockClientCtx := mockContext{
@ -119,9 +119,6 @@ func mockTxFactory(txCfg client.TxConfig) Factory {
func TestBuildSimTx(t *testing.T) {
txCfg, cdc := newTestTxConfig()
defaultSignMode, err := signing.APISignModeToInternal(txCfg.SignModeHandler().DefaultMode())
require.NoError(t, err)
kb, err := keyring.New(t.Name(), "test", t.TempDir(), nil, cdc)
require.NoError(t, err)
@ -132,7 +129,7 @@ func TestBuildSimTx(t *testing.T) {
fromAddr, err := ac.BytesToString(sdk.AccAddress("from"))
require.NoError(t, err)
txf := mockTxFactory(txCfg).WithSignMode(defaultSignMode).WithKeybase(kb)
txf := mockTxFactory(txCfg).WithSignMode(txCfg.SignModeHandler().DefaultMode()).WithKeybase(kb)
msg := &countertypes.MsgIncreaseCounter{Signer: fromAddr, Count: 1}
bz, err := txf.BuildSimTx(msg)
require.NoError(t, err)
@ -262,9 +259,9 @@ func TestSign(t *testing.T) {
txfNoKeybase := mockTxFactory(txConfig)
txfDirect := txfNoKeybase.
WithKeybase(kb).
WithSignMode(signingtypes.SignMode_SIGN_MODE_DIRECT)
WithSignMode(apisigning.SignMode_SIGN_MODE_DIRECT)
txfAmino := txfDirect.
WithSignMode(signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
WithSignMode(apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
addr1, err := k1.GetAddress()
requireT.NoError(err)
addr2, err := k2.GetAddress()
@ -422,7 +419,7 @@ func TestPreprocessHook(t *testing.T) {
txfDirect := mockTxFactory(txConfig).
WithKeybase(kb).
WithSignMode(signingtypes.SignMode_SIGN_MODE_DIRECT).
WithSignMode(apisigning.SignMode_SIGN_MODE_DIRECT).
WithPreprocessTxHook(preprocessHook)
addr1, err := kr.GetAddress()

View File

@ -4,10 +4,10 @@ import (
"github.com/spf13/cobra"
"google.golang.org/grpc"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
"cosmossdk.io/client/v2/autocli/flag"
"github.com/cosmos/cosmos-sdk/codec"
"github.com/cosmos/cosmos-sdk/types/tx/signing"
)
// Builder manages options for building CLI commands.
@ -24,7 +24,7 @@ type Builder struct {
AddTxConnFlags func(*cobra.Command)
Cdc codec.Codec
EnabledSignModes []signing.SignMode
EnabledSignModes []apisigning.SignMode
}
// ValidateAndComplete the builder fields.

View File

@ -13,7 +13,6 @@ import (
"google.golang.org/protobuf/reflect/protoreflect"
autocliv1 "cosmossdk.io/api/cosmos/autocli/v1"
apitxsigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
"cosmossdk.io/client/v2/autocli/config"
"cosmossdk.io/client/v2/autocli/keyring"
"cosmossdk.io/client/v2/broadcast/comet"
@ -23,7 +22,6 @@ import (
"cosmossdk.io/client/v2/internal/util"
"github.com/cosmos/cosmos-sdk/codec"
"github.com/cosmos/cosmos-sdk/types/tx/signing"
)
type cmdType int
@ -284,7 +282,7 @@ func (b *Builder) getContext(cmd *cobra.Command) (context.Context, error) {
ConsensusAddressCodec: b.ConsensusAddressCodec,
Cdc: b.Cdc,
Keyring: k,
EnabledSignModes: signModesToApiSignModes(b.EnabledSignModes),
EnabledSignModes: b.EnabledSignModes,
}
return clientcontext.SetInContext(cmd.Context(), clientCtx), nil
@ -373,12 +371,3 @@ func getQueryClientConn(cdc codec.Codec) func(cmd *cobra.Command) (grpc.ClientCo
return grpc.NewClient(addr, []grpc.DialOption{grpc.WithTransportCredentials(creds)}...)
}
}
// signModesToApiSignModes converts a slice of signing.SignMode to a slice of apitxsigning.SignMode.
func signModesToApiSignModes(modes []signing.SignMode) []apitxsigning.SignMode {
r := make([]apitxsigning.SignMode, len(modes))
for i, m := range modes {
r[i] = apitxsigning.SignMode(m)
}
return r
}

View File

@ -174,4 +174,4 @@ require (
pgregory.net/rapid v1.1.0 // indirect
)
replace github.com/cosmos/cosmos-sdk => github.com/cosmos/cosmos-sdk v0.52.0-rc.1.0.20250113154334-fd651b73663b
replace github.com/cosmos/cosmos-sdk => github.com/cosmos/cosmos-sdk v0.52.0-rc.1.0.20250122113551-ad692c97166e

View File

@ -133,8 +133,8 @@ github.com/cosmos/cosmos-db v1.1.1 h1:FezFSU37AlBC8S98NlSagL76oqBRWq/prTPvFcEJNC
github.com/cosmos/cosmos-db v1.1.1/go.mod h1:AghjcIPqdhSLP/2Z0yha5xPH3nLnskz81pBx3tcVSAw=
github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA=
github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec=
github.com/cosmos/cosmos-sdk v0.52.0-rc.1.0.20250113154334-fd651b73663b h1:JRRCHMonL7RafZjkRGnvJuQx9/n12g145PxLgIwNb20=
github.com/cosmos/cosmos-sdk v0.52.0-rc.1.0.20250113154334-fd651b73663b/go.mod h1:v82qVB9SOdP2gzKaEqiYefzWvXY0d1epP0JHHEeevqY=
github.com/cosmos/cosmos-sdk v0.52.0-rc.1.0.20250122113551-ad692c97166e h1:uD+6+X9yIfcBH13hJZjPqiTnZAuskWWUlLtIrbTQ7K4=
github.com/cosmos/cosmos-sdk v0.52.0-rc.1.0.20250122113551-ad692c97166e/go.mod h1:NBaGSpGuOFFDx7V/FVmbPqm1n0Xu3ihzqCbqj+8PxVs=
github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY=
github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw=
github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE=

View File

@ -5,7 +5,6 @@ import (
"cosmossdk.io/core/address"
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing"
)
// autoCLIKeyring represents the keyring interface used by the AutoCLI.
@ -84,12 +83,7 @@ func (a *autoCLIKeyringAdapter) Sign(name string, msg []byte, signMode signingv1
return nil, err
}
sdkSignMode, err := authsigning.APISignModeToInternal(signMode)
if err != nil {
return nil, err
}
signBytes, _, err := a.Keyring.Sign(record.Name, msg, sdkSignMode)
signBytes, _, err := a.Keyring.Sign(record.Name, msg, signMode)
return signBytes, err
}

View File

@ -15,6 +15,7 @@ import (
"github.com/cosmos/go-bip39"
"golang.org/x/crypto/bcrypt"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
errorsmod "cosmossdk.io/errors"
"github.com/cosmos/cosmos-sdk/client/input"
@ -25,7 +26,6 @@ import (
"github.com/cosmos/cosmos-sdk/crypto/types"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
"github.com/cosmos/cosmos-sdk/types/tx/signing"
)
// Backend options for Keyring
@ -111,10 +111,10 @@ type Keyring interface {
// Signer is implemented by key stores that want to provide signing capabilities.
type Signer interface {
// Sign sign byte messages with a user key.
Sign(uid string, msg []byte, signMode signing.SignMode) ([]byte, types.PubKey, error)
Sign(uid string, msg []byte, signMode apisigning.SignMode) ([]byte, types.PubKey, error)
// SignByAddress sign byte messages with a user key providing the address.
SignByAddress(address, msg []byte, signMode signing.SignMode) ([]byte, types.PubKey, error)
SignByAddress(address, msg []byte, signMode apisigning.SignMode) ([]byte, types.PubKey, error)
}
// Importer is implemented by key stores that support import of public and private keys.
@ -387,7 +387,7 @@ func (ks keystore) ImportPubKey(uid, armor string) error {
// - []byte: The generated signature.
// - types.PubKey: The public key corresponding to the private key used for signing.
// - error: Any error encountered during the signing process.
func (ks keystore) Sign(uid string, msg []byte, signMode signing.SignMode) ([]byte, types.PubKey, error) {
func (ks keystore) Sign(uid string, msg []byte, signMode apisigning.SignMode) ([]byte, types.PubKey, error) {
k, err := ks.Key(uid)
if err != nil {
return nil, nil, err
@ -420,7 +420,7 @@ func (ks keystore) Sign(uid string, msg []byte, signMode signing.SignMode) ([]by
}
}
func (ks keystore) SignByAddress(address, msg []byte, signMode signing.SignMode) ([]byte, types.PubKey, error) {
func (ks keystore) SignByAddress(address, msg []byte, signMode apisigning.SignMode) ([]byte, types.PubKey, error) {
k, err := ks.KeyByAddress(address)
if err != nil {
return nil, nil, err
@ -638,7 +638,7 @@ func (ks keystore) SupportedAlgorithms() (SigningAlgoList, SigningAlgoList) {
// SignWithLedger signs a binary message with the ledger device referenced by an Info object
// and returns the signed bytes and the public key. It returns an error if the device could
// not be queried or it returned an error.
func SignWithLedger(k *Record, msg []byte, signMode signing.SignMode) (sig []byte, pub types.PubKey, err error) {
func SignWithLedger(k *Record, msg []byte, signMode apisigning.SignMode) (sig []byte, pub types.PubKey, err error) {
ledgerInfo := k.GetLedger()
if ledgerInfo == nil {
return nil, nil, ErrNotLedgerObj
@ -660,12 +660,12 @@ func SignWithLedger(k *Record, msg []byte, signMode signing.SignMode) (sig []byt
}
switch signMode {
case signing.SignMode_SIGN_MODE_TEXTUAL:
case apisigning.SignMode_SIGN_MODE_TEXTUAL:
sig, err = priv.Sign(msg)
if err != nil {
return nil, nil, err
}
case signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON:
case apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON:
sig, err = priv.SignLedgerAminoJSON(msg)
if err != nil {
return nil, nil, err

View File

@ -11,12 +11,13 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
"github.com/cosmos/cosmos-sdk/crypto/hd"
"github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1"
"github.com/cosmos/cosmos-sdk/crypto/ledger"
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
"github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/tx/signing"
)
func TestInMemoryCreateLedger(t *testing.T) {
@ -71,10 +72,10 @@ func TestSignVerifyKeyRingWithLedger(t *testing.T) {
require.Equal(t, "key", k.Name)
d1 := []byte("my first message")
s1, pub1, err := kb.Sign("key", d1, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
s1, pub1, err := kb.Sign("key", d1, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
require.NoError(t, err)
s2, pub2, err := SignWithLedger(k, d1, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
s2, pub2, err := SignWithLedger(k, d1, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
require.NoError(t, err)
require.True(t, pub1.Equals(pub2))
@ -91,7 +92,7 @@ func TestSignVerifyKeyRingWithLedger(t *testing.T) {
k, _, err = kb.NewMnemonic("test", English, types.FullFundraiserPath, DefaultBIP39Passphrase, hd.Secp256k1)
require.NoError(t, err)
_, _, err = SignWithLedger(k, d1, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
_, _, err = SignWithLedger(k, d1, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
require.Error(t, err)
require.Equal(t, "not a ledger object", err.Error())
}
@ -189,7 +190,7 @@ func TestSignWithLedger(t *testing.T) {
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
sig, pub, err := SignWithLedger(tc.record, tc.msg, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
sig, pub, err := SignWithLedger(tc.record, tc.msg, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
assert.Equal(t, tc.wantSig, sig)
assert.Equal(t, tc.wantPub, pub)
if tc.wantErr {

View File

@ -16,6 +16,8 @@ import (
"github.com/stretchr/testify/require"
"golang.org/x/crypto/bcrypt"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
"github.com/cosmos/cosmos-sdk/codec"
codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil"
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
@ -29,7 +31,6 @@ import (
"github.com/cosmos/cosmos-sdk/crypto/types"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
"github.com/cosmos/cosmos-sdk/types/tx/signing"
)
const (
@ -383,7 +384,7 @@ func TestSignVerifyKeyRing(t *testing.T) {
d3 := []byte("feels like I forgot something...")
// try signing both data with both ..
s11, pub1, err := kb.Sign(n1, d1, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
s11, pub1, err := kb.Sign(n1, d1, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
require.NoError(t, err)
key1, err := kr1.GetPubKey()
@ -391,11 +392,11 @@ func TestSignVerifyKeyRing(t *testing.T) {
require.NotNil(t, key1)
require.Equal(t, key1, pub1)
s12, pub1, err := kb.Sign(n1, d2, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
s12, pub1, err := kb.Sign(n1, d2, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
require.Nil(t, err)
require.Equal(t, key1, pub1)
s21, pub2, err := kb.Sign(n2, d1, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
s21, pub2, err := kb.Sign(n2, d1, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
require.Nil(t, err)
key2, err := kr2.GetPubKey()
@ -403,7 +404,7 @@ func TestSignVerifyKeyRing(t *testing.T) {
require.NotNil(t, key2)
require.Equal(t, key2, pub2)
s22, pub2, err := kb.Sign(n2, d2, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
s22, pub2, err := kb.Sign(n2, d2, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
require.Nil(t, err)
require.Equal(t, key2, pub2)
@ -442,7 +443,7 @@ func TestSignVerifyKeyRing(t *testing.T) {
require.NoError(t, err)
require.Equal(t, i3.Name, n3)
_, _, err = kb.Sign(n3, d3, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
_, _, err = kb.Sign(n3, d3, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
require.Error(t, err)
require.Equal(t, "cannot sign with offline keys", err.Error())
}
@ -1228,23 +1229,23 @@ func TestInMemorySignVerify(t *testing.T) {
d3 := []byte("feels like I forgot something...")
// try signing both data with both ..
s11, pub1, err := cstore.Sign(n1, d1, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
s11, pub1, err := cstore.Sign(n1, d1, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
require.Nil(t, err)
key1, err := kr1.GetPubKey()
require.NoError(t, err)
require.Equal(t, key1, pub1)
s12, pub1, err := cstore.Sign(n1, d2, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
s12, pub1, err := cstore.Sign(n1, d2, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
require.Nil(t, err)
require.Equal(t, key1, pub1)
s21, pub2, err := cstore.Sign(n2, d1, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
s21, pub2, err := cstore.Sign(n2, d1, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
require.Nil(t, err)
key2, err := kr2.GetPubKey()
require.NoError(t, err)
require.Equal(t, key2, pub2)
s22, pub2, err := cstore.Sign(n2, d2, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
s22, pub2, err := cstore.Sign(n2, d2, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
require.Nil(t, err)
require.Equal(t, key2, pub2)
@ -1284,7 +1285,7 @@ func TestInMemorySignVerify(t *testing.T) {
require.Equal(t, i3.Name, n3)
// Now try to sign data with a secret-less key
_, _, err = cstore.Sign(n3, d3, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
_, _, err = cstore.Sign(n3, d3, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
require.Error(t, err)
require.Equal(t, "cannot sign with offline keys", err.Error())
}
@ -1380,7 +1381,7 @@ func ExampleNew() {
// We need to use passphrase to generate a signature
tx := []byte("deadbeef")
sig, pub, err := cstore.Sign("Bob", tx, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
sig, pub, err := cstore.Sign("Bob", tx, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
if err != nil {
fmt.Println("don't accept real passphrase")
}
@ -1842,14 +1843,14 @@ func TestAltKeyring_Sign(t *testing.T) {
backend string
uid string
msg []byte
mode signing.SignMode
mode apisigning.SignMode
}{
{
name: "correct sign",
backend: BackendTest,
uid: "signKey",
msg: []byte("some message"),
mode: signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON,
mode: apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON,
},
}
for _, tt := range tests {
@ -1875,14 +1876,14 @@ func TestAltKeyring_SignByAddress(t *testing.T) {
backend string
uid string
msg []byte
mode signing.SignMode
mode apisigning.SignMode
}{
{
name: "correct sign by address",
backend: BackendTest,
uid: "signKey",
msg: []byte("some message"),
mode: signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON,
mode: apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON,
},
}
for _, tt := range tests {

View File

@ -6,6 +6,7 @@ import (
"github.com/stretchr/testify/require"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
"cosmossdk.io/core/address"
"cosmossdk.io/depinject"
"cosmossdk.io/log"
@ -99,7 +100,7 @@ func TestVerifyMultisignature(t *testing.T) {
sig *signing.MultiSignatureData
)
msg := []byte{1, 2, 3, 4}
signBytesFn := func(mode signing.SignMode) ([]byte, error) { return msg, nil }
signBytesFn := func(mode apisigning.SignMode) ([]byte, error) { return msg, nil }
testCases := []struct {
msg string
@ -132,7 +133,7 @@ func TestVerifyMultisignature(t *testing.T) {
pubKeys, sigs := generatePubKeysAndSignatures(8, msg)
pk = kmultisig.NewLegacyAminoPubKey(k, pubKeys)
sig = multisig.NewMultisig(len(pubKeys))
signBytesFn := func(mode signing.SignMode) ([]byte, error) { return msg, nil }
signBytesFn := func(mode apisigning.SignMode) ([]byte, error) { return msg, nil }
for i := 0; i < k-1; i++ {
signingIndex := signingIndices[i]
@ -264,7 +265,7 @@ func TestMultiSigMigration(t *testing.T) {
multisignature := multisig.NewMultisig(3)
multisigKey := kmultisig.NewLegacyAminoPubKey(2, pkSet)
signBytesFn := func(mode signing.SignMode) ([]byte, error) { return msg, nil }
signBytesFn := func(mode apisigning.SignMode) ([]byte, error) { return msg, nil }
cdc := codec.NewLegacyAmino()
@ -546,7 +547,7 @@ func TestVerifyMultisignatureNMRule(t *testing.T) {
}
// Create getSignBytes function that returns our test message
getSignBytes := func(mode signing.SignMode) ([]byte, error) {
getSignBytes := func(mode apisigning.SignMode) ([]byte, error) {
return msg, nil
}

View File

@ -1,6 +1,8 @@
package multisig
import (
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
"github.com/cosmos/cosmos-sdk/crypto/types"
"github.com/cosmos/cosmos-sdk/types/tx/signing"
)
@ -24,4 +26,4 @@ type PubKey interface {
// GetSignBytesFunc defines a function type which returns sign bytes for a given SignMode or an error.
// It will generally be implemented as a closure which wraps whatever signable object signatures are
// being verified against.
type GetSignBytesFunc func(mode signing.SignMode) ([]byte, error)
type GetSignBytesFunc func(mode apisigning.SignMode) ([]byte, error)

View File

@ -18,6 +18,7 @@ import (
autocliv1 "cosmossdk.io/api/cosmos/autocli/v1"
reflectionv1 "cosmossdk.io/api/cosmos/reflection/v1"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
"cosmossdk.io/client/v2/autocli"
clienthelpers "cosmossdk.io/client/v2/helpers"
coreaddress "cosmossdk.io/core/address"
@ -102,7 +103,6 @@ import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/module"
"github.com/cosmos/cosmos-sdk/types/msgservice"
sigtypes "github.com/cosmos/cosmos-sdk/types/tx/signing"
"github.com/cosmos/cosmos-sdk/version"
"github.com/cosmos/cosmos-sdk/x/auth"
"github.com/cosmos/cosmos-sdk/x/auth/ante"
@ -347,7 +347,7 @@ func NewSimApp(
)
// optional: enable sign mode textual by overwriting the default tx config (after setting the bank keeper)
enabledSignModes := append(authtx.DefaultSignModes, sigtypes.SignMode_SIGN_MODE_TEXTUAL)
enabledSignModes := append(authtx.DefaultSignModes, apisigning.SignMode_SIGN_MODE_TEXTUAL)
txConfigOpts := authtx.ConfigOptions{
EnabledSignModes: enabledSignModes,
TextualCoinMetadataQueryFn: txmodule.NewBankKeeperCoinMetadataQueryFn(app.BankKeeper),

View File

@ -244,6 +244,7 @@ require (
// replace (
// <temporary replace>
// )
replace cosmossdk.io/client/v2 => ../client/v2
// Below are the long-lived replace of the SimApp
replace (

View File

@ -194,8 +194,6 @@ cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1V
cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M=
cosmossdk.io/api v0.8.2 h1:klzA1RODd9tTawJ2CbBd/34RV/cB9qtd9oJN6rcRqqg=
cosmossdk.io/api v0.8.2/go.mod h1:XJUwQrihIDjErzs3+jm1zO/9KRzKf4HMjRzXC+l+Cio=
cosmossdk.io/client/v2 v2.10.0-beta.1 h1:uMF5PUt6cy6QeXRnBf1tuig5Haw3dUaTqtSIYZWf/Cc=
cosmossdk.io/client/v2 v2.10.0-beta.1/go.mod h1:EqHIw/tLdCK1vSAg+8ovNEBq3PeBenP+nQ1WhPMGq94=
cosmossdk.io/collections v1.0.0 h1:YCYIe/pIMtc1iLDD0OrVdfWCnIkpwdy7k9NSQpaR5mg=
cosmossdk.io/collections v1.0.0/go.mod h1:mFfLxnYT1fV+B3Lx9GLap1qxmffIPqQCND4xBExerps=
cosmossdk.io/core v1.0.0 h1:e7XBbISOytLBOXMVwpRPixThXqEkeLGlg8no/qpgS8U=

View File

@ -7,6 +7,7 @@ import (
"github.com/spf13/cobra"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
coretesting "cosmossdk.io/core/testing"
"cosmossdk.io/log"
"cosmossdk.io/simapp"
@ -20,7 +21,6 @@ import (
"github.com/cosmos/cosmos-sdk/server"
simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/tx/signing"
"github.com/cosmos/cosmos-sdk/x/auth/tx"
authtxconfig "github.com/cosmos/cosmos-sdk/x/auth/tx/config"
"github.com/cosmos/cosmos-sdk/x/auth/types"
@ -79,7 +79,7 @@ func NewRootCmd() *cobra.Command {
// sets the RPC client needed for SIGN_MODE_TEXTUAL. This sign mode
// is only available if the client is online.
if !initClientCtx.Offline {
enabledSignModes := append(tx.DefaultSignModes, signing.SignMode_SIGN_MODE_TEXTUAL)
enabledSignModes := append(tx.DefaultSignModes, apisigning.SignMode_SIGN_MODE_TEXTUAL)
txConfigOpts := tx.ConfigOptions{
EnabledSignModes: enabledSignModes,
TextualCoinMetadataQueryFn: authtxconfig.NewGRPCCoinMetadataQueryFn(initClientCtx),

View File

@ -6,9 +6,13 @@ import (
"fmt"
"math/rand"
"google.golang.org/protobuf/types/known/anypb"
"cosmossdk.io/core/transaction"
txsigning "cosmossdk.io/x/tx/signing"
"github.com/cosmos/cosmos-sdk/client"
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
"github.com/cosmos/cosmos-sdk/simsx"
sdk "github.com/cosmos/cosmos-sdk/types"
@ -91,25 +95,20 @@ func GenSignedMockTx(
// create a random length memo
memo := simulation.RandStringOfLength(r, simulation.RandIntBetween(r, 0, 100))
signMode, err := authsign.APISignModeToInternal(txConfig.SignModeHandler().DefaultMode())
if err != nil {
return nil, err
}
// 1st round: set SignatureV2 with empty signatures, to set correct
// signer infos.
for i, p := range priv {
sigs[i] = signing.SignatureV2{
PubKey: p.PubKey(),
Data: &signing.SingleSignatureData{
SignMode: signMode,
SignMode: txConfig.SignModeHandler().DefaultMode(),
},
Sequence: accSeqs[i],
}
}
tx := txConfig.NewTxBuilder()
err = tx.SetMsgs(msgs...)
err := tx.SetMsgs(msgs...)
if err != nil {
return nil, err
}
@ -123,16 +122,21 @@ func GenSignedMockTx(
// 2nd round: once all signer infos are set, every signer can sign.
for i, p := range priv {
signerData := authsign.SignerData{
anyPk, err := codectypes.NewAnyWithValue(p.PubKey())
if err != nil {
return nil, err
}
signerData := txsigning.SignerData{
Address: sdk.AccAddress(p.PubKey().Address()).String(),
ChainID: chainID,
AccountNumber: accNums[i],
Sequence: accSeqs[i],
PubKey: p.PubKey(),
PubKey: &anypb.Any{TypeUrl: anyPk.TypeUrl, Value: anyPk.Value},
}
signBytes, err := authsign.GetSignBytesAdapter(
context.Background(), txConfig.SignModeHandler(), signMode, signerData,
context.Background(), txConfig.SignModeHandler(), txConfig.SignModeHandler().DefaultMode(), signerData,
tx.GetTx())
if err != nil {
return nil, fmt.Errorf("sign bytes: %w", err)

View File

@ -8,6 +8,7 @@ import (
abci "github.com/cometbft/cometbft/api/cometbft/abci/v1"
cmtjson "github.com/cometbft/cometbft/libs/json"
"github.com/stretchr/testify/require"
"google.golang.org/protobuf/types/known/anypb"
coretesting "cosmossdk.io/core/testing"
"cosmossdk.io/depinject"
@ -15,6 +16,7 @@ import (
sdkmath "cosmossdk.io/math"
store "cosmossdk.io/store/types"
_ "cosmossdk.io/x/accounts"
txsigning "cosmossdk.io/x/tx/signing"
baseapptestutil "github.com/cosmos/cosmos-sdk/baseapp/testutil"
"github.com/cosmos/cosmos-sdk/client"
@ -190,10 +192,6 @@ func TestBaseApp_BlockGas(t *testing.T) {
}
func createTestTx(txConfig client.TxConfig, txBuilder client.TxBuilder, privs []cryptotypes.PrivKey, accNums, accSeqs []uint64, chainID string) (xauthsigning.Tx, []byte, error) {
defaultSignMode, err := xauthsigning.APISignModeToInternal(txConfig.SignModeHandler().DefaultMode())
if err != nil {
return nil, nil, err
}
// First round: we gather all the signer infos. We use the "set empty
// signature" hack to do that.
var sigsV2 []signing.SignatureV2
@ -201,7 +199,7 @@ func createTestTx(txConfig client.TxConfig, txBuilder client.TxBuilder, privs []
sigV2 := signing.SignatureV2{
PubKey: priv.PubKey(),
Data: &signing.SingleSignatureData{
SignMode: defaultSignMode,
SignMode: txConfig.SignModeHandler().DefaultMode(),
Signature: nil,
},
Sequence: accSeqs[i],
@ -209,7 +207,7 @@ func createTestTx(txConfig client.TxConfig, txBuilder client.TxBuilder, privs []
sigsV2 = append(sigsV2, sigV2)
}
err = txBuilder.SetSignatures(sigsV2...)
err := txBuilder.SetSignatures(sigsV2...)
if err != nil {
return nil, nil, err
}
@ -217,15 +215,20 @@ func createTestTx(txConfig client.TxConfig, txBuilder client.TxBuilder, privs []
// Second round: all signer infos are set, so each signer can sign.
sigsV2 = []signing.SignatureV2{}
for i, priv := range privs {
signerData := xauthsigning.SignerData{
anyPk, err := codectypes.NewAnyWithValue(priv.PubKey())
if err != nil {
return nil, nil, err
}
signerData := txsigning.SignerData{
Address: sdk.AccAddress(priv.PubKey().Bytes()).String(),
ChainID: chainID,
AccountNumber: accNums[i],
Sequence: accSeqs[i],
PubKey: priv.PubKey(),
PubKey: &anypb.Any{TypeUrl: anyPk.TypeUrl, Value: anyPk.Value},
}
sigV2, err := tx.SignWithPrivKey(
context.TODO(), defaultSignMode, signerData,
context.TODO(), txConfig.SignModeHandler().DefaultMode(), signerData,
txBuilder, priv, txConfig, accSeqs[i])
if err != nil {
return nil, nil, err

View File

@ -12,6 +12,7 @@ import (
"google.golang.org/grpc"
"google.golang.org/grpc/metadata"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
_ "cosmossdk.io/x/accounts"
_ "cosmossdk.io/x/bank"
banktypes "cosmossdk.io/x/bank/types"
@ -30,7 +31,6 @@ import (
sdk "github.com/cosmos/cosmos-sdk/types"
grpctypes "github.com/cosmos/cosmos-sdk/types/grpc"
txtypes "github.com/cosmos/cosmos-sdk/types/tx"
"github.com/cosmos/cosmos-sdk/types/tx/signing"
_ "github.com/cosmos/cosmos-sdk/x/auth"
authclient "github.com/cosmos/cosmos-sdk/x/auth/client"
_ "github.com/cosmos/cosmos-sdk/x/auth/tx/config"
@ -277,7 +277,7 @@ func (s *IntegrationTestSuite) mkTxBuilder() client.TxBuilder {
WithChainID(val.GetClientCtx().ChainID).
WithKeybase(val.GetClientCtx().Keyring).
WithTxConfig(val.GetClientCtx().TxConfig).
WithSignMode(signing.SignMode_SIGN_MODE_DIRECT)
WithSignMode(apisigning.SignMode_SIGN_MODE_DIRECT)
// Sign Tx.
err := authclient.SignTx(txFactory, val.GetClientCtx(), val.GetMoniker(), txBuilder, false, true)

View File

@ -6,6 +6,7 @@ import (
"gotest.tools/v3/assert"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
sdkmath "cosmossdk.io/math"
"cosmossdk.io/simapp"
banktypes "cosmossdk.io/x/bank/types"
@ -17,7 +18,6 @@ import (
"github.com/cosmos/cosmos-sdk/testutil/testdata"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/tx"
"github.com/cosmos/cosmos-sdk/types/tx/signing"
authclient "github.com/cosmos/cosmos-sdk/x/auth/client"
)
@ -181,7 +181,7 @@ func mkTxBuilder(tb testing.TB, s *TxBenchmarkSuite) client.TxBuilder {
WithChainID(val.GetClientCtx().ChainID).
WithKeybase(val.GetClientCtx().Keyring).
WithTxConfig(val.GetClientCtx().TxConfig).
WithSignMode(signing.SignMode_SIGN_MODE_DIRECT)
WithSignMode(apisigning.SignMode_SIGN_MODE_DIRECT)
// Sign Tx.
err := authclient.SignTx(txFactory, val.GetClientCtx(), val.GetMoniker(), txBuilder, false, true)

View File

@ -11,6 +11,7 @@ import (
"pgregory.net/rapid"
msgv1 "cosmossdk.io/api/cosmos/msg/v1"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
"cosmossdk.io/math"
authzmodule "cosmossdk.io/x/authz/module"
"cosmossdk.io/x/bank"
@ -112,7 +113,7 @@ func TestDecode(t *testing.T) {
sig := signing.SignatureV2{
PubKey: pubkey,
Data: &signing.SingleSignatureData{
SignMode: signing.SignMode_SIGN_MODE_DIRECT,
SignMode: apisigning.SignMode_SIGN_MODE_DIRECT,
Signature: legacy.Cdc.MustMarshal(pubkey),
},
Sequence: accSeq,

View File

@ -12,6 +12,7 @@ import (
"google.golang.org/protobuf/reflect/protoreflect"
"google.golang.org/protobuf/types/dynamicpb"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
"cosmossdk.io/core/transaction"
"cosmossdk.io/x/tx/signing"
"cosmossdk.io/x/tx/signing/aminojson"
@ -23,7 +24,6 @@ import (
"github.com/cosmos/cosmos-sdk/tests/integration/tx/internal/pulsar/testpb"
"github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/module"
signingtypes "github.com/cosmos/cosmos-sdk/types/tx/signing"
"github.com/cosmos/cosmos-sdk/x/auth/migrations/legacytx"
authsigning "github.com/cosmos/cosmos-sdk/x/auth/signing"
"github.com/cosmos/cosmos-sdk/x/auth/tx"
@ -88,8 +88,8 @@ func NewSigningFixture(
txConfig, err := tx.NewTxConfigWithOptions(
protoCodec,
tx.ConfigOptions{
EnabledSignModes: []signingtypes.SignMode{
signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON,
EnabledSignModes: []apisigning.SignMode{
apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON,
},
SigningOptions: signingOptions,
})
@ -141,8 +141,8 @@ func (s *SigningFixture) RequireLegacyAminoEquivalent(t *testing.T, msg transact
}()
legacyAminoSignHandler := tx.NewSignModeLegacyAminoJSONHandler()
legacyBz, err := legacyAminoSignHandler.GetSignBytes(
signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON,
authsigning.SignerData{
apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON,
signing.SignerData{
ChainID: signerData.ChainID,
Address: signerData.Address,
AccountNumber: signerData.AccountNumber,

View File

@ -7,6 +7,7 @@ import (
"github.com/cosmos/gogoproto/proto"
"github.com/spf13/cobra"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
sdkmath "cosmossdk.io/math"
"github.com/cosmos/cosmos-sdk/client"
@ -15,7 +16,6 @@ import (
"github.com/cosmos/cosmos-sdk/testutil"
sdk "github.com/cosmos/cosmos-sdk/types"
txtypes "github.com/cosmos/cosmos-sdk/types/tx"
"github.com/cosmos/cosmos-sdk/types/tx/signing"
)
// ExecTestCLICmd builds the client context, mocks the output and executes the command.
@ -86,7 +86,7 @@ func SubmitTestTx(clientCtx client.Context, msg proto.Message, from sdk.AccAddre
WithChainID(clientCtx.ChainID).
WithKeybase(clientCtx.Keyring).
WithTxConfig(clientCtx.TxConfig).
WithSignMode(signing.SignMode_SIGN_MODE_DIRECT)
WithSignMode(apisigning.SignMode_SIGN_MODE_DIRECT)
if config.Offline {
txFactory = txFactory.

View File

@ -8,12 +8,15 @@ import (
types2 "github.com/cometbft/cometbft/api/cometbft/abci/v1"
"github.com/stretchr/testify/require"
"google.golang.org/protobuf/types/known/anypb"
"cosmossdk.io/core/header"
"cosmossdk.io/errors"
txsigning "cosmossdk.io/x/tx/signing"
"github.com/cosmos/cosmos-sdk/baseapp"
"github.com/cosmos/cosmos-sdk/client"
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/simulation"
@ -37,28 +40,24 @@ func GenSignedMockTx(
// create a random length memo
memo := simulation.RandStringOfLength(r, simulation.RandIntBetween(r, 0, 100))
signMode, err := authsign.APISignModeToInternal(txConfig.SignModeHandler().DefaultMode())
if err != nil {
return nil, err
}
// 1st round: set SignatureV2 with empty signatures, to set correct
// signer infos.
for i, p := range priv {
sigs[i] = signing.SignatureV2{
PubKey: p.PubKey(),
Data: &signing.SingleSignatureData{
SignMode: signMode,
SignMode: txConfig.SignModeHandler().DefaultMode(),
},
Sequence: accSeqs[i],
}
}
tx := txConfig.NewTxBuilder()
err = tx.SetMsgs(msgs...)
err := tx.SetMsgs(msgs...)
if err != nil {
return nil, err
}
err = tx.SetSignatures(sigs...)
if err != nil {
return nil, err
@ -69,16 +68,21 @@ func GenSignedMockTx(
// 2nd round: once all signer infos are set, every signer can sign.
for i, p := range priv {
signerData := authsign.SignerData{
anyPk, err := codectypes.NewAnyWithValue(p.PubKey())
if err != nil {
return nil, err
}
signerData := txsigning.SignerData{
Address: sdk.AccAddress(p.PubKey().Address()).String(),
ChainID: chainID,
AccountNumber: accNums[i],
Sequence: accSeqs[i],
PubKey: p.PubKey(),
PubKey: &anypb.Any{TypeUrl: anyPk.TypeUrl, Value: anyPk.Value},
}
signBytes, err := authsign.GetSignBytesAdapter(
context.Background(), txConfig.SignModeHandler(), signMode, signerData,
context.Background(), txConfig.SignModeHandler(), txConfig.SignModeHandler().DefaultMode(), signerData,
tx.GetTx())
if err != nil {
panic(err)

View File

@ -50,10 +50,12 @@ func (a *AuxSignerData) GetSignatureV2() (signing.SignatureV2, error) {
return signing.SignatureV2{}, sdkerrors.ErrInvalidType.Wrapf("expected %T, got %T", (cryptotypes.PubKey)(nil), pk)
}
signMode, _ := signing.InternalSignModeToAPI(a.Mode)
return signing.SignatureV2{
PubKey: pk,
Data: &signing.SingleSignatureData{
SignMode: a.Mode,
SignMode: signMode,
Signature: a.Sig,
},
Sequence: a.SignDoc.Sequence,

View File

@ -76,7 +76,8 @@ func TestAuxSignerData(t *testing.T) {
require.NoError(t, err)
sigV2, err := tc.sd.GetSignatureV2()
require.NoError(t, err)
require.Equal(t, tc.sd.Mode, sigV2.Data.(*signing.SingleSignatureData).SignMode)
m, _ := signing.InternalSignModeToAPI(tc.sd.Mode)
require.Equal(t, m, sigV2.Data.(*signing.SingleSignatureData).SignMode)
require.Equal(t, tc.sd.Sig, sigV2.Data.(*signing.SingleSignatureData).Signature)
require.Equal(t, tc.sd.SignDoc.Sequence, sigV2.Sequence)
require.True(t, tc.sd.SignDoc.PublicKey.GetCachedValue().(cryptotypes.PubKey).Equals(sigV2.PubKey))

View File

@ -32,10 +32,11 @@ type SignatureV2 struct {
func SignatureDataToProto(data SignatureData) *SignatureDescriptor_Data {
switch data := data.(type) {
case *SingleSignatureData:
signMode, _ := APISignModeToInternal(data.SignMode)
return &SignatureDescriptor_Data{
Sum: &SignatureDescriptor_Data_Single_{
Single: &SignatureDescriptor_Data_Single{
Mode: data.SignMode,
Mode: signMode,
Signature: data.Signature,
},
},
@ -66,8 +67,9 @@ func SignatureDataToProto(data SignatureData) *SignatureDescriptor_Data {
func SignatureDataFromProto(descData *SignatureDescriptor_Data) SignatureData {
switch descData := descData.Sum.(type) {
case *SignatureDescriptor_Data_Single_:
signMode, _ := InternalSignModeToAPI(descData.Single.Mode)
return &SingleSignatureData{
SignMode: descData.Single.Mode,
SignMode: signMode,
Signature: descData.Single.Signature,
}
case *SignatureDescriptor_Data_Multi_:

View File

@ -1,6 +1,8 @@
package signing
import (
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
"github.com/cosmos/cosmos-sdk/crypto/types"
)
@ -14,7 +16,7 @@ type SignatureData interface {
// SingleSignatureData represents the signature and SignMode of a single (non-multisig) signer
type SingleSignatureData struct {
// SignMode represents the SignMode of the signature
SignMode SignMode
SignMode apisigning.SignMode
// Signature is the raw signature.
Signature []byte

39
types/tx/signing/types.go Normal file
View File

@ -0,0 +1,39 @@
package signing
import (
"fmt"
signingv1beta1 "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
)
// APISignModeToInternal converts a protobuf SignMode to a SignMode.
func APISignModeToInternal(mode signingv1beta1.SignMode) (SignMode, error) {
switch mode {
case signingv1beta1.SignMode_SIGN_MODE_DIRECT:
return SignMode_SIGN_MODE_DIRECT, nil
case signingv1beta1.SignMode_SIGN_MODE_LEGACY_AMINO_JSON:
return SignMode_SIGN_MODE_LEGACY_AMINO_JSON, nil
case signingv1beta1.SignMode_SIGN_MODE_TEXTUAL:
return SignMode_SIGN_MODE_TEXTUAL, nil
case signingv1beta1.SignMode_SIGN_MODE_DIRECT_AUX:
return SignMode_SIGN_MODE_DIRECT_AUX, nil
default:
return SignMode_SIGN_MODE_UNSPECIFIED, fmt.Errorf("unsupported sign mode %s", mode)
}
}
// InternalSignModeToAPI converts a SignMode to a protobuf SignMode.
func InternalSignModeToAPI(mode SignMode) (signingv1beta1.SignMode, error) {
switch mode {
case SignMode_SIGN_MODE_DIRECT:
return signingv1beta1.SignMode_SIGN_MODE_DIRECT, nil
case SignMode_SIGN_MODE_LEGACY_AMINO_JSON:
return signingv1beta1.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, nil
case SignMode_SIGN_MODE_TEXTUAL:
return signingv1beta1.SignMode_SIGN_MODE_TEXTUAL, nil
case SignMode_SIGN_MODE_DIRECT_AUX:
return signingv1beta1.SignMode_SIGN_MODE_DIRECT_AUX, nil
default:
return signingv1beta1.SignMode_SIGN_MODE_UNSPECIFIED, fmt.Errorf("unsupported sign mode %s", mode)
}
}

View File

@ -10,6 +10,7 @@ import (
"github.com/golang/mock/gomock"
"github.com/stretchr/testify/require"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
"cosmossdk.io/core/gas"
"cosmossdk.io/core/header"
errorsmod "cosmossdk.io/errors"
@ -115,7 +116,7 @@ func TestAnteHandlerSigErrors(t *testing.T) {
// Create tx manually to test the tx's signers
require.NoError(t, suite.txBuilder.SetMsgs(msgs...))
tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT)
tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT)
require.NoError(t, err)
// tx.GetSigners returns addresses in correct order: addr1, addr2, addr3
@ -1097,7 +1098,7 @@ func TestAnteHandlerSetPubKey(t *testing.T) {
suite.txBuilder.SetGasLimit(gasLimit)
// Manually create tx, and remove signature.
tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT)
tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT)
require.NoError(t, err)
txBuilder, err := suite.clientCtx.TxConfig.WrapTxBuilder(tx)
require.NoError(t, err)
@ -1322,7 +1323,7 @@ func TestAnteHandlerReCheck(t *testing.T) {
// test that operations skipped on recheck do not run
privs, accNums, accSeqs := []cryptotypes.PrivKey{accs[0].priv}, []uint64{0}, []uint64{0}
tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT)
tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT)
require.NoError(t, err)
// make signature array empty which would normally cause ValidateBasicDecorator and SigVerificationDecorator fail
@ -1334,7 +1335,7 @@ func TestAnteHandlerReCheck(t *testing.T) {
_, err = suite.anteHandler(suite.ctx, txBuilder.GetTx(), false)
require.Nil(t, err, "AnteHandler errored on recheck unexpectedly: %v", err)
tx, err = suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT)
tx, err = suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT)
require.NoError(t, err)
txBytes, err := json.Marshal(tx)
require.Nil(t, err, "Error marshaling tx: %v", err)

View File

@ -8,6 +8,7 @@ import (
"github.com/stretchr/testify/require"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
appmodulev2 "cosmossdk.io/core/appmodule/v2"
"cosmossdk.io/core/header"
storetypes "cosmossdk.io/store/types"
@ -37,7 +38,7 @@ func TestValidateBasic(t *testing.T) {
suite.txBuilder.SetGasLimit(gasLimit)
privs, accNums, accSeqs := []cryptotypes.PrivKey{}, []uint64{}, []uint64{}
invalidTx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT)
invalidTx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT)
require.NoError(t, err)
vbd := ante.NewValidateBasicDecorator(suite.accountKeeper.GetEnvironment())
@ -47,7 +48,7 @@ func TestValidateBasic(t *testing.T) {
require.ErrorIs(t, err, sdkerrors.ErrNoSignatures, "Did not error on invalid tx")
privs, accNums, accSeqs = []cryptotypes.PrivKey{priv1}, []uint64{0}, []uint64{0}
validTx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT)
validTx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT)
require.NoError(t, err)
_, err = antehandler(suite.ctx, validTx, false)
@ -79,7 +80,7 @@ func TestValidateMemo(t *testing.T) {
privs, accNums, accSeqs := []cryptotypes.PrivKey{priv1}, []uint64{0}, []uint64{0}
suite.txBuilder.SetMemo(strings.Repeat("01234567890", 500))
invalidTx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT)
invalidTx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT)
require.NoError(t, err)
// require that long memos get rejected
@ -90,7 +91,7 @@ func TestValidateMemo(t *testing.T) {
require.ErrorIs(t, err, sdkerrors.ErrMemoTooLarge, "Did not error on tx with high memo")
suite.txBuilder.SetMemo(strings.Repeat("01234567890", 10))
validTx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT)
validTx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT)
require.NoError(t, err)
// require small memos pass ValidateMemo Decorator
@ -131,7 +132,7 @@ func TestConsumeGasForTxSize(t *testing.T) {
suite.txBuilder.SetMemo(strings.Repeat("01234567890", 10))
privs, accNums, accSeqs := []cryptotypes.PrivKey{priv1}, []uint64{0}, []uint64{0}
tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT)
tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT)
require.NoError(t, err)
txBytes, err := suite.clientCtx.TxConfig.TxJSONEncoder()(tx)
@ -233,7 +234,7 @@ func TestTxHeightTimeoutDecorator(t *testing.T) {
suite.txBuilder.SetTimeoutTimestamp(tc.timeoutTimestamp)
privs, accNums, accSeqs := []cryptotypes.PrivKey{priv1}, []uint64{0}, []uint64{0}
tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT)
tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT)
require.NoError(t, err)
mockHeaderService.WithBlockHeight(tc.height)

View File

@ -6,13 +6,13 @@ import (
"github.com/golang/mock/gomock"
"github.com/stretchr/testify/require"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
"cosmossdk.io/math"
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
"github.com/cosmos/cosmos-sdk/testutil/testdata"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
"github.com/cosmos/cosmos-sdk/types/tx/signing"
"github.com/cosmos/cosmos-sdk/x/auth/ante"
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
)
@ -35,7 +35,7 @@ func TestDeductFeeDecorator_ZeroGas(t *testing.T) {
s.txBuilder.SetGasLimit(0)
privs, accNums, accSeqs := []cryptotypes.PrivKey{accs[0].priv}, []uint64{0}, []uint64{0}
tx, err := s.CreateTestTx(s.ctx, privs, accNums, accSeqs, s.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT)
tx, err := s.CreateTestTx(s.ctx, privs, accNums, accSeqs, s.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT)
require.NoError(t, err)
// Set IsCheckTx to true
@ -76,7 +76,7 @@ func TestEnsureMempoolFees(t *testing.T) {
s.bankKeeper.EXPECT().SendCoinsFromAccountToModule(gomock.Any(), accs[0].acc.GetAddress(), authtypes.FeeCollectorName, feeAmount).Return(nil).Times(3)
privs, accNums, accSeqs := []cryptotypes.PrivKey{accs[0].priv}, []uint64{0}, []uint64{0}
tx, err := s.CreateTestTx(s.ctx, privs, accNums, accSeqs, s.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT)
tx, err := s.CreateTestTx(s.ctx, privs, accNums, accSeqs, s.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT)
require.NoError(t, err)
// Set high gas price so standard test fee fails
@ -126,7 +126,7 @@ func TestDeductFees(t *testing.T) {
s.txBuilder.SetGasLimit(gasLimit)
privs, accNums, accSeqs := []cryptotypes.PrivKey{accs[0].priv}, []uint64{0}, []uint64{0}
tx, err := s.CreateTestTx(s.ctx, privs, accNums, accSeqs, s.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT)
tx, err := s.CreateTestTx(s.ctx, privs, accNums, accSeqs, s.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT)
require.NoError(t, err)
dfd := ante.NewDeductFeeDecorator(s.accountKeeper, s.bankKeeper, nil, nil)

View File

@ -9,9 +9,14 @@ import (
"github.com/golang/mock/gomock"
"github.com/stretchr/testify/require"
"google.golang.org/protobuf/types/known/anypb"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
txsigning "cosmossdk.io/x/tx/signing"
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/codec"
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
"github.com/cosmos/cosmos-sdk/testutil/testdata"
sdk "github.com/cosmos/cosmos-sdk/types"
@ -199,7 +204,7 @@ func genTxWithFeeGranter(gen client.TxConfig, msgs []sdk.Msg, feeAmt sdk.Coins,
memo := simulation.RandStringOfLength(r, simulation.RandIntBetween(r, 0, 100))
signMode := signing.SignMode_SIGN_MODE_DIRECT
signMode := apisigning.SignMode_SIGN_MODE_DIRECT
// 1st round: set SignatureV2 with empty signatures, to set correct
// signer infos.
@ -229,11 +234,16 @@ func genTxWithFeeGranter(gen client.TxConfig, msgs []sdk.Msg, feeAmt sdk.Coins,
// 2nd round: once all signer infos are set, every signer can sign.
for i, p := range priv {
signerData := authsign.SignerData{
anyPk, err := codectypes.NewAnyWithValue(p.PubKey())
if err != nil {
return nil, err
}
signerData := txsigning.SignerData{
ChainID: chainID,
AccountNumber: accNums[i],
Sequence: accSeqs[i],
PubKey: p.PubKey(),
PubKey: &anypb.Any{TypeUrl: anyPk.TypeUrl, Value: anyPk.Value},
}
signBytes, err := authsign.GetSignBytesAdapter(
context.Background(), gen.SignModeHandler(), signMode, signerData, tx.GetTx())

View File

@ -5,13 +5,13 @@ import (
"github.com/stretchr/testify/require"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
storetypes "cosmossdk.io/store/types"
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
"github.com/cosmos/cosmos-sdk/testutil/testdata"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
"github.com/cosmos/cosmos-sdk/types/tx/signing"
"github.com/cosmos/cosmos-sdk/x/auth/ante"
)
@ -30,7 +30,7 @@ func TestSetupDecorator_BlockMaxGas(t *testing.T) {
suite.txBuilder.SetGasLimit(10000000000)
privs, accNums, accSeqs := []cryptotypes.PrivKey{priv1}, []uint64{0}, []uint64{0}
tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT)
tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT)
require.NoError(t, err)
sud := ante.NewSetUpContextDecorator(suite.env, suite.consensusKeeper)
@ -60,7 +60,7 @@ func TestSetup(t *testing.T) {
suite.txBuilder.SetGasLimit(gasLimit)
privs, accNums, accSeqs := []cryptotypes.PrivKey{priv1}, []uint64{0}, []uint64{0}
tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT)
tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT)
require.NoError(t, err)
sud := ante.NewSetUpContextDecorator(suite.env, suite.consensusKeeper)
@ -95,7 +95,7 @@ func TestRecoverPanic(t *testing.T) {
suite.txBuilder.SetGasLimit(gasLimit)
privs, accNums, accSeqs := []cryptotypes.PrivKey{priv1}, []uint64{0}, []uint64{0}
tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT)
tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT)
require.NoError(t, err)
sud := ante.NewSetUpContextDecorator(suite.env, suite.consensusKeeper)

View File

@ -10,6 +10,7 @@ import (
secp256k1dcrd "github.com/decred/dcrd/dcrec/secp256k1/v4"
"google.golang.org/protobuf/types/known/anypb"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
"cosmossdk.io/core/event"
"cosmossdk.io/core/gas"
"cosmossdk.io/core/transaction"
@ -98,7 +99,7 @@ func NewSigVerificationDecoratorWithVerifyOnCurve(ak AccountKeeper, signModeHand
func OnlyLegacyAminoSigners(sigData signing.SignatureData) bool {
switch v := sigData.(type) {
case *signing.SingleSignatureData:
return v.SignMode == signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON
return v.SignMode == apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON
case *signing.MultiSignatureData:
for _, s := range v.Signatures {
if !OnlyLegacyAminoSigners(s) {

View File

@ -8,6 +8,7 @@ import (
"go.uber.org/mock/gomock"
bankv1beta1 "cosmossdk.io/api/cosmos/bank/v1beta1"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
"cosmossdk.io/core/gas"
"cosmossdk.io/core/header"
gastestutil "cosmossdk.io/core/testing/gas"
@ -26,7 +27,6 @@ import (
"github.com/cosmos/cosmos-sdk/types/tx/signing"
"github.com/cosmos/cosmos-sdk/x/auth/ante"
"github.com/cosmos/cosmos-sdk/x/auth/migrations/legacytx"
authsign "github.com/cosmos/cosmos-sdk/x/auth/signing"
authtx "github.com/cosmos/cosmos-sdk/x/auth/tx"
txmodule "github.com/cosmos/cosmos-sdk/x/auth/tx/config"
"github.com/cosmos/cosmos-sdk/x/auth/types"
@ -137,7 +137,7 @@ func TestSigVerification(t *testing.T) {
suite := SetupTestSuite(t, true)
suite.txBankKeeper.EXPECT().DenomMetadataV2(gomock.Any(), gomock.Any()).Return(&bankv1beta1.QueryDenomMetadataResponse{}, nil).AnyTimes()
enabledSignModes := []signing.SignMode{signing.SignMode_SIGN_MODE_DIRECT, signing.SignMode_SIGN_MODE_TEXTUAL, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON}
enabledSignModes := []apisigning.SignMode{apisigning.SignMode_SIGN_MODE_DIRECT, apisigning.SignMode_SIGN_MODE_TEXTUAL, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON}
// Since TEXTUAL is not enabled by default, we create a custom TxConfig
// here which includes it.
cdc := codec.NewProtoCodec(suite.encCfg.InterfaceRegistry)
@ -150,10 +150,7 @@ func TestSigVerification(t *testing.T) {
},
}
var err error
suite.clientCtx.TxConfig, err = authtx.NewTxConfigWithOptions(
cdc,
txConfigOpts,
)
suite.clientCtx.TxConfig, err = authtx.NewTxConfigWithOptions(cdc, txConfigOpts)
require.NoError(t, err)
suite.txBuilder = suite.clientCtx.TxConfig.NewTxBuilder()
@ -181,14 +178,8 @@ func TestSigVerification(t *testing.T) {
feeAmount := testdata.NewTestFeeAmount()
gasLimit := testdata.NewTestGasLimit()
txConfigOpts = authtx.ConfigOptions{
TextualCoinMetadataQueryFn: txmodule.NewBankKeeperCoinMetadataQueryFn(suite.txBankKeeper),
EnabledSignModes: enabledSignModes,
SigningOptions: &txsigning.Options{
AddressCodec: cdc.InterfaceRegistry().SigningContext().AddressCodec(),
ValidatorAddressCodec: cdc.InterfaceRegistry().SigningContext().ValidatorAddressCodec(),
},
}
// override the medata query function to use the bank keeper in ante handler
txConfigOpts.TextualCoinMetadataQueryFn = txmodule.NewBankKeeperCoinMetadataQueryFn(suite.txBankKeeper)
anteTxConfig, err := authtx.NewTxConfigWithOptions(
codec.NewProtoCodec(suite.encCfg.InterfaceRegistry),
txConfigOpts,
@ -197,8 +188,6 @@ func TestSigVerification(t *testing.T) {
noOpGasConsume := func(_ gas.Meter, _ signing.SignatureV2, _ types.Params) error { return nil }
svd := ante.NewSigVerificationDecorator(suite.accountKeeper, anteTxConfig.SignModeHandler(), noOpGasConsume, nil)
antehandler := sdk.ChainAnteDecorators(svd)
defaultSignMode, err := authsign.APISignModeToInternal(anteTxConfig.SignModeHandler().DefaultMode())
require.NoError(t, err)
type testCase struct {
name string
@ -248,7 +237,7 @@ func TestSigVerification(t *testing.T) {
txSigs[0] = signing.SignatureV2{
PubKey: tc.privs[0].PubKey(),
Data: &signing.SingleSignatureData{
SignMode: defaultSignMode,
SignMode: anteTxConfig.SignModeHandler().DefaultMode(),
Signature: badSig,
},
Sequence: tc.accSeqs[0],
@ -332,7 +321,7 @@ func runSigDecorators(t *testing.T, params types.Params, privs ...cryptotypes.Pr
suite.txBuilder.SetFeeAmount(feeAmount)
suite.txBuilder.SetGasLimit(gasLimit)
tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT)
tx, err := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, suite.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT)
require.NoError(t, err)
svd := ante.NewSigVerificationDecorator(suite.accountKeeper, suite.clientCtx.TxConfig.SignModeHandler(), ante.DefaultSigVerificationGasConsumer, nil)
@ -356,7 +345,7 @@ func TestAnteHandlerChecks(t *testing.T) {
feeAmount := testdata.NewTestFeeAmount()
gasLimit := testdata.NewTestGasLimit()
enabledSignModes := []signing.SignMode{signing.SignMode_SIGN_MODE_DIRECT, signing.SignMode_SIGN_MODE_TEXTUAL, signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON}
enabledSignModes := []apisigning.SignMode{apisigning.SignMode_SIGN_MODE_DIRECT, apisigning.SignMode_SIGN_MODE_TEXTUAL, apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON}
// Since TEXTUAL is not enabled by default, we create a custom TxConfig
// here which includes it.
cdc := codec.NewProtoCodec(suite.encCfg.InterfaceRegistry)
@ -426,7 +415,7 @@ func TestAnteHandlerChecks(t *testing.T) {
suite.txBuilder.SetFeeAmount(feeAmount)
suite.txBuilder.SetGasLimit(gasLimit)
tx, err := suite.CreateTestTx(suite.ctx, tc.privs, tc.accNums, tc.accSeqs, suite.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT)
tx, err := suite.CreateTestTx(suite.ctx, tc.privs, tc.accNums, tc.accSeqs, suite.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT)
require.NoError(t, err)
txBytes, err := suite.clientCtx.TxConfig.TxEncoder()(tx)

View File

@ -6,20 +6,24 @@ import (
"github.com/golang/mock/gomock"
"github.com/stretchr/testify/require"
"google.golang.org/protobuf/types/known/anypb"
// TODO We don't need to import these API types if we use gogo's registry
// ref: https://github.com/cosmos/cosmos-sdk/issues/14647
_ "cosmossdk.io/api/cosmos/bank/v1beta1"
_ "cosmossdk.io/api/cosmos/crypto/secp256k1"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
"cosmossdk.io/core/appmodule"
"cosmossdk.io/core/header"
coretesting "cosmossdk.io/core/testing"
storetypes "cosmossdk.io/store/types"
txsigning "cosmossdk.io/x/tx/signing"
"github.com/cosmos/cosmos-sdk/baseapp"
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/client/tx"
codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil"
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
"github.com/cosmos/cosmos-sdk/runtime"
"github.com/cosmos/cosmos-sdk/testutil"
@ -192,7 +196,7 @@ func (suite *AnteTestSuite) DeliverMsgs(t *testing.T, privs []cryptotypes.PrivKe
suite.txBuilder.SetFeeAmount(feeAmount)
suite.txBuilder.SetGasLimit(gasLimit)
tx, txErr := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, chainID, signing.SignMode_SIGN_MODE_DIRECT)
tx, txErr := suite.CreateTestTx(suite.ctx, privs, accNums, accSeqs, chainID, apisigning.SignMode_SIGN_MODE_DIRECT)
require.NoError(t, txErr)
txBytes, err := suite.clientCtx.TxConfig.TxEncoder()(tx)
bytesCtx := suite.ctx.WithTxBytes(txBytes)
@ -209,7 +213,7 @@ func (suite *AnteTestSuite) RunTestCase(t *testing.T, tc TestCase, args TestCase
// Theoretically speaking, ante handler unit tests should only test
// ante handlers, but here we sometimes also test the tx creation
// process.
tx, txErr := suite.CreateTestTx(suite.ctx, args.privs, args.accNums, args.accSeqs, args.chainID, signing.SignMode_SIGN_MODE_DIRECT)
tx, txErr := suite.CreateTestTx(suite.ctx, args.privs, args.accNums, args.accSeqs, args.chainID, apisigning.SignMode_SIGN_MODE_DIRECT)
txBytes, err := suite.clientCtx.TxConfig.TxEncoder()(tx)
require.NoError(t, err)
bytesCtx := suite.ctx.WithTxBytes(txBytes)
@ -241,7 +245,7 @@ func (suite *AnteTestSuite) RunTestCase(t *testing.T, tc TestCase, args TestCase
func (suite *AnteTestSuite) CreateTestTx(
ctx sdk.Context, privs []cryptotypes.PrivKey,
accNums, accSeqs []uint64,
chainID string, signMode signing.SignMode,
chainID string, signMode apisigning.SignMode,
) (xauthsigning.Tx, error) {
// First round: we gather all the signer infos. We use the "set empty
// signature" hack to do that.
@ -266,12 +270,17 @@ func (suite *AnteTestSuite) CreateTestTx(
// Second round: all signer infos are set, so each signer can sign.
sigsV2 = []signing.SignatureV2{}
for i, priv := range privs {
signerData := xauthsigning.SignerData{
anyPk, err := codectypes.NewAnyWithValue(priv.PubKey())
if err != nil {
return nil, err
}
signerData := txsigning.SignerData{
Address: sdk.AccAddress(priv.PubKey().Address()).String(),
ChainID: chainID,
AccountNumber: accNums[i],
Sequence: accSeqs[i],
PubKey: priv.PubKey(),
PubKey: &anypb.Any{TypeUrl: anyPk.TypeUrl, Value: anyPk.Value},
}
sigV2, err := tx.SignWithPrivKey(
ctx, signMode, signerData,

View File

@ -6,13 +6,13 @@ import (
"github.com/stretchr/testify/require"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
"cosmossdk.io/core/header"
storetypes "cosmossdk.io/store/types"
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
"github.com/cosmos/cosmos-sdk/testutil/testdata"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/tx/signing"
"github.com/cosmos/cosmos-sdk/x/auth/ante"
"github.com/cosmos/cosmos-sdk/x/auth/ante/unorderedtx"
)
@ -162,7 +162,7 @@ func genUnorderedTx(t *testing.T, unordered bool, timestamp time.Time) (sdk.Tx,
s.txBuilder.SetTimeoutTimestamp(timestamp)
privKeys, accNums, accSeqs := []cryptotypes.PrivKey{priv1}, []uint64{0}, []uint64{0}
tx, err := s.CreateTestTx(s.ctx, privKeys, accNums, accSeqs, s.ctx.ChainID(), signing.SignMode_SIGN_MODE_DIRECT)
tx, err := s.CreateTestTx(s.ctx, privKeys, accNums, accSeqs, s.ctx.ChainID(), apisigning.SignMode_SIGN_MODE_DIRECT)
require.NoError(t, err)
txBz, err := ante.TxIdentifier(uint64(timestamp.Unix()), tx)

View File

@ -10,6 +10,7 @@ import (
"github.com/spf13/viper"
"google.golang.org/protobuf/types/known/anypb"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
errorsmod "cosmossdk.io/errors"
txsigning "cosmossdk.io/x/tx/signing"
@ -91,8 +92,8 @@ func makeMultiSignCmd() func(cmd *cobra.Command, args []string) (err error) {
if err != nil {
return err
}
if txFactory.SignMode() == signingtypes.SignMode_SIGN_MODE_UNSPECIFIED {
txFactory = txFactory.WithSignMode(signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
if txFactory.SignMode() == apisigning.SignMode_SIGN_MODE_UNSPECIFIED {
txFactory = txFactory.WithSignMode(apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
}
txCfg := clientCtx.TxConfig
@ -262,8 +263,8 @@ func makeBatchMultisignCmd() func(cmd *cobra.Command, args []string) error {
if err != nil {
return err
}
if txFactory.SignMode() == signingtypes.SignMode_SIGN_MODE_UNSPECIFIED {
txFactory = txFactory.WithSignMode(signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
if txFactory.SignMode() == apisigning.SignMode_SIGN_MODE_UNSPECIFIED {
txFactory = txFactory.WithSignMode(apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
}
// reads tx from args[0]

View File

@ -118,23 +118,17 @@ func printAndValidateSigs(
return false
}
signingData := authsigning.SignerData{
Address: sigAddr.String(),
ChainID: chainID,
AccountNumber: accNum,
Sequence: accSeq,
PubKey: pubKey,
}
anyPk, err := codectypes.NewAnyWithValue(pubKey)
if err != nil {
cmd.PrintErrf("failed to pack public key: %v", err)
return false
}
txSignerData := txsigning.SignerData{
ChainID: signingData.ChainID,
AccountNumber: signingData.AccountNumber,
Sequence: signingData.Sequence,
Address: signingData.Address,
ChainID: chainID,
AccountNumber: accNum,
Sequence: accSeq,
Address: sigAddr.String(),
PubKey: &anypb.Any{
TypeUrl: anyPk.TypeUrl,
Value: anyPk.Value,

View File

@ -12,12 +12,13 @@ import (
"github.com/cosmos/gogoproto/jsonpb"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/client/tx"
"github.com/cosmos/cosmos-sdk/crypto/keyring"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
"github.com/cosmos/cosmos-sdk/types/tx/signing"
)
// GasEstimateResponse defines a response definition for tx gas estimation.
@ -39,9 +40,9 @@ func SignTx(txFactory tx.Factory, clientCtx client.Context, name string, txBuild
}
// Ledger and Multisigs only support LEGACY_AMINO_JSON signing.
if txFactory.SignMode() == signing.SignMode_SIGN_MODE_UNSPECIFIED &&
if txFactory.SignMode() == apisigning.SignMode_SIGN_MODE_UNSPECIFIED &&
(k.GetType() == keyring.TypeLedger || k.GetType() == keyring.TypeMulti) {
txFactory = txFactory.WithSignMode(signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
txFactory = txFactory.WithSignMode(apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
}
pubKey, err := k.GetPubKey()
@ -75,8 +76,8 @@ func SignTxWithSignerAddress(txFactory tx.Factory, clientCtx client.Context, add
name string, txBuilder client.TxBuilder, offline, overwrite bool,
) (err error) {
// Multisigs only support LEGACY_AMINO_JSON signing.
if txFactory.SignMode() == signing.SignMode_SIGN_MODE_UNSPECIFIED {
txFactory = txFactory.WithSignMode(signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
if txFactory.SignMode() == apisigning.SignMode_SIGN_MODE_UNSPECIFIED {
txFactory = txFactory.WithSignMode(apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
}
if !offline {

View File

@ -3,6 +3,7 @@ package legacytx
import (
"fmt"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
"cosmossdk.io/errors"
"github.com/cosmos/cosmos-sdk/codec"
@ -15,9 +16,9 @@ import (
func SignatureDataToAminoSignature(cdc *codec.LegacyAmino, data signingtypes.SignatureData) ([]byte, error) {
switch data := data.(type) {
case *signingtypes.SingleSignatureData:
if data.SignMode != signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON {
if data.SignMode != apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON {
return nil, fmt.Errorf("wrong SignMode. Expected %s, got %s",
signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, data.SignMode)
apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, data.SignMode)
}
return data.Signature, nil

View File

@ -8,6 +8,7 @@ import (
gogoprotoany "github.com/cosmos/gogoproto/types/any"
"sigs.k8s.io/yaml"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
errorsmod "cosmossdk.io/errors"
"github.com/cosmos/cosmos-sdk/codec"
@ -153,7 +154,7 @@ func pubKeySigToSigData(cdc *codec.LegacyAmino, key cryptotypes.PubKey, sig []by
multiPK, ok := key.(multisig.PubKey)
if !ok {
return &signing.SingleSignatureData{
SignMode: signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON,
SignMode: apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON,
Signature: sig,
}, nil
}

View File

@ -10,6 +10,7 @@ import (
"google.golang.org/protobuf/types/known/anypb"
basev1beta1 "cosmossdk.io/api/cosmos/base/v1beta1"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
txv1beta1 "cosmossdk.io/api/cosmos/tx/v1beta1"
txsigning "cosmossdk.io/x/tx/signing"
"cosmossdk.io/x/tx/signing/aminojson"
@ -136,7 +137,7 @@ func TestSignatureV2Conversions(t *testing.T) {
require.NoError(t, err)
require.Equal(t, pubKey, sigV2.PubKey)
require.Equal(t, &signing.SingleSignatureData{
SignMode: signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON,
SignMode: apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON,
Signature: dummy,
}, sigV2.Data)
@ -157,11 +158,11 @@ func TestSignatureV2Conversions(t *testing.T) {
BitArray: bitArray,
Signatures: []signing.SignatureData{
&signing.SingleSignatureData{
SignMode: signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON,
SignMode: apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON,
Signature: dummy,
},
&signing.SingleSignatureData{
SignMode: signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON,
SignMode: apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON,
Signature: dummy2,
},
},
@ -197,7 +198,7 @@ func TestGetSignaturesV2(t *testing.T) {
require.Equal(t, cdc.MustMarshal(sigs[0].PubKey), cdc.MustMarshal(sig.GetPubKey()))
require.Equal(t, sigs[0].Data, &signing.SingleSignatureData{
SignMode: signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON,
SignMode: apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON,
Signature: sig.GetSignature(),
})
}

View File

@ -6,11 +6,10 @@ import (
"google.golang.org/protobuf/types/known/anypb"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
txsigning "cosmossdk.io/x/tx/signing"
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/tx/signing"
)
// V2AdaptableTx is an interface that wraps the GetSigningTxData method.
@ -26,8 +25,8 @@ type V2AdaptableTx interface {
func GetSignBytesAdapter(
ctx context.Context,
handlerMap *txsigning.HandlerMap,
mode signing.SignMode,
signerData SignerData,
mode apisigning.SignMode,
signerData txsigning.SignerData,
tx sdk.Tx,
) ([]byte, error) {
adaptableTx, ok := tx.(V2AdaptableTx)
@ -36,21 +35,11 @@ func GetSignBytesAdapter(
}
txData := adaptableTx.GetSigningTxData()
txSignMode, err := internalSignModeToAPI(mode)
if err != nil {
return nil, err
}
var pubKey *anypb.Any
if signerData.PubKey != nil {
anyPk, err := codectypes.NewAnyWithValue(signerData.PubKey)
if err != nil {
return nil, err
}
pubKey = &anypb.Any{
TypeUrl: anyPk.TypeUrl,
Value: anyPk.Value,
TypeUrl: signerData.PubKey.TypeUrl,
Value: signerData.PubKey.Value,
}
}
txSignerData := txsigning.SignerData{
@ -61,5 +50,5 @@ func GetSignBytesAdapter(
PubKey: pubKey,
}
// Generate the bytes to be signed.
return handlerMap.GetSignBytes(ctx, txSignMode, txSignerData, txData)
return handlerMap.GetSignBytes(ctx, mode, txSignerData, txData)
}

View File

@ -6,10 +6,12 @@ import (
"github.com/stretchr/testify/require"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
txsigning "cosmossdk.io/x/tx/signing"
codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil"
"github.com/cosmos/cosmos-sdk/testutil/testdata"
moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil"
"github.com/cosmos/cosmos-sdk/types/tx/signing"
authsign "github.com/cosmos/cosmos-sdk/x/auth/signing"
)
@ -17,7 +19,7 @@ func TestGetSignBytesAdapterNoPublicKey(t *testing.T) {
encodingConfig := moduletestutil.MakeTestEncodingConfig(codectestutil.CodecOptions{})
txConfig := encodingConfig.TxConfig
_, _, addr := testdata.KeyTestPubAddr()
signerData := authsign.SignerData{
signerData := txsigning.SignerData{
Address: addr.String(),
ChainID: "test-chain",
AccountNumber: 11,
@ -27,7 +29,7 @@ func TestGetSignBytesAdapterNoPublicKey(t *testing.T) {
_, err := authsign.GetSignBytesAdapter(
context.Background(),
txConfig.SignModeHandler(),
signing.SignMode_SIGN_MODE_DIRECT,
apisigning.SignMode_SIGN_MODE_DIRECT,
signerData,
w.GetTx())
require.NoError(t, err)

View File

@ -1,11 +1,10 @@
package signing
import (
"context"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
"cosmossdk.io/x/tx/signing"
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/tx/signing"
)
// SignModeHandler defines a interface to be implemented by types which will handle
@ -13,57 +12,15 @@ import (
type SignModeHandler interface {
// DefaultMode is the default mode that is to be used with this handler if no
// other mode is specified. This can be useful for testing and CLI usage
DefaultMode() signing.SignMode
DefaultMode() apisigning.SignMode
// Modes is the list of modes supporting by this handler
Modes() []signing.SignMode
Modes() []apisigning.SignMode
// GetSignBytes returns the sign bytes for the provided SignMode, SignerData and Tx,
// or an error
GetSignBytes(mode signing.SignMode, data SignerData, tx sdk.Tx) ([]byte, error)
GetSignBytes(mode apisigning.SignMode, data signing.SignerData, tx sdk.Tx) ([]byte, error)
}
// SignModeHandlerWithContext is like SignModeHandler, with a new GetSignBytes
// method which takes an additional context.Context argument, to be used to
// access state. Consumers should preferably type-cast to this interface and
// pass in the context.Context arg, and default to SignModeHandler otherwise.
// This interface is created for backwards compatibility, and will be
// deleted once SDK versions <v0.47 are not supported anymore.
type SignModeHandlerWithContext interface {
SignModeHandler
// GetSignBytesWithContext returns the sign bytes for the provided SignMode, SignerData and Tx,
// or an error
GetSignBytesWithContext(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
// isn't included in the transaction body itself
type SignerData struct {
// The address of the signer.
//
// In case of multisigs, this should be the multisig's address.
Address string
// ChainID is the chain that this transaction is targeted
ChainID string
// AccountNumber is the account number of the signer.
//
// In case of multisigs, this should be the multisig account number.
AccountNumber uint64
// Sequence is the account sequence number of the signer that is used
// for replay protection. This field is only useful for Legacy Amino signing,
// since in SIGN_MODE_DIRECT the account sequence is already in the signer
// info.
//
// In case of multisigs, this should be the multisig sequence.
Sequence uint64
// PubKey is the public key of the signer.
//
// In case of multisigs, this should be the pubkey of the member of the
// multisig that is signing the current sign doc.
PubKey cryptotypes.PubKey
}
// Deprecated: Please us x/tx/signing.SignerData instead
type SignerData = signing.SignerData

View File

@ -5,7 +5,7 @@ import (
"encoding/hex"
"fmt"
signingv1beta1 "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
txsigning "cosmossdk.io/x/tx/signing"
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
@ -13,51 +13,6 @@ import (
"github.com/cosmos/cosmos-sdk/types/tx/signing"
)
// APISignModesToInternal converts a protobuf SignMode array to a signing.SignMode array.
func APISignModesToInternal(modes []signingv1beta1.SignMode) ([]signing.SignMode, error) {
internalModes := make([]signing.SignMode, len(modes))
for i, mode := range modes {
internalMode, err := APISignModeToInternal(mode)
if err != nil {
return nil, err
}
internalModes[i] = internalMode
}
return internalModes, nil
}
// APISignModeToInternal converts a protobuf SignMode to a signing.SignMode.
func APISignModeToInternal(mode signingv1beta1.SignMode) (signing.SignMode, error) {
switch mode {
case signingv1beta1.SignMode_SIGN_MODE_DIRECT:
return signing.SignMode_SIGN_MODE_DIRECT, nil
case signingv1beta1.SignMode_SIGN_MODE_LEGACY_AMINO_JSON:
return signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, nil
case signingv1beta1.SignMode_SIGN_MODE_TEXTUAL:
return signing.SignMode_SIGN_MODE_TEXTUAL, nil
case signingv1beta1.SignMode_SIGN_MODE_DIRECT_AUX:
return signing.SignMode_SIGN_MODE_DIRECT_AUX, nil
default:
return signing.SignMode_SIGN_MODE_UNSPECIFIED, fmt.Errorf("unsupported sign mode %s", mode)
}
}
// internalSignModeToAPI converts a signing.SignMode to a protobuf SignMode.
func internalSignModeToAPI(mode signing.SignMode) (signingv1beta1.SignMode, error) {
switch mode {
case signing.SignMode_SIGN_MODE_DIRECT:
return signingv1beta1.SignMode_SIGN_MODE_DIRECT, nil
case signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON:
return signingv1beta1.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, nil
case signing.SignMode_SIGN_MODE_TEXTUAL:
return signingv1beta1.SignMode_SIGN_MODE_TEXTUAL, nil
case signing.SignMode_SIGN_MODE_DIRECT_AUX:
return signingv1beta1.SignMode_SIGN_MODE_DIRECT_AUX, nil
default:
return signingv1beta1.SignMode_SIGN_MODE_UNSPECIFIED, fmt.Errorf("unsupported sign mode %s", mode)
}
}
// VerifySignature verifies a transaction signature contained in SignatureData abstracting over different signing
// modes. It differs from VerifySignature in that it uses the new txsigning.TxData interface in x/tx.
func VerifySignature(
@ -70,11 +25,7 @@ func VerifySignature(
) error {
switch data := signatureData.(type) {
case *signing.SingleSignatureData:
signMode, err := internalSignModeToAPI(data.SignMode)
if err != nil {
return err
}
signBytes, err := handler.GetSignBytes(ctx, signMode, signerData, txData)
signBytes, err := handler.GetSignBytes(ctx, data.SignMode, signerData, txData)
if err != nil {
return err
}
@ -88,12 +39,8 @@ func VerifySignature(
if !ok {
return fmt.Errorf("expected %T, got %T", (multisig.PubKey)(nil), pubKey)
}
err := multiPK.VerifyMultisignature(func(mode signing.SignMode) ([]byte, error) {
signMode, err := internalSignModeToAPI(mode)
if err != nil {
return nil, err
}
return handler.GetSignBytes(ctx, signMode, signerData, txData)
err := multiPK.VerifyMultisignature(func(mode apisigning.SignMode) ([]byte, error) {
return handler.GetSignBytes(ctx, mode, signerData, txData)
}, data)
if err != nil {
return err

View File

@ -5,6 +5,10 @@ import (
"testing"
"github.com/stretchr/testify/require"
"google.golang.org/protobuf/types/known/anypb"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
txsigning "cosmossdk.io/x/tx/signing"
clienttx "github.com/cosmos/cosmos-sdk/client/tx"
codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil"
@ -66,7 +70,7 @@ func TestBuilderWithAux(t *testing.T) {
require.NoError(t, err)
aux2Builder.SetExtensionOptions(extOptAny)
aux2Builder.SetNonCriticalExtensionOptions(extOptAny)
err = aux2Builder.SetSignMode(signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
err = aux2Builder.SetSignMode(apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON)
require.NoError(t, err)
signBz, err := aux2Builder.GetSignBytes()
require.NoError(t, err)
@ -133,16 +137,22 @@ func TestBuilderWithAux(t *testing.T) {
})
require.NoError(t, err)
signerData := authsigning.SignerData{
anyPk, err := codectypes.NewAnyWithValue(feepayerPk)
require.NoError(t, err)
signerData := txsigning.SignerData{
Address: feepayerAddr.String(),
ChainID: chainID,
AccountNumber: 11,
Sequence: 15,
PubKey: feepayerPk,
PubKey: &anypb.Any{
TypeUrl: anyPk.TypeUrl,
Value: anyPk.Value,
},
}
signBz, err = authsigning.GetSignBytesAdapter(
context.Background(), txConfig.SignModeHandler(), signing.SignMode_SIGN_MODE_DIRECT,
context.Background(), txConfig.SignModeHandler(), apisigning.SignMode_SIGN_MODE_DIRECT,
signerData, w.GetTx())
require.NoError(t, err)
@ -152,7 +162,7 @@ func TestBuilderWithAux(t *testing.T) {
err = w.SetSignatures(txSigV2, aux2SigV2, signing.SignatureV2{
PubKey: feepayerPk,
Data: &signing.SingleSignatureData{
SignMode: signing.SignMode_SIGN_MODE_DIRECT,
SignMode: apisigning.SignMode_SIGN_MODE_DIRECT,
Signature: feepayerSig,
},
Sequence: 22,
@ -175,17 +185,17 @@ func TestBuilderWithAux(t *testing.T) {
require.Len(t, sigs, 3)
require.Equal(t, signing.SignatureV2{
PubKey: tipperPk,
Data: &signing.SingleSignatureData{SignMode: signing.SignMode_SIGN_MODE_DIRECT_AUX, Signature: txSig},
Data: &signing.SingleSignatureData{SignMode: apisigning.SignMode_SIGN_MODE_DIRECT_AUX, Signature: txSig},
Sequence: 2,
}, sigs[0])
require.Equal(t, signing.SignatureV2{
PubKey: aux2Pk,
Data: &signing.SingleSignatureData{SignMode: signing.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, Signature: aux2Sig},
Data: &signing.SingleSignatureData{SignMode: apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, Signature: aux2Sig},
Sequence: 12,
}, sigs[1])
require.Equal(t, signing.SignatureV2{
PubKey: feepayerPk,
Data: &signing.SingleSignatureData{SignMode: signing.SignMode_SIGN_MODE_DIRECT, Signature: feepayerSig},
Data: &signing.SingleSignatureData{SignMode: apisigning.SignMode_SIGN_MODE_DIRECT, Signature: feepayerSig},
Sequence: 22,
}, sigs[2])
}
@ -207,7 +217,7 @@ func makeTxBuilder(t *testing.T) (clienttx.AuxTxBuilder, []byte) {
require.NoError(t, err)
txBuilder.SetExtensionOptions(extOptAny)
txBuilder.SetNonCriticalExtensionOptions(extOptAny)
err = txBuilder.SetSignMode(signing.SignMode_SIGN_MODE_DIRECT_AUX)
err = txBuilder.SetSignMode(apisigning.SignMode_SIGN_MODE_DIRECT_AUX)
require.NoError(t, err)
signBz, err := txBuilder.GetSignBytes()
require.NoError(t, err)

View File

@ -4,6 +4,7 @@ import (
"errors"
"fmt"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
"cosmossdk.io/core/address"
txdecode "cosmossdk.io/x/tx/decode"
txsigning "cosmossdk.io/x/tx/signing"
@ -15,7 +16,6 @@ import (
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
signingtypes "github.com/cosmos/cosmos-sdk/types/tx/signing"
)
type config struct {
@ -37,7 +37,7 @@ type ConfigOptions struct {
// txsigning.HandlerMap.
SigningHandler *txsigning.HandlerMap
// EnabledSignModes is the list of sign modes that will be enabled in the txsigning.HandlerMap.
EnabledSignModes []signingtypes.SignMode
EnabledSignModes []apisigning.SignMode
// If SigningContext is specified it will be used when constructing sign mode handlers. If nil, one will be created
// with the options specified in SigningOptions.
SigningContext *txsigning.Context
@ -60,11 +60,11 @@ type ConfigOptions struct {
}
// DefaultSignModes are the default sign modes enabled for protobuf transactions.
var DefaultSignModes = []signingtypes.SignMode{
signingtypes.SignMode_SIGN_MODE_DIRECT,
signingtypes.SignMode_SIGN_MODE_DIRECT_AUX,
signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON,
// signingtypes.SignMode_SIGN_MODE_TEXTUAL is not enabled by default, as it requires a x/bank keeper or gRPC connection.
var DefaultSignModes = []apisigning.SignMode{
apisigning.SignMode_SIGN_MODE_DIRECT,
apisigning.SignMode_SIGN_MODE_DIRECT_AUX,
apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON,
// apisigning.SignMode_SIGN_MODE_TEXTUAL is not enabled by default, as it requires a x/bank keeper or gRPC connection.
}
// NewTxConfig returns a new protobuf TxConfig using the provided ProtoCodec and sign modes. The
@ -76,7 +76,7 @@ var DefaultSignModes = []signingtypes.SignMode{
// We prefer to use depinject to provide client.TxConfig, but we permit this constructor usage. Within the SDK,
// this constructor is primarily used in tests, but also sees usage in app chains like:
// https://github.com/evmos/evmos/blob/719363fbb92ff3ea9649694bd088e4c6fe9c195f/encoding/config.go#L37
func NewTxConfig(protoCodec codec.Codec, addressCodec, validatorAddressCodec address.Codec, enabledSignModes []signingtypes.SignMode, customSignModes ...txsigning.SignModeHandler,
func NewTxConfig(protoCodec codec.Codec, addressCodec, validatorAddressCodec address.Codec, enabledSignModes []apisigning.SignMode, customSignModes ...txsigning.SignModeHandler,
) client.TxConfig {
txConfig, err := NewTxConfigWithOptions(protoCodec, ConfigOptions{
EnabledSignModes: enabledSignModes,
@ -127,9 +127,9 @@ func NewSigningHandlerMap(configOpts ConfigOptions) (*txsigning.HandlerMap, erro
for i, m := range configOpts.EnabledSignModes {
var err error
switch m {
case signingtypes.SignMode_SIGN_MODE_DIRECT:
case apisigning.SignMode_SIGN_MODE_DIRECT:
handlers[i] = &direct.SignModeHandler{}
case signingtypes.SignMode_SIGN_MODE_DIRECT_AUX:
case apisigning.SignMode_SIGN_MODE_DIRECT_AUX:
handlers[i], err = directaux.NewSignModeHandler(directaux.SignModeHandlerOptions{
TypeResolver: signingOpts.TypeResolver,
SignersContext: configOpts.SigningContext,
@ -137,12 +137,12 @@ func NewSigningHandlerMap(configOpts ConfigOptions) (*txsigning.HandlerMap, erro
if err != nil {
return nil, err
}
case signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON:
case apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON:
handlers[i] = aminojson.NewSignModeHandler(aminojson.SignModeHandlerOptions{
FileResolver: signingOpts.FileResolver,
TypeResolver: signingOpts.TypeResolver,
})
case signingtypes.SignMode_SIGN_MODE_TEXTUAL:
case apisigning.SignMode_SIGN_MODE_TEXTUAL:
handlers[i], err = textual.NewSignModeHandler(textual.SignModeOptions{
CoinMetadataQuerier: configOpts.TextualCoinMetadataQueryFn,
FileResolver: signingOpts.FileResolver,

View File

@ -3,7 +3,9 @@ package tx
import (
"fmt"
apisigning "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
errorsmod "cosmossdk.io/errors"
txsigning "cosmossdk.io/x/tx/signing"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
@ -28,18 +30,18 @@ func NewSignModeLegacyAminoJSONHandler() signing.SignModeHandler {
}
// Deprecated: Please use x/tx/signing/aminojson instead.
func (s signModeLegacyAminoJSONHandler) DefaultMode() signingtypes.SignMode {
return signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON
func (s signModeLegacyAminoJSONHandler) DefaultMode() apisigning.SignMode {
return apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON
}
// Deprecated: Please use x/tx/signing/aminojson instead.
func (s signModeLegacyAminoJSONHandler) Modes() []signingtypes.SignMode {
return []signingtypes.SignMode{signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON}
func (s signModeLegacyAminoJSONHandler) Modes() []apisigning.SignMode {
return []apisigning.SignMode{apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON}
}
// Deprecated: Please use x/tx/signing/aminojson instead.
func (s signModeLegacyAminoJSONHandler) GetSignBytes(mode signingtypes.SignMode, data signing.SignerData, tx sdk.Tx) ([]byte, error) {
if mode != signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON {
func (s signModeLegacyAminoJSONHandler) GetSignBytes(mode apisigning.SignMode, data txsigning.SignerData, tx sdk.Tx) ([]byte, error) {
if mode != apisigning.SignMode_SIGN_MODE_LEGACY_AMINO_JSON {
return nil, fmt.Errorf("expected %s, got %s", signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON, mode)
}

View File

@ -21,9 +21,11 @@ func SignatureDataToModeInfoAndSig(data signing.SignatureData) (*tx.ModeInfo, []
switch data := data.(type) {
case *signing.SingleSignatureData:
signMode, _ := signing.APISignModeToInternal(data.SignMode)
return &tx.ModeInfo{
Sum: &tx.ModeInfo_Single_{
Single: &tx.ModeInfo_Single{Mode: data.SignMode},
Single: &tx.ModeInfo_Single{Mode: signMode},
},
}, data.Signature
case *signing.MultiSignatureData:
@ -62,7 +64,7 @@ func ModeInfoAndSigToSignatureData(modeInfoPb *txv1beta1.ModeInfo, sig []byte) (
switch modeInfo := modeInfoPb.Sum.(type) {
case *txv1beta1.ModeInfo_Single_:
return &signing.SingleSignatureData{
SignMode: signing.SignMode(modeInfo.Single.Mode),
SignMode: modeInfo.Single.Mode,
Signature: sig,
}, nil

View File

@ -6,11 +6,14 @@ import (
"strings"
"github.com/stretchr/testify/suite"
"google.golang.org/protobuf/types/known/anypb"
signingv1beta1 "cosmossdk.io/api/cosmos/tx/signing/v1beta1"
"cosmossdk.io/math"
txsigning "cosmossdk.io/x/tx/signing"
"github.com/cosmos/cosmos-sdk/client"
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
kmultisig "github.com/cosmos/cosmos-sdk/crypto/keys/multisig"
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
"github.com/cosmos/cosmos-sdk/crypto/types/multisig"
@ -105,8 +108,7 @@ func (s *TxConfigTestSuite) TestTxBuilderSetSignatures() {
signModeHandler := s.TxConfig.SignModeHandler()
s.Require().Contains(signModeHandler.SupportedModes(), signingv1beta1.SignMode_SIGN_MODE_DIRECT)
defaultSignMode, err := signing.APISignModeToInternal(s.TxConfig.SignModeHandler().DefaultMode())
s.Require().NoError(err)
defaultSignMode := s.TxConfig.SignModeHandler().DefaultMode()
// set SignatureV2 without actual signature bytes
seq1 := uint64(2) // Arbitrary account sequence
@ -139,12 +141,15 @@ func (s *TxConfigTestSuite) TestTxBuilderSetSignatures() {
s.Require().NoError(sigTx.ValidateBasic())
// sign transaction
signerData := signing.SignerData{
anyPk, err := codectypes.NewAnyWithValue(pubkey)
s.Require().NoError(err)
signerData := txsigning.SignerData{
Address: addr.String(),
ChainID: "test",
AccountNumber: 1,
Sequence: seq1,
PubKey: pubkey,
PubKey: &anypb.Any{TypeUrl: anyPk.TypeUrl, Value: anyPk.Value},
}
signBytes, err := signing.GetSignBytesAdapter(context.Background(),
s.TxConfig.SignModeHandler(), defaultSignMode, signerData, sigTx)
@ -152,12 +157,15 @@ func (s *TxConfigTestSuite) TestTxBuilderSetSignatures() {
sigBz, err := privKey.Sign(signBytes)
s.Require().NoError(err)
signerData = signing.SignerData{
anyPk, err = codectypes.NewAnyWithValue(multisigPk)
s.Require().NoError(err)
signerData = txsigning.SignerData{
Address: msigAddr.String(),
ChainID: "test",
AccountNumber: 3,
Sequence: mseq,
PubKey: multisigPk,
PubKey: &anypb.Any{TypeUrl: anyPk.TypeUrl, Value: anyPk.Value},
}
mSignBytes, err := signing.GetSignBytesAdapter(context.Background(),
s.TxConfig.SignModeHandler(), defaultSignMode, signerData, sigTx)
@ -251,7 +259,7 @@ func (s *TxConfigTestSuite) TestTxEncodeDecode() {
sig := signingtypes.SignatureV2{
PubKey: pubkey,
Data: &signingtypes.SingleSignatureData{
SignMode: signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON,
SignMode: signingv1beta1.SignMode_SIGN_MODE_LEGACY_AMINO_JSON,
Signature: dummySig,
},
}