Enable proto JSON generally and remove HybridCodec (#6859)
* Remove HybridCodec * WIP on fixing proto JSON issues * WIP on fixing proto JSON issues * WIP on fixing proto JSON issues * WIP on fixing proto JSON issues * WIP on fixing proto JSON issues * Test fixes * Delete hybrid_codec.go * Fixes * Fixes * Fixes * Test fixes * Test fixes * Test fixes * Lint * Sim fixes * Sim fixes * Revert * Remove vesting account JSON tests * Update CHANGELOG.md * Lint * Sim fixes * Sim fixes * Docs * Migrate more amino usages * Remove custom VoteOption String() and json marshaling * Fix tests * Add comments, update CHANGELOG.md Co-authored-by: Jonathan Gimeno <jgimeno@gmail.com> Co-authored-by: Alexander Bezobchuk <alexanderbez@users.noreply.github.com>
This commit is contained in:
co-authored by
Jonathan Gimeno
Alexander Bezobchuk
parent
134e1dcecd
commit
816c5a37bd
+9
-6
@@ -202,7 +202,7 @@ func NewSimApp(
|
||||
memKeys: memKeys,
|
||||
}
|
||||
|
||||
app.ParamsKeeper = initParamsKeeper(appCodec, keys[paramstypes.StoreKey], tkeys[paramstypes.TStoreKey])
|
||||
app.ParamsKeeper = initParamsKeeper(appCodec, cdc, keys[paramstypes.StoreKey], tkeys[paramstypes.TStoreKey])
|
||||
|
||||
// set the BaseApp's parameter store
|
||||
bApp.SetParamStore(app.ParamsKeeper.Subspace(baseapp.Paramspace).WithKeyTable(std.ConsensusParamsKeyTable()))
|
||||
@@ -503,9 +503,12 @@ func (app *SimApp) SimulationManager() *module.SimulationManager {
|
||||
// RegisterAPIRoutes registers all application module routes with the provided
|
||||
// API server.
|
||||
func (app *SimApp) RegisterAPIRoutes(apiSvr *api.Server) {
|
||||
rpc.RegisterRoutes(apiSvr.ClientCtx, apiSvr.Router)
|
||||
authrest.RegisterTxRoutes(apiSvr.ClientCtx, apiSvr.Router)
|
||||
ModuleBasics.RegisterRESTRoutes(apiSvr.ClientCtx, apiSvr.Router)
|
||||
clientCtx := apiSvr.ClientCtx
|
||||
// amino is needed here for backwards compatibility of REST routes
|
||||
clientCtx = clientCtx.WithJSONMarshaler(clientCtx.LegacyAmino)
|
||||
rpc.RegisterRoutes(clientCtx, apiSvr.Router)
|
||||
authrest.RegisterTxRoutes(clientCtx, apiSvr.Router)
|
||||
ModuleBasics.RegisterRESTRoutes(clientCtx, apiSvr.Router)
|
||||
}
|
||||
|
||||
// GetMaccPerms returns a copy of the module account permissions
|
||||
@@ -518,8 +521,8 @@ func GetMaccPerms() map[string][]string {
|
||||
}
|
||||
|
||||
// initParamsKeeper init params keeper and its subspaces
|
||||
func initParamsKeeper(appCodec codec.Marshaler, key, tkey sdk.StoreKey) paramskeeper.Keeper {
|
||||
paramsKeeper := paramskeeper.NewKeeper(appCodec, key, tkey)
|
||||
func initParamsKeeper(appCodec codec.BinaryMarshaler, legacyAmino *codec.LegacyAmino, key, tkey sdk.StoreKey) paramskeeper.Keeper {
|
||||
paramsKeeper := paramskeeper.NewKeeper(appCodec, legacyAmino, key, tkey)
|
||||
|
||||
paramsKeeper.Subspace(authtypes.ModuleName)
|
||||
paramsKeeper.Subspace(banktypes.ModuleName)
|
||||
|
||||
+2
-3
@@ -1,6 +1,7 @@
|
||||
package simapp
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"os"
|
||||
"testing"
|
||||
|
||||
@@ -8,8 +9,6 @@ import (
|
||||
"github.com/tendermint/tendermint/libs/log"
|
||||
dbm "github.com/tendermint/tm-db"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
|
||||
abci "github.com/tendermint/tendermint/abci/types"
|
||||
)
|
||||
|
||||
@@ -18,7 +17,7 @@ func TestSimAppExport(t *testing.T) {
|
||||
app := NewSimApp(log.NewTMLogger(log.NewSyncWriter(os.Stdout)), db, nil, true, map[int64]bool{}, DefaultNodeHome, 0, MakeEncodingConfig())
|
||||
|
||||
genesisState := NewDefaultGenesisState()
|
||||
stateBytes, err := codec.MarshalJSONIndent(app.LegacyAmino(), genesisState)
|
||||
stateBytes, err := json.MarshalIndent(genesisState, "", " ")
|
||||
require.NoError(t, err)
|
||||
|
||||
// Initialize the chain
|
||||
|
||||
@@ -12,8 +12,7 @@ import (
|
||||
func MakeEncodingConfig() EncodingConfig {
|
||||
cdc := codec.New()
|
||||
interfaceRegistry := types.NewInterfaceRegistry()
|
||||
// TODO: switch to using AminoCodec here once amino compatibility is fixed
|
||||
marshaler := codec.NewHybridCodec(cdc, interfaceRegistry)
|
||||
marshaler := codec.NewAminoCodec(cdc)
|
||||
|
||||
return EncodingConfig{
|
||||
InterfaceRegistry: interfaceRegistry,
|
||||
|
||||
@@ -13,8 +13,8 @@ import (
|
||||
func MakeEncodingConfig() EncodingConfig {
|
||||
amino := codec.New()
|
||||
interfaceRegistry := types.NewInterfaceRegistry()
|
||||
marshaler := codec.NewHybridCodec(amino, interfaceRegistry)
|
||||
txCfg := tx.NewTxConfig(codec.NewProtoCodec(interfaceRegistry), std.DefaultPublicKeyCodec{}, tx.DefaultSignModes)
|
||||
marshaler := codec.NewProtoCodec(interfaceRegistry)
|
||||
txCfg := tx.NewTxConfig(marshaler, std.DefaultPublicKeyCodec{}, tx.DefaultSignModes)
|
||||
|
||||
return EncodingConfig{
|
||||
InterfaceRegistry: interfaceRegistry,
|
||||
|
||||
@@ -30,8 +30,8 @@ func BenchmarkFullAppSimulation(b *testing.B) {
|
||||
|
||||
// run randomized simulation
|
||||
_, simParams, simErr := simulation.SimulateFromSeed(
|
||||
b, os.Stdout, app.BaseApp, AppStateFn(app.LegacyAmino(), app.SimulationManager()),
|
||||
SimulationOperations(app, app.LegacyAmino(), config),
|
||||
b, os.Stdout, app.BaseApp, AppStateFn(app.AppCodec(), app.SimulationManager()),
|
||||
SimulationOperations(app, app.AppCodec(), config),
|
||||
app.ModuleAccountAddrs(), config,
|
||||
)
|
||||
|
||||
@@ -69,8 +69,8 @@ func BenchmarkInvariants(b *testing.B) {
|
||||
|
||||
// run randomized simulation
|
||||
_, simParams, simErr := simulation.SimulateFromSeed(
|
||||
b, os.Stdout, app.BaseApp, AppStateFn(app.LegacyAmino(), app.SimulationManager()),
|
||||
SimulationOperations(app, app.LegacyAmino(), config),
|
||||
b, os.Stdout, app.BaseApp, AppStateFn(app.AppCodec(), app.SimulationManager()),
|
||||
SimulationOperations(app, app.AppCodec(), config),
|
||||
app.ModuleAccountAddrs(), config,
|
||||
)
|
||||
|
||||
|
||||
+12
-12
@@ -72,8 +72,8 @@ func TestFullAppSimulation(t *testing.T) {
|
||||
|
||||
// run randomized simulation
|
||||
_, simParams, simErr := simulation.SimulateFromSeed(
|
||||
t, os.Stdout, app.BaseApp, AppStateFn(app.LegacyAmino(), app.SimulationManager()),
|
||||
SimulationOperations(app, app.LegacyAmino(), config),
|
||||
t, os.Stdout, app.BaseApp, AppStateFn(app.AppCodec(), app.SimulationManager()),
|
||||
SimulationOperations(app, app.AppCodec(), config),
|
||||
app.ModuleAccountAddrs(), config,
|
||||
)
|
||||
|
||||
@@ -104,8 +104,8 @@ func TestAppImportExport(t *testing.T) {
|
||||
|
||||
// Run randomized simulation
|
||||
_, simParams, simErr := simulation.SimulateFromSeed(
|
||||
t, os.Stdout, app.BaseApp, AppStateFn(app.LegacyAmino(), app.SimulationManager()),
|
||||
SimulationOperations(app, app.LegacyAmino(), config),
|
||||
t, os.Stdout, app.BaseApp, AppStateFn(app.AppCodec(), app.SimulationManager()),
|
||||
SimulationOperations(app, app.AppCodec(), config),
|
||||
app.ModuleAccountAddrs(), config,
|
||||
)
|
||||
|
||||
@@ -137,12 +137,12 @@ func TestAppImportExport(t *testing.T) {
|
||||
require.Equal(t, "SimApp", newApp.Name())
|
||||
|
||||
var genesisState GenesisState
|
||||
err = app.LegacyAmino().UnmarshalJSON(appState, &genesisState)
|
||||
err = json.Unmarshal(appState, &genesisState)
|
||||
require.NoError(t, err)
|
||||
|
||||
ctxA := app.NewContext(true, abci.Header{Height: app.LastBlockHeight()})
|
||||
ctxB := newApp.NewContext(true, abci.Header{Height: app.LastBlockHeight()})
|
||||
newApp.mm.InitGenesis(ctxB, app.LegacyAmino(), genesisState)
|
||||
newApp.mm.InitGenesis(ctxB, app.AppCodec(), genesisState)
|
||||
newApp.StoreConsensusParams(ctxB, consensusParams)
|
||||
|
||||
fmt.Printf("comparing stores...\n")
|
||||
@@ -195,8 +195,8 @@ func TestAppSimulationAfterImport(t *testing.T) {
|
||||
|
||||
// Run randomized simulation
|
||||
stopEarly, simParams, simErr := simulation.SimulateFromSeed(
|
||||
t, os.Stdout, app.BaseApp, AppStateFn(app.LegacyAmino(), app.SimulationManager()),
|
||||
SimulationOperations(app, app.LegacyAmino(), config),
|
||||
t, os.Stdout, app.BaseApp, AppStateFn(app.AppCodec(), app.SimulationManager()),
|
||||
SimulationOperations(app, app.AppCodec(), config),
|
||||
app.ModuleAccountAddrs(), config,
|
||||
)
|
||||
|
||||
@@ -237,8 +237,8 @@ func TestAppSimulationAfterImport(t *testing.T) {
|
||||
})
|
||||
|
||||
_, _, err = simulation.SimulateFromSeed(
|
||||
t, os.Stdout, newApp.BaseApp, AppStateFn(app.LegacyAmino(), app.SimulationManager()),
|
||||
SimulationOperations(newApp, newApp.LegacyAmino(), config),
|
||||
t, os.Stdout, newApp.BaseApp, AppStateFn(app.AppCodec(), app.SimulationManager()),
|
||||
SimulationOperations(newApp, newApp.AppCodec(), config),
|
||||
newApp.ModuleAccountAddrs(), config,
|
||||
)
|
||||
require.NoError(t, err)
|
||||
@@ -282,8 +282,8 @@ func TestAppStateDeterminism(t *testing.T) {
|
||||
)
|
||||
|
||||
_, _, err := simulation.SimulateFromSeed(
|
||||
t, os.Stdout, app.BaseApp, AppStateFn(app.LegacyAmino(), app.SimulationManager()),
|
||||
SimulationOperations(app, app.LegacyAmino(), config),
|
||||
t, os.Stdout, app.BaseApp, AppStateFn(app.AppCodec(), app.SimulationManager()),
|
||||
SimulationOperations(app, app.AppCodec(), config),
|
||||
app.ModuleAccountAddrs(), config,
|
||||
)
|
||||
require.NoError(t, err)
|
||||
|
||||
+6
-30
@@ -54,7 +54,7 @@ var (
|
||||
WithTxConfig(encodingConfig.TxConfig).
|
||||
WithLegacyAmino(encodingConfig.Amino).
|
||||
WithInput(os.Stdin).
|
||||
WithAccountRetriever(types.NewAccountRetriever(encodingConfig.Marshaler)).
|
||||
WithAccountRetriever(types.NewAccountRetriever(encodingConfig.Amino)).
|
||||
WithBroadcastMode(flags.BroadcastBlock).
|
||||
WithHomeDir(simapp.DefaultNodeHome)
|
||||
)
|
||||
@@ -79,12 +79,12 @@ func init() {
|
||||
authclient.Codec = encodingConfig.Marshaler
|
||||
|
||||
rootCmd.AddCommand(
|
||||
withProtoJSON(genutilcli.InitCmd(simapp.ModuleBasics, simapp.DefaultNodeHome)),
|
||||
withProtoJSON(genutilcli.CollectGenTxsCmd(banktypes.GenesisBalancesIterator{}, simapp.DefaultNodeHome)),
|
||||
genutilcli.InitCmd(simapp.ModuleBasics, simapp.DefaultNodeHome),
|
||||
genutilcli.CollectGenTxsCmd(banktypes.GenesisBalancesIterator{}, simapp.DefaultNodeHome),
|
||||
genutilcli.MigrateGenesisCmd(),
|
||||
withProtoJSON(genutilcli.GenTxCmd(simapp.ModuleBasics, encodingConfig.TxConfig, banktypes.GenesisBalancesIterator{}, simapp.DefaultNodeHome)),
|
||||
withProtoJSON(genutilcli.ValidateGenesisCmd(simapp.ModuleBasics, encodingConfig.TxConfig)),
|
||||
withProtoJSON(AddGenesisAccountCmd(simapp.DefaultNodeHome)),
|
||||
genutilcli.GenTxCmd(simapp.ModuleBasics, encodingConfig.TxConfig, banktypes.GenesisBalancesIterator{}, simapp.DefaultNodeHome),
|
||||
genutilcli.ValidateGenesisCmd(simapp.ModuleBasics, encodingConfig.TxConfig),
|
||||
AddGenesisAccountCmd(simapp.DefaultNodeHome),
|
||||
tmcli.NewCompletionCmd(rootCmd, true),
|
||||
testnetCmd(simapp.ModuleBasics, banktypes.GenesisBalancesIterator{}),
|
||||
debug.Cmd(),
|
||||
@@ -202,27 +202,3 @@ func exportAppStateAndTMValidators(
|
||||
|
||||
return simApp.ExportAppStateAndValidators(forZeroHeight, jailWhiteList)
|
||||
}
|
||||
|
||||
// This is a temporary command middleware to enable proto JSON marshaling for testing.
|
||||
// Once proto JSON works everywhere we can remove this and set ProtoCodec as default
|
||||
func withProtoJSON(command *cobra.Command) *cobra.Command {
|
||||
existing := command.PersistentPreRunE
|
||||
if existing != nil {
|
||||
command.PersistentPreRunE = func(cmd *cobra.Command, args []string) error {
|
||||
err := existing(cmd, args)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return setProtoJSON(cmd, args)
|
||||
}
|
||||
} else {
|
||||
command.PersistentPreRunE = setProtoJSON
|
||||
}
|
||||
return command
|
||||
}
|
||||
|
||||
func setProtoJSON(cmd *cobra.Command, _ []string) error {
|
||||
clientCtx := client.GetClientContextFromCmd(cmd)
|
||||
clientCtx = clientCtx.WithJSONMarshaler(codec.NewProtoCodec(clientCtx.InterfaceRegistry))
|
||||
return client.SetCmdClientContext(cmd, clientCtx)
|
||||
}
|
||||
|
||||
+4
-4
@@ -21,7 +21,7 @@ import (
|
||||
// AppStateFn returns the initial application state using a genesis or the simulation parameters.
|
||||
// It panics if the user provides files for both of them.
|
||||
// If a file is not given for the genesis or the sim params, it creates a randomized one.
|
||||
func AppStateFn(cdc *codec.LegacyAmino, simManager *module.SimulationManager) simtypes.AppStateFn {
|
||||
func AppStateFn(cdc codec.JSONMarshaler, simManager *module.SimulationManager) simtypes.AppStateFn {
|
||||
return func(r *rand.Rand, accs []simtypes.Account, config simtypes.Config,
|
||||
) (appState json.RawMessage, simAccs []simtypes.Account, chainID string, genesisTimestamp time.Time) {
|
||||
|
||||
@@ -71,7 +71,7 @@ func AppStateFn(cdc *codec.LegacyAmino, simManager *module.SimulationManager) si
|
||||
// AppStateRandomizedFn creates calls each module's GenesisState generator function
|
||||
// and creates the simulation params
|
||||
func AppStateRandomizedFn(
|
||||
simManager *module.SimulationManager, r *rand.Rand, cdc *codec.LegacyAmino,
|
||||
simManager *module.SimulationManager, r *rand.Rand, cdc codec.JSONMarshaler,
|
||||
accs []simtypes.Account, genesisTimestamp time.Time, appParams simtypes.AppParams,
|
||||
) (json.RawMessage, []simtypes.Account) {
|
||||
numAccs := int64(len(accs))
|
||||
@@ -115,7 +115,7 @@ func AppStateRandomizedFn(
|
||||
|
||||
simManager.GenerateGenesisStates(simState)
|
||||
|
||||
appState, err := cdc.MarshalJSON(genesisState)
|
||||
appState, err := json.Marshal(genesisState)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
@@ -125,7 +125,7 @@ func AppStateRandomizedFn(
|
||||
|
||||
// AppStateFromGenesisFileFn util function to generate the genesis AppState
|
||||
// from a genesis.json file.
|
||||
func AppStateFromGenesisFileFn(r io.Reader, cdc *codec.LegacyAmino, genesisFile string) (tmtypes.GenesisDoc, []simtypes.Account) {
|
||||
func AppStateFromGenesisFileFn(r io.Reader, cdc codec.JSONMarshaler, genesisFile string) (tmtypes.GenesisDoc, []simtypes.Account) {
|
||||
bytes, err := ioutil.ReadFile(genesisFile)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
|
||||
@@ -19,7 +19,6 @@ import (
|
||||
|
||||
bam "github.com/cosmos/cosmos-sdk/baseapp"
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
"github.com/cosmos/cosmos-sdk/simapp/helpers"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
||||
@@ -53,7 +52,7 @@ func Setup(isCheckTx bool) *SimApp {
|
||||
if !isCheckTx {
|
||||
// init chain must be called to stop deliverState from being nil
|
||||
genesisState := NewDefaultGenesisState()
|
||||
stateBytes, err := codec.MarshalJSONIndent(app.LegacyAmino(), genesisState)
|
||||
stateBytes, err := json.MarshalIndent(genesisState, "", " ")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
@@ -83,7 +82,7 @@ func SetupWithGenesisValSet(t *testing.T, valSet *tmtypes.ValidatorSet, genAccs
|
||||
|
||||
// set genesis accounts
|
||||
authGenesis := authtypes.NewGenesisState(authtypes.DefaultParams(), genAccs)
|
||||
genesisState[authtypes.ModuleName] = app.LegacyAmino().MustMarshalJSON(authGenesis)
|
||||
genesisState[authtypes.ModuleName] = app.AppCodec().MustMarshalJSON(authGenesis)
|
||||
|
||||
validators := make([]stakingtypes.Validator, 0, len(valSet.Validators))
|
||||
delegations := make([]stakingtypes.Delegation, 0, len(valSet.Validators))
|
||||
@@ -111,7 +110,7 @@ func SetupWithGenesisValSet(t *testing.T, valSet *tmtypes.ValidatorSet, genAccs
|
||||
|
||||
// set validators and delegations
|
||||
stakingGenesis := stakingtypes.NewGenesisState(stakingtypes.DefaultParams(), validators, delegations)
|
||||
genesisState[stakingtypes.ModuleName] = app.LegacyAmino().MustMarshalJSON(stakingGenesis)
|
||||
genesisState[stakingtypes.ModuleName] = app.AppCodec().MustMarshalJSON(stakingGenesis)
|
||||
|
||||
totalSupply := sdk.NewCoins()
|
||||
for _, b := range balances {
|
||||
@@ -121,9 +120,9 @@ func SetupWithGenesisValSet(t *testing.T, valSet *tmtypes.ValidatorSet, genAccs
|
||||
|
||||
// update total supply
|
||||
bankGenesis := banktypes.NewGenesisState(banktypes.DefaultGenesisState().Params, balances, totalSupply, []banktypes.Metadata{})
|
||||
genesisState[banktypes.ModuleName] = app.LegacyAmino().MustMarshalJSON(bankGenesis)
|
||||
genesisState[banktypes.ModuleName] = app.AppCodec().MustMarshalJSON(bankGenesis)
|
||||
|
||||
stateBytes, err := codec.MarshalJSONIndent(app.LegacyAmino(), genesisState)
|
||||
stateBytes, err := json.MarshalIndent(genesisState, "", " ")
|
||||
require.NoError(t, err)
|
||||
|
||||
// init chain will set the validator set and initialize the genesis accounts
|
||||
|
||||
+5
-2
@@ -49,7 +49,7 @@ func SetupSimulation(dirPrefix, dbName string) (simtypes.Config, dbm.DB, string,
|
||||
|
||||
// SimulationOperations retrieves the simulation params from the provided file path
|
||||
// and returns all the modules weighted operations
|
||||
func SimulationOperations(app App, cdc *codec.LegacyAmino, config simtypes.Config) []simtypes.WeightedOperation {
|
||||
func SimulationOperations(app App, cdc codec.JSONMarshaler, config simtypes.Config) []simtypes.WeightedOperation {
|
||||
simState := module.SimulationState{
|
||||
AppParams: make(simtypes.AppParams),
|
||||
Cdc: cdc,
|
||||
@@ -61,7 +61,10 @@ func SimulationOperations(app App, cdc *codec.LegacyAmino, config simtypes.Confi
|
||||
panic(err)
|
||||
}
|
||||
|
||||
app.LegacyAmino().MustUnmarshalJSON(bz, &simState.AppParams)
|
||||
err = json.Unmarshal(bz, &simState.AppParams)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
simState.ParamChanges = app.SimulationManager().GenerateParamChanges(config.Seed)
|
||||
|
||||
Reference in New Issue
Block a user