github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/gov/invariants.go (about) 1 package gov 2 3 import ( 4 "fmt" 5 6 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 7 8 "github.com/fibonacci-chain/fbc/x/gov/keeper" 9 "github.com/fibonacci-chain/fbc/x/gov/types" 10 ) 11 12 // RegisterInvariants registers all governance invariants 13 func RegisterInvariants(ir sdk.InvariantRegistry, keeper keeper.Keeper) { 14 ir.RegisterRoute(types.ModuleName, "module-account", ModuleAccountInvariant(keeper)) 15 } 16 17 // ModuleAccountInvariant checks that the module account coins reflects the sum of 18 // deposit amounts held on store 19 func ModuleAccountInvariant(keeper keeper.Keeper) sdk.Invariant { 20 return func(ctx sdk.Context) (string, bool) { 21 var expectedDeposits sdk.Coins 22 23 keeper.IterateAllDeposits(ctx, func(deposit types.Deposit) bool { 24 expectedDeposits = expectedDeposits.Add(deposit.Amount...) 25 return false 26 }) 27 28 macc := keeper.GetGovernanceAccount(ctx) 29 broken := !macc.GetCoins().IsEqual(expectedDeposits) 30 31 return sdk.FormatInvariant(types.ModuleName, "deposits", 32 fmt.Sprintf("\tgov ModuleAccount coins: %s\n\tsum of deposit amounts: %s\n", 33 macc.GetCoins(), expectedDeposits)), broken 34 } 35 }