github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/staking/types/expected_keepers.go (about)

     1  package types
     2  
     3  import (
     4  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
     5  	authexported "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth/exported"
     6  	supplyexported "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/supply/exported"
     7  	stakingexported "github.com/fibonacci-chain/fbc/x/staking/exported"
     8  )
     9  
    10  // AccountKeeper defines the expected account keeper (noalias)
    11  type AccountKeeper interface {
    12  	IterateAccounts(ctx sdk.Context, process func(authexported.Account) (stop bool))
    13  }
    14  
    15  // SupplyKeeper defines the expected supply Keeper (noalias)
    16  type SupplyKeeper interface {
    17  	GetSupplyByDenom(ctx sdk.Context, denom string) sdk.Dec
    18  
    19  	GetModuleAddress(name string) sdk.AccAddress
    20  	GetModuleAccount(ctx sdk.Context, moduleName string) supplyexported.ModuleAccountI
    21  
    22  	// TODO remove with genesis 2-phases refactor https://github.com/cosmos/cosmos-sdk/issues/2862
    23  	SetModuleAccount(sdk.Context, supplyexported.ModuleAccountI)
    24  
    25  	SendCoinsFromModuleToModule(ctx sdk.Context, senderPool, recipientPool string, amt sdk.Coins) error
    26  	UndelegateCoinsFromModuleToAccount(ctx sdk.Context, senderModule string, recipientAddr sdk.AccAddress,
    27  		amt sdk.SysCoins) error
    28  	DelegateCoinsFromAccountToModule(ctx sdk.Context, senderAddr sdk.AccAddress, recipientModule string,
    29  		amt sdk.SysCoins) error
    30  
    31  	BurnCoins(ctx sdk.Context, name string, amt sdk.Coins) error
    32  }
    33  
    34  // ValidatorSet expected properties for the set of all validators (noalias)
    35  type ValidatorSet interface {
    36  	// iterate through validators by operator address, execute func for each validator
    37  	IterateValidators(sdk.Context,
    38  		func(index int64, validator stakingexported.ValidatorI) (stop bool))
    39  
    40  	// iterate through bonded validators by operator address, execute func for each validator
    41  	IterateBondedValidatorsByPower(sdk.Context,
    42  		func(index int64, validator stakingexported.ValidatorI) (stop bool))
    43  
    44  	// iterate through the consensus validator set of the last block by operator address, execute func for each validator
    45  	IterateLastValidators(sdk.Context,
    46  		func(index int64, validator stakingexported.ValidatorI) (stop bool))
    47  	// get a particular validator by operator address
    48  	Validator(sdk.Context, sdk.ValAddress) stakingexported.ValidatorI
    49  	// get a particular validator by consensus address
    50  	ValidatorByConsAddr(sdk.Context, sdk.ConsAddress) stakingexported.ValidatorI
    51  	// total bonded tokens within the validator set
    52  	TotalBondedTokens(sdk.Context) sdk.Dec
    53  	// total staking token supply
    54  	StakingTokenSupply(sdk.Context) sdk.Dec
    55  
    56  	// slash the validator and delegators of the validator, specifying offence height, offence power, and slash fraction
    57  	// jail a validator
    58  	Jail(sdk.Context, sdk.ConsAddress)
    59  	// unjail a validator
    60  	Unjail(sdk.Context, sdk.ConsAddress)
    61  
    62  	// MaxValidators returns the maximum amount of bonded validators
    63  	MaxValidators(sdk.Context) uint16
    64  }
    65  
    66  //_______________________________________________________________________________
    67  // Event Hooks
    68  // These can be utilized to communicate between a staking keeper and another
    69  // keeper which must take particular actions when validators/delegators change
    70  // state. The second keeper must implement this interface, which then the
    71  // staking keeper can call.
    72  
    73  // StakingHooks event hooks for staking validator object (noalias)
    74  type StakingHooks interface {
    75  	// Must be called when a validator is created
    76  	AfterValidatorCreated(ctx sdk.Context, valAddr sdk.ValAddress)
    77  	// Must be called when a validator's state changes
    78  	BeforeValidatorModified(ctx sdk.Context, valAddr sdk.ValAddress)
    79  	// Must be called when a validator is deleted
    80  	AfterValidatorRemoved(ctx sdk.Context, consAddr sdk.ConsAddress, valAddr sdk.ValAddress)
    81  	// Must be called when a validator is bonded
    82  	AfterValidatorBonded(ctx sdk.Context, consAddr sdk.ConsAddress, valAddr sdk.ValAddress)
    83  	// Must be called when a validator begins unbonding
    84  	AfterValidatorBeginUnbonding(ctx sdk.Context, consAddr sdk.ConsAddress, valAddr sdk.ValAddress)
    85  
    86  	// required by fbexchain
    87  	// Must be called when a validator is destroyed by tx
    88  	AfterValidatorDestroyed(ctx sdk.Context, consAddr sdk.ConsAddress, valAddr sdk.ValAddress)
    89  
    90  	// Must be called when a delegation is created
    91  	BeforeDelegationCreated(ctx sdk.Context, delAddr sdk.AccAddress, valAddrs []sdk.ValAddress)
    92  	// Must be called when a delegation's shares are modified
    93  	BeforeDelegationSharesModified(ctx sdk.Context, delAddr sdk.AccAddress, valAddrs []sdk.ValAddress)
    94  	// Must be called when a delegation is removed
    95  	BeforeDelegationRemoved(ctx sdk.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress)
    96  	// Must be called when a delegation is modified
    97  	AfterDelegationModified(ctx sdk.Context, delAddr sdk.AccAddress, valAddrs []sdk.ValAddress)
    98  	//BeforeValidatorSlashed(ctx sdk.Context, valAddr sdk.ValAddress, fraction sdk.Dec)
    99  	// Check modules enabled
   100  	CheckEnabled(ctx sdk.Context) bool
   101  }