|
|
|
@ -79,7 +79,10 @@ func (beacon *Beacon) Author(header *types.Header) (common.Address, error) { |
|
|
|
|
// VerifyHeader checks whether a header conforms to the consensus rules of the
|
|
|
|
|
// stock Ethereum consensus engine.
|
|
|
|
|
func (beacon *Beacon) VerifyHeader(chain consensus.ChainHeaderReader, header *types.Header, seal bool) error { |
|
|
|
|
reached, _ := IsTTDReached(chain, header.ParentHash, header.Number.Uint64()-1) |
|
|
|
|
reached, err := IsTTDReached(chain, header.ParentHash, header.Number.Uint64()-1) |
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
if !reached { |
|
|
|
|
return beacon.ethone.VerifyHeader(chain, header, seal) |
|
|
|
|
} |
|
|
|
@ -116,11 +119,14 @@ func (beacon *Beacon) VerifyHeaders(chain consensus.ChainHeaderReader, headers [ |
|
|
|
|
|
|
|
|
|
if len(preHeaders) == 0 { |
|
|
|
|
// All the headers are pos headers. Verify that the parent block reached total terminal difficulty.
|
|
|
|
|
if reached, _ := IsTTDReached(chain, headers[0].ParentHash, headers[0].Number.Uint64()-1); !reached { |
|
|
|
|
if reached, err := IsTTDReached(chain, headers[0].ParentHash, headers[0].Number.Uint64()-1); !reached { |
|
|
|
|
// TTD not reached for the first block, mark subsequent with invalid terminal block
|
|
|
|
|
if err == nil { |
|
|
|
|
err = consensus.ErrInvalidTerminalBlock |
|
|
|
|
} |
|
|
|
|
results := make(chan error, len(headers)) |
|
|
|
|
for i := 0; i < len(headers); i++ { |
|
|
|
|
results <- consensus.ErrInvalidTerminalBlock |
|
|
|
|
results <- err |
|
|
|
|
} |
|
|
|
|
return make(chan struct{}), results |
|
|
|
|
} |
|
|
|
|