From 7f45edee32af3905180d2fb723cf090c4f2d42cc Mon Sep 17 00:00:00 2001 From: ia Date: Fri, 21 Jul 2017 22:37:34 -0500 Subject: [PATCH] problem: good-will assumption for forks with required hash solution: HeaderCheck check for new ErrHashEmpty error, where that error is ignored by eth/handler.go. This is presented as a possible alternative/+addition to @sorpaas changed in #313 Rel #309 --- core/config.go | 6 ++++++ eth/handler.go | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/core/config.go b/core/config.go index 148bc3136..166d338d5 100644 --- a/core/config.go +++ b/core/config.go @@ -46,6 +46,8 @@ var ( ErrHashKnownBad = errors.New("known bad hash") ErrHashKnownFork = validateError("known fork hash mismatch") + + ErrHashEmpty = errors.New("empty hash") ) // SufficientChainConfig holds necessary data for externalizing a given blockchain configuration. @@ -333,6 +335,10 @@ func (c *ChainConfig) GetFeature(num *big.Int, id string) (*ForkFeature, *Fork, } func (c *ChainConfig) HeaderCheck(h *types.Header) error { + if (h == &types.Header{}) { + return ErrHashEmpty + } + for _, fork := range c.Forks { if fork.Block.Cmp(h.Number) != 0 { continue diff --git a/eth/handler.go b/eth/handler.go index 8a5887be4..5e8666d0c 100644 --- a/eth/handler.go +++ b/eth/handler.go @@ -286,7 +286,7 @@ func (pm *ProtocolManager) handle(p *peer) error { } if !fork.RequiredHash.IsEmpty() { // Request the peer's fork block header for extra-dat - if err := p.RequestHeadersByNumber(fork.Block.Uint64(), 1, 0, false); err != nil { + if err := p.RequestHeadersByNumber(fork.Block.Uint64(), 1, 0, false); err != nil && err != core.ErrHashEmpty { glog.V(logger.Warn).Infof("%v: error requesting headers by number ", p) return err }