-
Notifications
You must be signed in to change notification settings - Fork 180
/
abci_okchain.go
76 lines (64 loc) · 2.02 KB
/
abci_okchain.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package mint
import (
"fmt"
sdk "github.com/okex/exchain/libs/cosmos-sdk/types"
"github.com/okex/exchain/libs/cosmos-sdk/x/mint/internal/types"
)
func disableMining(minter *types.Minter) {
minter.Inflation = sdk.ZeroDec()
}
var setInflationHandler func(minter *types.Minter)
// BeginBlocker mints new tokens for the previous block.
func beginBlocker(ctx sdk.Context, k Keeper) {
logger := k.Logger(ctx)
// fetch stored minter & params
params := k.GetParams(ctx)
minter := k.GetMinterCustom(ctx)
if ctx.BlockHeight() == 0 || uint64(ctx.BlockHeight()) >= minter.NextBlockToUpdate {
k.UpdateMinterCustom(ctx, &minter, params)
}
if minter.MintedPerBlock.AmountOf(params.MintDenom).LTE(sdk.ZeroDec()) {
logger.Debug(fmt.Sprintf("No more <%v> to mint", params.MintDenom))
return
}
err := k.MintCoins(ctx, minter.MintedPerBlock)
if err != nil {
panic(err)
}
farmingAmount := minter.MintedPerBlock.MulDecTruncate(params.FarmProportion)
// send the minted coins to the fee collector account
err = k.AddCollectedFees(ctx, minter.MintedPerBlock.Sub(farmingAmount))
if err != nil {
panic(err)
}
// send the minted coins to the farm module account
err = k.AddYieldFarming(ctx, farmingAmount)
if err != nil {
panic(err)
}
logger.Debug(fmt.Sprintf(
"total supply <%v>, "+
"\nparams <%v>, "+
"\nminted amount<%v>, "+
"staking amount <%v>, "+
"yield farming amount <%v>, "+
"\nnext block to update minted per block <%v>, ",
sdk.NewDecCoinFromDec(params.MintDenom, k.StakingTokenSupply(ctx)),
params,
minter.MintedPerBlock,
minter.MintedPerBlock.Sub(farmingAmount),
farmingAmount,
minter.NextBlockToUpdate))
ctx.EventManager().EmitEvent(
sdk.NewEvent(
types.EventTypeMint,
sdk.NewAttribute(types.AttributeKeyInflation, params.DeflationRate.String()),
sdk.NewAttribute(sdk.AttributeKeyAmount, minter.MintedPerBlock.String()),
),
)
}
// BeginBlocker mints new tokens for the previous block.
func BeginBlocker(ctx sdk.Context, k Keeper) {
setInflationHandler = disableMining
beginBlocker(ctx, k)
}