aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJimmy Hu <jimmy.hu@dexon.org>2019-04-20 18:38:05 +0800
committerJimmy Hu <jimmy.hu@dexon.org>2019-04-21 00:03:08 +0800
commit71ed05874170d452e79deb01ec4989a15cd56818 (patch)
treed595d1c0b8151dca38c491f9e71dae6d48dc6187
parent12936254a5c54f788ba8963abb54da2e350d5f55 (diff)
downloaddexon-71ed05874170d452e79deb01ec4989a15cd56818.tar
dexon-71ed05874170d452e79deb01ec4989a15cd56818.tar.gz
dexon-71ed05874170d452e79deb01ec4989a15cd56818.tar.bz2
dexon-71ed05874170d452e79deb01ec4989a15cd56818.tar.lz
dexon-71ed05874170d452e79deb01ec4989a15cd56818.tar.xz
dexon-71ed05874170d452e79deb01ec4989a15cd56818.tar.zst
dexon-71ed05874170d452e79deb01ec4989a15cd56818.zip
core: only verify the last tsig of header chain (#380)
-rw-r--r--core/headerchain.go19
1 files changed, 13 insertions, 6 deletions
diff --git a/core/headerchain.go b/core/headerchain.go
index b6aa66b60..3db6caeeb 100644
--- a/core/headerchain.go
+++ b/core/headerchain.go
@@ -411,6 +411,11 @@ func (hc *HeaderChain) ValidateDexonHeaderChain(chain []*types.HeaderWithGovStat
}
}
+ // If the last TSig pass the verification, we don't need to verify others.
+ verifyTSig := false
+ if err := hc.verifyDexonHeader(chain[len(chain)-1].Header, gov, verifierCache, true); err != nil {
+ verifyTSig = true
+ }
// Iterate over the headers and ensure they all check out
for i, header := range chain {
// If the chain is terminating, stop processing blocks
@@ -426,7 +431,7 @@ func (hc *HeaderChain) ValidateDexonHeaderChain(chain []*types.HeaderWithGovStat
}
}
- if err := hc.verifyDexonHeader(header.Header, gov, verifierCache); err != nil {
+ if err := hc.verifyDexonHeader(header.Header, gov, verifierCache, verifyTSig); err != nil {
return i, err
}
@@ -467,7 +472,7 @@ func (hc *HeaderChain) VerifyDexonHeader(header *types.Header,
return consensus.ErrUnknownAncestor
}
- if err := hc.verifyDexonHeader(header, gov, verifierCache); err != nil {
+ if err := hc.verifyDexonHeader(header, gov, verifierCache, true); err != nil {
return err
}
@@ -494,7 +499,7 @@ func (hc *HeaderChain) VerifyDexonHeader(header *types.Header,
func (hc *HeaderChain) verifyDexonHeader(header *types.Header,
gov dexcon.GovernanceStateFetcher,
- verifierCache *dexCore.TSigVerifierCache) error {
+ verifierCache *dexCore.TSigVerifierCache, verifyTSig bool) error {
// If the header is a banned one, straight out abort
if BadHashes[header.Hash()] {
@@ -513,9 +518,11 @@ func (hc *HeaderChain) verifyDexonHeader(header *types.Header,
header.Number.Uint64(), err)
}
- if err := hc.verifyTSig(&coreBlock, verifierCache); err != nil {
- log.Debug("verify header sig fail, number=%d, err=%v",
- header.Number.Uint64(), err)
+ if verifyTSig {
+ if err := hc.verifyTSig(&coreBlock, verifierCache); err != nil {
+ log.Debug("verify header sig fail, number=%d, err=%v",
+ header.Number.Uint64(), err)
+ }
}
gs := gov.GetStateForConfigAtRound(header.Round)