mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-27 15:16:43 +00:00
122 lines
3.2 KiB
Go
122 lines
3.2 KiB
Go
package utils
|
|
|
|
import (
|
|
"encoding/json"
|
|
"io/ioutil"
|
|
"os"
|
|
|
|
"gopkg.in/urfave/cli.v1"
|
|
|
|
"github.com/ethereum/go-ethereum/core"
|
|
"github.com/ethereum/go-ethereum/eth"
|
|
"github.com/ethereum/go-ethereum/log"
|
|
"github.com/ethereum/go-ethereum/node"
|
|
)
|
|
|
|
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)",
|
|
}
|
|
|
|
// HeimdallgRPCAddressFlag flag for heimdall gRPC address
|
|
HeimdallgRPCAddressFlag = cli.StringFlag{
|
|
Name: "bor.heimdallgRPC",
|
|
Usage: "Address of Heimdall gRPC service",
|
|
Value: "",
|
|
}
|
|
|
|
// RunHeimdallFlag flag for running heimdall internally from bor
|
|
RunHeimdallFlag = cli.BoolFlag{
|
|
Name: "bor.runheimdall",
|
|
Usage: "Run Heimdall service as a child process",
|
|
}
|
|
|
|
RunHeimdallArgsFlag = cli.StringFlag{
|
|
Name: "bor.runheimdallargs",
|
|
Usage: "Arguments to pass to Heimdall service",
|
|
Value: "",
|
|
}
|
|
|
|
// UseHeimdallApp flag for using internall heimdall app to fetch data
|
|
UseHeimdallAppFlag = cli.BoolFlag{
|
|
Name: "bor.useheimdallapp",
|
|
Usage: "Use child heimdall process to fetch data, Only works when bor.runheimdall is true",
|
|
}
|
|
|
|
// BorFlags all bor related flags
|
|
BorFlags = []cli.Flag{
|
|
HeimdallURLFlag,
|
|
WithoutHeimdallFlag,
|
|
HeimdallgRPCAddressFlag,
|
|
RunHeimdallFlag,
|
|
RunHeimdallArgsFlag,
|
|
UseHeimdallAppFlag,
|
|
}
|
|
)
|
|
|
|
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
|
|
}
|
|
|
|
// SetBorConfig sets bor config
|
|
func SetBorConfig(ctx *cli.Context, cfg *eth.Config) {
|
|
cfg.HeimdallURL = ctx.GlobalString(HeimdallURLFlag.Name)
|
|
cfg.WithoutHeimdall = ctx.GlobalBool(WithoutHeimdallFlag.Name)
|
|
cfg.HeimdallgRPCAddress = ctx.GlobalString(HeimdallgRPCAddressFlag.Name)
|
|
cfg.RunHeimdall = ctx.GlobalBool(RunHeimdallFlag.Name)
|
|
cfg.RunHeimdallArgs = ctx.GlobalString(RunHeimdallArgsFlag.Name)
|
|
cfg.UseHeimdallApp = ctx.GlobalBool(UseHeimdallAppFlag.Name)
|
|
}
|
|
|
|
// CreateBorEthereum Creates bor ethereum object from eth.Config
|
|
func CreateBorEthereum(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 stack: %v", err)
|
|
}
|
|
_, err = stack.Attach()
|
|
if err != nil {
|
|
Fatalf("Failed to attach to node: %v", err)
|
|
}
|
|
|
|
return ethereum
|
|
}
|