-
Notifications
You must be signed in to change notification settings - Fork 39
/
migrate.go
82 lines (73 loc) · 2.91 KB
/
migrate.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
77
78
79
80
81
82
package v05
import (
"sort"
v04treasury "github.com/classic-terra/core/x/treasury/legacy/v04"
v05treasury "github.com/classic-terra/core/x/treasury/types"
sdk "github.com/cosmos/cosmos-sdk/types"
)
// Migrate accepts exported v0.4 x/treasury and
// migrates it to v0.5 x/treasury genesis state. The migration includes:
//
// - Merge Epoch genesis data to EpochState from x/treasury genesis state.
// - Update RewardWeight to one to burn all seigniorage
// - Update Params.RewardPolicy so that RewardWeight does not change.
// - Re-encode in v0.5 GenesisState.
func Migrate(
treasuryGenState v04treasury.GenesisState,
) *v05treasury.GenesisState {
// Note that the following `for` loop over a map's keys, so are not
// deterministic.
i := 0
taxCaps := make([]v05treasury.TaxCap, len(treasuryGenState.TaxCaps))
for denom, cap := range treasuryGenState.TaxCaps {
taxCaps[i] = v05treasury.TaxCap{
Denom: denom,
TaxCap: cap,
}
i++
}
// We sort this array by denom, so that we get determinstic states.
sort.Slice(taxCaps, func(i, j int) bool { return taxCaps[i].Denom < taxCaps[j].Denom })
// Remove cumulative height dependencies
cumulativeEpochs := int(treasuryGenState.CumulativeHeight / int64(v04treasury.BlocksPerWeek))
epochStates := make([]v05treasury.EpochState, len(treasuryGenState.TRs)-cumulativeEpochs)
for i := range treasuryGenState.TRs {
if i < cumulativeEpochs {
continue
}
epochStates[i-cumulativeEpochs] = v05treasury.EpochState{
Epoch: uint64(i - cumulativeEpochs),
TaxReward: treasuryGenState.TRs[i],
SeigniorageReward: treasuryGenState.SRs[i],
TotalStakedLuna: treasuryGenState.TSLs[i],
}
}
return &v05treasury.GenesisState{
EpochInitialIssuance: treasuryGenState.EpochInitialIssuance,
EpochStates: epochStates,
RewardWeight: sdk.OneDec(),
TaxCaps: taxCaps,
TaxProceeds: treasuryGenState.TaxProceed,
TaxRate: treasuryGenState.TaxRate,
Params: v05treasury.Params{
BurnTaxSplit: v05treasury.DefaultBurnTaxSplit,
TaxPolicy: v05treasury.PolicyConstraints{
RateMin: treasuryGenState.Params.TaxPolicy.RateMin,
RateMax: treasuryGenState.Params.TaxPolicy.RateMax,
Cap: treasuryGenState.Params.TaxPolicy.Cap,
ChangeRateMax: treasuryGenState.Params.TaxPolicy.ChangeRateMax,
},
RewardPolicy: v05treasury.PolicyConstraints{
RateMin: sdk.ZeroDec(),
RateMax: sdk.OneDec(),
Cap: treasuryGenState.Params.RewardPolicy.Cap,
ChangeRateMax: sdk.ZeroDec(),
},
MiningIncrement: treasuryGenState.Params.MiningIncrement,
SeigniorageBurdenTarget: treasuryGenState.Params.SeigniorageBurdenTarget,
WindowShort: uint64(treasuryGenState.Params.WindowShort),
WindowLong: uint64(treasuryGenState.Params.WindowLong),
WindowProbation: uint64(treasuryGenState.Params.WindowProbation),
},
}
}