fix missing EIP-799 extra range check in header validation

This commit is contained in:
jangko 2021-10-12 11:06:39 +07:00
parent 447deb29ff
commit 5c4c1784a0
No known key found for this signature in database
GPG Key ID: 31702AE10541E6B9
1 changed files with 12 additions and 4 deletions

View File

@ -145,6 +145,15 @@ proc validateSeal(hashCache: var EpochHashCache;
proc validateHeader(db: BaseChainDB; header, parentHeader: BlockHeader;
numTransactions: int; checkSealOK: bool;
hashCache: var EpochHashCache): Result[void,string] =
template inDAOExtraRange(blockNumber: BlockNumber): bool =
# EIP-799
# Blocks with block numbers in the range [1_920_000, 1_920_009]
# MUST have DAOForkBlockExtra
let DAOHigh = db.config.daoForkBlock + DAOForkExtraRange.u256
db.config.daoForkBlock <= blockNumber and
blockNumber < DAOHigh
if header.extraData.len > 32:
return err("BlockHeader.extraData larger than 32 bytes")
@ -160,10 +169,9 @@ proc validateHeader(db: BaseChainDB; header, parentHeader: BlockHeader;
if header.timestamp.toUnix <= parentHeader.timestamp.toUnix:
return err("timestamp must be strictly later than parent")
if db.config.daoForkSupport and
db.config.daoForkBlock <= header.blockNumber and
header.extraData != daoForkBlockExtraData:
return err("header extra data should be marked DAO")
if db.config.daoForkSupport and inDAOExtraRange(header.blockNumber):
if header.extraData != daoForkBlockExtraData:
return err("header extra data should be marked DAO")
let calcDiffc = db.config.calcDifficulty(header.timestamp, parentHeader)
if header.difficulty < calcDiffc: