-
Notifications
You must be signed in to change notification settings - Fork 0
/
app_upgrade.go
125 lines (111 loc) · 3.59 KB
/
app_upgrade.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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package app
import (
"sort"
cliContext "github.com/furyaxyz/fuxchain/libs/cosmos-sdk/client/context"
"github.com/furyaxyz/fuxchain/libs/cosmos-sdk/store/types"
sdk "github.com/furyaxyz/fuxchain/libs/cosmos-sdk/types"
sdkerrors "github.com/furyaxyz/fuxchain/libs/cosmos-sdk/types/errors"
"github.com/furyaxyz/fuxchain/libs/cosmos-sdk/types/module"
upgradetypes "github.com/furyaxyz/fuxchain/libs/cosmos-sdk/types/upgrade"
"github.com/furyaxyz/fuxchain/libs/cosmos-sdk/x/auth/client/utils"
"github.com/furyaxyz/fuxchain/libs/cosmos-sdk/x/params"
"github.com/furyaxyz/fuxchain/libs/cosmos-sdk/x/params/subspace"
)
func (app *FURYChainApp) RegisterTxService(clientCtx cliContext.CLIContext) {
utils.RegisterTxService(app.BaseApp.GRPCQueryRouter(), clientCtx, app.grpcSimulate, clientCtx.InterfaceRegistry)
}
func (app *FURYChainApp) grpcSimulate(txBytes []byte) (sdk.GasInfo, *sdk.Result, error) {
tx, err := app.GetTxDecoder()(txBytes)
if err != nil {
return sdk.GasInfo{}, nil, sdkerrors.Wrap(err, "failed to decode tx")
}
return app.Simulate(txBytes, tx, 0, nil)
}
func (app *FURYChainApp) setupUpgradeModules(onlyTask bool) {
heightTasks, paramMap, cf, pf, vf := app.CollectUpgradeModules(app.mm)
app.heightTasks = heightTasks
if onlyTask {
return
}
app.GetCMS().AppendCommitFilters(cf)
app.GetCMS().AppendPruneFilters(pf)
app.GetCMS().AppendVersionFilters(vf)
vs := app.subspaces
for k, vv := range paramMap {
supace, exist := vs[k]
if !exist {
continue
}
vs[k] = supace.LazyWithKeyTable(subspace.NewKeyTable(vv.ParamSetPairs()...))
}
}
func (o *FURYChainApp) CollectUpgradeModules(m *module.Manager) (map[int64]*upgradetypes.HeightTasks,
map[string]params.ParamSet, []types.StoreFilter, []types.StoreFilter, []types.VersionFilter) {
hm := make(map[int64]*upgradetypes.HeightTasks)
paramsRet := make(map[string]params.ParamSet)
commitFiltreMap := make(map[*types.StoreFilter]struct{})
pruneFilterMap := make(map[*types.StoreFilter]struct{})
versionFilterMap := make(map[*types.VersionFilter]struct{})
for _, mm := range m.Modules {
if ada, ok := mm.(upgradetypes.UpgradeModule); ok {
set := ada.RegisterParam()
if set != nil {
if _, exist := paramsRet[ada.ModuleName()]; !exist {
paramsRet[ada.ModuleName()] = set
}
}
h := ada.UpgradeHeight()
if h > 0 {
h++
}
cf := ada.CommitFilter()
if cf != nil {
if _, exist := commitFiltreMap[cf]; !exist {
commitFiltreMap[cf] = struct{}{}
}
}
pf := ada.PruneFilter()
if pf != nil {
if _, exist := pruneFilterMap[pf]; !exist {
pruneFilterMap[pf] = struct{}{}
}
}
vf := ada.VersionFilter()
if vf != nil {
if _, exist := versionFilterMap[vf]; !exist {
versionFilterMap[vf] = struct{}{}
}
}
t := ada.RegisterTask()
if t == nil {
continue
}
if err := t.ValidateBasic(); nil != err {
panic(err)
}
taskList := hm[h]
if taskList == nil {
v := make(upgradetypes.HeightTasks, 0)
taskList = &v
hm[h] = taskList
}
*taskList = append(*taskList, t)
}
}
for _, v := range hm {
sort.Sort(*v)
}
commitFilters := make([]types.StoreFilter, 0)
pruneFilters := make([]types.StoreFilter, 0)
versionFilters := make([]types.VersionFilter, 0)
for pointerFilter, _ := range commitFiltreMap {
commitFilters = append(commitFilters, *pointerFilter)
}
for pointerFilter, _ := range pruneFilterMap {
pruneFilters = append(pruneFilters, *pointerFilter)
}
for pointerFilter, _ := range versionFilterMap {
versionFilters = append(versionFilters, *pointerFilter)
}
return hm, paramsRet, commitFilters, pruneFilters, versionFilters
}