From 49aff6eca7aa895aba8f5576c4bf96eb01dc7754 Mon Sep 17 00:00:00 2001
From: Jaynti Kanani <jdkanani@gmail.com>
Date: Wed, 15 Jul 2020 13:56:30 +0530
Subject: [PATCH] new: add without-heimdall flag for testing purpose

---
 cmd/bor/chaincmd.go  |  1 +
 cmd/bor/config.go    |  7 ++++++-
 cmd/bor/main.go      |  1 +
 cmd/utils/flags.go   | 16 +++++++++++++++-
 consensus/bor/bor.go |  7 +++++--
 eth/backend.go       |  2 +-
 eth/config.go        |  3 +++
 7 files changed, 32 insertions(+), 5 deletions(-)

diff --git a/cmd/bor/chaincmd.go b/cmd/bor/chaincmd.go
index 9747ac0ec..78bbc56df 100644
--- a/cmd/bor/chaincmd.go
+++ b/cmd/bor/chaincmd.go
@@ -78,6 +78,7 @@ The dumpgenesis command dumps the genesis block configuration in JSON format to
 		Flags: []cli.Flag{
 			utils.DataDirFlag,
 			utils.HeimdallURLFlag,
+			utils.WithoutHeimdallFlag,
 			utils.CacheFlag,
 			utils.SyncModeFlag,
 			utils.GCModeFlag,
diff --git a/cmd/bor/config.go b/cmd/bor/config.go
index 7bedfcdd2..a59664e92 100644
--- a/cmd/bor/config.go
+++ b/cmd/bor/config.go
@@ -148,7 +148,12 @@ func enableWhisper(ctx *cli.Context) bool {
 func makeFullNode(ctx *cli.Context) *node.Node {
 	stack, cfg := makeConfigNode(ctx)
 	cfg.Eth.HeimdallURL = ctx.GlobalString(utils.HeimdallURLFlag.Name)
-	log.Info("Connecting to heimdall service on...", "heimdallURL", cfg.Eth.HeimdallURL)
+	cfg.Eth.WithoutHeimdall = ctx.GlobalBool(utils.WithoutHeimdallFlag.Name)
+	if cfg.Eth.WithoutHeimdall {
+		log.Info("Running without Heimdall node")
+	} else {
+		log.Info("Connecting to Heimdall node", "heimdallURL", cfg.Eth.HeimdallURL)
+	}
 	utils.RegisterEthService(stack, &cfg.Eth)
 
 	// Whisper must be explicitly enabled by specifying at least 1 whisper flag or in dev mode
diff --git a/cmd/bor/main.go b/cmd/bor/main.go
index 4d9149429..e1eb386ac 100644
--- a/cmd/bor/main.go
+++ b/cmd/bor/main.go
@@ -211,6 +211,7 @@ var (
 
 	borFlags = []cli.Flag{
 		utils.HeimdallURLFlag,
+		utils.WithoutHeimdallFlag,
 	}
 )
 
diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go
index d0b39a773..75cdc5131 100644
--- a/cmd/utils/flags.go
+++ b/cmd/utils/flags.go
@@ -751,12 +751,22 @@ var (
 		Value: "",
 	}
 
+	//
 	// Bor Specific flags
+	//
+
+	// HeimdallURLFlag flag for heimdall url
 	HeimdallURLFlag = cli.StringFlag{
 		Name:  "heimdall",
 		Usage: "URL of Heimdall service",
 		Value: "http://localhost:1317",
 	}
+
+	// WithoutHeimdallFlag no heimdall (for testing purpose)
+	WithoutHeimdallFlag = cli.BoolFlag{
+		Name:  "without-heimdall",
+		Usage: "Run without Heimdall service (for testing purpose)",
+	}
 )
 
 // MakeDataDir retrieves the currently requested data directory, terminating
@@ -1872,7 +1882,11 @@ func MakeChain(ctx *cli.Context, stack *node.Node, readOnly bool) (chain *core.B
 	if config.Clique != nil {
 		engine = clique.New(config.Clique, chainDb)
 	} else if config.Bor != nil {
-		cfg := &eth.Config{Genesis: genesis, HeimdallURL: ctx.GlobalString(HeimdallURLFlag.Name)}
+		cfg := &eth.Config{
+			Genesis:         genesis,
+			HeimdallURL:     ctx.GlobalString(HeimdallURLFlag.Name),
+			WithoutHeimdall: ctx.GlobalBool(WithoutHeimdallFlag.Name),
+		}
 		workspace, err := ioutil.TempDir("", "console-tester-")
 		if err != nil {
 			Fatalf("failed to create temporary keystore: %v", err)
diff --git a/consensus/bor/bor.go b/consensus/bor/bor.go
index ee0a66cad..ae693906d 100644
--- a/consensus/bor/bor.go
+++ b/consensus/bor/bor.go
@@ -224,6 +224,7 @@ type Bor struct {
 	validatorSetABI        abi.ABI
 	stateReceiverABI       abi.ABI
 	HeimdallClient         IHeimdallClient
+	WithoutHeimdall        bool
 
 	stateSyncFeed event.Feed
 	scope         event.SubscriptionScope
@@ -237,6 +238,7 @@ func New(
 	db ethdb.Database,
 	ethAPI *ethapi.PublicBlockChainAPI,
 	heimdallURL string,
+	withoutHeimdall bool,
 ) *Bor {
 	// get bor config
 	borConfig := chainConfig.Bor
@@ -264,6 +266,7 @@ func New(
 		stateReceiverABI:       sABI,
 		GenesisContractsClient: genesisContractsClient,
 		HeimdallClient:         heimdallClient,
+		WithoutHeimdall:        withoutHeimdall,
 	}
 
 	return c
@@ -653,7 +656,7 @@ func (c *Bor) Prepare(chain consensus.ChainReader, header *types.Header) error {
 // rewards given.
 func (c *Bor) Finalize(chain consensus.ChainReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, uncles []*types.Header) {
 	headerNumber := header.Number.Uint64()
-	if headerNumber%c.config.Sprint == 0 {
+	if !c.WithoutHeimdall && headerNumber%c.config.Sprint == 0 {
 		cx := chainContext{Chain: chain, Bor: c}
 		// check and commit span
 		if err := c.checkAndCommitSpan(state, header, cx); err != nil {
@@ -677,7 +680,7 @@ func (c *Bor) Finalize(chain consensus.ChainReader, header *types.Header, state
 // nor block rewards given, and returns the final block.
 func (c *Bor) FinalizeAndAssemble(chain consensus.ChainReader, header *types.Header, state *state.StateDB, txs []*types.Transaction, uncles []*types.Header, receipts []*types.Receipt) (*types.Block, error) {
 	headerNumber := header.Number.Uint64()
-	if headerNumber%c.config.Sprint == 0 {
+	if !c.WithoutHeimdall && headerNumber%c.config.Sprint == 0 {
 		cx := chainContext{Chain: chain, Bor: c}
 
 		// check and commit span
diff --git a/eth/backend.go b/eth/backend.go
index 3ae11fa0a..efffc64da 100644
--- a/eth/backend.go
+++ b/eth/backend.go
@@ -273,7 +273,7 @@ func CreateConsensusEngine(ctx *node.ServiceContext, chainConfig *params.ChainCo
 
 	// If Matic Bor is requested, set it up
 	if chainConfig.Bor != nil {
-		return bor.New(chainConfig, db, ee, ethConfig.HeimdallURL)
+		return bor.New(chainConfig, db, ee, ethConfig.HeimdallURL, ethConfig.WithoutHeimdall)
 	}
 
 	// Otherwise assume proof-of-work
diff --git a/eth/config.go b/eth/config.go
index ba8f73735..46ebcf831 100644
--- a/eth/config.go
+++ b/eth/config.go
@@ -182,4 +182,7 @@ type Config struct {
 
 	// URL to connect to Heimdall node
 	HeimdallURL string
+
+	// No heimdall service
+	WithoutHeimdall bool
 }
-- 
GitLab