github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/x/bank/internal/keeper/invariants.go (about) 1 package keeper 2 3 import ( 4 "fmt" 5 6 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 7 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/bank/internal/types" 8 ) 9 10 // RegisterInvariants registers the bank module invariants 11 func RegisterInvariants(ir sdk.InvariantRegistry, ak types.AccountKeeper) { 12 ir.RegisterRoute(types.ModuleName, "nonnegative-outstanding", 13 NonnegativeBalanceInvariant(ak)) 14 } 15 16 // NonnegativeBalanceInvariant checks that all accounts in the application have non-negative balances 17 func NonnegativeBalanceInvariant(ak types.AccountKeeper) sdk.Invariant { 18 return func(ctx sdk.Context) (string, bool) { 19 var msg string 20 var count int 21 22 accts := ak.GetAllAccounts(ctx) 23 for _, acc := range accts { 24 coins := acc.GetCoins() 25 if coins.IsAnyNegative() { 26 count++ 27 msg += fmt.Sprintf("\t%s has a negative denomination of %s\n", 28 acc.GetAddress().String(), 29 coins.String()) 30 } 31 } 32 broken := count != 0 33 34 return sdk.FormatInvariant(types.ModuleName, "nonnegative-outstanding", 35 fmt.Sprintf("amount of negative accounts found %d\n%s", count, msg)), broken 36 } 37 }