adjust signed recently condition

This commit is contained in:
Tuna 2018-09-27 10:36:40 +07:00
parent e20d9797ff
commit 30ae355fd1
2 changed files with 26 additions and 19 deletions

View file

@ -20,12 +20,12 @@ import (
"bufio" "bufio"
"errors" "errors"
"fmt" "fmt"
"gopkg.in/urfave/cli.v1"
"io" "io"
"os" "os"
"reflect" "reflect"
"unicode"
"strings" "strings"
"gopkg.in/urfave/cli.v1" "unicode"
"github.com/ethereum/go-ethereum/cmd/utils" "github.com/ethereum/go-ethereum/cmd/utils"
"github.com/ethereum/go-ethereum/dashboard" "github.com/ethereum/go-ethereum/dashboard"

View file

@ -575,10 +575,12 @@ func (c *Posv) verifySeal(chain consensus.ChainReader, header *types.Header, par
return errUnauthorized return errUnauthorized
} }
} }
if len(masternodes) > 1 {
for seen, recent := range snap.Recents { for seen, recent := range snap.Recents {
if recent == signer { if recent == signer {
// Signer is among recents, only fail if the current block doesn't shift it out // Signer is among recents, only fail if the current block doesn't shift it out
if limit := uint64(len(masternodes)/2 + 1); seen > number-limit { // There is only case that we don't allow signer to create two continuous blocks.
if limit := uint64(2); seen > number-limit {
// Only take into account the non-epoch blocks // Only take into account the non-epoch blocks
if number%c.config.Epoch != 0 { if number%c.config.Epoch != 0 {
return errUnauthorized return errUnauthorized
@ -586,6 +588,7 @@ func (c *Posv) verifySeal(chain consensus.ChainReader, header *types.Header, par
} }
} }
} }
}
return nil return nil
} }
@ -755,10 +758,13 @@ func (c *Posv) Seal(chain consensus.ChainReader, block *types.Block, stop <-chan
} }
} }
// If we're amongst the recent signers, wait for the next block // If we're amongst the recent signers, wait for the next block
// only check recent signers if there are more than one signer.
if len(masternodes) > 1 {
for seen, recent := range snap.Recents { for seen, recent := range snap.Recents {
if recent == signer { if recent == signer {
// Signer is among recents, only wait if the current block doesn't shift it out // Signer is among recents, only wait if the current block doesn't shift it out
if limit := uint64(len(masternodes)/2 + 1); number < limit || seen > number-limit { // There is only case that we don't allow signer to create two continuous blocks.
if limit := uint64(2); number < limit || seen > number-limit {
// Only take into account the non-epoch blocks // Only take into account the non-epoch blocks
if number%c.config.Epoch != 0 { if number%c.config.Epoch != 0 {
log.Info("Debugging", "len(masternodes)", len(masternodes), "number", number, "limit", limit, "seen", seen, "recent", recent.String(), "snap.Recents", snap.Recents) log.Info("Debugging", "len(masternodes)", len(masternodes), "number", number, "limit", limit, "seen", seen, "recent", recent.String(), "snap.Recents", snap.Recents)
@ -769,6 +775,7 @@ func (c *Posv) Seal(chain consensus.ChainReader, block *types.Block, stop <-chan
} }
} }
} }
}
select { select {
case <-stop: case <-stop:
return nil, nil return nil, nil