diff --git a/CHANGELOG.md b/CHANGELOG.md index f3ae87cd9..b6893cc39 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -40,6 +40,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +## [v1.1.0.post1](https://github.com/NibiruChain/nibiru/releases/tag/v1.1.0.post1) - 2024-05-01 + +### Improvements + +* [#1859](https://github.com/NibiruChain/nibiru/pull/1859) - refactor(oracle): add oracle slashing events + ## [v1.1.0](https://github.com/NibiruChain/nibiru/releases/tag/v1.1.0) - 2024-03-19 * [[Release Link](https://github.com/NibiruChain/nibiru/releases/tag/v1.1.0)] diff --git a/app/keepers.go b/app/keepers.go index 3d5734e82..0c3fdc20a 100644 --- a/app/keepers.go +++ b/app/keepers.go @@ -340,7 +340,8 @@ func (app *NibiruApp) InitKeepers( // ---------------------------------- Nibiru Chain x/ keepers app.OracleKeeper = oraclekeeper.NewKeeper(appCodec, keys[oracletypes.StoreKey], - app.AccountKeeper, app.BankKeeper, app.DistrKeeper, app.stakingKeeper, distrtypes.ModuleName, + app.AccountKeeper, app.BankKeeper, app.DistrKeeper, app.stakingKeeper, app.slashingKeeper, + distrtypes.ModuleName, ) app.EpochsKeeper = epochskeeper.NewKeeper( diff --git a/x/oracle/keeper/keeper.go b/x/oracle/keeper/keeper.go index c8031720e..6bc13bf8f 100644 --- a/x/oracle/keeper/keeper.go +++ b/x/oracle/keeper/keeper.go @@ -23,10 +23,11 @@ type Keeper struct { cdc codec.BinaryCodec storeKey storetypes.StoreKey - AccountKeeper types.AccountKeeper - bankKeeper types.BankKeeper - distrKeeper types.DistributionKeeper - StakingKeeper types.StakingKeeper + AccountKeeper types.AccountKeeper + bankKeeper types.BankKeeper + distrKeeper types.DistributionKeeper + StakingKeeper types.StakingKeeper + slashingKeeper types.SlashingKeeper distrModuleName string @@ -47,8 +48,12 @@ type Keeper struct { // NewKeeper constructs a new keeper for oracle func NewKeeper(cdc codec.BinaryCodec, storeKey storetypes.StoreKey, accountKeeper types.AccountKeeper, - bankKeeper types.BankKeeper, distrKeeper types.DistributionKeeper, - stakingKeeper types.StakingKeeper, distrName string, + bankKeeper types.BankKeeper, + distrKeeper types.DistributionKeeper, + stakingKeeper types.StakingKeeper, + slashingKeeper types.SlashingKeeper, + + distrName string, ) Keeper { // ensure oracle module account is set if addr := accountKeeper.GetModuleAddress(types.ModuleName); addr == nil { @@ -62,6 +67,7 @@ func NewKeeper(cdc codec.BinaryCodec, storeKey storetypes.StoreKey, bankKeeper: bankKeeper, distrKeeper: distrKeeper, StakingKeeper: stakingKeeper, + slashingKeeper: slashingKeeper, distrModuleName: distrName, Params: collections.NewItem(storeKey, 11, collections.ProtoValueEncoder[types.Params](cdc)), ExchangeRates: collections.NewMap(storeKey, 1, asset.PairKeyEncoder, collections.ProtoValueEncoder[types.DatedPrice](cdc)), diff --git a/x/oracle/keeper/slash.go b/x/oracle/keeper/slash.go index a006fb8e6..d3de144f9 100644 --- a/x/oracle/keeper/slash.go +++ b/x/oracle/keeper/slash.go @@ -39,12 +39,11 @@ func (k Keeper) SlashAndResetMissCounters(ctx sdk.Context) { continue } - k.StakingKeeper.Slash( - ctx, consAddr, - distributionHeight, validator.GetConsensusPower(powerReduction), slashFraction, + k.slashingKeeper.Slash( + ctx, consAddr, slashFraction, validator.GetConsensusPower(powerReduction), distributionHeight, ) - k.Logger(ctx).Info("slash", "validator", consAddr.String(), "fraction", slashFraction.String()) - k.StakingKeeper.Jail(ctx, consAddr) + k.Logger(ctx).Info("oracle slash", "validator", consAddr.String(), "fraction", slashFraction.String()) + k.slashingKeeper.Jail(ctx, consAddr) } } diff --git a/x/oracle/keeper/test_utils.go b/x/oracle/keeper/test_utils.go index b92068f37..cc0b71761 100644 --- a/x/oracle/keeper/test_utils.go +++ b/x/oracle/keeper/test_utils.go @@ -2,11 +2,12 @@ package keeper import ( - sudokeeper "github.com/NibiruChain/nibiru/x/sudo/keeper" - sudotypes "github.com/NibiruChain/nibiru/x/sudo/types" "testing" "time" + sudokeeper "github.com/NibiruChain/nibiru/x/sudo/keeper" + sudotypes "github.com/NibiruChain/nibiru/x/sudo/types" + "github.com/cosmos/cosmos-sdk/store" storetypes "github.com/cosmos/cosmos-sdk/store/types" "github.com/cosmos/cosmos-sdk/testutil/sims" @@ -38,6 +39,8 @@ import ( distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types" "github.com/cosmos/cosmos-sdk/x/params" paramstypes "github.com/cosmos/cosmos-sdk/x/params/types" + slashingkeeper "github.com/cosmos/cosmos-sdk/x/slashing/keeper" + slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" "github.com/cosmos/cosmos-sdk/x/staking" stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" @@ -137,9 +140,12 @@ func CreateTestFixture(t *testing.T) TestFixture { tKeyParams := sdk.NewTransientStoreKey(paramstypes.TStoreKey) keyOracle := sdk.NewKVStoreKey(types.StoreKey) keyStaking := sdk.NewKVStoreKey(stakingtypes.StoreKey) + keySlashing := sdk.NewKVStoreKey(slashingtypes.StoreKey) keyDistr := sdk.NewKVStoreKey(distrtypes.StoreKey) keySudo := sdk.NewKVStoreKey(sudotypes.StoreKey) + govModuleAddr := authtypes.NewModuleAddress(govtypes.ModuleName).String() + db := dbm.NewMemDB() ms := store.NewCommitMultiStore(db) ctx := sdk.NewContext(ms, tmproto.Header{Time: time.Now().UTC(), Height: 1}, false, log.NewNopLogger()) @@ -200,11 +206,12 @@ func CreateTestFixture(t *testing.T) TestFixture { bankKeeper, authtypes.NewModuleAddress(govtypes.ModuleName).String(), ) - stakingParams := stakingtypes.DefaultParams() stakingParams.BondDenom = denoms.NIBI stakingKeeper.SetParams(ctx, stakingParams) + slashingKeeper := slashingkeeper.NewKeeper(appCodec, legacyAmino, keySlashing, stakingKeeper, govModuleAddr) + distrKeeper := distrkeeper.NewKeeper( appCodec, keyDistr, @@ -253,6 +260,7 @@ func CreateTestFixture(t *testing.T) TestFixture { bankKeeper, distrKeeper, stakingKeeper, + slashingKeeper, distrtypes.ModuleName, ) diff --git a/x/oracle/types/expected_keeper.go b/x/oracle/types/expected_keeper.go index 4c47f8bd5..98ea85cb1 100644 --- a/x/oracle/types/expected_keeper.go +++ b/x/oracle/types/expected_keeper.go @@ -18,6 +18,11 @@ type StakingKeeper interface { PowerReduction(ctx sdk.Context) (res sdkmath.Int) } +type SlashingKeeper interface { + Slash(ctx sdk.Context, consAddr sdk.ConsAddress, fraction sdk.Dec, power int64, height int64) + Jail(sdk.Context, sdk.ConsAddress) +} + // DistributionKeeper is expected keeper for distribution module type DistributionKeeper interface { AllocateTokensToValidator(ctx sdk.Context, val stakingtypes.ValidatorI, tokens sdk.DecCoins)