From 6cb5e62868c2c08d9c3d7547d402c7b3b1f251c5 Mon Sep 17 00:00:00 2001 From: Jaynti Kanani <jdkanani@gmail.com> Date: Sat, 14 Nov 2020 12:37:18 +0530 Subject: [PATCH] fix: import/export for bor --- cmd/utils/bor_flags.go | 75 ++++++++++++++++++++++++++++++++++++++++++ cmd/utils/flags.go | 15 +++++++-- 2 files changed, 88 insertions(+), 2 deletions(-) create mode 100644 cmd/utils/bor_flags.go diff --git a/cmd/utils/bor_flags.go b/cmd/utils/bor_flags.go new file mode 100644 index 000000000..5e2b31395 --- /dev/null +++ b/cmd/utils/bor_flags.go @@ -0,0 +1,75 @@ +package utils + +import ( + "encoding/json" + "io/ioutil" + "os" + + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/node" + "gopkg.in/urfave/cli.v1" +) + +var ( + // + // Bor Specific flags + // + + // HeimdallURLFlag flag for heimdall url + HeimdallURLFlag = cli.StringFlag{ + Name: "bor.heimdall", + Usage: "URL of Heimdall service", + Value: "http://localhost:1317", + } + + // WithoutHeimdallFlag no heimdall (for testing purpose) + WithoutHeimdallFlag = cli.BoolFlag{ + Name: "bor.withoutheimdall", + Usage: "Run without Heimdall service (for testing purpose)", + } +) + +func getGenesis(genesisPath string) (*core.Genesis, error) { + log.Info("Reading genesis at ", "file", genesisPath) + file, err := os.Open(genesisPath) + if err != nil { + return nil, err + } + defer file.Close() + + genesis := new(core.Genesis) + if err := json.NewDecoder(file).Decode(genesis); err != nil { + return nil, err + } + return genesis, nil +} + +func createBorEthereum(ctx *cli.Context, cfg *eth.Config) *eth.Ethereum { + workspace, err := ioutil.TempDir("", "bor-command-node-") + if err != nil { + Fatalf("failed to create temporary keystore: %v", err) + } + + // Create a networkless protocol stack and start an Ethereum service within + stack, err := node.New(&node.Config{DataDir: workspace, UseLightweightKDF: true, Name: "bor-command-node"}) + if err != nil { + Fatalf("failed to create node: %v", err) + } + ethereum, err := eth.New(stack, cfg) + if err != nil { + Fatalf("failed to register Ethereum protocol: %v", err) + } + + // Start the node and assemble the JavaScript console around it + if err = stack.Start(); err != nil { + Fatalf("failed to start test stack: %v", err) + } + _, err = stack.Attach() + if err != nil { + Fatalf("failed to attach to node: %v", err) + } + + return ethereum +} diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 80da518c2..c6d84f601 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -1801,15 +1801,26 @@ func MakeGenesis(ctx *cli.Context) *core.Genesis { // MakeChain creates a chain manager from set command line flags. func MakeChain(ctx *cli.Context, stack *node.Node, readOnly bool) (chain *core.BlockChain, chainDb ethdb.Database) { - var err error + // expecting the last argument to be the genesis file + genesis, err := getGenesis(ctx.Args().Get(len(ctx.Args()) - 1)) + if err != nil { + Fatalf("Valid genesis file is required as argument: {}", err) + } + chainDb = MakeChainDatabase(ctx, stack) - config, _, err := core.SetupGenesisBlock(chainDb, MakeGenesis(ctx)) + config, _, err := core.SetupGenesisBlock(chainDb, genesis) if err != nil { Fatalf("%v", err) } var engine consensus.Engine if config.Clique != nil { engine = clique.New(config.Clique, chainDb) + } else if config.Bor != nil { + engine = createBorEthereum(ctx, ð.Config{ + Genesis: genesis, + HeimdallURL: ctx.GlobalString(HeimdallURLFlag.Name), + WithoutHeimdall: ctx.GlobalBool(WithoutHeimdallFlag.Name), + }).Engine() } else { engine = ethash.NewFaker() if !ctx.GlobalBool(FakePoWFlag.Name) { -- GitLab