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  }