github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/x/mint/abci_fbchain.go (about) 1 package mint 2 3 import ( 4 "fmt" 5 6 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 7 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/mint/internal/types" 8 tmtypes "github.com/fibonacci-chain/fbc/libs/tendermint/types" 9 ) 10 11 func disableMining(minter *types.Minter) { 12 minter.Inflation = sdk.ZeroDec() 13 } 14 15 var setInflationHandler func(minter *types.Minter) 16 17 // BeginBlocker mints new tokens for the previous block. 18 func beginBlocker(ctx sdk.Context, k Keeper) { 19 20 logger := k.Logger(ctx) 21 // fetch stored minter & params 22 params := k.GetParams(ctx) 23 minter := k.GetMinterCustom(ctx) 24 if ctx.BlockHeight() == 0 || uint64(ctx.BlockHeight()) >= minter.NextBlockToUpdate { 25 k.UpdateMinterCustom(ctx, &minter, params) 26 } 27 28 if tmtypes.HigherThanJupiter(ctx.BlockHeight()) && uint64(ctx.BlockHeight()) <= uint64(tmtypes.GetCometHeight()+401) { 29 //adjust param and minter 30 //back to normal 31 if ctx.BlockHeight() == tmtypes.GetJupiterHeight() { 32 k.UpdateMinterCustomToRightJupiter(ctx, &minter, params) 33 } else if ctx.BlockHeight() >= tmtypes.GetCometHeight() && uint64(ctx.BlockHeight()) <= uint64(tmtypes.GetCometHeight()+400) { 34 minter.MintedPerBlock = sdk.NewDecCoinsFromDec(params.MintDenom, sdk.MustNewDecFromStr("3434.9725")) 35 } else if uint64(ctx.BlockHeight()) == uint64(tmtypes.GetCometHeight()+401) { 36 k.UpdateMinterCustomToRightComet(ctx, &minter, params) 37 } 38 } else { 39 //cache up 40 if uint64(ctx.BlockHeight()) > tmtypes.CacheUpBlockHeight && 41 uint64(ctx.BlockHeight()) < tmtypes.CacheUpBlockRewardStopHeight { 42 if uint64(ctx.BlockHeight()) >= tmtypes.CacheUpBlockStopHeight { 43 minter.MintedPerBlock = sdk.NewDecCoinsFromDec(params.MintDenom, sdk.MustNewDecFromStr("1.2514")) 44 } else { 45 minter.MintedPerBlock = sdk.NewDecCoinsFromDec(params.MintDenom, sdk.MustNewDecFromStr("1.56")) 46 } 47 } 48 } 49 50 if minter.MintedPerBlock.AmountOf(params.MintDenom).LTE(sdk.ZeroDec()) { 51 logger.Debug(fmt.Sprintf("No more <%v> to mint", params.MintDenom)) 52 return 53 } 54 55 err := k.MintCoins(ctx, minter.MintedPerBlock) 56 if err != nil { 57 panic(err) 58 } 59 60 farmingAmount := minter.MintedPerBlock.MulDecTruncate(params.FarmProportion) 61 62 // send the minted coins to the fee collector account 63 err = k.AddCollectedFees(ctx, minter.MintedPerBlock.Sub(farmingAmount)) 64 if err != nil { 65 panic(err) 66 } 67 // send the minted coins to the farm module account 68 err = k.AddYieldFarming(ctx, farmingAmount) 69 if err != nil { 70 panic(err) 71 } 72 73 logger.Debug(fmt.Sprintf( 74 "total supply <%v>, "+ 75 "\nparams <%v>, "+ 76 "\nminted amount<%v>, "+ 77 "staking amount <%v>, "+ 78 "yield farming amount <%v>, "+ 79 "\nnext block to update minted per block <%v>, ", 80 sdk.NewDecCoinFromDec(params.MintDenom, k.StakingTokenSupply(ctx)), 81 params, 82 minter.MintedPerBlock, 83 minter.MintedPerBlock.Sub(farmingAmount), 84 farmingAmount, 85 minter.NextBlockToUpdate)) 86 87 ctx.EventManager().EmitEvent( 88 sdk.NewEvent( 89 types.EventTypeMint, 90 sdk.NewAttribute(types.AttributeKeyInflation, params.DeflationRate.String()), 91 sdk.NewAttribute(sdk.AttributeKeyAmount, minter.MintedPerBlock.String()), 92 ), 93 ) 94 } 95 96 // BeginBlocker mints new tokens for the previous block. 97 func BeginBlocker(ctx sdk.Context, k Keeper) { 98 setInflationHandler = disableMining 99 beginBlocker(ctx, k) 100 }