diff --git a/CHANGELOG.md b/CHANGELOG.md index b0746002fbd..fdd1ab7adf7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -73,6 +73,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (07-tendermint) [\#1097](https://github.com/cosmos/ibc-go/pull/1097) Remove `GetClientID` function from 07-tendermint `Misbehaviour` type. * (07-tendermint) [\#1097](https://github.com/cosmos/ibc-go/pull/1097) Deprecate `ClientId` field in 07-tendermint `Misbehaviour` type. * (modules/core/exported) [\#1107](https://github.com/cosmos/ibc-go/pull/1107) Merging the `Header` and `Misbehaviour` interfaces into a single `ClientMessage` type. +* (06-solomachine)[\#1906](https://github.com/cosmos/ibc-go/pull/1906/files) Removed `AllowUpdateAfterProposal` boolean as it has been deprecated (see 01_concepts of the solo machine spec for more details). * (07-tendermint) [\#1896](https://github.com/cosmos/ibc-go/pull/1896) Remove error return from `IterateConsensusStateAscending` in `07-tendermint`. ### State Machine Breaking diff --git a/modules/core/02-client/keeper/client_test.go b/modules/core/02-client/keeper/client_test.go index 1b5d805eb49..48fdb078bea 100644 --- a/modules/core/02-client/keeper/client_test.go +++ b/modules/core/02-client/keeper/client_test.go @@ -23,7 +23,7 @@ func (suite *KeeperTestSuite) TestCreateClient() { expPass bool }{ {"success", ibctm.NewClientState(testChainID, ibctm.DefaultTrustLevel, trustingPeriod, ubdPeriod, maxClockDrift, testClientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath), true}, - {"client type not supported", solomachinetypes.NewClientState(0, &solomachinetypes.ConsensusState{suite.solomachine.ConsensusState().PublicKey, suite.solomachine.Diversifier, suite.solomachine.Time}, false), false}, + {"client type not supported", solomachinetypes.NewClientState(0, &solomachinetypes.ConsensusState{suite.solomachine.ConsensusState().PublicKey, suite.solomachine.Diversifier, suite.solomachine.Time}), false}, } for i, tc := range cases { diff --git a/modules/core/02-client/keeper/keeper_test.go b/modules/core/02-client/keeper/keeper_test.go index b79c692a2f4..145a7e06f25 100644 --- a/modules/core/02-client/keeper/keeper_test.go +++ b/modules/core/02-client/keeper/keeper_test.go @@ -190,7 +190,7 @@ func (suite *KeeperTestSuite) TestValidateSelfClient() { }, { "invalid client type", - solomachinetypes.NewClientState(0, &solomachinetypes.ConsensusState{suite.solomachine.ConsensusState().PublicKey, suite.solomachine.Diversifier, suite.solomachine.Time}, false), + solomachinetypes.NewClientState(0, &solomachinetypes.ConsensusState{suite.solomachine.ConsensusState().PublicKey, suite.solomachine.Diversifier, suite.solomachine.Time}), false, }, { diff --git a/modules/core/02-client/legacy/v100/genesis_test.go b/modules/core/02-client/legacy/v100/genesis_test.go index 953643e4ecc..13d9fa69e3e 100644 --- a/modules/core/02-client/legacy/v100/genesis_test.go +++ b/modules/core/02-client/legacy/v100/genesis_test.go @@ -59,7 +59,6 @@ func (suite *LegacyTestSuite) TestMigrateGenesisSolomachine() { Diversifier: clientState.ConsensusState.Diversifier, Timestamp: clientState.ConsensusState.Timestamp, }, - AllowUpdateAfterProposal: clientState.AllowUpdateAfterProposal, } // set client state diff --git a/modules/core/02-client/legacy/v100/store.go b/modules/core/02-client/legacy/v100/store.go index e83b116c956..26bd5fafc7a 100644 --- a/modules/core/02-client/legacy/v100/store.go +++ b/modules/core/02-client/legacy/v100/store.go @@ -115,10 +115,9 @@ func migrateSolomachine(clientState *ClientState) *smtypes.ClientState { } return &smtypes.ClientState{ - Sequence: clientState.Sequence, - IsFrozen: isFrozen, - ConsensusState: consensusState, - AllowUpdateAfterProposal: clientState.AllowUpdateAfterProposal, + Sequence: clientState.Sequence, + IsFrozen: isFrozen, + ConsensusState: consensusState, } } diff --git a/modules/core/02-client/legacy/v100/store_test.go b/modules/core/02-client/legacy/v100/store_test.go index 69c431fe15f..e79763ed70d 100644 --- a/modules/core/02-client/legacy/v100/store_test.go +++ b/modules/core/02-client/legacy/v100/store_test.go @@ -71,7 +71,6 @@ func (suite *LegacyTestSuite) TestMigrateStoreSolomachine() { Diversifier: clientState.ConsensusState.Diversifier, Timestamp: clientState.ConsensusState.Timestamp, }, - AllowUpdateAfterProposal: clientState.AllowUpdateAfterProposal, } // set client state diff --git a/modules/core/02-client/types/genesis_test.go b/modules/core/02-client/types/genesis_test.go index fa30abf4ac5..be5377c3c87 100644 --- a/modules/core/02-client/types/genesis_test.go +++ b/modules/core/02-client/types/genesis_test.go @@ -114,7 +114,7 @@ func (suite *TypesTestSuite) TestValidateGenesis() { types.NewIdentifiedClientState( soloMachineClientID, ibctm.NewClientState(suite.chainA.ChainID, ibctm.DefaultTrustLevel, ibctesting.TrustingPeriod, ibctesting.UnbondingPeriod, ibctesting.MaxClockDrift, clientHeight, commitmenttypes.GetSDKSpecs(), ibctesting.UpgradePath), ), - types.NewIdentifiedClientState(tmClientID0, solomachinetypes.NewClientState(0, &solomachinetypes.ConsensusState{suite.solomachine.ConsensusState().PublicKey, suite.solomachine.Diversifier, suite.solomachine.Time}, false)), + types.NewIdentifiedClientState(tmClientID0, solomachinetypes.NewClientState(0, &solomachinetypes.ConsensusState{suite.solomachine.ConsensusState().PublicKey, suite.solomachine.Diversifier, suite.solomachine.Time})), }, nil, nil, diff --git a/modules/core/02-client/types/proposal_test.go b/modules/core/02-client/types/proposal_test.go index 2b1725248e0..867bedd67a4 100644 --- a/modules/core/02-client/types/proposal_test.go +++ b/modules/core/02-client/types/proposal_test.go @@ -117,7 +117,6 @@ func (suite *TypesTestSuite) TestUpgradeProposalValidateBasic() { "fails validate abstract - empty title", func() { proposal, err = types.NewUpgradeProposal("", ibctesting.Description, plan, cs.ZeroCustomFields()) suite.Require().NoError(err) - }, false, }, { diff --git a/modules/core/legacy/v100/genesis_test.go b/modules/core/legacy/v100/genesis_test.go index b50a802b935..f7f9e9b3797 100644 --- a/modules/core/legacy/v100/genesis_test.go +++ b/modules/core/legacy/v100/genesis_test.go @@ -86,7 +86,6 @@ func (suite *LegacyTestSuite) TestMigrateGenesisSolomachine() { Diversifier: clientState.ConsensusState.Diversifier, Timestamp: clientState.ConsensusState.Timestamp, }, - AllowUpdateAfterProposal: clientState.AllowUpdateAfterProposal, } // set client state diff --git a/modules/light-clients/06-solomachine/client_state.go b/modules/light-clients/06-solomachine/client_state.go index 29474f0d32b..5f094ab0c00 100644 --- a/modules/light-clients/06-solomachine/client_state.go +++ b/modules/light-clients/06-solomachine/client_state.go @@ -18,12 +18,12 @@ import ( var _ exported.ClientState = (*ClientState)(nil) // NewClientState creates a new ClientState instance. -func NewClientState(latestSequence uint64, consensusState *ConsensusState, allowUpdateAfterProposal bool) *ClientState { +func NewClientState(latestSequence uint64, consensusState *ConsensusState) *ClientState { return &ClientState{ - Sequence: latestSequence, - IsFrozen: false, - ConsensusState: consensusState, - AllowUpdateAfterProposal: allowUpdateAfterProposal, + Sequence: latestSequence, + IsFrozen: false, + ConsensusState: consensusState, + // AllowUpdateAfterProposal has been DEPRECATED. See 01_concepts in the solo machine spec repo for more details. } } @@ -75,11 +75,10 @@ func (cs ClientState) Validate() error { return cs.ConsensusState.ValidateBasic() } -// ZeroCustomFields returns solomachine client state with client-specific fields FrozenSequence, -// and AllowUpdateAfterProposal zeroed out +// ZeroCustomFields returns solomachine client state with client-specific field FrozenSequence zeroed out func (cs ClientState) ZeroCustomFields() exported.ClientState { return NewClientState( - cs.Sequence, cs.ConsensusState, false, + cs.Sequence, cs.ConsensusState, ) } diff --git a/modules/light-clients/06-solomachine/client_state_test.go b/modules/light-clients/06-solomachine/client_state_test.go index 68bf15cace9..1533223153c 100644 --- a/modules/light-clients/06-solomachine/client_state_test.go +++ b/modules/light-clients/06-solomachine/client_state_test.go @@ -52,22 +52,22 @@ func (suite *SoloMachineTestSuite) TestClientStateValidateBasic() { }, { "sequence is zero", - solomachine.NewClientState(0, &solomachine.ConsensusState{sm.ConsensusState().PublicKey, sm.Diversifier, sm.Time}, false), + solomachine.NewClientState(0, &solomachine.ConsensusState{sm.ConsensusState().PublicKey, sm.Diversifier, sm.Time}), false, }, { "timestamp is zero", - solomachine.NewClientState(1, &solomachine.ConsensusState{sm.ConsensusState().PublicKey, sm.Diversifier, 0}, false), + solomachine.NewClientState(1, &solomachine.ConsensusState{sm.ConsensusState().PublicKey, sm.Diversifier, 0}), false, }, { "diversifier is blank", - solomachine.NewClientState(1, &solomachine.ConsensusState{sm.ConsensusState().PublicKey, " ", 1}, false), + solomachine.NewClientState(1, &solomachine.ConsensusState{sm.ConsensusState().PublicKey, " ", 1}), false, }, { "pubkey is empty", - solomachine.NewClientState(1, &solomachine.ConsensusState{nil, sm.Diversifier, sm.Time}, false), + solomachine.NewClientState(1, &solomachine.ConsensusState{nil, sm.Diversifier, sm.Time}), false, }, } @@ -76,7 +76,6 @@ func (suite *SoloMachineTestSuite) TestClientStateValidateBasic() { tc := tc suite.Run(tc.name, func() { - err := tc.clientState.Validate() if tc.expPass { @@ -193,7 +192,6 @@ func (suite *SoloMachineTestSuite) TestVerifyMembership() { proof, err = suite.chainA.Codec.Marshal(signatureDoc) suite.Require().NoError(err) - }, true, }, @@ -455,7 +453,7 @@ func (suite *SoloMachineTestSuite) TestVerifyMembership() { PublicKey: sm.ConsensusState().PublicKey, } - clientState = solomachine.NewClientState(sm.Sequence-1, consensusState, false) + clientState = solomachine.NewClientState(sm.Sequence-1, consensusState) }, false, }, @@ -492,7 +490,7 @@ func (suite *SoloMachineTestSuite) TestVerifyMembership() { PublicKey: sm.ConsensusState().PublicKey, } - clientState = solomachine.NewClientState(sm.Sequence, consensusState, false) + clientState = solomachine.NewClientState(sm.Sequence, consensusState) }, false, }, @@ -666,7 +664,7 @@ func (suite *SoloMachineTestSuite) TestVerifyNonMembership() { PublicKey: sm.ConsensusState().PublicKey, } - clientState = solomachine.NewClientState(sm.Sequence-1, consensusState, false) + clientState = solomachine.NewClientState(sm.Sequence-1, consensusState) }, false, }, @@ -703,7 +701,7 @@ func (suite *SoloMachineTestSuite) TestVerifyNonMembership() { PublicKey: sm.ConsensusState().PublicKey, } - clientState = solomachine.NewClientState(sm.Sequence, consensusState, false) + clientState = solomachine.NewClientState(sm.Sequence, consensusState) }, false, }, diff --git a/modules/light-clients/06-solomachine/misbehaviour_test.go b/modules/light-clients/06-solomachine/misbehaviour_test.go index 2e6044b67d1..bd11922e704 100644 --- a/modules/light-clients/06-solomachine/misbehaviour_test.go +++ b/modules/light-clients/06-solomachine/misbehaviour_test.go @@ -112,7 +112,6 @@ func (suite *SoloMachineTestSuite) TestMisbehaviourValidateBasic() { tc := tc suite.Run(tc.name, func() { - misbehaviour := sm.CreateMisbehaviour() tc.malleateMisbehaviour(misbehaviour) diff --git a/modules/light-clients/06-solomachine/proposal_handle.go b/modules/light-clients/06-solomachine/proposal_handle.go index bef2db14299..68ab4d9b0c5 100644 --- a/modules/light-clients/06-solomachine/proposal_handle.go +++ b/modules/light-clients/06-solomachine/proposal_handle.go @@ -22,10 +22,6 @@ func (cs ClientState) CheckSubstituteAndUpdateState( ctx sdk.Context, cdc codec.BinaryCodec, subjectClientStore, _ sdk.KVStore, substituteClient exported.ClientState, ) error { - if !cs.AllowUpdateAfterProposal { - return sdkerrors.Wrapf(clienttypes.ErrUpdateClientFailed, "solo machine client is not allowed to updated with a proposal") - } - substituteClientState, ok := substituteClient.(*ClientState) if !ok { return sdkerrors.Wrapf(clienttypes.ErrInvalidClientType, "substitute client state type %T, expected %T", substituteClient, &ClientState{}) diff --git a/modules/light-clients/06-solomachine/proposal_handle_test.go b/modules/light-clients/06-solomachine/proposal_handle_test.go index 21a28564320..17120c367f6 100644 --- a/modules/light-clients/06-solomachine/proposal_handle_test.go +++ b/modules/light-clients/06-solomachine/proposal_handle_test.go @@ -28,11 +28,6 @@ func (suite *SoloMachineTestSuite) TestCheckSubstituteAndUpdateState() { subjectClientState.AllowUpdateAfterProposal = true }, true, }, - { - "subject not allowed to be updated", func() { - subjectClientState.AllowUpdateAfterProposal = false - }, false, - }, { "substitute is not the solo machine", func() { substituteClientState = &ibctm.ClientState{} @@ -63,7 +58,6 @@ func (suite *SoloMachineTestSuite) TestCheckSubstituteAndUpdateState() { suite.SetupTest() subjectClientState = sm.ClientState() - subjectClientState.AllowUpdateAfterProposal = true substitute := ibctesting.NewSolomachine(suite.T(), suite.chainA.Codec, "substitute", "testing", 5) substituteClientState = substitute.ClientState() diff --git a/modules/light-clients/06-solomachine/spec/01_concepts.md b/modules/light-clients/06-solomachine/spec/01_concepts.md index 602c9947f71..c5df3f7e1b4 100644 --- a/modules/light-clients/06-solomachine/spec/01_concepts.md +++ b/modules/light-clients/06-solomachine/spec/01_concepts.md @@ -133,7 +133,6 @@ If the update is successful: An update by a governance proposal will only succeed if: - the substitute provided is parseable to solo machine client state -- the `AllowUpdateAfterProposal` client parameter is set to `true` - the new consensus state public key does not equal the current consensus state public key If the update is successful: @@ -142,6 +141,8 @@ If the update is successful: - the subject consensus state is updated to the substitute consensus state - the client is unfrozen (if it was previously frozen) +NOTE: Previously, `AllowUpdateAfterProposal` was used to signal the update/recovery options for the solo machine client. However, this has now been deprecated because a code migration can overwrite the client and consensus states regardless of the value of this parameter. If governance would vote to overwrite a client or consensus state, it is likely that governance would also be willing to perform a code migration to do the same. + ## Misbehaviour Misbehaviour handling will only succeed if: diff --git a/modules/light-clients/06-solomachine/update_test.go b/modules/light-clients/06-solomachine/update_test.go index 12ef195b220..54cc2ded6e1 100644 --- a/modules/light-clients/06-solomachine/update_test.go +++ b/modules/light-clients/06-solomachine/update_test.go @@ -83,7 +83,6 @@ func (suite *SoloMachineTestSuite) TestVerifyClientMessageHeader() { { "signature uses wrong sequence", func() { - sm.Sequence++ clientMsg = sm.CreateHeader(sm.Diversifier) }, @@ -125,7 +124,6 @@ func (suite *SoloMachineTestSuite) TestVerifyClientMessageHeader() { clientState = cs clientMsg = h - }, false, }, @@ -341,7 +339,6 @@ func (suite *SoloMachineTestSuite) TestVerifyClientMessageMisbehaviour() { { "signatures sign over different sequence", func() { - // store in temp before assigning to interface type m := sm.CreateMisbehaviour() @@ -470,16 +467,13 @@ func (suite *SoloMachineTestSuite) TestUpdateState() { clientState.UpdateState(suite.chainA.GetContext(), suite.chainA.Codec, suite.store, clientMsg) }) } - }) } } } func (suite *SoloMachineTestSuite) TestCheckForMisbehaviour() { - var ( - clientMsg exported.ClientMessage - ) + var clientMsg exported.ClientMessage // test singlesig and multisig public keys for _, sm := range []*ibctesting.Solomachine{suite.solomachine, suite.solomachineMulti} { @@ -519,7 +513,6 @@ func (suite *SoloMachineTestSuite) TestCheckForMisbehaviour() { } else { suite.Require().False(foundMisbehaviour) } - }) } } diff --git a/modules/light-clients/07-tendermint/client_state_test.go b/modules/light-clients/07-tendermint/client_state_test.go index 2dbdf357d3a..6783baf22ce 100644 --- a/modules/light-clients/07-tendermint/client_state_test.go +++ b/modules/light-clients/07-tendermint/client_state_test.go @@ -23,9 +23,7 @@ const ( fiftyOneCharChainID = "123456789012345678901234567890123456789012345678901" ) -var ( - invalidProof = []byte("invalid proof") -) +var invalidProof = []byte("invalid proof") func (suite *TendermintTestSuite) TestStatus() { var ( @@ -162,7 +160,6 @@ func (suite *TendermintTestSuite) TestValidate() { } func (suite *TendermintTestSuite) TestInitialize() { - testCases := []struct { name string consensusState exported.ConsensusState diff --git a/modules/light-clients/07-tendermint/consensus_state_test.go b/modules/light-clients/07-tendermint/consensus_state_test.go index b20b86fed4d..0a0ca51ba6f 100644 --- a/modules/light-clients/07-tendermint/consensus_state_test.go +++ b/modules/light-clients/07-tendermint/consensus_state_test.go @@ -14,35 +14,44 @@ func (suite *TendermintTestSuite) TestConsensusStateValidateBasic() { consensusState *ibctm.ConsensusState expectPass bool }{ - {"success", + { + "success", &ibctm.ConsensusState{ Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot([]byte("app_hash")), NextValidatorsHash: suite.valsHash, }, - true}, - {"success with sentinel", + true, + }, + { + "success with sentinel", &ibctm.ConsensusState{ Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot([]byte(ibctm.SentinelRoot)), NextValidatorsHash: suite.valsHash, }, - true}, - {"root is nil", + true, + }, + { + "root is nil", &ibctm.ConsensusState{ Timestamp: suite.now, Root: commitmenttypes.MerkleRoot{}, NextValidatorsHash: suite.valsHash, }, - false}, - {"root is empty", + false, + }, + { + "root is empty", &ibctm.ConsensusState{ Timestamp: suite.now, Root: commitmenttypes.MerkleRoot{}, NextValidatorsHash: suite.valsHash, }, - false}, - {"nextvalshash is invalid", + false, + }, + { + "nextvalshash is invalid", &ibctm.ConsensusState{ Timestamp: suite.now, Root: commitmenttypes.NewMerkleRoot([]byte("app_hash")), @@ -51,7 +60,8 @@ func (suite *TendermintTestSuite) TestConsensusStateValidateBasic() { false, }, - {"timestamp is zero", + { + "timestamp is zero", &ibctm.ConsensusState{ Timestamp: time.Time{}, Root: commitmenttypes.NewMerkleRoot([]byte("app_hash")), diff --git a/modules/light-clients/07-tendermint/misbehaviour_handle_test.go b/modules/light-clients/07-tendermint/misbehaviour_handle_test.go index 7b42d6ab19a..db2a4de7ac8 100644 --- a/modules/light-clients/07-tendermint/misbehaviour_handle_test.go +++ b/modules/light-clients/07-tendermint/misbehaviour_handle_test.go @@ -117,12 +117,10 @@ func (suite *TendermintTestSuite) TestVerifyMisbehaviour() { Header1: suite.chainB.CreateTMClientHeader(suite.chainB.ChainID, suite.chainB.CurrentHeader.Height, trustedHeight1, suite.chainB.CurrentHeader.Time.Add(time.Minute), suite.chainB.Vals, suite.chainB.NextVals, trustedVals1, suite.chainB.Signers), Header2: suite.chainB.CreateTMClientHeader(suite.chainB.ChainID, suite.chainB.CurrentHeader.Height, trustedHeight2, suite.chainB.CurrentHeader.Time, suite.chainB.Vals, suite.chainB.NextVals, trustedVals2, suite.chainB.Signers), } - }, true, }, { - "valid misbehaviour at a previous revision", func() { trustedHeight := path.EndpointA.GetClientState().GetLatestHeight().(clienttypes.Height) @@ -254,7 +252,6 @@ func (suite *TendermintTestSuite) TestVerifyMisbehaviour() { Header1: suite.chainB.CreateTMClientHeader("evmos", int64(height.RevisionHeight), trustedHeight, suite.chainB.CurrentHeader.Time.Add(time.Minute), suite.chainB.Vals, suite.chainB.NextVals, trustedVals, suite.chainB.Signers), Header2: suite.chainB.CreateTMClientHeader("evmos", int64(height.RevisionHeight), trustedHeight, suite.chainB.CurrentHeader.Time, suite.chainB.Vals, suite.chainB.NextVals, trustedVals, suite.chainB.Signers), } - }, false, }, { @@ -500,7 +497,6 @@ func (suite *TendermintTestSuite) TestVerifyMisbehaviourNonRevisionChainID() { Header1: suite.chainB.CreateTMClientHeader(suite.chainB.ChainID, suite.chainB.CurrentHeader.Height, trustedHeight1, suite.chainB.CurrentHeader.Time.Add(time.Minute), suite.chainB.Vals, suite.chainB.NextVals, trustedVals1, suite.chainB.Signers), Header2: suite.chainB.CreateTMClientHeader(suite.chainB.ChainID, suite.chainB.CurrentHeader.Height, trustedHeight2, suite.chainB.CurrentHeader.Time, suite.chainB.Vals, suite.chainB.NextVals, trustedVals2, suite.chainB.Signers), } - }, true, }, @@ -575,7 +571,6 @@ func (suite *TendermintTestSuite) TestVerifyMisbehaviourNonRevisionChainID() { Header1: suite.chainB.CreateTMClientHeader("evmos", int64(height.RevisionHeight), trustedHeight, suite.chainB.CurrentHeader.Time.Add(time.Minute), suite.chainB.Vals, suite.chainB.NextVals, trustedVals, suite.chainB.Signers), Header2: suite.chainB.CreateTMClientHeader("evmos", int64(height.RevisionHeight), trustedHeight, suite.chainB.CurrentHeader.Time, suite.chainB.Vals, suite.chainB.NextVals, trustedVals, suite.chainB.Signers), } - }, false, }, { diff --git a/modules/light-clients/07-tendermint/update_test.go b/modules/light-clients/07-tendermint/update_test.go index 0b5b55eb1cc..920985d01b9 100644 --- a/modules/light-clients/07-tendermint/update_test.go +++ b/modules/light-clients/07-tendermint/update_test.go @@ -699,9 +699,7 @@ func (suite *TendermintTestSuite) TestCheckForMisbehaviour() { } func (suite *TendermintTestSuite) TestUpdateStateOnMisbehaviour() { - var ( - path *ibctesting.Path - ) + var path *ibctesting.Path testCases := []struct { name string diff --git a/testing/solomachine.go b/testing/solomachine.go index d22e67afd24..77be35b2d47 100644 --- a/testing/solomachine.go +++ b/testing/solomachine.go @@ -82,10 +82,9 @@ func GenerateKeys(t *testing.T, n uint64) ([]cryptotypes.PrivKey, []cryptotypes. return privKeys, pubKeys, pk } -// ClientState returns a new solo machine ClientState instance. Default usage does not allow update -// after governance proposal +// ClientState returns a new solo machine ClientState instance. func (solo *Solomachine) ClientState() *solomachinetypes.ClientState { - return solomachinetypes.NewClientState(solo.Sequence, solo.ConsensusState(), false) + return solomachinetypes.NewClientState(solo.Sequence, solo.ConsensusState()) } // ConsensusState returns a new solo machine ConsensusState instance