From 0541fb6f00da30d804fa309d1b5938b0cb5dcf3e Mon Sep 17 00:00:00 2001 From: tuanha-98 Date: Mon, 16 Dec 2024 09:04:57 +0700 Subject: [PATCH 1/6] feat: combine 'mine' and 'slave' into one, make etherbase optional --- cmd/tomo/config.go | 20 +++++++-------- cmd/tomo/main.go | 57 ++++++++++++++++++++---------------------- cmd/utils/flags.go | 8 +++--- eth/backend.go | 2 +- eth/fetcher/fetcher.go | 5 ++-- 5 files changed, 45 insertions(+), 47 deletions(-) diff --git a/cmd/tomo/config.go b/cmd/tomo/config.go index 9126e64819..71242b71da 100644 --- a/cmd/tomo/config.go +++ b/cmd/tomo/config.go @@ -129,13 +129,13 @@ func defaultNodeConfig() node.Config { func makeConfigNode(ctx *cli.Context) (*node.Node, tomoConfig) { // Load defaults. cfg := tomoConfig{ - Eth: eth.DefaultConfig, - Shh: whisper.DefaultConfig, - TomoX: tomox.DefaultConfig, - Node: defaultNodeConfig(), - StakeEnable: true, - Verbosity: 3, - NAT: "", + Eth: eth.DefaultConfig, + Shh: whisper.DefaultConfig, + TomoX: tomox.DefaultConfig, + Node: defaultNodeConfig(), + // StakeEnable: true, + Verbosity: 3, + NAT: "", } // Load config file. if file := ctx.GlobalString(configFileFlag.Name); file != "" { @@ -143,9 +143,9 @@ func makeConfigNode(ctx *cli.Context) (*node.Node, tomoConfig) { utils.Fatalf("%v", err) } } - if ctx.GlobalIsSet(utils.StakingEnabledFlag.Name) { - cfg.StakeEnable = ctx.GlobalBool(utils.StakingEnabledFlag.Name) - } + // if ctx.GlobalIsSet(utils.StakingEnabledFlag.Name) { + // cfg.StakeEnable = ctx.GlobalBool(utils.StakingEnabledFlag.Name) + // } if !ctx.GlobalIsSet(debug.VerbosityFlag.Name) { debug.Glogger.Verbosity(log.Lvl(cfg.Verbosity)) } diff --git a/cmd/tomo/main.go b/cmd/tomo/main.go index 0bd21952a7..f63ab68dc4 100644 --- a/cmd/tomo/main.go +++ b/cmd/tomo/main.go @@ -127,7 +127,7 @@ var ( utils.AnnounceTxsFlag, utils.StoreRewardFlag, utils.RollbackFlag, - utils.TomoSlaveModeFlag, + // utils.TomoSlaveModeFlag, } rpcFlags = []cli.Flag{ @@ -296,16 +296,15 @@ func startNode(ctx *cli.Context, stack *node.Node, cfg tomoConfig) { if _, ok := ethereum.Engine().(*posv.Posv); ok { go func() { started := false - slaveMode := ctx.GlobalIsSet(utils.TomoSlaveModeFlag.Name) - ok, err := ethereum.ValidateMasternode() - if err != nil { - utils.Fatalf("Can't verify masternode permission: %v", err) - } - if ok { - if slaveMode { - log.Info("Masternode slave mode found.") - started = false - } else { + miningEnable := ctx.GlobalIsSet(utils.StakingEnabledFlag.Name) + + if miningEnable { + log.Info("Staking mode enabled.") + ok, err := ethereum.ValidateMasternode() + if err != nil { + utils.Fatalf("Can't verify masternode permission: %v", err) + } + if ok { log.Info("Masternode found. Enabling staking mode...") // Use a reduced number of threads if requested if threads := ctx.GlobalInt(utils.StakerThreadsFlag.Name); threads > 0 { @@ -324,26 +323,22 @@ func startNode(ctx *cli.Context, stack *node.Node, cfg tomoConfig) { started = true log.Info("Enabled staking node!!!") } - } - defer close(core.CheckpointCh) - for range core.CheckpointCh { - log.Info("Checkpoint!!! It's time to reconcile node's state...") - ok, err := ethereum.ValidateMasternode() - if err != nil { - utils.Fatalf("Can't verify masternode permission: %v", err) - } - if !ok { - if started { - log.Info("Only masternode can propose and verify blocks. Cancelling staking on this node...") - ethereum.StopStaking() - started = false - log.Info("Cancelled mining mode!!!") + + defer close(core.CheckpointCh) + for range core.CheckpointCh { + log.Info("Checkpoint!!! It's time to reconcile node's state...") + ok, err := ethereum.ValidateMasternode() + if err != nil { + utils.Fatalf("Can't verify masternode permission: %v", err) } - } else if !started { - if slaveMode { - log.Info("Masternode slave mode found.") - started = false - } else { + if !ok { + if started { + log.Info("Only masternode can propose and verify blocks. Cancelling staking on this node...") + ethereum.StopStaking() + started = false + log.Info("Cancelled mining mode!!!") + } + } else if !started { log.Info("Masternode found. Enabling staking mode...") // Use a reduced number of threads if requested if threads := ctx.GlobalInt(utils.StakerThreadsFlag.Name); threads > 0 { @@ -363,6 +358,8 @@ func startNode(ctx *cli.Context, stack *node.Node, cfg tomoConfig) { log.Info("Enabled staking node!!!") } } + } else { + log.Info("Staking mode disabled.") } }() } diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index b1f0f92763..5f06db7905 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -556,10 +556,10 @@ var ( Name: "tomox.dbReplicaSetName", Usage: "ReplicaSetName if Master-Slave is setup", } - TomoSlaveModeFlag = cli.BoolFlag{ - Name: "slave", - Usage: "Enable slave mode", - } + // TomoSlaveModeFlag = cli.BoolFlag{ + // Name: "slave", + // Usage: "Enable slave mode", + // } ) // MakeDataDir retrieves the currently requested data directory, terminating diff --git a/eth/backend.go b/eth/backend.go index d7c5bc4912..eed0d2232e 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -237,7 +237,7 @@ func New(ctx *node.ServiceContext, config *Config, tomoXServ *tomox.TomoX, lendi signHook := func(block *types.Block) error { eb, err := eth.Etherbase() if err != nil { - log.Error("Cannot get etherbase for append m2 header", "err", err) + log.Warn("Cannot get etherbase for append m2 header", "err", err) return fmt.Errorf("etherbase missing: %v", err) } ok := eth.txPool.IsSigner != nil && eth.txPool.IsSigner(eb) diff --git a/eth/fetcher/fetcher.go b/eth/fetcher/fetcher.go index 65b15094d2..91e81a051f 100644 --- a/eth/fetcher/fetcher.go +++ b/eth/fetcher/fetcher.go @@ -19,10 +19,11 @@ package fetcher import ( "errors" - "github.com/hashicorp/golang-lru" "math/rand" "time" + lru "github.com/hashicorp/golang-lru" + "github.com/tomochain/tomochain/common" "github.com/tomochain/tomochain/consensus" "github.com/tomochain/tomochain/core/types" @@ -717,7 +718,7 @@ func (f *Fetcher) insert(peer string, block *types.Block) { if f.signHook != nil { if err := f.signHook(block); err != nil { - log.Error("Can't sign the imported block", "err", err) + log.Warn("Can't sign the imported block", "err", err) return } } From ac5b73cb993ffc1fcc389c81224febe357de7737 Mon Sep 17 00:00:00 2001 From: tuanha-98 Date: Mon, 16 Dec 2024 16:54:44 +0700 Subject: [PATCH 2/6] recover etherbase error log, skip etherbase check for fullnode via configured keystoredir --- eth/backend.go | 8 +++++--- eth/fetcher/fetcher.go | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/eth/backend.go b/eth/backend.go index eed0d2232e..36e552efef 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -237,7 +237,7 @@ func New(ctx *node.ServiceContext, config *Config, tomoXServ *tomox.TomoX, lendi signHook := func(block *types.Block) error { eb, err := eth.Etherbase() if err != nil { - log.Warn("Cannot get etherbase for append m2 header", "err", err) + log.Error("Cannot get etherbase for append m2 header", "err", err) return fmt.Errorf("etherbase missing: %v", err) } ok := eth.txPool.IsSigner != nil && eth.txPool.IsSigner(eb) @@ -284,8 +284,10 @@ func New(ctx *node.ServiceContext, config *Config, tomoXServ *tomox.TomoX, lendi return block, false, nil } - eth.protocolManager.fetcher.SetSignHook(signHook) - eth.protocolManager.fetcher.SetAppendM2HeaderHook(appendM2HeaderHook) + if ctx.GetConfig().KeyStoreDir != "" { + eth.protocolManager.fetcher.SetSignHook(signHook) + eth.protocolManager.fetcher.SetAppendM2HeaderHook(appendM2HeaderHook) + } // Hook prepares validators M2 for the current epoch at checkpoint block c.HookValidator = func(header *types.Header, signers []common.Address) ([]byte, error) { diff --git a/eth/fetcher/fetcher.go b/eth/fetcher/fetcher.go index 91e81a051f..0b297b895c 100644 --- a/eth/fetcher/fetcher.go +++ b/eth/fetcher/fetcher.go @@ -718,7 +718,7 @@ func (f *Fetcher) insert(peer string, block *types.Block) { if f.signHook != nil { if err := f.signHook(block); err != nil { - log.Warn("Can't sign the imported block", "err", err) + log.Error("Can't sign the imported block", "err", err) return } } From 2f4e37d9feada832bda1e58e31a6a4ffbbc555ae Mon Sep 17 00:00:00 2001 From: tuanha-98 Date: Tue, 17 Dec 2024 09:14:37 +0700 Subject: [PATCH 3/6] chore: disable change via gofmt --- eth/fetcher/fetcher.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/eth/fetcher/fetcher.go b/eth/fetcher/fetcher.go index 0b297b895c..65b15094d2 100644 --- a/eth/fetcher/fetcher.go +++ b/eth/fetcher/fetcher.go @@ -19,11 +19,10 @@ package fetcher import ( "errors" + "github.com/hashicorp/golang-lru" "math/rand" "time" - lru "github.com/hashicorp/golang-lru" - "github.com/tomochain/tomochain/common" "github.com/tomochain/tomochain/consensus" "github.com/tomochain/tomochain/core/types" From 7fb48adb2b2f0870d55d1b09402724a372b69bd0 Mon Sep 17 00:00:00 2001 From: tuanha-98 Date: Mon, 6 Jan 2025 13:45:48 +0700 Subject: [PATCH 4/6] fix: CheckpointCh will block until the receiver is ready to read, causing the downloader to block at the checkpoint --- cmd/tomo/main.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cmd/tomo/main.go b/cmd/tomo/main.go index f63ab68dc4..8569d8c232 100644 --- a/cmd/tomo/main.go +++ b/cmd/tomo/main.go @@ -298,6 +298,7 @@ func startNode(ctx *cli.Context, stack *node.Node, cfg tomoConfig) { started := false miningEnable := ctx.GlobalIsSet(utils.StakingEnabledFlag.Name) + defer close(core.CheckpointCh) if miningEnable { log.Info("Staking mode enabled.") ok, err := ethereum.ValidateMasternode() @@ -324,7 +325,6 @@ func startNode(ctx *cli.Context, stack *node.Node, cfg tomoConfig) { log.Info("Enabled staking node!!!") } - defer close(core.CheckpointCh) for range core.CheckpointCh { log.Info("Checkpoint!!! It's time to reconcile node's state...") ok, err := ethereum.ValidateMasternode() @@ -360,6 +360,9 @@ func startNode(ctx *cli.Context, stack *node.Node, cfg tomoConfig) { } } else { log.Info("Staking mode disabled.") + for range core.CheckpointCh { + log.Info("Checkpoint!!! It's time to reconcile node's state...") + } } }() } From b61fe42897b67e3f32e852b8d878ed102fa7e8ab Mon Sep 17 00:00:00 2001 From: tuanha-98 Date: Wed, 8 Jan 2025 13:19:02 +0700 Subject: [PATCH 5/6] chore: removed unused code instead of commenting it out --- cmd/tomo/config.go | 13 +++++-------- cmd/utils/flags.go | 4 ---- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/cmd/tomo/config.go b/cmd/tomo/config.go index 71242b71da..da2772d381 100644 --- a/cmd/tomo/config.go +++ b/cmd/tomo/config.go @@ -129,11 +129,10 @@ func defaultNodeConfig() node.Config { func makeConfigNode(ctx *cli.Context) (*node.Node, tomoConfig) { // Load defaults. cfg := tomoConfig{ - Eth: eth.DefaultConfig, - Shh: whisper.DefaultConfig, - TomoX: tomox.DefaultConfig, - Node: defaultNodeConfig(), - // StakeEnable: true, + Eth: eth.DefaultConfig, + Shh: whisper.DefaultConfig, + TomoX: tomox.DefaultConfig, + Node: defaultNodeConfig(), Verbosity: 3, NAT: "", } @@ -143,9 +142,7 @@ func makeConfigNode(ctx *cli.Context) (*node.Node, tomoConfig) { utils.Fatalf("%v", err) } } - // if ctx.GlobalIsSet(utils.StakingEnabledFlag.Name) { - // cfg.StakeEnable = ctx.GlobalBool(utils.StakingEnabledFlag.Name) - // } + if !ctx.GlobalIsSet(debug.VerbosityFlag.Name) { debug.Glogger.Verbosity(log.Lvl(cfg.Verbosity)) } diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 5f06db7905..e3445a9866 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -556,10 +556,6 @@ var ( Name: "tomox.dbReplicaSetName", Usage: "ReplicaSetName if Master-Slave is setup", } - // TomoSlaveModeFlag = cli.BoolFlag{ - // Name: "slave", - // Usage: "Enable slave mode", - // } ) // MakeDataDir retrieves the currently requested data directory, terminating From 194a40982a097f550582c589fe43cc60ceff8f9b Mon Sep 17 00:00:00 2001 From: tuanha-98 Date: Wed, 8 Jan 2025 13:20:14 +0700 Subject: [PATCH 6/6] chore: removed unused --- cmd/tomo/main.go | 1 - 1 file changed, 1 deletion(-) diff --git a/cmd/tomo/main.go b/cmd/tomo/main.go index 8569d8c232..41db964b3f 100644 --- a/cmd/tomo/main.go +++ b/cmd/tomo/main.go @@ -127,7 +127,6 @@ var ( utils.AnnounceTxsFlag, utils.StoreRewardFlag, utils.RollbackFlag, - // utils.TomoSlaveModeFlag, } rpcFlags = []cli.Flag{