github.com/Finschia/finschia-sdk@v0.48.1/x/staking/types/expected_keepers.go (about) 1 package types 2 3 import ( 4 sdk "github.com/Finschia/finschia-sdk/types" 5 authtypes "github.com/Finschia/finschia-sdk/x/auth/types" 6 ) 7 8 // DistributionKeeper expected distribution keeper (noalias) 9 type DistributionKeeper interface { 10 GetFeePoolCommunityCoins(ctx sdk.Context) sdk.DecCoins 11 GetValidatorOutstandingRewardsCoins(ctx sdk.Context, val sdk.ValAddress) sdk.DecCoins 12 } 13 14 // AccountKeeper defines the expected account keeper (noalias) 15 type AccountKeeper interface { 16 IterateAccounts(ctx sdk.Context, process func(authtypes.AccountI) (stop bool)) 17 GetAccount(ctx sdk.Context, addr sdk.AccAddress) authtypes.AccountI // only used for simulation 18 19 GetModuleAddress(name string) sdk.AccAddress 20 GetModuleAccount(ctx sdk.Context, moduleName string) authtypes.ModuleAccountI 21 22 // TODO remove with genesis 2-phases refactor https://github.com/cosmos/cosmos-sdk/issues/2862 23 SetModuleAccount(sdk.Context, authtypes.ModuleAccountI) 24 } 25 26 // BankKeeper defines the expected interface needed to retrieve account balances. 27 type BankKeeper interface { 28 GetAllBalances(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins 29 GetBalance(ctx sdk.Context, addr sdk.AccAddress, denom string) sdk.Coin 30 LockedCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins 31 SpendableCoins(ctx sdk.Context, addr sdk.AccAddress) sdk.Coins 32 33 GetSupply(ctx sdk.Context, denom string) sdk.Coin 34 35 SendCoinsFromModuleToModule(ctx sdk.Context, senderPool, recipientPool string, amt sdk.Coins) error 36 UndelegateCoinsFromModuleToAccount(ctx sdk.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins) error 37 DelegateCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins) error 38 39 BurnCoins(ctx sdk.Context, name string, amt sdk.Coins) error 40 } 41 42 // ValidatorSet expected properties for the set of all validators (noalias) 43 type ValidatorSet interface { 44 // iterate through validators by operator address, execute func for each validator 45 IterateValidators(sdk.Context, 46 func(index int64, validator ValidatorI) (stop bool)) 47 48 // iterate through bonded validators by operator address, execute func for each validator 49 IterateBondedValidatorsByPower(sdk.Context, 50 func(index int64, validator ValidatorI) (stop bool)) 51 52 // iterate through the consensus validator set of the last block by operator address, execute func for each validator 53 IterateLastValidators(sdk.Context, 54 func(index int64, validator ValidatorI) (stop bool)) 55 56 Validator(sdk.Context, sdk.ValAddress) ValidatorI // get a particular validator by operator address 57 ValidatorByConsAddr(sdk.Context, sdk.ConsAddress) ValidatorI // get a particular validator by consensus address 58 TotalBondedTokens(sdk.Context) sdk.Int // total bonded tokens within the validator set 59 StakingTokenSupply(sdk.Context) sdk.Int // total staking token supply 60 61 // slash the validator and delegators of the validator, specifying offence height, offence power, and slash fraction 62 Slash(sdk.Context, sdk.ConsAddress, int64, int64, sdk.Dec) 63 Jail(sdk.Context, sdk.ConsAddress) // jail a validator 64 Unjail(sdk.Context, sdk.ConsAddress) // unjail a validator 65 66 // Delegation allows for getting a particular delegation for a given validator 67 // and delegator outside the scope of the staking module. 68 Delegation(sdk.Context, sdk.AccAddress, sdk.ValAddress) DelegationI 69 70 // MaxValidators returns the maximum amount of bonded validators 71 MaxValidators(sdk.Context) uint32 72 } 73 74 // DelegationSet expected properties for the set of all delegations for a particular (noalias) 75 type DelegationSet interface { 76 GetValidatorSet() ValidatorSet // validator set for which delegation set is based upon 77 78 // iterate through all delegations from one delegator by validator-AccAddress, 79 // execute func for each validator 80 IterateDelegations(ctx sdk.Context, delegator sdk.AccAddress, 81 fn func(index int64, delegation DelegationI) (stop bool)) 82 } 83 84 // Event Hooks 85 // These can be utilized to communicate between a staking keeper and another 86 // keeper which must take particular actions when validators/delegators change 87 // state. The second keeper must implement this interface, which then the 88 // staking keeper can call. 89 90 // StakingHooks event hooks for staking validator object (noalias) 91 type StakingHooks interface { 92 AfterValidatorCreated(ctx sdk.Context, valAddr sdk.ValAddress) // Must be called when a validator is created 93 BeforeValidatorModified(ctx sdk.Context, valAddr sdk.ValAddress) // Must be called when a validator's state changes 94 AfterValidatorRemoved(ctx sdk.Context, consAddr sdk.ConsAddress, valAddr sdk.ValAddress) // Must be called when a validator is deleted 95 96 AfterValidatorBonded(ctx sdk.Context, consAddr sdk.ConsAddress, valAddr sdk.ValAddress) // Must be called when a validator is bonded 97 AfterValidatorBeginUnbonding(ctx sdk.Context, consAddr sdk.ConsAddress, valAddr sdk.ValAddress) // Must be called when a validator begins unbonding 98 99 BeforeDelegationCreated(ctx sdk.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) // Must be called when a delegation is created 100 BeforeDelegationSharesModified(ctx sdk.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) // Must be called when a delegation's shares are modified 101 BeforeDelegationRemoved(ctx sdk.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) // Must be called when a delegation is removed 102 AfterDelegationModified(ctx sdk.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) 103 BeforeValidatorSlashed(ctx sdk.Context, valAddr sdk.ValAddress, fraction sdk.Dec) 104 }