Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(x/tx): legacy amino json sign mode handler #15515

Merged
merged 68 commits into from
Apr 3, 2023
Merged
Show file tree
Hide file tree
Changes from 62 commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
02e4e30
feat(x/tx): tx decoder
aaronc Mar 6, 2023
d543361
stubs
kocubinski Mar 15, 2023
8938ece
add some docs
kocubinski Mar 15, 2023
47339f3
Merge branch 'main' of github.com:cosmos/cosmos-sdk into kocubinski/x…
kocubinski Mar 15, 2023
2fa188c
Merge branch 'main' of github.com:cosmos/cosmos-sdk into kocubinski/s…
kocubinski Mar 15, 2023
d4eed84
Merge branch 'kocubinski/x-tx-decode' into kocubinski/sign-legacy-ami…
kocubinski Mar 15, 2023
5cba9a0
Merge branch 'main' of github.com:cosmos/cosmos-sdk into kocubinski/s…
kocubinski Mar 16, 2023
67f4c9d
feat(t/tx): amino json signer
kocubinski Mar 16, 2023
92897dc
work on tests
kocubinski Mar 16, 2023
ab6a104
Merge branch 'main' of github.com:cosmos/cosmos-sdk into kocubinski/s…
kocubinski Mar 20, 2023
0cb366f
fix minor bug in unknown field filtering
kocubinski Mar 20, 2023
f48fe15
failing regression tests
kocubinski Mar 20, 2023
19d3a6e
troubling edge case
kocubinski Mar 22, 2023
b0fa3ec
Merge branch 'main' of github.com:cosmos/cosmos-sdk into kocubinski/s…
kocubinski Mar 22, 2023
2d7ae02
dec marshal fix
kocubinski Mar 22, 2023
92fab79
test of test suite
kocubinski Mar 22, 2023
e508eee
Merge branch 'main' of github.com:cosmos/cosmos-sdk into kocubinski/s…
kocubinski Mar 22, 2023
cf1a300
commit old behavior prior to math release
kocubinski Mar 22, 2023
d36ee09
clean up test
kocubinski Mar 22, 2023
a85bf45
Add a comment in proto
kocubinski Mar 22, 2023
62871f2
remove decoder files not used in this PR
kocubinski Mar 22, 2023
130686d
clean up
kocubinski Mar 22, 2023
0322ae2
remove comment
kocubinski Mar 22, 2023
dd69f28
Merge branch 'main' into kocubinski/sign-legacy-amino-json
kocubinski Mar 22, 2023
538126a
clean up, comments
kocubinski Mar 22, 2023
cedee9f
Merge branch 'kocubinski/sign-legacy-amino-json' of github.com:cosmos…
kocubinski Mar 22, 2023
1f64a2b
Merge branch 'main' of github.com:cosmos/cosmos-sdk into kocubinski/s…
kocubinski Mar 23, 2023
926b6d1
move proto IDL to internal package
kocubinski Mar 23, 2023
5115372
revert proto file
kocubinski Mar 23, 2023
09356e1
use latest math in tests
kocubinski Mar 23, 2023
2c9c7a3
Merge branch 'main' of github.com:cosmos/cosmos-sdk into kocubinski/s…
kocubinski Mar 23, 2023
663fcec
go mod tidy
kocubinski Mar 23, 2023
639f0ad
porting tests
kocubinski Mar 27, 2023
9172350
remove isWireTypeAssignable check
kocubinski Mar 27, 2023
dab6001
fn comment
kocubinski Mar 27, 2023
5f4498f
Merge branch 'main' of github.com:cosmos/cosmos-sdk into kocubinski/s…
kocubinski Mar 27, 2023
627292e
feat(x/tx): unknown field filtering
kocubinski Mar 27, 2023
b3753ba
include test proto messages
kocubinski Mar 27, 2023
282ca31
rm debug prints
kocubinski Mar 27, 2023
ed7f718
fix test format
kocubinski Mar 27, 2023
bc61efb
Merge branch 'kocubinski/proto3-unknown-fields' into kocubinski/sign-…
kocubinski Mar 27, 2023
8d7aa3e
Merge branch 'main' of github.com:cosmos/cosmos-sdk into kocubinski/s…
kocubinski Mar 28, 2023
8842ec2
Merge branch 'main' of github.com:cosmos/cosmos-sdk into kocubinski/s…
kocubinski Mar 28, 2023
b4e38be
add changelog entry
kocubinski Mar 28, 2023
74f59cc
rm replace for api in x/tx
kocubinski Mar 28, 2023
46aa5e2
remove util.go
kocubinski Mar 28, 2023
827583e
rm gogoproto usage
kocubinski Mar 28, 2023
bf8e09e
rm gogoproto usage
kocubinski Mar 28, 2023
b960845
Merge branch 'main' of github.com:cosmos/cosmos-sdk into kocubinski/s…
kocubinski Mar 28, 2023
b3ba333
Merge branch 'main' into kocubinski/sign-legacy-amino-json
kocubinski Mar 29, 2023
8f9f1de
add some code coverage
kocubinski Mar 29, 2023
0bb743c
Merge branch 'main' of github.com:cosmos/cosmos-sdk into kocubinski/s…
kocubinski Mar 29, 2023
0afc8a1
Merge branch 'kocubinski/sign-legacy-amino-json' of github.com:cosmos…
kocubinski Mar 29, 2023
82a939a
Merge branch 'main' of github.com:cosmos/cosmos-sdk into kocubinski/s…
kocubinski Mar 30, 2023
4746863
fix filename. ensure codegen works from make proto-gen in root
kocubinski Mar 30, 2023
f1b8aaf
add sign modes to handler map
kocubinski Mar 30, 2023
618a118
add godoc
kocubinski Mar 30, 2023
2e9af10
Merge branch 'main' into kocubinski/sign-legacy-amino-json
kocubinski Mar 30, 2023
64d3a0c
Merge branch 'main' into kocubinski/sign-legacy-amino-json
kocubinski Mar 30, 2023
bb75b77
Merge branch 'main' into kocubinski/sign-legacy-amino-json
kocubinski Mar 30, 2023
c529379
Merge branch 'main' into kocubinski/sign-legacy-amino-json
kocubinski Mar 30, 2023
d08aaae
Merge branch 'main' into kocubinski/sign-legacy-amino-json
kocubinski Mar 31, 2023
b3bdfec
Merge branch 'main' of github.com:cosmos/cosmos-sdk into kocubinski/s…
kocubinski Apr 3, 2023
cec7445
Merge branch 'kocubinski/sign-legacy-amino-json' of github.com:cosmos…
kocubinski Apr 3, 2023
1d8d2ff
clean up and comment
kocubinski Apr 3, 2023
812be9b
Merge branch 'main' into kocubinski/sign-legacy-amino-json
kocubinski Apr 3, 2023
e96f68d
Merge branch 'main' into kocubinski/sign-legacy-amino-json
kocubinski Apr 3, 2023
bfa75f0
Merge branch 'main' into kocubinski/sign-legacy-amino-json
kocubinski Apr 3, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions scripts/protocgen-pulsar.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,6 @@ echo "Generating API module"

echo "Generate Pulsar Test Data"
(cd testutil/testdata; buf generate --template buf.gen.pulsar.yaml)

echo "Generate x/tx"
(cd x/tx; make codegen)
1 change: 1 addition & 0 deletions tests/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,7 @@ replace (
cosmossdk.io/x/evidence => ../x/evidence
cosmossdk.io/x/feegrant => ../x/feegrant
cosmossdk.io/x/nft => ../x/nft
cosmossdk.io/x/tx => ../x/tx
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this can be removed after a merge and release of x/tx.

cosmossdk.io/x/upgrade => ../x/upgrade
)

Expand Down
2 changes: 0 additions & 2 deletions tests/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -204,8 +204,6 @@ cosmossdk.io/log v1.0.0 h1:NGKZ/A5rd4PduDfoscgABklX557PWjQINbosZy/m3Jk=
cosmossdk.io/log v1.0.0/go.mod h1:CwX9BLiBruZb7lzLlRr3R231d/fVPUXk8gAdV4LQap0=
cosmossdk.io/math v1.0.0 h1:ro9w7eKx23om2tZz/VM2Pf+z2WAbGX1yDQQOJ6iGeJw=
cosmossdk.io/math v1.0.0/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k=
cosmossdk.io/x/tx v0.5.0 h1:01wPSoiYDHlfudV0fn867SBXI3uI/8tpatBgVVSnFzI=
cosmossdk.io/x/tx v0.5.0/go.mod h1:kDcwrN6QbCj+9NXVHL8qipMzA9YlMr9NpZa08SHCdLA=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek=
filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns=
Expand Down
108 changes: 101 additions & 7 deletions tests/integration/aminojson/aminojson_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package aminojson

import (
"context"
"fmt"
"reflect"
"testing"
Expand Down Expand Up @@ -38,13 +39,15 @@ import (
paramsapi "cosmossdk.io/api/cosmos/params/v1beta1"
slashingapi "cosmossdk.io/api/cosmos/slashing/v1beta1"
stakingapi "cosmossdk.io/api/cosmos/staking/v1beta1"
txv1beta1 "cosmossdk.io/api/cosmos/tx/v1beta1"
upgradeapi "cosmossdk.io/api/cosmos/upgrade/v1beta1"
vestingapi "cosmossdk.io/api/cosmos/vesting/v1beta1"
"cosmossdk.io/x/evidence"
evidencetypes "cosmossdk.io/x/evidence/types"
feegranttypes "cosmossdk.io/x/feegrant"
feegrantmodule "cosmossdk.io/x/feegrant/module"
"cosmossdk.io/x/tx/signing/aminojson"
signing_testutil "cosmossdk.io/x/tx/signing/testutil"
"cosmossdk.io/x/upgrade"
upgradetypes "cosmossdk.io/x/upgrade/types"
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
Expand All @@ -57,7 +60,10 @@ import (
"github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/bech32"
"github.com/cosmos/cosmos-sdk/types/module/testutil"
signingtypes "github.com/cosmos/cosmos-sdk/types/tx/signing"
"github.com/cosmos/cosmos-sdk/x/auth"
"github.com/cosmos/cosmos-sdk/x/auth/signing"
"github.com/cosmos/cosmos-sdk/x/auth/tx"
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
"github.com/cosmos/cosmos-sdk/x/auth/vesting"
vestingtypes "github.com/cosmos/cosmos-sdk/x/auth/vesting/types"
Expand Down Expand Up @@ -367,6 +373,50 @@ func TestAminoJSON_Equivalence(t *testing.T) {
aminoJSON, err := aj.Marshal(msg)
require.NoError(t, err)
require.Equal(t, string(legacyAminoJSON), string(aminoJSON))

// test amino json signer handler equivalence
gogoMsg, ok := gogo.(types.Msg)
if !ok {
// not signable
return
}

handlerOptions := signing_testutil.HandlerArgumentOptions{
ChainId: "test-chain",
Memo: "sometestmemo",
Msg: tt.pulsar,
AccNum: 1,
AccSeq: 2,
SignerAddress: "signerAddress",
Fee: &txv1beta1.Fee{
Amount: []*v1beta1.Coin{{Denom: "uatom", Amount: "1000"}},
},
}

signerData, txData, err := signing_testutil.MakeHandlerArguments(handlerOptions)
require.NoError(t, err)

handler := aminojson.NewSignModeHandler(aminojson.SignModeHandlerOptions{})
signBz, err := handler.GetSignBytes(context.Background(), signerData, txData)
require.NoError(t, err)

legacyHandler := tx.NewSignModeLegacyAminoJSONHandler()
txBuilder := encCfg.TxConfig.NewTxBuilder()
require.NoError(t, txBuilder.SetMsgs([]types.Msg{gogoMsg}...))
txBuilder.SetMemo(handlerOptions.Memo)
txBuilder.SetFeeAmount(types.Coins{types.NewInt64Coin("uatom", 1000)})
theTx := txBuilder.GetTx()

legacySigningData := signing.SignerData{
ChainID: handlerOptions.ChainId,
Address: handlerOptions.SignerAddress,
AccountNumber: handlerOptions.AccNum,
Sequence: handlerOptions.AccSeq,
}
legacySignBz, err := legacyHandler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON,
legacySigningData, theTx)
require.NoError(t, err)
require.Equal(t, string(legacySignBz), string(signBz))
})
})
}
Expand Down Expand Up @@ -624,6 +674,50 @@ func TestAminoJSON_LegacyParity(t *testing.T) {
return
}
require.Equal(t, string(gogoBytes), string(newGogoBytes))

// test amino json signer handler equivalence
msg, ok := tc.gogo.(types.Msg)
if !ok {
// not signable
return
}

handlerOptions := signing_testutil.HandlerArgumentOptions{
ChainId: "test-chain",
Memo: "sometestmemo",
Msg: tc.pulsar,
AccNum: 1,
AccSeq: 2,
SignerAddress: "signerAddress",
Fee: &txv1beta1.Fee{
Amount: []*v1beta1.Coin{{Denom: "uatom", Amount: "1000"}},
},
}

signerData, txData, err := signing_testutil.MakeHandlerArguments(handlerOptions)
require.NoError(t, err)

handler := aminojson.NewSignModeHandler(aminojson.SignModeHandlerOptions{})
signBz, err := handler.GetSignBytes(context.Background(), signerData, txData)
require.NoError(t, err)

legacyHandler := tx.NewSignModeLegacyAminoJSONHandler()
txBuilder := encCfg.TxConfig.NewTxBuilder()
require.NoError(t, txBuilder.SetMsgs([]types.Msg{msg}...))
txBuilder.SetMemo(handlerOptions.Memo)
txBuilder.SetFeeAmount(types.Coins{types.NewInt64Coin("uatom", 1000)})
theTx := txBuilder.GetTx()

legacySigningData := signing.SignerData{
ChainID: handlerOptions.ChainId,
Address: handlerOptions.SignerAddress,
AccountNumber: handlerOptions.AccNum,
Sequence: handlerOptions.AccSeq,
}
legacySignBz, err := legacyHandler.GetSignBytes(signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON,
legacySigningData, theTx)
require.NoError(t, err)
require.Equal(t, string(legacySignBz), string(signBz))
})
}
}
Expand Down Expand Up @@ -687,14 +781,14 @@ func TestDecimalMutation(t *testing.T) {
require.NoError(t, err)
rateBz, _ = encCfg.Amino.MarshalJSON(rates)

// these assertions show behavior prior to the merge of https://github.com/cosmos/cosmos-sdk/pull/15506
// and should be updated to reflect the new behavior once a release of math is made and updated in ./tests/go.mod
// require.NotEqual(t, `{"rate":"0","max_rate":"0","max_change_rate":"0"}`, string(rateBz))
// require.Equal(t,
// `{"rate":"0.000000000000000000","max_rate":"0.000000000000000000","max_change_rate":"0.000000000000000000"}`,
// string(rateBz))
// prior to the merge of https://github.com/cosmos/cosmos-sdk/pull/15506
// gogoproto.Marshal would mutate Decimal fields changing JSON output as shown in the assertions below
//require.NotEqual(t, `{"rate":"0","max_rate":"0","max_change_rate":"0"}`, string(rateBz))
//require.Equal(t,
// `{"rate":"0.000000000000000000","max_rate":"0.000000000000000000","max_change_rate":"0.000000000000000000"}`,
// string(rateBz))

// new behavior
// This is no longer the case, new behavior:
require.Equal(t, `{"rate":"0","max_rate":"0","max_change_rate":"0"}`, string(rateBz))
}

Expand Down
6 changes: 6 additions & 0 deletions x/auth/tx/legacy_amino_json.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,12 @@ var _ signing.SignModeHandler = signModeLegacyAminoJSONHandler{}
// SignModeHandler.
type signModeLegacyAminoJSONHandler struct{}

// NewSignModeLegacyAminoJSONHandler returns a new signModeLegacyAminoJSONHandler.
// Note: The public constructor is only used for testing.
func NewSignModeLegacyAminoJSONHandler() signing.SignModeHandler {
kocubinski marked this conversation as resolved.
Show resolved Hide resolved
return signModeLegacyAminoJSONHandler{}
}

func (s signModeLegacyAminoJSONHandler) DefaultMode() signingtypes.SignMode {
return signingtypes.SignMode_SIGN_MODE_LEGACY_AMINO_JSON
}
Expand Down
1 change: 1 addition & 0 deletions x/tx/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,4 @@ require a `signing.ProtoFileResolver` interface instead of `protodesc.Resolver`.

* [#15302](https://github.com/cosmos/cosmos-sdk/pull/15302) Add support for a custom registry (e.g. gogo's MergedRegistry) to be plugged into SIGN_MODE_TEXTUAL.
* [#15557](https://github.com/cosmos/cosmos-sdk/pull/15557) Implement unknown field filtering.
* [#15515](https://github.com/cosmos/cosmos-sdk/pull/15515) Implement SIGN_MODE_LEGACY_AMINO_JSON handler.
1 change: 1 addition & 0 deletions x/tx/Makefile
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
codegen:
@(cd internal/testpb; buf generate)
@(cd signing/aminojson/internal; make codegen)
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
syntax = "proto3";
package testpb;

import "gogoproto/gogo.proto";
import "google/protobuf/any.proto";
import "cosmos/tx/v1beta1/tx.proto";

Expand Down Expand Up @@ -103,7 +102,7 @@ message TestVersion1 {
TestVersion1 a = 2;
TestVersion1 b = 3; // [(gogoproto.nullable) = false] generates invalid recursive structs;
repeated TestVersion1 c = 4;
repeated TestVersion1 d = 5 [(gogoproto.nullable) = false];
repeated TestVersion1 d = 5;
oneof sum {
int32 e = 6;
TestVersion1 f = 7;
Expand All @@ -112,7 +111,7 @@ message TestVersion1 {
repeated TestVersion1 h = 9; // [(gogoproto.castrepeated) = "TestVersion1"];
// google.protobuf.Timestamp i = 10;
// google.protobuf.Timestamp j = 11; // [(gogoproto.stdtime) = true];
Customer1 k = 12 [(gogoproto.embed) = true];
Customer1 k = 12;
}
message TestVersion2 {
int64 x = 1;
Expand All @@ -128,7 +127,7 @@ message TestVersion2 {
repeated TestVersion1 h = 9; // [(gogoproto.castrepeated) = "TestVersion1"];
// google.protobuf.Timestamp i = 10;
// google.protobuf.Timestamp j = 11; // [(gogoproto.stdtime) = true];
Customer1 k = 12 [(gogoproto.embed) = true];
Customer1 k = 12;
uint64 new_field = 25;
}
message TestVersion3 {
Expand All @@ -145,7 +144,7 @@ message TestVersion3 {
repeated TestVersion1 h = 9; //[(gogoproto.castrepeated) = "TestVersion1"];
// google.protobuf.Timestamp i = 10;
// google.protobuf.Timestamp j = 11; // [(gogoproto.stdtime) = true];
Customer1 k = 12 [(gogoproto.embed) = true];
Customer1 k = 12;
string non_critical_field = 1031;
}

Expand All @@ -162,7 +161,7 @@ message TestVersion3LoneOneOfValue {
repeated TestVersion1 h = 9; //[(gogoproto.castrepeated) = "TestVersion1"];
// google.protobuf.Timestamp i = 10;
// google.protobuf.Timestamp j = 11; // [(gogoproto.stdtime) = true];
Customer1 k = 12 [(gogoproto.embed) = true];
Customer1 k = 12;
string non_critical_field = 1031;
}

Expand All @@ -179,7 +178,7 @@ message TestVersion3LoneNesting {
repeated TestVersion1 h = 9; //[(gogoproto.castrepeated) = "TestVersion1"];
// google.protobuf.Timestamp i = 10;
// google.protobuf.Timestamp j = 11; // [(gogoproto.stdtime) = true];
Customer1 k = 12 [(gogoproto.embed) = true];
Customer1 k = 12;
string non_critical_field = 1031;

message Inner1 {
Expand Down Expand Up @@ -220,7 +219,7 @@ message TestVersion4LoneNesting {
repeated TestVersion1 h = 9; //[(gogoproto.castrepeated) = "TestVersion1"];
// google.protobuf.Timestamp i = 10;
// google.protobuf.Timestamp j = 11; // [(gogoproto.stdtime) = true];
Customer1 k = 12 [(gogoproto.embed) = true];
Customer1 k = 12;
string non_critical_field = 1031;

message Inner1 {
Expand Down Expand Up @@ -271,7 +270,7 @@ message TestVersionFD1WithExtraAny {
}

message AnyWithExtra {
google.protobuf.Any a = 1 [(gogoproto.embed) = true];
google.protobuf.Any a = 1;
int64 b = 3;
int64 c = 4;
}
Expand Down
Loading