forked from TrueCloudLab/neoneo-go
core: don't reverify stale headers in addHeader
During networked synchronization we expect there to be a lot of duplicate headers received and it makes no sense for us reverifying them.
This commit is contained in:
parent
3282c6ed41
commit
c3e73c5b7d
2 changed files with 15 additions and 2 deletions
|
@ -333,17 +333,30 @@ func (bc *Blockchain) AddBlock(block *block.Block) error {
|
|||
}
|
||||
|
||||
// AddHeaders processes the given headers and add them to the
|
||||
// HeaderHashList.
|
||||
// HeaderHashList. It expects headers to be sorted by index.
|
||||
func (bc *Blockchain) AddHeaders(headers ...*block.Header) error {
|
||||
return bc.addHeaders(bc.config.VerifyBlocks, headers...)
|
||||
}
|
||||
|
||||
// addHeaders is an internal implementation of AddHeaders (`verify` parameter
|
||||
// tells it to verify or not verify given headers).
|
||||
func (bc *Blockchain) addHeaders(verify bool, headers ...*block.Header) (err error) {
|
||||
var (
|
||||
start = time.Now()
|
||||
batch = bc.dao.store.Batch()
|
||||
)
|
||||
|
||||
if len(headers) > 0 {
|
||||
var i int
|
||||
curHeight := bc.HeaderHeight()
|
||||
for i = range headers {
|
||||
if headers[i].Index > curHeight {
|
||||
break
|
||||
}
|
||||
}
|
||||
headers = headers[i:]
|
||||
}
|
||||
|
||||
if len(headers) == 0 {
|
||||
return nil
|
||||
} else if verify {
|
||||
|
|
|
@ -30,7 +30,7 @@ func TestAddHeaders(t *testing.T) {
|
|||
assert.Equal(t, h3.Hash(), bc.CurrentHeaderHash())
|
||||
|
||||
// Add them again, they should not be added.
|
||||
require.Error(t, bc.AddHeaders(h3, h2, h1))
|
||||
require.NoError(t, bc.AddHeaders(h3, h2, h1))
|
||||
|
||||
assert.Equal(t, h3.Index, bc.HeaderHeight())
|
||||
assert.Equal(t, uint32(0), bc.BlockHeight())
|
||||
|
|
Loading…
Reference in a new issue