diff --git a/Makefile b/Makefile index 02098f4..98988d3 100644 --- a/Makefile +++ b/Makefile @@ -25,3 +25,7 @@ integrationtest_local: | $(GINKGO) $(GOOSE) go vet ./... go fmt ./... ./scripts/run_integration_test.sh + +build: + go fmt ./... + GO111MODULE=on go build diff --git a/cmd/state_validator.go b/cmd/state_validator.go index e883bd1..07deb55 100644 --- a/cmd/state_validator.go +++ b/cmd/state_validator.go @@ -2,8 +2,11 @@ package cmd import ( "context" + "encoding/json" "fmt" + "os" + "github.com/ethereum/go-ethereum/params" log "github.com/sirupsen/logrus" "github.com/spf13/cobra" "github.com/spf13/viper" @@ -34,10 +37,16 @@ func stateValidator() { if height < 1 { logWithCommand.Fatalf("block height cannot be less the 1") } - trail := viper.GetUint64("validate.trail") - // TODO: add chain config logic here. - srvc := validator.NewService(cfg.DB, height, trail, nil) + + chainConfigPath := viper.GetString("ethereum.chainConfig") + chainCfg, err := LoadConfig(chainConfigPath) + fmt.Println("chainCfg", chainCfg) + if err != nil { + logWithCommand.Fatal(err) + } + + srvc := validator.NewService(cfg.DB, height, trail, chainCfg) _, err = srvc.Start(context.Background()) if err != nil { @@ -53,8 +62,12 @@ func init() { stateValidatorCmd.PersistentFlags().String("block-height", "1", "block height to initiate state validation") stateValidatorCmd.PersistentFlags().String("trail", "0", "trail of block height to validate") + stateValidatorCmd.PersistentFlags().String("chainConfig", "", "path to chain config") + _ = viper.BindPFlag("validate.block-height", stateValidatorCmd.PersistentFlags().Lookup("block-height")) _ = viper.BindPFlag("validate.trail", stateValidatorCmd.PersistentFlags().Lookup("trail")) + + _ = viper.BindPFlag("ethereum.chainConfig", stateValidatorCmd.PersistentFlags().Lookup("chainConfig")) } func initConfig() { @@ -69,3 +82,25 @@ func initConfig() { log.Warn("No config file passed with --config flag") } } + +// LoadConfig loads chain config from json file +func LoadConfig(chainConfigPath string) (*params.ChainConfig, error) { + file, err := os.Open(chainConfigPath) + if err != nil { + log.Error(fmt.Sprintf("Failed to read chain config file: %v", err)) + + return nil, err + } + defer file.Close() + + chainConfig := new(params.ChainConfig) + if err := json.NewDecoder(file).Decode(chainConfig); err != nil { + log.Error(fmt.Sprintf("invalid chain config file: %v", err)) + + return nil, err + } + + log.Info(fmt.Sprintf("Using chain config from %s file. Content %+v", chainConfigPath, chainConfig)) + + return chainConfig, nil +} diff --git a/environments/example.toml b/environments/example.toml index 151fe06..5ff0fdb 100644 --- a/environments/example.toml +++ b/environments/example.toml @@ -7,4 +7,7 @@ [validate] block-height = 1 - trail = 10 \ No newline at end of file + trail = 10 + +[ethereum] + chainConfig = "./chain.json"