diff --git a/consensus/XDPoS/XDPoS.go b/consensus/XDPoS/XDPoS.go index c10c564df9..5d0d102dd3 100644 --- a/consensus/XDPoS/XDPoS.go +++ b/consensus/XDPoS/XDPoS.go @@ -203,27 +203,33 @@ func (x *XDPoS) VerifyHeader(chain consensus.ChainReader, header *types.Header, // method returns a quit channel to abort the operations and a results channel to // retrieve the async verifications (the order is that of the input slice). func (x *XDPoS) VerifyHeaders(chain consensus.ChainReader, headers []*types.Header, fullVerifies []bool) (chan<- struct{}, <-chan error) { + abort := make(chan struct{}) results := make(chan error, len(headers)) // Split the headers list into v1 and v2 buckets var v1headers []*types.Header var v2headers []*types.Header + var v1fullVerifies []bool + var v2fullVerifies []bool - for _, header := range headers { + for i, header := range headers { switch x.config.BlockConsensusVersion(header.Number) { case params.ConsensusEngineVersion2: v2headers = append(v2headers, header) + v2fullVerifies = append(v2fullVerifies, fullVerifies[i]) default: // Default "v1" v1headers = append(v1headers, header) + v1fullVerifies = append(v1fullVerifies, fullVerifies[i]) } } + if v1headers != nil { - x.EngineV1.VerifyHeaders(chain, v1headers, fullVerifies, abort, results) + x.EngineV1.VerifyHeaders(chain, v1headers, v1fullVerifies, abort, results) } if v2headers != nil { - x.EngineV2.VerifyHeaders(chain, v2headers, fullVerifies, abort, results) + x.EngineV2.VerifyHeaders(chain, v2headers, v2fullVerifies, abort, results) } return abort, results