From b7c3789e3c3d27f30320db60c0e8585fd603bbfd Mon Sep 17 00:00:00 2001 From: Roy Crihfield Date: Sat, 9 Sep 2023 18:12:12 +0800 Subject: [PATCH] utils: load config --- utils/utils.go | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/utils/utils.go b/utils/utils.go index 5d22034..d6ead2e 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -1,9 +1,12 @@ package utils import ( + "encoding/json" "fmt" "os" + "github.com/cerc-io/plugeth-statediff/utils/log" + "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" ) @@ -21,3 +24,38 @@ func MustDecode[T any](buf []byte) *T { } return &ret } + +// LoadConfig loads chain config from json file +func LoadConfig(chainConfigPath string) (*params.ChainConfig, error) { + file, err := os.Open(chainConfigPath) + if err != nil { + log.Error("Failed to read chain config file", "error", err) + return nil, err + } + defer file.Close() + + chainConfig := new(params.ChainConfig) + if err := json.NewDecoder(file).Decode(chainConfig); err != nil { + log.Error("invalid chain config file", "error", err) + + return nil, err + } + + log.Debug(fmt.Sprintf("Using chain config from '%s'. Content: %+v", chainConfigPath, chainConfig)) + + return chainConfig, nil +} + +// ChainConfig returns the appropriate ethereum chain config for the provided chain id +func ChainConfig(chainID uint64) (*params.ChainConfig, error) { + switch chainID { + case 1: + return params.MainnetChainConfig, nil + case 4: + return params.RinkebyChainConfig, nil + case 5: + return params.GoerliChainConfig, nil + default: + return nil, fmt.Errorf("chain config for chainid %d not available", chainID) + } +}