mirror of
https://github.com/0glabs/0g-chain.git
synced 2024-11-10 10:05:18 +00:00
Implement savings module hooks interface/types (#1202)
* implement savings hooks types * implement saving hooks keeper * add savings hooks to app.go + implement incentive type compliance
This commit is contained in:
parent
60489c10a1
commit
9170090f67
@ -537,7 +537,7 @@ func NewApp(
|
|||||||
app.stakingKeeper,
|
app.stakingKeeper,
|
||||||
&swapKeeper,
|
&swapKeeper,
|
||||||
)
|
)
|
||||||
app.savingsKeeper = savingskeeper.NewKeeper(
|
savingsKeeper := savingskeeper.NewKeeper(
|
||||||
appCodec,
|
appCodec,
|
||||||
keys[savingstypes.StoreKey],
|
keys[savingstypes.StoreKey],
|
||||||
savingsSubspace,
|
savingsSubspace,
|
||||||
@ -570,6 +570,7 @@ func NewApp(
|
|||||||
app.swapKeeper = *swapKeeper.SetHooks(app.incentiveKeeper.Hooks())
|
app.swapKeeper = *swapKeeper.SetHooks(app.incentiveKeeper.Hooks())
|
||||||
app.cdpKeeper = *cdpKeeper.SetHooks(cdptypes.NewMultiCDPHooks(app.incentiveKeeper.Hooks()))
|
app.cdpKeeper = *cdpKeeper.SetHooks(cdptypes.NewMultiCDPHooks(app.incentiveKeeper.Hooks()))
|
||||||
app.hardKeeper = *hardKeeper.SetHooks(hardtypes.NewMultiHARDHooks(app.incentiveKeeper.Hooks()))
|
app.hardKeeper = *hardKeeper.SetHooks(hardtypes.NewMultiHARDHooks(app.incentiveKeeper.Hooks()))
|
||||||
|
app.savingsKeeper = *savingsKeeper.SetHooks(savingstypes.NewMultiSavingsHooks(app.incentiveKeeper.Hooks()))
|
||||||
|
|
||||||
// create the module manager (Note: Any module instantiated in the module manager that is later modified
|
// create the module manager (Note: Any module instantiated in the module manager that is later modified
|
||||||
// must be passed by reference here.)
|
// must be passed by reference here.)
|
||||||
|
@ -6,6 +6,7 @@ import (
|
|||||||
|
|
||||||
cdptypes "github.com/kava-labs/kava/x/cdp/types"
|
cdptypes "github.com/kava-labs/kava/x/cdp/types"
|
||||||
hardtypes "github.com/kava-labs/kava/x/hard/types"
|
hardtypes "github.com/kava-labs/kava/x/hard/types"
|
||||||
|
savingstypes "github.com/kava-labs/kava/x/savings/types"
|
||||||
swaptypes "github.com/kava-labs/kava/x/swap/types"
|
swaptypes "github.com/kava-labs/kava/x/swap/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -18,6 +19,7 @@ var _ cdptypes.CDPHooks = Hooks{}
|
|||||||
var _ hardtypes.HARDHooks = Hooks{}
|
var _ hardtypes.HARDHooks = Hooks{}
|
||||||
var _ stakingtypes.StakingHooks = Hooks{}
|
var _ stakingtypes.StakingHooks = Hooks{}
|
||||||
var _ swaptypes.SwapHooks = Hooks{}
|
var _ swaptypes.SwapHooks = Hooks{}
|
||||||
|
var _ savingstypes.SavingsHooks = Hooks{}
|
||||||
|
|
||||||
// Hooks create new incentive hooks
|
// Hooks create new incentive hooks
|
||||||
func (k Keeper) Hooks() Hooks { return Hooks{k} }
|
func (k Keeper) Hooks() Hooks { return Hooks{k} }
|
||||||
@ -161,3 +163,15 @@ func (h Hooks) AfterPoolDepositCreated(ctx sdk.Context, poolID string, depositor
|
|||||||
func (h Hooks) BeforePoolDepositModified(ctx sdk.Context, poolID string, depositor sdk.AccAddress, sharesOwned sdk.Int) {
|
func (h Hooks) BeforePoolDepositModified(ctx sdk.Context, poolID string, depositor sdk.AccAddress, sharesOwned sdk.Int) {
|
||||||
h.k.SynchronizeSwapReward(ctx, poolID, depositor, sharesOwned)
|
h.k.SynchronizeSwapReward(ctx, poolID, depositor, sharesOwned)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ------------------- Savings Module Hooks -------------------
|
||||||
|
|
||||||
|
// AfterSavingsDepositCreated function that runs after a deposit is created
|
||||||
|
func (h Hooks) AfterSavingsDepositCreated(ctx sdk.Context, deposit savingstypes.Deposit) {
|
||||||
|
// TODO: InitializeSavingsReward
|
||||||
|
}
|
||||||
|
|
||||||
|
// BeforeSavingsDepositModified function that runs before a deposit is modified
|
||||||
|
func (h Hooks) BeforeSavingsDepositModified(ctx sdk.Context, deposit savingstypes.Deposit, incomingDenoms []string) {
|
||||||
|
// TODO: SynchronizeSavingsReward
|
||||||
|
}
|
||||||
|
24
x/savings/keeper/hooks.go
Normal file
24
x/savings/keeper/hooks.go
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
package keeper
|
||||||
|
|
||||||
|
import (
|
||||||
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
|
|
||||||
|
"github.com/kava-labs/kava/x/savings/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Implements StakingHooks interface
|
||||||
|
var _ types.SavingsHooks = Keeper{}
|
||||||
|
|
||||||
|
// AfterSavingsDepositCreated - call hook if registered
|
||||||
|
func (k Keeper) AfterSavingsDepositCreated(ctx sdk.Context, deposit types.Deposit) {
|
||||||
|
if k.hooks != nil {
|
||||||
|
k.hooks.AfterSavingsDepositCreated(ctx, deposit)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// BeforeSavingsDepositModified - call hook if registered
|
||||||
|
func (k Keeper) BeforeSavingsDepositModified(ctx sdk.Context, deposit types.Deposit, incomingDenoms []string) {
|
||||||
|
if k.hooks != nil {
|
||||||
|
k.hooks.BeforeSavingsDepositModified(ctx, deposit, incomingDenoms)
|
||||||
|
}
|
||||||
|
}
|
@ -20,6 +20,7 @@ type Keeper struct {
|
|||||||
paramSubspace paramtypes.Subspace
|
paramSubspace paramtypes.Subspace
|
||||||
accountKeeper types.AccountKeeper
|
accountKeeper types.AccountKeeper
|
||||||
bankKeeper types.BankKeeper
|
bankKeeper types.BankKeeper
|
||||||
|
hooks types.SavingsHooks
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewKeeper returns a new keeper for the savings module.
|
// NewKeeper returns a new keeper for the savings module.
|
||||||
@ -37,9 +38,19 @@ func NewKeeper(
|
|||||||
paramSubspace: paramstore,
|
paramSubspace: paramstore,
|
||||||
accountKeeper: ak,
|
accountKeeper: ak,
|
||||||
bankKeeper: bk,
|
bankKeeper: bk,
|
||||||
|
hooks: nil,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetHooks adds hooks to the keeper.
|
||||||
|
func (k *Keeper) SetHooks(hooks types.MultiSavingsHooks) *Keeper {
|
||||||
|
if k.hooks != nil {
|
||||||
|
panic("cannot set savings hooks twice")
|
||||||
|
}
|
||||||
|
k.hooks = hooks
|
||||||
|
return k
|
||||||
|
}
|
||||||
|
|
||||||
// GetSavingsModuleAccount returns the savings ModuleAccount
|
// GetSavingsModuleAccount returns the savings ModuleAccount
|
||||||
func (k Keeper) GetSavingsModuleAccount(ctx sdk.Context) authtypes.ModuleAccountI {
|
func (k Keeper) GetSavingsModuleAccount(ctx sdk.Context) authtypes.ModuleAccountI {
|
||||||
return k.accountKeeper.GetModuleAccount(ctx, types.ModuleAccountName)
|
return k.accountKeeper.GetModuleAccount(ctx, types.ModuleAccountName)
|
||||||
|
@ -25,3 +25,9 @@ type AccountKeeper interface {
|
|||||||
GetModuleAddress(name string) sdk.AccAddress
|
GetModuleAddress(name string) sdk.AccAddress
|
||||||
GetModuleAccount(ctx sdk.Context, name string) authtypes.ModuleAccountI
|
GetModuleAccount(ctx sdk.Context, name string) authtypes.ModuleAccountI
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SavingsHooks event hooks for other keepers to run code in response to Savings modifications
|
||||||
|
type SavingsHooks interface {
|
||||||
|
AfterSavingsDepositCreated(ctx sdk.Context, deposit Deposit)
|
||||||
|
BeforeSavingsDepositModified(ctx sdk.Context, deposit Deposit, incomingDenoms []string)
|
||||||
|
}
|
||||||
|
25
x/savings/types/hooks.go
Normal file
25
x/savings/types/hooks.go
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
package types
|
||||||
|
|
||||||
|
import sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
|
|
||||||
|
// MultiSavingsHooks combine multiple Savings hooks, all hook functions are run in array sequence
|
||||||
|
type MultiSavingsHooks []SavingsHooks
|
||||||
|
|
||||||
|
// NewMultiSavingsHooks returns a new MultiSavingsHooks
|
||||||
|
func NewMultiSavingsHooks(hooks ...SavingsHooks) MultiSavingsHooks {
|
||||||
|
return hooks
|
||||||
|
}
|
||||||
|
|
||||||
|
// AfterSavingsDepositCreated runs after a deposit is created
|
||||||
|
func (s MultiSavingsHooks) AfterSavingsDepositCreated(ctx sdk.Context, deposit Deposit) {
|
||||||
|
for i := range s {
|
||||||
|
s[i].AfterSavingsDepositCreated(ctx, deposit)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// BeforeSavingsDepositModified runs before a deposit is modified
|
||||||
|
func (s MultiSavingsHooks) BeforeSavingsDepositModified(ctx sdk.Context, deposit Deposit, incomingDenoms []string) {
|
||||||
|
for i := range s {
|
||||||
|
s[i].BeforeSavingsDepositModified(ctx, deposit, incomingDenoms)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user