mirror of
				https://github.com/0glabs/0g-chain.git
				synced 2025-10-31 23:08:32 +00:00 
			
		
		
		
	feat: add invariant check command (#1009)
* add genesis file invariant assertion command * fix: use correct cmd function name * update migration guide to add invariant check
This commit is contained in:
		
							parent
							
								
									ae70dce2b1
								
							
						
					
					
						commit
						8d0bb5a5b0
					
				| @ -72,6 +72,12 @@ func NewTestApp() TestApp { | ||||
| 	return TestApp{App: *app} | ||||
| } | ||||
| 
 | ||||
| func NewTestAppFromSealed() TestApp { | ||||
| 	db := tmdb.NewMemDB() | ||||
| 	app := NewApp(log.NewNopLogger(), db, nil, AppOptions{}) | ||||
| 	return TestApp{App: *app} | ||||
| } | ||||
| 
 | ||||
| // nolint
 | ||||
| func (tApp TestApp) GetAccountKeeper() auth.AccountKeeper { return tApp.accountKeeper } | ||||
| func (tApp TestApp) GetBankKeeper() bank.Keeper           { return tApp.bankKeeper } | ||||
|  | ||||
| @ -57,6 +57,7 @@ func main() { | ||||
| 		genutilcli.InitCmd(ctx, cdc, app.ModuleBasics, app.DefaultNodeHome), | ||||
| 		genutilcli.CollectGenTxsCmd(ctx, cdc, auth.GenesisAccountIterator{}, app.DefaultNodeHome), | ||||
| 		migrate.MigrateGenesisCmd(ctx, cdc), | ||||
| 		migrate.AssertInvariantsCmd(ctx, cdc), | ||||
| 		genutilcli.GenTxCmd( | ||||
| 			ctx, | ||||
| 			cdc, | ||||
|  | ||||
| @ -7,9 +7,11 @@ import ( | ||||
| 	"github.com/cosmos/cosmos-sdk/server" | ||||
| 	sdk "github.com/cosmos/cosmos-sdk/types" | ||||
| 	"github.com/cosmos/cosmos-sdk/version" | ||||
| 	"github.com/cosmos/cosmos-sdk/x/genutil" | ||||
| 	"github.com/spf13/cobra" | ||||
| 	tmtypes "github.com/tendermint/tendermint/types" | ||||
| 
 | ||||
| 	"github.com/kava-labs/kava/app" | ||||
| 	"github.com/kava-labs/kava/migrate/v0_15" | ||||
| ) | ||||
| 
 | ||||
| @ -48,3 +50,38 @@ func MigrateGenesisCmd(_ *server.Context, cdc *codec.Codec) *cobra.Command { | ||||
| 
 | ||||
| 	return cmd | ||||
| } | ||||
| 
 | ||||
| func AssertInvariantsCmd(_ *server.Context, cdc *codec.Codec) *cobra.Command { | ||||
| 	cmd := &cobra.Command{ | ||||
| 		Use:     "assert-invariants [genesis-file]", | ||||
| 		Short:   "Validates that the input genesis file is valid and invariants pass", | ||||
| 		Long:    "Reads the input genesis file into a genesis document, checks that the state is valid and asserts that all invariants pass.", | ||||
| 		Example: fmt.Sprintf(`%s assert-invariants /path/to/genesis.json`, version.ServerName), | ||||
| 		Args:    cobra.ExactArgs(1), | ||||
| 		RunE: func(cmd *cobra.Command, args []string) error { | ||||
| 
 | ||||
| 			importGenesis := args[0] | ||||
| 			genDoc, err := tmtypes.GenesisDocFromFile(importGenesis) | ||||
| 			if err != nil { | ||||
| 				return fmt.Errorf("failed to read genesis document from file %s: %w", importGenesis, err) | ||||
| 			} | ||||
| 			tApp := app.NewTestAppFromSealed() | ||||
| 			var newAppState genutil.AppMap | ||||
| 			cdc := app.MakeCodec() | ||||
| 			err = cdc.UnmarshalJSON(genDoc.AppState, &newAppState) | ||||
| 			if err != nil { | ||||
| 				return fmt.Errorf("failed to marchal app state from genesis doc: %s: %w", importGenesis, err) | ||||
| 			} | ||||
| 			err = app.ModuleBasics.ValidateGenesis(newAppState) | ||||
| 			if err != nil { | ||||
| 				return fmt.Errorf("genesis doc did not pass validate genesis: %s: %w", importGenesis, err) | ||||
| 			} | ||||
| 			tApp.InitializeFromGenesisStatesWithTimeAndChainID(genDoc.GenesisTime, genDoc.ChainID, app.GenesisState(newAppState)) | ||||
| 
 | ||||
| 			fmt.Printf("successfully asserted all invariants for %s\n", importGenesis) | ||||
| 			return nil | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	return cmd | ||||
| } | ||||
|  | ||||
| @ -79,6 +79,7 @@ kvd export --for-zero-height --height 1878509 > export-genesis.json | ||||
| 
 | ||||
|   # Verify output of genesis migration | ||||
|   kvd validate-genesis genesis.json # should say it's valid | ||||
|   kvd assert-invariants genesis.json # should say invariants pass | ||||
|   jq -S -c -M '' genesis.json | shasum -a 256 | ||||
|   # PLACEHOLDER | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Kevin Davis
						Kevin Davis