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  }