From debfb822059c0c930a01f60f9953504f015e7cca Mon Sep 17 00:00:00 2001 From: Prathamesh Musale Date: Fri, 16 Aug 2024 06:23:56 +0000 Subject: [PATCH] Integrate slashing module in the app (#53) Part of [laconicd testnet validator enrollment](https://www.notion.so/laconicd-testnet-validator-enrollment-6fc1d3cafcc64fef8c5ed3affa27c675) Add `slashing` module for penalizing / jailing offline validators Reference: https://docs.cosmos.network/main/build/modules/slashing#liveness-tracking Note: Breaking change, an existing chain cannot be run with the updated binary Reviewed-on: https://git.vdb.to/cerc-io/laconicd/pulls/53 Co-authored-by: Prathamesh Musale Co-committed-by: Prathamesh Musale --- app/app.go | 4 ++++ app/app.yaml | 7 +++++-- app/export.go | 13 +++++++++++++ go.mod | 1 + 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/app/app.go b/app/app.go index b320a5e46..ae4ae6baf 100644 --- a/app/app.go +++ b/app/app.go @@ -34,6 +34,7 @@ import ( distrkeeper "github.com/cosmos/cosmos-sdk/x/distribution/keeper" "github.com/cosmos/cosmos-sdk/x/genutil" genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" + slashingkeeper "github.com/cosmos/cosmos-sdk/x/slashing/keeper" stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" _ "cosmossdk.io/api/cosmos/tx/config/v1" // import for side-effects @@ -48,6 +49,7 @@ import ( _ "github.com/cosmos/cosmos-sdk/x/crisis" // import for side-effects _ "github.com/cosmos/cosmos-sdk/x/distribution" // import for side-effects _ "github.com/cosmos/cosmos-sdk/x/mint" // import for side-effects + _ "github.com/cosmos/cosmos-sdk/x/slashing" // import for side-effects _ "github.com/cosmos/cosmos-sdk/x/staking" // import for side-effects ) @@ -76,6 +78,7 @@ type LaconicApp struct { AccountKeeper authkeeper.AccountKeeper BankKeeper bankkeeper.Keeper StakingKeeper *stakingkeeper.Keeper + SlashingKeeper slashingkeeper.Keeper DistrKeeper distrkeeper.Keeper CrisisKeeper *crisiskeeper.Keeper ConsensusParamsKeeper consensuskeeper.Keeper @@ -142,6 +145,7 @@ func NewLaconicApp( &app.AccountKeeper, &app.BankKeeper, &app.StakingKeeper, + &app.SlashingKeeper, &app.DistrKeeper, &app.CrisisKeeper, &app.ConsensusParamsKeeper, diff --git a/app/app.yaml b/app/app.yaml index 3d05d67cc..56fcbe31c 100644 --- a/app/app.yaml +++ b/app/app.yaml @@ -6,11 +6,11 @@ modules: # During begin block slashing happens after distr.BeginBlocker so that # there is nothing left over in the validator fee pool, so as to keep the CanWithdrawInvariant invariant. # NOTE: staking module is required if HistoricalEntries param > 0 - begin_blockers: [distribution, staking] + begin_blockers: [distribution, slashing, staking] end_blockers: [crisis, staking, auction, registry] # NOTE: The genutils module must occur after staking so that pools are properly initialized with tokens from genesis accounts. # NOTE: The genutils module must also occur after auth so that it can access the params from auth. - init_genesis: [auth, bank, distribution, staking, crisis, genutil, auction, bond, registry, onboarding] + init_genesis: [auth, bank, distribution, staking, slashing, crisis, genutil, auction, bond, registry, onboarding] override_store_keys: - module_name: auth kv_store_key: acc @@ -39,6 +39,9 @@ modules: - name: staking config: "@type": cosmos.staking.module.v1.Module + - name: slashing + config: + "@type": cosmos.slashing.module.v1.Module - name: distribution config: "@type": cosmos.distribution.module.v1.Module diff --git a/app/export.go b/app/export.go index ad1b81299..f38a30987 100644 --- a/app/export.go +++ b/app/export.go @@ -10,6 +10,7 @@ import ( tmproto "github.com/cometbft/cometbft/proto/tendermint/types" servertypes "github.com/cosmos/cosmos-sdk/server/types" sdk "github.com/cosmos/cosmos-sdk/types" + slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" "github.com/cosmos/cosmos-sdk/x/staking" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" ) @@ -221,4 +222,16 @@ func (app *LaconicApp) prepForZeroHeightGenesis(ctx sdk.Context, jailAllowedAddr if err != nil { log.Fatal(err) } + + /* Handle slashing state. */ + + // reset start height on signing infos + app.SlashingKeeper.IterateValidatorSigningInfos( + ctx, + func(addr sdk.ConsAddress, info slashingtypes.ValidatorSigningInfo) (stop bool) { + info.StartHeight = 0 + app.SlashingKeeper.SetValidatorSigningInfo(ctx, addr, info) + return false + }, + ) } diff --git a/go.mod b/go.mod index c4befb723..a41ec79a5 100644 --- a/go.mod +++ b/go.mod @@ -61,6 +61,7 @@ require ( github.com/agnivade/levenshtein v1.1.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect + github.com/bits-and-blooms/bitset v1.10.0 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect github.com/btcsuite/btcd/btcutil v1.1.5 // indirect github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect