refactor: gov sims to use v1beta2 (#11069)
## Description Closes: #10986 --- ### Author Checklist *All items are required. Please add a note to the item if the item is not applicable and please add links to any relevant follow up issues.* I have... - [ ] included the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title - [ ] added `!` to the type prefix if API or client breaking change - [ ] targeted the correct branch (see [PR Targeting](https://github.com/cosmos/cosmos-sdk/blob/master/CONTRIBUTING.md#pr-targeting)) - [ ] provided a link to the relevant issue or specification - [ ] followed the guidelines for [building modules](https://github.com/cosmos/cosmos-sdk/blob/master/docs/building-modules) - [ ] included the necessary unit and integration [tests](https://github.com/cosmos/cosmos-sdk/blob/master/CONTRIBUTING.md#testing) - [ ] added a changelog entry to `CHANGELOG.md` - [ ] included comments for [documenting Go code](https://blog.golang.org/godoc) - [ ] updated the relevant documentation or specification - [ ] reviewed "Files changed" and left comments if necessary - [ ] confirmed all CI checks have passed ### Reviewers Checklist *All items are required. Please add a note if the item is not applicable and please add your handle next to the items reviewed if you only reviewed selected items.* I have... - [ ] confirmed the correct [type prefix](https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.json) in the PR title - [ ] confirmed `!` in the type prefix if API or client breaking change - [ ] confirmed all author checklist items have been addressed - [ ] reviewed state machine logic - [ ] reviewed API design and naming - [ ] reviewed documentation is accurate - [ ] reviewed tests and test coverage - [ ] manually tested (if applicable)
This commit is contained in:
parent
077154a882
commit
09501460b2
|
@ -13,12 +13,20 @@ import (
|
||||||
simtypes "github.com/cosmos/cosmos-sdk/types/simulation"
|
simtypes "github.com/cosmos/cosmos-sdk/types/simulation"
|
||||||
"github.com/cosmos/cosmos-sdk/x/gov/keeper"
|
"github.com/cosmos/cosmos-sdk/x/gov/keeper"
|
||||||
"github.com/cosmos/cosmos-sdk/x/gov/types"
|
"github.com/cosmos/cosmos-sdk/x/gov/types"
|
||||||
"github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"
|
"github.com/cosmos/cosmos-sdk/x/gov/types/v1beta2"
|
||||||
"github.com/cosmos/cosmos-sdk/x/simulation"
|
"github.com/cosmos/cosmos-sdk/x/simulation"
|
||||||
)
|
)
|
||||||
|
|
||||||
var initialProposalID = uint64(100000000000000)
|
var initialProposalID = uint64(100000000000000)
|
||||||
|
|
||||||
|
// Governance message types and routes
|
||||||
|
var (
|
||||||
|
TypeMsgDeposit = sdk.MsgTypeURL(&v1beta2.MsgDeposit{})
|
||||||
|
TypeMsgVote = sdk.MsgTypeURL(&v1beta2.MsgVote{})
|
||||||
|
TypeMsgVoteWeighted = sdk.MsgTypeURL(&v1beta2.MsgVoteWeighted{})
|
||||||
|
TypeMsgSubmitProposal = sdk.MsgTypeURL(&v1beta2.MsgSubmitProposal{})
|
||||||
|
)
|
||||||
|
|
||||||
// Simulation operation weights constants
|
// Simulation operation weights constants
|
||||||
const (
|
const (
|
||||||
OpWeightMsgDeposit = "op_weight_msg_deposit"
|
OpWeightMsgDeposit = "op_weight_msg_deposit"
|
||||||
|
@ -126,19 +134,25 @@ func SimulateMsgSubmitProposal(
|
||||||
// 1) submit proposal now
|
// 1) submit proposal now
|
||||||
content := contentSim(r, ctx, accs)
|
content := contentSim(r, ctx, accs)
|
||||||
if content == nil {
|
if content == nil {
|
||||||
return simtypes.NoOpMsg(types.ModuleName, v1beta1.TypeMsgSubmitProposal, "content is nil"), nil, nil
|
return simtypes.NoOpMsg(types.ModuleName, TypeMsgSubmitProposal, "content is nil"), nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
simAccount, _ := simtypes.RandomAcc(r, accs)
|
simAccount, _ := simtypes.RandomAcc(r, accs)
|
||||||
deposit, skip, err := randomDeposit(r, ctx, ak, bk, k, simAccount.Address)
|
deposit, skip, err := randomDeposit(r, ctx, ak, bk, k, simAccount.Address)
|
||||||
switch {
|
switch {
|
||||||
case skip:
|
case skip:
|
||||||
return simtypes.NoOpMsg(types.ModuleName, v1beta1.TypeMsgSubmitProposal, "skip deposit"), nil, nil
|
return simtypes.NoOpMsg(types.ModuleName, TypeMsgSubmitProposal, "skip deposit"), nil, nil
|
||||||
case err != nil:
|
case err != nil:
|
||||||
return simtypes.NoOpMsg(types.ModuleName, v1beta1.TypeMsgSubmitProposal, "unable to generate deposit"), nil, err
|
return simtypes.NoOpMsg(types.ModuleName, TypeMsgSubmitProposal, "unable to generate deposit"), nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
msg, err := v1beta1.NewMsgSubmitProposal(content, deposit, simAccount.Address)
|
macc := k.GetGovernanceAccount(ctx)
|
||||||
|
contentMsg, err := v1beta2.NewLegacyContent(content, macc.GetAddress().String())
|
||||||
|
if err != nil {
|
||||||
|
return simtypes.NoOpMsg(types.ModuleName, TypeMsgSubmitProposal, "error converting legacy content into proposal message"), nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
msg, err := v1beta2.NewMsgSubmitProposal([]sdk.Msg{contentMsg}, deposit, simAccount.Address.String(), nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to generate a submit proposal msg"), nil, err
|
return simtypes.NoOpMsg(types.ModuleName, msg.Type(), "unable to generate a submit proposal msg"), nil, err
|
||||||
}
|
}
|
||||||
|
@ -215,20 +229,20 @@ func SimulateMsgDeposit(ak types.AccountKeeper, bk types.BankKeeper, k keeper.Ke
|
||||||
accs []simtypes.Account, chainID string,
|
accs []simtypes.Account, chainID string,
|
||||||
) (simtypes.OperationMsg, []simtypes.FutureOperation, error) {
|
) (simtypes.OperationMsg, []simtypes.FutureOperation, error) {
|
||||||
simAccount, _ := simtypes.RandomAcc(r, accs)
|
simAccount, _ := simtypes.RandomAcc(r, accs)
|
||||||
proposalID, ok := randomProposalID(r, k, ctx, v1beta1.StatusDepositPeriod)
|
proposalID, ok := randomProposalID(r, k, ctx, v1beta2.StatusDepositPeriod)
|
||||||
if !ok {
|
if !ok {
|
||||||
return simtypes.NoOpMsg(types.ModuleName, v1beta1.TypeMsgDeposit, "unable to generate proposalID"), nil, nil
|
return simtypes.NoOpMsg(types.ModuleName, TypeMsgDeposit, "unable to generate proposalID"), nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
deposit, skip, err := randomDeposit(r, ctx, ak, bk, k, simAccount.Address)
|
deposit, skip, err := randomDeposit(r, ctx, ak, bk, k, simAccount.Address)
|
||||||
switch {
|
switch {
|
||||||
case skip:
|
case skip:
|
||||||
return simtypes.NoOpMsg(types.ModuleName, v1beta1.TypeMsgDeposit, "skip deposit"), nil, nil
|
return simtypes.NoOpMsg(types.ModuleName, TypeMsgDeposit, "skip deposit"), nil, nil
|
||||||
case err != nil:
|
case err != nil:
|
||||||
return simtypes.NoOpMsg(types.ModuleName, v1beta1.TypeMsgDeposit, "unable to generate deposit"), nil, err
|
return simtypes.NoOpMsg(types.ModuleName, TypeMsgDeposit, "unable to generate deposit"), nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
msg := v1beta1.NewMsgDeposit(simAccount.Address, proposalID, deposit)
|
msg := v1beta2.NewMsgDeposit(simAccount.Address, proposalID, deposit)
|
||||||
|
|
||||||
account := ak.GetAccount(ctx, simAccount.Address)
|
account := ak.GetAccount(ctx, simAccount.Address)
|
||||||
spendable := bk.SpendableCoins(ctx, account.GetAddress())
|
spendable := bk.SpendableCoins(ctx, account.GetAddress())
|
||||||
|
@ -278,16 +292,16 @@ func operationSimulateMsgVote(ak types.AccountKeeper, bk types.BankKeeper, k kee
|
||||||
switch {
|
switch {
|
||||||
case proposalIDInt < 0:
|
case proposalIDInt < 0:
|
||||||
var ok bool
|
var ok bool
|
||||||
proposalID, ok = randomProposalID(r, k, ctx, v1beta1.StatusVotingPeriod)
|
proposalID, ok = randomProposalID(r, k, ctx, v1beta2.StatusVotingPeriod)
|
||||||
if !ok {
|
if !ok {
|
||||||
return simtypes.NoOpMsg(types.ModuleName, v1beta1.TypeMsgVote, "unable to generate proposalID"), nil, nil
|
return simtypes.NoOpMsg(types.ModuleName, TypeMsgVote, "unable to generate proposalID"), nil, nil
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
proposalID = uint64(proposalIDInt)
|
proposalID = uint64(proposalIDInt)
|
||||||
}
|
}
|
||||||
|
|
||||||
option := randomVotingOption(r)
|
option := randomVotingOption(r)
|
||||||
msg := v1beta1.NewMsgVote(simAccount.Address, proposalID, option)
|
msg := v1beta2.NewMsgVote(simAccount.Address, proposalID, option)
|
||||||
|
|
||||||
account := ak.GetAccount(ctx, simAccount.Address)
|
account := ak.GetAccount(ctx, simAccount.Address)
|
||||||
spendable := bk.SpendableCoins(ctx, account.GetAddress())
|
spendable := bk.SpendableCoins(ctx, account.GetAddress())
|
||||||
|
@ -331,16 +345,16 @@ func operationSimulateMsgVoteWeighted(ak types.AccountKeeper, bk types.BankKeepe
|
||||||
switch {
|
switch {
|
||||||
case proposalIDInt < 0:
|
case proposalIDInt < 0:
|
||||||
var ok bool
|
var ok bool
|
||||||
proposalID, ok = randomProposalID(r, k, ctx, v1beta1.StatusVotingPeriod)
|
proposalID, ok = randomProposalID(r, k, ctx, v1beta2.StatusVotingPeriod)
|
||||||
if !ok {
|
if !ok {
|
||||||
return simtypes.NoOpMsg(types.ModuleName, v1beta1.TypeMsgVoteWeighted, "unable to generate proposalID"), nil, nil
|
return simtypes.NoOpMsg(types.ModuleName, TypeMsgVoteWeighted, "unable to generate proposalID"), nil, nil
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
proposalID = uint64(proposalIDInt)
|
proposalID = uint64(proposalIDInt)
|
||||||
}
|
}
|
||||||
|
|
||||||
options := randomWeightedVotingOptions(r)
|
options := randomWeightedVotingOptions(r)
|
||||||
msg := v1beta1.NewMsgVoteWeighted(simAccount.Address, proposalID, options)
|
msg := v1beta2.NewMsgVoteWeighted(simAccount.Address, proposalID, options)
|
||||||
|
|
||||||
account := ak.GetAccount(ctx, simAccount.Address)
|
account := ak.GetAccount(ctx, simAccount.Address)
|
||||||
spendable := bk.SpendableCoins(ctx, account.GetAddress())
|
spendable := bk.SpendableCoins(ctx, account.GetAddress())
|
||||||
|
@ -405,7 +419,7 @@ func randomDeposit(r *rand.Rand, ctx sdk.Context,
|
||||||
// that matches a given Status.
|
// that matches a given Status.
|
||||||
// It does not provide a default ID.
|
// It does not provide a default ID.
|
||||||
func randomProposalID(r *rand.Rand, k keeper.Keeper,
|
func randomProposalID(r *rand.Rand, k keeper.Keeper,
|
||||||
ctx sdk.Context, status v1beta1.ProposalStatus) (proposalID uint64, found bool) {
|
ctx sdk.Context, status v1beta2.ProposalStatus) (proposalID uint64, found bool) {
|
||||||
proposalID, _ = k.GetProposalID(ctx)
|
proposalID, _ = k.GetProposalID(ctx)
|
||||||
|
|
||||||
switch {
|
switch {
|
||||||
|
@ -420,7 +434,7 @@ func randomProposalID(r *rand.Rand, k keeper.Keeper,
|
||||||
}
|
}
|
||||||
|
|
||||||
proposal, ok := k.GetProposal(ctx, proposalID)
|
proposal, ok := k.GetProposal(ctx, proposalID)
|
||||||
if !ok || v1beta1.ProposalStatus(proposal.Status) != status {
|
if !ok || v1beta2.ProposalStatus(proposal.Status) != status {
|
||||||
return proposalID, false
|
return proposalID, false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -428,50 +442,50 @@ func randomProposalID(r *rand.Rand, k keeper.Keeper,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pick a random voting option
|
// Pick a random voting option
|
||||||
func randomVotingOption(r *rand.Rand) v1beta1.VoteOption {
|
func randomVotingOption(r *rand.Rand) v1beta2.VoteOption {
|
||||||
switch r.Intn(4) {
|
switch r.Intn(4) {
|
||||||
case 0:
|
case 0:
|
||||||
return v1beta1.OptionYes
|
return v1beta2.OptionYes
|
||||||
case 1:
|
case 1:
|
||||||
return v1beta1.OptionAbstain
|
return v1beta2.OptionAbstain
|
||||||
case 2:
|
case 2:
|
||||||
return v1beta1.OptionNo
|
return v1beta2.OptionNo
|
||||||
case 3:
|
case 3:
|
||||||
return v1beta1.OptionNoWithVeto
|
return v1beta2.OptionNoWithVeto
|
||||||
default:
|
default:
|
||||||
panic("invalid vote option")
|
panic("invalid vote option")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pick a random weighted voting options
|
// Pick a random weighted voting options
|
||||||
func randomWeightedVotingOptions(r *rand.Rand) v1beta1.WeightedVoteOptions {
|
func randomWeightedVotingOptions(r *rand.Rand) v1beta2.WeightedVoteOptions {
|
||||||
w1 := r.Intn(100 + 1)
|
w1 := r.Intn(100 + 1)
|
||||||
w2 := r.Intn(100 - w1 + 1)
|
w2 := r.Intn(100 - w1 + 1)
|
||||||
w3 := r.Intn(100 - w1 - w2 + 1)
|
w3 := r.Intn(100 - w1 - w2 + 1)
|
||||||
w4 := 100 - w1 - w2 - w3
|
w4 := 100 - w1 - w2 - w3
|
||||||
weightedVoteOptions := v1beta1.WeightedVoteOptions{}
|
weightedVoteOptions := v1beta2.WeightedVoteOptions{}
|
||||||
if w1 > 0 {
|
if w1 > 0 {
|
||||||
weightedVoteOptions = append(weightedVoteOptions, v1beta1.WeightedVoteOption{
|
weightedVoteOptions = append(weightedVoteOptions, &v1beta2.WeightedVoteOption{
|
||||||
Option: v1beta1.OptionYes,
|
Option: v1beta2.OptionYes,
|
||||||
Weight: sdk.NewDecWithPrec(int64(w1), 2),
|
Weight: sdk.NewDecWithPrec(int64(w1), 2).String(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
if w2 > 0 {
|
if w2 > 0 {
|
||||||
weightedVoteOptions = append(weightedVoteOptions, v1beta1.WeightedVoteOption{
|
weightedVoteOptions = append(weightedVoteOptions, &v1beta2.WeightedVoteOption{
|
||||||
Option: v1beta1.OptionAbstain,
|
Option: v1beta2.OptionAbstain,
|
||||||
Weight: sdk.NewDecWithPrec(int64(w2), 2),
|
Weight: sdk.NewDecWithPrec(int64(w2), 2).String(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
if w3 > 0 {
|
if w3 > 0 {
|
||||||
weightedVoteOptions = append(weightedVoteOptions, v1beta1.WeightedVoteOption{
|
weightedVoteOptions = append(weightedVoteOptions, &v1beta2.WeightedVoteOption{
|
||||||
Option: v1beta1.OptionNo,
|
Option: v1beta2.OptionNo,
|
||||||
Weight: sdk.NewDecWithPrec(int64(w3), 2),
|
Weight: sdk.NewDecWithPrec(int64(w3), 2).String(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
if w4 > 0 {
|
if w4 > 0 {
|
||||||
weightedVoteOptions = append(weightedVoteOptions, v1beta1.WeightedVoteOption{
|
weightedVoteOptions = append(weightedVoteOptions, &v1beta2.WeightedVoteOption{
|
||||||
Option: v1beta1.OptionNoWithVeto,
|
Option: v1beta2.OptionNoWithVeto,
|
||||||
Weight: sdk.NewDecWithPrec(int64(w4), 2),
|
Weight: sdk.NewDecWithPrec(int64(w4), 2).String(),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
return weightedVoteOptions
|
return weightedVoteOptions
|
||||||
|
|
|
@ -78,12 +78,12 @@ func TestWeightedOperations(t *testing.T) {
|
||||||
opMsgRoute string
|
opMsgRoute string
|
||||||
opMsgName string
|
opMsgName string
|
||||||
}{
|
}{
|
||||||
{0, types.ModuleName, "submit_proposal"},
|
{0, types.ModuleName, simulation.TypeMsgSubmitProposal},
|
||||||
{1, types.ModuleName, "submit_proposal"},
|
{1, types.ModuleName, simulation.TypeMsgSubmitProposal},
|
||||||
{2, types.ModuleName, "submit_proposal"},
|
{2, types.ModuleName, simulation.TypeMsgSubmitProposal},
|
||||||
{simappparams.DefaultWeightMsgDeposit, types.ModuleName, v1beta1.TypeMsgDeposit},
|
{simappparams.DefaultWeightMsgDeposit, types.ModuleName, simulation.TypeMsgDeposit},
|
||||||
{simappparams.DefaultWeightMsgVote, types.ModuleName, v1beta1.TypeMsgVote},
|
{simappparams.DefaultWeightMsgVote, types.ModuleName, simulation.TypeMsgVote},
|
||||||
{simappparams.DefaultWeightMsgVoteWeighted, types.ModuleName, v1beta1.TypeMsgVoteWeighted},
|
{simappparams.DefaultWeightMsgVoteWeighted, types.ModuleName, simulation.TypeMsgVoteWeighted},
|
||||||
}
|
}
|
||||||
|
|
||||||
for i, w := range weightesOps {
|
for i, w := range weightesOps {
|
||||||
|
@ -98,7 +98,7 @@ func TestWeightedOperations(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestSimulateMsgSubmitProposal tests the normal scenario of a valid message of type TypeMsgSubmitProposal.
|
// TestSimulateMsgSubmitProposal tests the normal scenario of a valid message of type TypeMsgSubmitProposal.
|
||||||
// Abonormal scenarios, where the message is created by an errors are not tested here.
|
// Abnormal scenarios, where the message is created by an errors are not tested here.
|
||||||
func TestSimulateMsgSubmitProposal(t *testing.T) {
|
func TestSimulateMsgSubmitProposal(t *testing.T) {
|
||||||
app, ctx := createTestApp(t, false)
|
app, ctx := createTestApp(t, false)
|
||||||
|
|
||||||
|
@ -115,20 +115,22 @@ func TestSimulateMsgSubmitProposal(t *testing.T) {
|
||||||
operationMsg, _, err := op(r, app.BaseApp, ctx, accounts, "")
|
operationMsg, _, err := op(r, app.BaseApp, ctx, accounts, "")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
var msg v1beta1.MsgSubmitProposal
|
var msg v1beta2.MsgSubmitProposal
|
||||||
types.ModuleCdc.UnmarshalJSON(operationMsg.Msg, &msg)
|
err = types.ModuleCdc.UnmarshalJSON(operationMsg.Msg, &msg)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
require.True(t, operationMsg.OK)
|
require.True(t, operationMsg.OK)
|
||||||
require.Equal(t, "cosmos1p8wcgrjr4pjju90xg6u9cgq55dxwq8j7u4x9a0", msg.Proposer)
|
require.Equal(t, "cosmos1p8wcgrjr4pjju90xg6u9cgq55dxwq8j7u4x9a0", msg.Proposer)
|
||||||
require.Equal(t, "2686011stake", msg.InitialDeposit.String())
|
require.NotEqual(t, len(msg.InitialDeposit), 0)
|
||||||
require.Equal(t, "title-3: ZBSpYuLyYggwexjxusrBqDOTtGTOWeLrQKjLxzIivHSlcxgdXhhuTSkuxKGLwQvuyNhYFmBZHeAerqyNEUzXPFGkqEGqiQWIXnku", msg.GetContent().GetTitle())
|
require.Equal(t, "2686011stake", msg.InitialDeposit[0].String())
|
||||||
require.Equal(t, "description-3: NJWzHdBNpAXKJPHWQdrGYcAHSctgVlqwqHoLfHsXUdStwfefwzqLuKEhmMyYLdbZrcPgYqjNHxPexsruwEGStAneKbWkQDDIlCWBLSiAASNhZqNFlPtfqPJoxKsgMdzjWqLWdqKQuJqWPMvwPQWZUtVMOTMYKJbfdlZsjdsomuScvDmbDkgRualsxDvRJuCAmPOXitIbcyWsKGSdrEunFAOdmXnsuyFVgJqEjbklvmwrUlsxjRSfKZxGcpayDdgoFcnVSutxjRgOSFzPwidAjubMncNweqpbxhXGchpZUxuFDOtpnhNUycJICRYqsPhPSCjPTWZFLkstHWJxvdPEAyEIxXgLwbNOjrgzmaujiBABBIXvcXpLrbcEWNNQsbjvgJFgJkflpRohHUutvnaUqoopuKjTDaemDeSdqbnOzcfJpcTuAQtZoiLZOoAIlboFDAeGmSNwkvObPRvRWQgWkGkxwtPauYgdkmypLjbqhlHJIQTntgWjXwZdOyYEdQRRLfMSdnxqppqUofqLbLQDUjwKVKfZJUJQPsWIPwIVaSTrmKskoAhvmZyJgeRpkaTfGgrJzAigcxtfshmiDCFkuiluqtMOkidknnTBtumyJYlIsWLnCQclqdVmikUoMOPdPWwYbJxXyqUVicNxFxyqJTenNblyyKSdlCbiXxUiYUiMwXZASYfvMDPFgxniSjWaZTjHkqlJvtBsXqwPpyVxnJVGFWhfSxgOcduoxkiopJvFjMmFabrGYeVtTXLhxVUEiGwYUvndjFGzDVntUvibiyZhfMQdMhgsiuysLMiePBNXifRLMsSmXPkwlPloUbJveCvUlaalhZHuvdkCnkSHbMbmOnrfEGPwQiACiPlnihiaOdbjPqPiTXaHDoJXjSlZmltGqNHHNrcKdlFSCdmVOuvDcBLdSklyGJmcLTbSFtALdGlPkqqecJrpLCXNPWefoTJNgEJlyMEPneVaxxduAAEqQpHWZodWyRkDAxzyMnFMcjSVqeRXLqsNyNtQBbuRvunZflWSbbvXXdkyLikYqutQhLPONXbvhcQZJPSWnOulqQaXmbfFxAkqfYeseSHOQidHwbcsOaMnSrrmGjjRmEMQNuknupMxJiIeVjmgZvbmjPIQTEhQFULQLBMPrxcFPvBinaOPYWGvYGRKxLZdwamfRQQFngcdSlvwjfaPbURasIsGJVHtcEAxnIIrhSriiXLOlbEBLXFElXJFGxHJczRBIxAuPKtBisjKBwfzZFagdNmjdwIRvwzLkFKWRTDPxJCmpzHUcrPiiXXHnOIlqNVoGSXZewdnCRhuxeYGPVTfrNTQNOxZmxInOazUYNTNDgzsxlgiVEHPKMfbesvPHUqpNkUqbzeuzfdrsuLDpKHMUbBMKczKKWOdYoIXoPYtEjfOnlQLoGnbQUCuERdEFaptwnsHzTJDsuZkKtzMpFaZobynZdzNydEeJJHDYaQcwUxcqvwfWwNUsCiLvkZQiSfzAHftYgAmVsXgtmcYgTqJIawstRYJrZdSxlfRiqTufgEQVambeZZmaAyRQbcmdjVUZZCgqDrSeltJGXPMgZnGDZqISrGDOClxXCxMjmKqEPwKHoOfOeyGmqWqihqjINXLqnyTesZePQRqaWDQNqpLgNrAUKulklmckTijUltQKuWQDwpLmDyxLppPVMwsmBIpOwQttYFMjgJQZLYFPmxWFLIeZihkRNnkzoypBICIxgEuYsVWGIGRbbxqVasYnstWomJnHwmtOhAFSpttRYYzBmyEtZXiCthvKvWszTXDbiJbGXMcrYpKAgvUVFtdKUfvdMfhAryctklUCEdjetjuGNfJjajZtvzdYaqInKtFPPLYmRaXPdQzxdSQfmZDEVHlHGEGNSPRFJuIfKLLfUmnHxHnRjmzQPNlqrXgifUdzAGKVabYqvcDeYoTYgPsBUqehrBhmQUgTvDnsdpuhUoxskDdppTsYMcnDIPSwKIqhXDCIxOuXrywahvVavvHkPuaenjLmEbMgrkrQLHEAwrhHkPRNvonNQKqprqOFVZKAtpRSpvQUxMoXCMZLSSbnLEFsjVfANdQNQVwTmGxqVjVqRuxREAhuaDrFgEZpYKhwWPEKBevBfsOIcaZKyykQafzmGPLRAKDtTcJxJVgiiuUkmyMYuDUNEUhBEdoBLJnamtLmMJQgmLiUELIhLpiEvpOXOvXCPUeldLFqkKOwfacqIaRcnnZvERKRMCKUkMABbDHytQqQblrvoxOZkwzosQfDKGtIdfcXRJNqlBNwOCWoQBcEWyqrMlYZIAXYJmLfnjoJepgSFvrgajaBAIksoyeHqgqbGvpAstMIGmIhRYGGNPRIfOQKsGoKgxtsidhTaAePRCBFqZgPDWCIkqOJezGVkjfYUCZTlInbxBXwUAVRsxHTQtJFnnpmMvXDYCVlEmnZBKhmmxQOIQzxFWpJQkQoSAYzTEiDWEOsVLNrbfzeHFRyeYATakQQWmFDLPbVMCJcWjFGJjfqCoVzlbNNEsqxdSmNPjTjHYOkuEMFLkXYGaoJlraLqayMeCsTjWNRDPBywBJLAPVkGQqTwApVVwYAetlwSbzsdHWsTwSIcctkyKDuRWYDQikRqsKTMJchrliONJeaZIzwPQrNbTwxsGdwuduvibtYndRwpdsvyCktRHFalvUuEKMqXbItfGcNGWsGzubdPMYayOUOINjpcFBeESdwpdlTYmrPsLsVDhpTzoMegKrytNVZkfJRPuDCUXxSlSthOohmsuxmIZUedzxKmowKOdXTMcEtdpHaPWgIsIjrViKrQOCONlSuazmLuCUjLltOGXeNgJKedTVrrVCpWYWHyVrdXpKgNaMJVjbXxnVMSChdWKuZdqpisvrkBJPoURDYxWOtpjzZoOpWzyUuYNhCzRoHsMjmmWDcXzQiHIyjwdhPNwiPqFxeUfMVFQGImhykFgMIlQEoZCaRoqSBXTSWAeDumdbsOGtATwEdZlLfoBKiTvodQBGOEcuATWXfiinSjPmJKcWgQrTVYVrwlyMWhxqNbCMpIQNoSMGTiWfPTCezUjYcdWppnsYJihLQCqbNLRGgqrwHuIvsazapTpoPZIyZyeeSueJuTIhpHMEJfJpScshJubJGfkusuVBgfTWQoywSSliQQSfbvaHKiLnyjdSbpMkdBgXepoSsHnCQaYuHQqZsoEOmJCiuQUpJkmfyfbIShzlZpHFmLCsbknEAkKXKfRTRnuwdBeuOGgFbJLbDksHVapaRayWzwoYBEpmrlAxrUxYMUekKbpjPNfjUCjhbdMAnJmYQVZBQZkFVweHDAlaqJjRqoQPoOMLhyvYCzqEuQsAFoxWrzRnTVjStPadhsESlERnKhpEPsfDxNvxqcOyIulaCkmPdambLHvGhTZzysvqFauEgkFRItPfvisehFmoBhQqmkfbHVsgfHXDPJVyhwPllQpuYLRYvGodxKjkarnSNgsXoKEMlaSKxKdcVgvOkuLcfLFfdtXGTclqfPOfeoVLbqcjcXCUEBgAGplrkgsmIEhWRZLlGPGCwKWRaCKMkBHTAcypUrYjWwCLtOPVygMwMANGoQwFnCqFrUGMCRZUGJKTZIGPyldsifauoMnJPLTcDHmilcmahlqOELaAUYDBuzsVywnDQfwRLGIWozYaOAilMBcObErwgTDNGWnwQMUgFFSKtPDMEoEQCTKVREqrXZSGLqwTMcxHfWotDllNkIJPMbXzjDVjPOOjCFuIvTyhXKLyhUScOXvYthRXpPfKwMhptXaxIxgqBoUqzrWbaoLTVpQoottZyPFfNOoMioXHRuFwMRYUiKvcWPkrayyTLOCFJlAyslDameIuqVAuxErqFPEWIScKpBORIuZqoXlZuTvAjEdlEWDODFRregDTqGNoFBIHxvimmIZwLfFyKUfEWAnNBdtdzDmTPXtpHRGdIbuucfTjOygZsTxPjfweXhSUkMhPjMaxKlMIJMOXcnQfyzeOcbWwNbeH", msg.GetContent().GetDescription())
|
require.Equal(t, "title-3: ZBSpYuLyYggwexjxusrBqDOTtGTOWeLrQKjLxzIivHSlcxgdXhhuTSkuxKGLwQvuyNhYFmBZHeAerqyNEUzXPFGkqEGqiQWIXnku", msg.Messages[0].GetCachedValue().(*v1beta2.MsgExecLegacyContent).Content.GetCachedValue().(v1beta1.Content).GetTitle())
|
||||||
|
require.Equal(t, "description-3: NJWzHdBNpAXKJPHWQdrGYcAHSctgVlqwqHoLfHsXUdStwfefwzqLuKEhmMyYLdbZrcPgYqjNHxPexsruwEGStAneKbWkQDDIlCWBLSiAASNhZqNFlPtfqPJoxKsgMdzjWqLWdqKQuJqWPMvwPQWZUtVMOTMYKJbfdlZsjdsomuScvDmbDkgRualsxDvRJuCAmPOXitIbcyWsKGSdrEunFAOdmXnsuyFVgJqEjbklvmwrUlsxjRSfKZxGcpayDdgoFcnVSutxjRgOSFzPwidAjubMncNweqpbxhXGchpZUxuFDOtpnhNUycJICRYqsPhPSCjPTWZFLkstHWJxvdPEAyEIxXgLwbNOjrgzmaujiBABBIXvcXpLrbcEWNNQsbjvgJFgJkflpRohHUutvnaUqoopuKjTDaemDeSdqbnOzcfJpcTuAQtZoiLZOoAIlboFDAeGmSNwkvObPRvRWQgWkGkxwtPauYgdkmypLjbqhlHJIQTntgWjXwZdOyYEdQRRLfMSdnxqppqUofqLbLQDUjwKVKfZJUJQPsWIPwIVaSTrmKskoAhvmZyJgeRpkaTfGgrJzAigcxtfshmiDCFkuiluqtMOkidknnTBtumyJYlIsWLnCQclqdVmikUoMOPdPWwYbJxXyqUVicNxFxyqJTenNblyyKSdlCbiXxUiYUiMwXZASYfvMDPFgxniSjWaZTjHkqlJvtBsXqwPpyVxnJVGFWhfSxgOcduoxkiopJvFjMmFabrGYeVtTXLhxVUEiGwYUvndjFGzDVntUvibiyZhfMQdMhgsiuysLMiePBNXifRLMsSmXPkwlPloUbJveCvUlaalhZHuvdkCnkSHbMbmOnrfEGPwQiACiPlnihiaOdbjPqPiTXaHDoJXjSlZmltGqNHHNrcKdlFSCdmVOuvDcBLdSklyGJmcLTbSFtALdGlPkqqecJrpLCXNPWefoTJNgEJlyMEPneVaxxduAAEqQpHWZodWyRkDAxzyMnFMcjSVqeRXLqsNyNtQBbuRvunZflWSbbvXXdkyLikYqutQhLPONXbvhcQZJPSWnOulqQaXmbfFxAkqfYeseSHOQidHwbcsOaMnSrrmGjjRmEMQNuknupMxJiIeVjmgZvbmjPIQTEhQFULQLBMPrxcFPvBinaOPYWGvYGRKxLZdwamfRQQFngcdSlvwjfaPbURasIsGJVHtcEAxnIIrhSriiXLOlbEBLXFElXJFGxHJczRBIxAuPKtBisjKBwfzZFagdNmjdwIRvwzLkFKWRTDPxJCmpzHUcrPiiXXHnOIlqNVoGSXZewdnCRhuxeYGPVTfrNTQNOxZmxInOazUYNTNDgzsxlgiVEHPKMfbesvPHUqpNkUqbzeuzfdrsuLDpKHMUbBMKczKKWOdYoIXoPYtEjfOnlQLoGnbQUCuERdEFaptwnsHzTJDsuZkKtzMpFaZobynZdzNydEeJJHDYaQcwUxcqvwfWwNUsCiLvkZQiSfzAHftYgAmVsXgtmcYgTqJIawstRYJrZdSxlfRiqTufgEQVambeZZmaAyRQbcmdjVUZZCgqDrSeltJGXPMgZnGDZqISrGDOClxXCxMjmKqEPwKHoOfOeyGmqWqihqjINXLqnyTesZePQRqaWDQNqpLgNrAUKulklmckTijUltQKuWQDwpLmDyxLppPVMwsmBIpOwQttYFMjgJQZLYFPmxWFLIeZihkRNnkzoypBICIxgEuYsVWGIGRbbxqVasYnstWomJnHwmtOhAFSpttRYYzBmyEtZXiCthvKvWszTXDbiJbGXMcrYpKAgvUVFtdKUfvdMfhAryctklUCEdjetjuGNfJjajZtvzdYaqInKtFPPLYmRaXPdQzxdSQfmZDEVHlHGEGNSPRFJuIfKLLfUmnHxHnRjmzQPNlqrXgifUdzAGKVabYqvcDeYoTYgPsBUqehrBhmQUgTvDnsdpuhUoxskDdppTsYMcnDIPSwKIqhXDCIxOuXrywahvVavvHkPuaenjLmEbMgrkrQLHEAwrhHkPRNvonNQKqprqOFVZKAtpRSpvQUxMoXCMZLSSbnLEFsjVfANdQNQVwTmGxqVjVqRuxREAhuaDrFgEZpYKhwWPEKBevBfsOIcaZKyykQafzmGPLRAKDtTcJxJVgiiuUkmyMYuDUNEUhBEdoBLJnamtLmMJQgmLiUELIhLpiEvpOXOvXCPUeldLFqkKOwfacqIaRcnnZvERKRMCKUkMABbDHytQqQblrvoxOZkwzosQfDKGtIdfcXRJNqlBNwOCWoQBcEWyqrMlYZIAXYJmLfnjoJepgSFvrgajaBAIksoyeHqgqbGvpAstMIGmIhRYGGNPRIfOQKsGoKgxtsidhTaAePRCBFqZgPDWCIkqOJezGVkjfYUCZTlInbxBXwUAVRsxHTQtJFnnpmMvXDYCVlEmnZBKhmmxQOIQzxFWpJQkQoSAYzTEiDWEOsVLNrbfzeHFRyeYATakQQWmFDLPbVMCJcWjFGJjfqCoVzlbNNEsqxdSmNPjTjHYOkuEMFLkXYGaoJlraLqayMeCsTjWNRDPBywBJLAPVkGQqTwApVVwYAetlwSbzsdHWsTwSIcctkyKDuRWYDQikRqsKTMJchrliONJeaZIzwPQrNbTwxsGdwuduvibtYndRwpdsvyCktRHFalvUuEKMqXbItfGcNGWsGzubdPMYayOUOINjpcFBeESdwpdlTYmrPsLsVDhpTzoMegKrytNVZkfJRPuDCUXxSlSthOohmsuxmIZUedzxKmowKOdXTMcEtdpHaPWgIsIjrViKrQOCONlSuazmLuCUjLltOGXeNgJKedTVrrVCpWYWHyVrdXpKgNaMJVjbXxnVMSChdWKuZdqpisvrkBJPoURDYxWOtpjzZoOpWzyUuYNhCzRoHsMjmmWDcXzQiHIyjwdhPNwiPqFxeUfMVFQGImhykFgMIlQEoZCaRoqSBXTSWAeDumdbsOGtATwEdZlLfoBKiTvodQBGOEcuATWXfiinSjPmJKcWgQrTVYVrwlyMWhxqNbCMpIQNoSMGTiWfPTCezUjYcdWppnsYJihLQCqbNLRGgqrwHuIvsazapTpoPZIyZyeeSueJuTIhpHMEJfJpScshJubJGfkusuVBgfTWQoywSSliQQSfbvaHKiLnyjdSbpMkdBgXepoSsHnCQaYuHQqZsoEOmJCiuQUpJkmfyfbIShzlZpHFmLCsbknEAkKXKfRTRnuwdBeuOGgFbJLbDksHVapaRayWzwoYBEpmrlAxrUxYMUekKbpjPNfjUCjhbdMAnJmYQVZBQZkFVweHDAlaqJjRqoQPoOMLhyvYCzqEuQsAFoxWrzRnTVjStPadhsESlERnKhpEPsfDxNvxqcOyIulaCkmPdambLHvGhTZzysvqFauEgkFRItPfvisehFmoBhQqmkfbHVsgfHXDPJVyhwPllQpuYLRYvGodxKjkarnSNgsXoKEMlaSKxKdcVgvOkuLcfLFfdtXGTclqfPOfeoVLbqcjcXCUEBgAGplrkgsmIEhWRZLlGPGCwKWRaCKMkBHTAcypUrYjWwCLtOPVygMwMANGoQwFnCqFrUGMCRZUGJKTZIGPyldsifauoMnJPLTcDHmilcmahlqOELaAUYDBuzsVywnDQfwRLGIWozYaOAilMBcObErwgTDNGWnwQMUgFFSKtPDMEoEQCTKVREqrXZSGLqwTMcxHfWotDllNkIJPMbXzjDVjPOOjCFuIvTyhXKLyhUScOXvYthRXpPfKwMhptXaxIxgqBoUqzrWbaoLTVpQoottZyPFfNOoMioXHRuFwMRYUiKvcWPkrayyTLOCFJlAyslDameIuqVAuxErqFPEWIScKpBORIuZqoXlZuTvAjEdlEWDODFRregDTqGNoFBIHxvimmIZwLfFyKUfEWAnNBdtdzDmTPXtpHRGdIbuucfTjOygZsTxPjfweXhSUkMhPjMaxKlMIJMOXcnQfyzeOcbWwNbeH", msg.Messages[0].GetCachedValue().(*v1beta2.MsgExecLegacyContent).Content.GetCachedValue().(v1beta1.Content).GetDescription())
|
||||||
require.Equal(t, "gov", msg.Route())
|
require.Equal(t, "gov", msg.Route())
|
||||||
require.Equal(t, v1beta1.TypeMsgSubmitProposal, msg.Type())
|
require.Equal(t, simulation.TypeMsgSubmitProposal, msg.Type())
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestSimulateMsgDeposit tests the normal scenario of a valid message of type TypeMsgDeposit.
|
// TestSimulateMsgDeposit tests the normal scenario of a valid message of type TypeMsgDeposit.
|
||||||
// Abonormal scenarios, where the message is created by an errors are not tested here.
|
// Abnormal scenarios, where the message is created by an errors are not tested here.
|
||||||
func TestSimulateMsgDeposit(t *testing.T) {
|
func TestSimulateMsgDeposit(t *testing.T) {
|
||||||
app, ctx := createTestApp(t, false)
|
app, ctx := createTestApp(t, false)
|
||||||
blockTime := time.Now().UTC()
|
blockTime := time.Now().UTC()
|
||||||
|
@ -160,19 +162,21 @@ func TestSimulateMsgDeposit(t *testing.T) {
|
||||||
operationMsg, _, err := op(r, app.BaseApp, ctx, accounts, "")
|
operationMsg, _, err := op(r, app.BaseApp, ctx, accounts, "")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
var msg v1beta1.MsgDeposit
|
var msg v1beta2.MsgDeposit
|
||||||
types.ModuleCdc.UnmarshalJSON(operationMsg.Msg, &msg)
|
err = types.ModuleCdc.UnmarshalJSON(operationMsg.Msg, &msg)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
require.True(t, operationMsg.OK)
|
require.True(t, operationMsg.OK)
|
||||||
require.Equal(t, uint64(1), msg.ProposalId)
|
require.Equal(t, uint64(1), msg.ProposalId)
|
||||||
require.Equal(t, "cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r", msg.Depositor)
|
require.Equal(t, "cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r", msg.Depositor)
|
||||||
require.Equal(t, "560969stake", msg.Amount.String())
|
require.NotEqual(t, len(msg.Amount), 0)
|
||||||
|
require.Equal(t, "560969stake", msg.Amount[0].String())
|
||||||
require.Equal(t, "gov", msg.Route())
|
require.Equal(t, "gov", msg.Route())
|
||||||
require.Equal(t, v1beta1.TypeMsgDeposit, msg.Type())
|
require.Equal(t, simulation.TypeMsgDeposit, msg.Type())
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestSimulateMsgVote tests the normal scenario of a valid message of type TypeMsgVote.
|
// TestSimulateMsgVote tests the normal scenario of a valid message of type TypeMsgVote.
|
||||||
// Abonormal scenarios, where the message is created by an errors are not tested here.
|
// Abnormal scenarios, where the message is created by an errors are not tested here.
|
||||||
func TestSimulateMsgVote(t *testing.T) {
|
func TestSimulateMsgVote(t *testing.T) {
|
||||||
app, ctx := createTestApp(t, false)
|
app, ctx := createTestApp(t, false)
|
||||||
blockTime := time.Now().UTC()
|
blockTime := time.Now().UTC()
|
||||||
|
@ -204,19 +208,19 @@ func TestSimulateMsgVote(t *testing.T) {
|
||||||
operationMsg, _, err := op(r, app.BaseApp, ctx, accounts, "")
|
operationMsg, _, err := op(r, app.BaseApp, ctx, accounts, "")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
var msg v1beta1.MsgVote
|
var msg v1beta2.MsgVote
|
||||||
types.ModuleCdc.UnmarshalJSON(operationMsg.Msg, &msg)
|
types.ModuleCdc.UnmarshalJSON(operationMsg.Msg, &msg)
|
||||||
|
|
||||||
require.True(t, operationMsg.OK)
|
require.True(t, operationMsg.OK)
|
||||||
require.Equal(t, uint64(1), msg.ProposalId)
|
require.Equal(t, uint64(1), msg.ProposalId)
|
||||||
require.Equal(t, "cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r", msg.Voter)
|
require.Equal(t, "cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r", msg.Voter)
|
||||||
require.Equal(t, v1beta1.OptionYes, msg.Option)
|
require.Equal(t, v1beta2.OptionYes, msg.Option)
|
||||||
require.Equal(t, "gov", msg.Route())
|
require.Equal(t, "gov", msg.Route())
|
||||||
require.Equal(t, v1beta1.TypeMsgVote, msg.Type())
|
require.Equal(t, simulation.TypeMsgVote, msg.Type())
|
||||||
}
|
}
|
||||||
|
|
||||||
// TestSimulateMsgVoteWeighted tests the normal scenario of a valid message of type TypeMsgVoteWeighted.
|
// TestSimulateMsgVoteWeighted tests the normal scenario of a valid message of type TypeMsgVoteWeighted.
|
||||||
// Abonormal scenarios, where the message is created by an errors are not tested here.
|
// Abnormal scenarios, where the message is created by an errors are not tested here.
|
||||||
func TestSimulateMsgVoteWeighted(t *testing.T) {
|
func TestSimulateMsgVoteWeighted(t *testing.T) {
|
||||||
app, ctx := createTestApp(t, false)
|
app, ctx := createTestApp(t, false)
|
||||||
blockTime := time.Now().UTC()
|
blockTime := time.Now().UTC()
|
||||||
|
@ -247,7 +251,7 @@ func TestSimulateMsgVoteWeighted(t *testing.T) {
|
||||||
operationMsg, _, err := op(r, app.BaseApp, ctx, accounts, "")
|
operationMsg, _, err := op(r, app.BaseApp, ctx, accounts, "")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
var msg v1beta1.MsgVoteWeighted
|
var msg v1beta2.MsgVoteWeighted
|
||||||
types.ModuleCdc.UnmarshalJSON(operationMsg.Msg, &msg)
|
types.ModuleCdc.UnmarshalJSON(operationMsg.Msg, &msg)
|
||||||
|
|
||||||
require.True(t, operationMsg.OK)
|
require.True(t, operationMsg.OK)
|
||||||
|
@ -255,7 +259,7 @@ func TestSimulateMsgVoteWeighted(t *testing.T) {
|
||||||
require.Equal(t, "cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r", msg.Voter)
|
require.Equal(t, "cosmos1ghekyjucln7y67ntx7cf27m9dpuxxemn4c8g4r", msg.Voter)
|
||||||
require.True(t, len(msg.Options) >= 1)
|
require.True(t, len(msg.Options) >= 1)
|
||||||
require.Equal(t, "gov", msg.Route())
|
require.Equal(t, "gov", msg.Route())
|
||||||
require.Equal(t, v1beta1.TypeMsgVoteWeighted, msg.Type())
|
require.Equal(t, simulation.TypeMsgVoteWeighted, msg.Type())
|
||||||
}
|
}
|
||||||
|
|
||||||
// returns context and an app with updated mint keeper
|
// returns context and an app with updated mint keeper
|
||||||
|
|
|
@ -3,6 +3,7 @@ package types
|
||||||
import (
|
import (
|
||||||
"github.com/cosmos/cosmos-sdk/codec"
|
"github.com/cosmos/cosmos-sdk/codec"
|
||||||
cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec"
|
cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec"
|
||||||
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -19,6 +20,7 @@ var (
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
cryptocodec.RegisterCrypto(amino)
|
cryptocodec.RegisterCrypto(amino)
|
||||||
|
sdk.RegisterLegacyAminoCodec(amino)
|
||||||
|
|
||||||
// v1beta1 and v1beta2 will each add their own Amino registrations inside
|
// v1beta1 and v1beta2 will each add their own Amino registrations inside
|
||||||
// their init() functions.
|
// their init() functions.
|
||||||
|
|
Loading…
Reference in New Issue