github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/genutil/client/cli/migrate.go (about)

     1  package cli
     2  
     3  import (
     4  	"fmt"
     5  	"time"
     6  
     7  	"github.com/fibonacci-chain/fbc/libs/tendermint/types"
     8  	"github.com/spf13/cobra"
     9  
    10  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec"
    11  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/server"
    12  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
    13  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/version"
    14  	extypes "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/genutil"
    15  	v018 "github.com/fibonacci-chain/fbc/x/genutil/client/legacy/v0_18"
    16  )
    17  
    18  var migrationMap = extypes.MigrationMap{
    19  	"v0.18": v018.Migrate,
    20  }
    21  
    22  const (
    23  	flagGenesisTime = "genesis-time"
    24  	flagChainId     = "chain-id"
    25  )
    26  
    27  // MigrateGenesisCmd returns the cobra command to migrate
    28  func MigrateGenesisCmd(_ *server.Context, cdc *codec.Codec) *cobra.Command {
    29  	cmd := &cobra.Command{
    30  		Use:   "migrate [target-version] [genesis-file]",
    31  		Short: "Migrate genesis to a specified target version",
    32  		Long: fmt.Sprintf(`Migrate the source genesis into the target version and print to STDOUT.
    33  
    34  Example:
    35  $ %s migrate v0.11 /path/to/genesis.json --chain-id=fbc --genesis-time=2019-04-22T17:00:00Z
    36  `, version.ServerName),
    37  		Args: cobra.ExactArgs(2),
    38  		RunE: func(cmd *cobra.Command, args []string) error {
    39  			target := args[0]
    40  			importGenesis := args[1]
    41  
    42  			genDoc, err := types.GenesisDocFromFile(importGenesis)
    43  			if err != nil {
    44  				return err
    45  			}
    46  
    47  			var initialState extypes.AppMap
    48  			cdc.MustUnmarshalJSON(genDoc.AppState, &initialState)
    49  
    50  			if migrationMap[target] == nil {
    51  				return fmt.Errorf("unknown migration function version: %s", target)
    52  			}
    53  
    54  			newGenState := migrationMap[target](initialState)
    55  			genDoc.AppState = cdc.MustMarshalJSON(newGenState)
    56  
    57  			genesisTime := cmd.Flag(flagGenesisTime).Value.String()
    58  			if genesisTime != "" {
    59  				var t time.Time
    60  
    61  				err := t.UnmarshalText([]byte(genesisTime))
    62  				if err != nil {
    63  					return err
    64  				}
    65  
    66  				genDoc.GenesisTime = t
    67  			}
    68  
    69  			chainId := cmd.Flag(flagChainId).Value.String()
    70  			if chainId != "" {
    71  				genDoc.ChainID = chainId
    72  			}
    73  
    74  			out, err := cdc.MarshalJSONIndent(genDoc, "", "  ")
    75  			if err != nil {
    76  				return err
    77  			}
    78  
    79  			fmt.Println(string(sdk.MustSortJSON(out)))
    80  			return nil
    81  		},
    82  	}
    83  
    84  	cmd.Flags().String(flagGenesisTime, "", "Override genesis_time with this flag")
    85  	cmd.Flags().String(flagChainId, "", "Override chain_id with this flag")
    86  
    87  	return cmd
    88  }