github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/cmd/fbchaind/export_app.go (about)

     1  package main
     2  
     3  import (
     4  	"log"
     5  	"path/filepath"
     6  
     7  	"github.com/fibonacci-chain/fbc/app"
     8  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/server"
     9  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
    10  	tmtypes "github.com/fibonacci-chain/fbc/libs/tendermint/types"
    11  	"github.com/spf13/cobra"
    12  )
    13  
    14  func exportAppCmd(ctx *server.Context) *cobra.Command {
    15  	cmd := &cobra.Command{
    16  		Use:   "export-app",
    17  		Short: "export current latest version of application db to new db into export dir",
    18  		Run: func(cmd *cobra.Command, args []string) {
    19  			log.Println("--------- export start ---------")
    20  			export(ctx)
    21  			log.Println("--------- export success ---------")
    22  		},
    23  	}
    24  	cmd.Flags().String(sdk.FlagDBBackend, tmtypes.DBBackend, "Database backend: goleveldb | rocksdb")
    25  	return cmd
    26  }
    27  
    28  // export current latest version of application db to new db into export dir
    29  func export(ctx *server.Context) {
    30  	fromApp := createApp(ctx, "data")
    31  	toApp := createApp(ctx, "export")
    32  
    33  	version := fromApp.LastCommitID().Version
    34  	log.Println("export app version ", version)
    35  
    36  	err := fromApp.Export(toApp.BaseApp, version)
    37  	if err != nil {
    38  		panicError(err)
    39  	}
    40  }
    41  
    42  func createApp(ctx *server.Context, dataPath string) *app.FBChainApp {
    43  	rootDir := ctx.Config.RootDir
    44  	dataDir := filepath.Join(rootDir, dataPath)
    45  	db, err := sdk.NewDB(applicationDB, dataDir)
    46  	panicError(err)
    47  	exapp := newApp(ctx.Logger, db, nil)
    48  	return exapp.(*app.FBChainApp)
    49  }