From 151f6b59b6e049dcf44bc5d8c252e75ef43df681 Mon Sep 17 00:00:00 2001 From: Tuna Date: Sat, 10 Nov 2018 14:21:06 +0700 Subject: [PATCH] verify masternode permission for signing --- cmd/tomo/main.go | 8 ++++---- eth/backend.go | 16 ++++++++++++---- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/cmd/tomo/main.go b/cmd/tomo/main.go index d21ef9dce159..b365c279e55d 100644 --- a/cmd/tomo/main.go +++ b/cmd/tomo/main.go @@ -288,12 +288,12 @@ func startNode(ctx *cli.Context, stack *node.Node, cfg tomoConfig) { if _, ok := ethereum.Engine().(*posv.Posv); ok { go func() { started := false - ok, err := ethereum.ValidateStaker() + ok, err := ethereum.ValidateMasternode() if err != nil { - utils.Fatalf("Can't verify validator permission: %v", err) + utils.Fatalf("Can't verify masternode permission: %v", err) } if ok { - log.Info("Validator found. Enabling staking mode...") + log.Info("Masternode found. Enabling staking mode...") // Use a reduced number of threads if requested if threads := ctx.GlobalInt(utils.StakerThreadsFlag.Name); threads > 0 { type threaded interface { @@ -314,7 +314,7 @@ func startNode(ctx *cli.Context, stack *node.Node, cfg tomoConfig) { defer close(core.CheckpointCh) for range core.CheckpointCh { log.Info("Checkpoint!!! It's time to reconcile node's state...") - ok, err := ethereum.ValidateStaker() + ok, err := ethereum.ValidateMasternode() if err != nil { utils.Fatalf("Can't verify masternode permission: %v", err) } diff --git a/eth/backend.go b/eth/backend.go index 26915e331c82..174f7a5b909e 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -188,6 +188,14 @@ func New(ctx *node.ServiceContext, config *Config) (*Ethereum, error) { if eth.chainConfig.Posv != nil { c := eth.engine.(*posv.Posv) signHook := func(block *types.Block) error { + ok, err := eth.ValidateMasternode() + if err != nil { + return fmt.Errorf("Can't verify masternode permission: %v", err) + } + if !ok { + // silently return as this node doesn't have masternode permission to sign block + return nil + } if err := contracts.CreateTransactionSign(chainConfig, eth.txPool, eth.accountManager, block, chainDb); err != nil { return fmt.Errorf("Fail to create tx sign for importing block: %v", err) } @@ -497,8 +505,8 @@ func (self *Ethereum) SetEtherbase(etherbase common.Address) { self.miner.SetEtherbase(etherbase) } -// ValidateMiner checks if node's address is in set of validators -func (s *Ethereum) ValidateStaker() (bool, error) { +// ValidateMasternode checks if node's address is in set of masternodes +func (s *Ethereum) ValidateMasternode() (bool, error) { eb, err := s.Etherbase() if err != nil { return false, err @@ -508,14 +516,14 @@ func (s *Ethereum) ValidateStaker() (bool, error) { c := s.engine.(*posv.Posv) snap, err := c.GetSnapshot(s.blockchain, s.blockchain.CurrentHeader()) if err != nil { - return false, fmt.Errorf("Can't verify miner: %v", err) + return false, fmt.Errorf("Can't verify masternode permission: %v", err) } if _, authorized := snap.Signers[eb]; !authorized { //This miner doesn't belong to set of validators return false, nil } } else { - return false, fmt.Errorf("Only verify miners in Posv protocol") + return false, fmt.Errorf("Only verify masternode permission in PoSV protocol") } return true, nil }