mirror of
https://github.com/0glabs/0g-chain.git
synced 2024-12-26 16:25:21 +00:00
Merge pull request #25 from Solovyov1796/custom_inflation_calculation
custom inflation calculation function
This commit is contained in:
commit
35a9c8376e
@ -588,7 +588,7 @@ func NewApp(
|
|||||||
committee.NewAppModule(app.committeeKeeper, app.accountKeeper),
|
committee.NewAppModule(app.committeeKeeper, app.accountKeeper),
|
||||||
evmutil.NewAppModule(app.evmutilKeeper, app.bankKeeper, app.accountKeeper),
|
evmutil.NewAppModule(app.evmutilKeeper, app.bankKeeper, app.accountKeeper),
|
||||||
// nil InflationCalculationFn, use SDK's default inflation function
|
// nil InflationCalculationFn, use SDK's default inflation function
|
||||||
mint.NewAppModule(appCodec, app.mintKeeper, app.accountKeeper, nil),
|
mint.NewAppModule(appCodec, app.mintKeeper, app.accountKeeper, chaincfg.CustomInflationCalculateFn),
|
||||||
council.NewAppModule(app.CouncilKeeper, app.stakingKeeper),
|
council.NewAppModule(app.CouncilKeeper, app.stakingKeeper),
|
||||||
das.NewAppModule(app.DasKeeper),
|
das.NewAppModule(app.DasKeeper),
|
||||||
)
|
)
|
||||||
|
48
chaincfg/mint.go
Normal file
48
chaincfg/mint.go
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
package chaincfg
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/tendermint/tendermint/libs/log"
|
||||||
|
|
||||||
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
|
minttypes "github.com/cosmos/cosmos-sdk/x/mint/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
func CustomInflationCalculateFn(ctx sdk.Context, minter minttypes.Minter, params minttypes.Params, bondedRatio sdk.Dec) sdk.Dec {
|
||||||
|
logger := ctx.Logger()
|
||||||
|
if logger == nil {
|
||||||
|
panic("logger is nil")
|
||||||
|
}
|
||||||
|
return customInflationCalculateFn(logger, minter, params, bondedRatio)
|
||||||
|
}
|
||||||
|
|
||||||
|
func customInflationCalculateFn(logger log.Logger, minter minttypes.Minter, params minttypes.Params, bondedRatio sdk.Dec) sdk.Dec {
|
||||||
|
// The target annual inflation rate is recalculated for each previsions cycle. The
|
||||||
|
// inflation is also subject to a rate change (positive or negative) depending on
|
||||||
|
// the distance from the desired ratio (67%). The maximum rate change possible is
|
||||||
|
// defined to be 13% per year, however the annual inflation is capped as between
|
||||||
|
// 7% and 20%.
|
||||||
|
|
||||||
|
// (1 - bondedRatio/GoalBonded) * InflationRateChange
|
||||||
|
inflationRateChangePerYear := sdk.OneDec().
|
||||||
|
Sub(bondedRatio.Quo(params.GoalBonded)).
|
||||||
|
Mul(params.InflationRateChange)
|
||||||
|
inflationRateChange := inflationRateChangePerYear.Quo(sdk.NewDec(int64(params.BlocksPerYear)))
|
||||||
|
|
||||||
|
// adjust the new annual inflation for this next cycle
|
||||||
|
inflation := minter.Inflation.Add(inflationRateChange) // note inflationRateChange may be negative
|
||||||
|
if inflation.GT(params.InflationMax) {
|
||||||
|
inflation = params.InflationMax
|
||||||
|
}
|
||||||
|
if inflation.LT(params.InflationMin) {
|
||||||
|
inflation = params.InflationMin
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.Info(
|
||||||
|
"calculated new annual inflation",
|
||||||
|
"bondedRatio", bondedRatio,
|
||||||
|
"inflation", inflation,
|
||||||
|
"params", params,
|
||||||
|
"minter", minter,
|
||||||
|
)
|
||||||
|
return inflation
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user