/
mint.go
70 lines (56 loc) · 1.93 KB
/
mint.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
package keeper
import (
"fmt"
"github.com/cosmos/cosmos-sdk/telemetry"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/jackalLabs/canine-chain/v3/x/jklmint/types"
storeTypes "github.com/jackalLabs/canine-chain/v3/x/storage/types"
)
func (k Keeper) BlockMint(ctx sdk.Context) {
tokensPerBlock := k.GetParams(ctx).TokensPerBlock
mintTokens := sdk.NewDec(tokensPerBlock)
denom := k.GetParams(ctx).MintDenom
pRatio := k.GetParams(ctx).ProviderRatio
valRatio := 10 - pRatio
providerRatio := sdk.NewDec(pRatio)
providerRatio = providerRatio.QuoInt64(10)
validatorRatio := sdk.NewDec(valRatio)
validatorRatio = validatorRatio.QuoInt64(10)
// get correct ratio
providerTokens := mintTokens.Mul(providerRatio)
validatorTokens := mintTokens.Mul(validatorRatio)
// mint provider coins, update supply
provCount := providerTokens.TruncateInt()
providerCoin := sdk.NewCoin(denom, provCount)
providerCoins := sdk.NewCoins(providerCoin)
// mint validator coins, update supply
valCount := validatorTokens.TruncateInt()
validatorCoin := sdk.NewCoin(denom, valCount)
validatorCoins := sdk.NewCoins(validatorCoin)
totalCount := provCount.Add(valCount)
// mint coins, update supply
totalIntCoin := sdk.NewCoin(denom, totalCount)
mintedCoin := totalIntCoin
mintedCoins := sdk.NewCoins(mintedCoin)
err := k.MintCoins(ctx, mintedCoins)
if err != nil {
panic(err)
}
err = k.bankKeeper.SendCoinsFromModuleToModule(ctx, types.ModuleName, storeTypes.ModuleName, providerCoins)
if err != nil {
panic(err)
}
// send the minted validator coins to the fee collector account
err = k.AddCollectedFees(ctx, validatorCoins)
if err != nil {
panic(err)
}
// alerting network on mint amount
defer telemetry.ModuleSetGauge(types.ModuleName, float32(totalCount.Int64()), "minted_tokens")
ctx.EventManager().EmitEvent(
sdk.NewEvent(
types.EventTypeMint,
sdk.NewAttribute(sdk.AttributeKeyAmount, fmt.Sprintf("%d", totalCount.Int64())),
),
)
}