Co-authored-by: Julien Robert <julien@rbrt.fr>
This commit is contained in:
parent
9c528d5061
commit
bc49a8e7fd
@ -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`.
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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=
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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),
|
||||
|
||||
@ -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 (
|
||||
|
||||
@ -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=
|
||||
|
||||
@ -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),
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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))
|
||||
|
||||
@ -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_:
|
||||
|
||||
@ -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
39
types/tx/signing/types.go
Normal 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)
|
||||
}
|
||||
}
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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())
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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]
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
@ -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(),
|
||||
})
|
||||
}
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
|
||||
@ -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,
|
||||
},
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user