mirror of
				https://github.com/0glabs/0g-chain.git
				synced 2025-11-04 14:57:27 +00:00 
			
		
		
		
	custom inflation calculation function
This commit is contained in:
		
							parent
							
								
									4b09c6cd37
								
							
						
					
					
						commit
						48c349c127
					
				
							
								
								
									
										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