[NOD-1561] Add TestCheckParentsIncest and fix validation order (#1143)

This commit is contained in:
Ori Newman 2020-11-23 08:27:44 -08:00 committed by GitHub
parent 8264369c81
commit 96d9e5800f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 77 additions and 7 deletions

View File

@ -16,11 +16,6 @@ func (v *blockValidator) ValidateHeaderInContext(blockHash *externalapi.DomainHa
return err
}
err = v.checkParentsIncest(header)
if err != nil {
return err
}
isHeadersOnlyBlock, err := v.isHeadersOnlyBlock(blockHash)
if err != nil {
return err

View File

@ -81,3 +81,73 @@ func TestValidateMedianTime(t *testing.T) {
addBlock(pastMedianTime(tipHash)-1, []*externalapi.DomainHash{tipHash}, ruleerrors.ErrTimeTooOld)
})
}
func TestCheckParentsIncest(t *testing.T) {
testutils.ForAllNets(t, true, func(t *testing.T, params *dagconfig.Params) {
factory := consensus.NewFactory()
tc, teardown, err := factory.NewTestConsensus(params, "TestCheckParentsIncest")
if err != nil {
t.Fatalf("Error setting up consensus: %+v", err)
}
defer teardown()
a, err := tc.AddBlock([]*externalapi.DomainHash{params.GenesisHash}, nil, nil)
if err != nil {
t.Fatalf("AddBlock: %+v", err)
}
b, err := tc.AddBlock([]*externalapi.DomainHash{a}, nil, nil)
if err != nil {
t.Fatalf("AddBlock: %+v", err)
}
c, err := tc.AddBlock([]*externalapi.DomainHash{params.GenesisHash}, nil, nil)
if err != nil {
t.Fatalf("AddBlock: %+v", err)
}
directParentsRelationBlock := &externalapi.DomainBlock{
Header: &externalapi.DomainBlockHeader{
Version: 0,
ParentHashes: []*externalapi.DomainHash{a, b},
HashMerkleRoot: externalapi.DomainHash{},
AcceptedIDMerkleRoot: externalapi.DomainHash{},
UTXOCommitment: externalapi.DomainHash{},
TimeInMilliseconds: 0,
Bits: 0,
Nonce: 0,
},
Transactions: nil,
}
err = tc.ValidateAndInsertBlock(directParentsRelationBlock)
if !errors.Is(err, ruleerrors.ErrInvalidParentsRelation) {
t.Fatalf("unexpected error %+v", err)
}
indirectParentsRelationBlock := &externalapi.DomainBlock{
Header: &externalapi.DomainBlockHeader{
Version: 0,
ParentHashes: []*externalapi.DomainHash{params.GenesisHash, b},
HashMerkleRoot: externalapi.DomainHash{},
AcceptedIDMerkleRoot: externalapi.DomainHash{},
UTXOCommitment: externalapi.DomainHash{},
TimeInMilliseconds: 0,
Bits: 0,
Nonce: 0,
},
Transactions: nil,
}
err = tc.ValidateAndInsertBlock(indirectParentsRelationBlock)
if !errors.Is(err, ruleerrors.ErrInvalidParentsRelation) {
t.Fatalf("unexpected error %+v", err)
}
// Try to add block with unrelated parents
_, err = tc.AddBlock([]*externalapi.DomainHash{b, c}, nil, nil)
if err != nil {
t.Fatalf("AddBlock: %s", err)
}
})
}

View File

@ -15,12 +15,17 @@ func (v *blockValidator) ValidateProofOfWorkAndDifficulty(blockHash *externalapi
return err
}
err = v.checkProofOfWork(header)
err = v.checkParentsExist(header)
if err != nil {
return err
}
err = v.checkParentsExist(header)
err = v.checkParentsIncest(header)
if err != nil {
return err
}
err = v.checkProofOfWork(header)
if err != nil {
return err
}