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