github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/app/app_upgrade.go (about) 1 package app 2 3 import ( 4 "sort" 5 6 sdkerrors "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/errors" 7 8 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 9 10 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth/client/utils" 11 12 cliContext "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/context" 13 14 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/store/types" 15 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/module" 16 upgradetypes "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/upgrade" 17 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/params" 18 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/params/subspace" 19 ) 20 21 func (app *FBChainApp) RegisterTxService(clientCtx cliContext.CLIContext) { 22 utils.RegisterTxService(app.BaseApp.GRPCQueryRouter(), clientCtx, app.grpcSimulate, clientCtx.InterfaceRegistry) 23 } 24 func (app *FBChainApp) grpcSimulate(txBytes []byte) (sdk.GasInfo, *sdk.Result, error) { 25 tx, err := app.GetTxDecoder()(txBytes) 26 if err != nil { 27 return sdk.GasInfo{}, nil, sdkerrors.Wrap(err, "failed to decode tx") 28 } 29 return app.Simulate(txBytes, tx, 0, nil) 30 } 31 32 func (app *FBChainApp) setupUpgradeModules() { 33 heightTasks, paramMap, cf, pf, vf := app.CollectUpgradeModules(app.mm) 34 35 app.heightTasks = heightTasks 36 37 app.GetCMS().CleanCommitFilters() 38 app.GetCMS().CleanPruneFilters() 39 app.GetCMS().CleanVersionFilters() 40 41 app.GetCMS().AppendCommitFilters(cf) 42 app.GetCMS().AppendPruneFilters(pf) 43 app.GetCMS().AppendVersionFilters(vf) 44 45 vs := app.subspaces 46 for k, vv := range paramMap { 47 supace, exist := vs[k] 48 if !exist { 49 continue 50 } 51 vs[k] = supace.LazyWithKeyTable(subspace.NewKeyTable(vv.ParamSetPairs()...)) 52 } 53 } 54 55 func (o *FBChainApp) CollectUpgradeModules(m *module.Manager) (map[int64]*upgradetypes.HeightTasks, 56 map[string]params.ParamSet, []types.StoreFilter, []types.StoreFilter, []types.VersionFilter) { 57 hm := make(map[int64]*upgradetypes.HeightTasks) 58 paramsRet := make(map[string]params.ParamSet) 59 commitFiltreMap := make(map[*types.StoreFilter]struct{}) 60 pruneFilterMap := make(map[*types.StoreFilter]struct{}) 61 versionFilterMap := make(map[*types.VersionFilter]struct{}) 62 63 for _, mm := range m.Modules { 64 if ada, ok := mm.(upgradetypes.UpgradeModule); ok { 65 set := ada.RegisterParam() 66 if set != nil { 67 if _, exist := paramsRet[ada.ModuleName()]; !exist { 68 paramsRet[ada.ModuleName()] = set 69 } 70 } 71 h := ada.UpgradeHeight() 72 if h > 0 { 73 h++ 74 } 75 76 cf := ada.CommitFilter() 77 if cf != nil { 78 if _, exist := commitFiltreMap[cf]; !exist { 79 commitFiltreMap[cf] = struct{}{} 80 } 81 } 82 pf := ada.PruneFilter() 83 if pf != nil { 84 if _, exist := pruneFilterMap[pf]; !exist { 85 pruneFilterMap[pf] = struct{}{} 86 } 87 } 88 vf := ada.VersionFilter() 89 if vf != nil { 90 if _, exist := versionFilterMap[vf]; !exist { 91 versionFilterMap[vf] = struct{}{} 92 } 93 } 94 95 t := ada.RegisterTask() 96 if t == nil { 97 continue 98 } 99 if err := t.ValidateBasic(); nil != err { 100 panic(err) 101 } 102 taskList := hm[h] 103 if taskList == nil { 104 v := make(upgradetypes.HeightTasks, 0) 105 taskList = &v 106 hm[h] = taskList 107 } 108 *taskList = append(*taskList, t) 109 } 110 } 111 112 for _, v := range hm { 113 sort.Sort(*v) 114 } 115 116 commitFilters := make([]types.StoreFilter, 0) 117 pruneFilters := make([]types.StoreFilter, 0) 118 versionFilters := make([]types.VersionFilter, 0) 119 for pointerFilter, _ := range commitFiltreMap { 120 commitFilters = append(commitFilters, *pointerFilter) 121 } 122 for pointerFilter, _ := range pruneFilterMap { 123 pruneFilters = append(pruneFilters, *pointerFilter) 124 } 125 for pointerFilter, _ := range versionFilterMap { 126 versionFilters = append(versionFilters, *pointerFilter) 127 } 128 129 return hm, paramsRet, commitFilters, pruneFilters, versionFilters 130 }