From c7ea09a019c1fc9eaff6ed6a35e42935e504acda Mon Sep 17 00:00:00 2001
From: atvanguard <93arpit@gmail.com>
Date: Mon, 18 May 2020 13:33:27 +0530
Subject: [PATCH] dev: Change wording for UnauthorizedSignerError, remove
 errRecentlySigned

---
 consensus/bor/bor.go                    |  4 ---
 consensus/bor/bor_test/bor_test.go      | 27 ++++++++++++++++
 consensus/bor/bor_test/snapshot_test.go |  8 ++---
 consensus/bor/errors.go                 | 42 ++++++++++---------------
 consensus/bor/snapshot.go               | 13 ++------
 5 files changed, 51 insertions(+), 43 deletions(-)

diff --git a/consensus/bor/bor.go b/consensus/bor/bor.go
index 0d244548e..a8f90dfe6 100644
--- a/consensus/bor/bor.go
+++ b/consensus/bor/bor.go
@@ -121,10 +121,6 @@ var (
 	// errOutOfRangeChain is returned if an authorization list is attempted to
 	// be modified via out-of-range or non-contiguous headers.
 	errOutOfRangeChain = errors.New("out of range or non-contiguous chain")
-
-	// errRecentlySigned is returned if a header is signed by an authorized entity
-	// that already signed a header recently, thus is temporarily not allowed to.
-	errRecentlySigned = errors.New("recently signed")
 )
 
 // SignerFn is a signer callback function to request a header to be signed by a
diff --git a/consensus/bor/bor_test/bor_test.go b/consensus/bor/bor_test/bor_test.go
index 62d929220..1c6c530e8 100644
--- a/consensus/bor/bor_test/bor_test.go
+++ b/consensus/bor/bor_test/bor_test.go
@@ -160,3 +160,30 @@ func TestOutOfTurnSigning(t *testing.T) {
 	_, err = chain.InsertChain([]*types.Block{block})
 	assert.Nil(t, err)
 }
+
+func TestSignerNotFound(t *testing.T) {
+	init := buildEthereumInstance(t, rawdb.NewMemoryDatabase())
+	chain := init.ethereum.BlockChain()
+	engine := init.ethereum.Engine()
+	_bor := engine.(*bor.Bor)
+
+	res, _ := loadSpanFromFile(t)
+	h := &mocks.IHeimdallClient{}
+	h.On("FetchWithRetry", "bor", "span", "1").Return(res, nil)
+	_bor.SetHeimdallClient(h)
+
+	db := init.ethereum.ChainDb()
+	block := init.genesis.ToBlock(db)
+
+	// random signer account that is not a part of the validator set
+	signer := "3714d99058cd64541433d59c6b391555b2fd9b54629c2b717a6c9c00d1127b6b"
+	signerKey, _ := hex.DecodeString(signer)
+	key, _ = crypto.HexToECDSA(signer)
+	addr = crypto.PubkeyToAddress(key.PublicKey)
+
+	block = buildNextBlock(t, _bor, chain, block, signerKey, init.genesis.Config.Bor)
+	_, err := chain.InsertChain([]*types.Block{block})
+	assert.Equal(t,
+		*err.(*bor.UnauthorizedSignerError),
+		bor.UnauthorizedSignerError{Number: 1, Signer: addr.Bytes()})
+}
diff --git a/consensus/bor/bor_test/snapshot_test.go b/consensus/bor/bor_test/snapshot_test.go
index 264c63295..6eb43b3e6 100644
--- a/consensus/bor/bor_test/snapshot_test.go
+++ b/consensus/bor/bor_test/snapshot_test.go
@@ -84,9 +84,9 @@ func TestGetSignerSuccessionNumber_ProposerNotFound(t *testing.T) {
 	signer := snap.ValidatorSet.Validators[3].Address
 	_, err := snap.GetSignerSuccessionNumber(signer)
 	assert.NotNil(t, err)
-	e, ok := err.(*bor.ProposerNotFoundError)
+	e, ok := err.(*bor.UnauthorizedProposerError)
 	assert.True(t, ok)
-	assert.Equal(t, dummyProposerAddress, e.Address)
+	assert.Equal(t, dummyProposerAddress.Bytes(), e.Proposer)
 }
 
 func TestGetSignerSuccessionNumber_SignerNotFound(t *testing.T) {
@@ -97,9 +97,9 @@ func TestGetSignerSuccessionNumber_SignerNotFound(t *testing.T) {
 	dummySignerAddress := randomAddress()
 	_, err := snap.GetSignerSuccessionNumber(dummySignerAddress)
 	assert.NotNil(t, err)
-	e, ok := err.(*bor.SignerNotFoundError)
+	e, ok := err.(*bor.UnauthorizedSignerError)
 	assert.True(t, ok)
-	assert.Equal(t, dummySignerAddress, e.Address)
+	assert.Equal(t, dummySignerAddress.Bytes(), e.Signer)
 }
 
 func buildRandomValidatorSet(numVals int) []*bor.Validator {
diff --git a/consensus/bor/errors.go b/consensus/bor/errors.go
index 7e0b90941..2153c8c4a 100644
--- a/consensus/bor/errors.go
+++ b/consensus/bor/errors.go
@@ -2,30 +2,8 @@ package bor
 
 import (
 	"fmt"
-
-	"github.com/maticnetwork/bor/common"
 )
 
-// Will include any new bor consensus errors here in an attempt to make error messages more descriptive
-
-// ProposerNotFoundError is returned if the given proposer address is not present in the validator set
-type ProposerNotFoundError struct {
-	Address common.Address
-}
-
-func (e *ProposerNotFoundError) Error() string {
-	return fmt.Sprintf("Proposer: %s not found", e.Address.Hex())
-}
-
-// SignerNotFoundError is returned when the signer address is not present in the validator set
-type SignerNotFoundError struct {
-	Address common.Address
-}
-
-func (e *SignerNotFoundError) Error() string {
-	return fmt.Sprintf("Signer: %s not found", e.Address.Hex())
-}
-
 // TotalVotingPowerExceededError is returned when the maximum allowed total voting power is exceeded
 type TotalVotingPowerExceededError struct {
 	Sum        int64
@@ -99,7 +77,21 @@ func (e *BlockTooSoonError) Error() string {
 	)
 }
 
-// UnauthorizedSignerError is returned if a header is signed by a non-authorized entity.
+// UnauthorizedProposerError is returned if a header is [being] signed by an unauthorized entity.
+type UnauthorizedProposerError struct {
+	Number   uint64
+	Proposer []byte
+}
+
+func (e *UnauthorizedProposerError) Error() string {
+	return fmt.Sprintf(
+		"Proposer 0x%x is not a part of the producer set at block %d",
+		e.Proposer,
+		e.Number,
+	)
+}
+
+// UnauthorizedSignerError is returned if a header is [being] signed by an unauthorized entity.
 type UnauthorizedSignerError struct {
 	Number uint64
 	Signer []byte
@@ -107,9 +99,9 @@ type UnauthorizedSignerError struct {
 
 func (e *UnauthorizedSignerError) Error() string {
 	return fmt.Sprintf(
-		"Validator set for block %d doesn't contain the signer 0x%x\n",
-		e.Number,
+		"Signer 0x%x is not a part of the producer set at block %d",
 		e.Signer,
+		e.Number,
 	)
 }
 
diff --git a/consensus/bor/snapshot.go b/consensus/bor/snapshot.go
index a62c2014b..2ff7dec0c 100644
--- a/consensus/bor/snapshot.go
+++ b/consensus/bor/snapshot.go
@@ -26,7 +26,6 @@ import (
 	"github.com/maticnetwork/bor/core/types"
 	"github.com/maticnetwork/bor/ethdb"
 	"github.com/maticnetwork/bor/internal/ethapi"
-	"github.com/maticnetwork/bor/log"
 	"github.com/maticnetwork/bor/params"
 )
 
@@ -191,24 +190,18 @@ func (s *Snapshot) GetSignerSuccessionNumber(signer common.Address) (int, error)
 	proposer := s.ValidatorSet.GetProposer().Address
 	proposerIndex, _ := s.ValidatorSet.GetByAddress(proposer)
 	if proposerIndex == -1 {
-		return -1, &ProposerNotFoundError{proposer}
+		return -1, &UnauthorizedProposerError{s.Number, proposer.Bytes()}
 	}
 	signerIndex, _ := s.ValidatorSet.GetByAddress(signer)
 	if signerIndex == -1 {
-		return -1, &SignerNotFoundError{signer}
+		return -1, &UnauthorizedSignerError{s.Number, signer.Bytes()}
 	}
-	limit := len(validators)/2 + 1
 
 	tempIndex := signerIndex
-	if proposerIndex != tempIndex && limit > 0 {
+	if proposerIndex != tempIndex {
 		if tempIndex < proposerIndex {
 			tempIndex = tempIndex + len(validators)
 		}
-
-		if tempIndex-proposerIndex > limit {
-			log.Info("errRecentlySigned", "proposerIndex", validators[proposerIndex].Address.Hex(), "signerIndex", validators[signerIndex].Address.Hex())
-			return -1, errRecentlySigned
-		}
 	}
 	return tempIndex - proposerIndex, nil
 }
-- 
GitLab