|
@@ -243,6 +243,15 @@ func (ethash *Ethash) verifyHeader(chain consensus.ChainReader, header, parent *
|
|
|
if expected.Cmp(header.Difficulty) != 0 {
|
|
if expected.Cmp(header.Difficulty) != 0 {
|
|
|
return fmt.Errorf("invalid difficulty: have %v, want %v", header.Difficulty, expected)
|
|
return fmt.Errorf("invalid difficulty: have %v, want %v", header.Difficulty, expected)
|
|
|
}
|
|
}
|
|
|
|
|
+ // Verify that the gas limit is <= 2^63-1
|
|
|
|
|
+ if header.GasLimit.Cmp(math.MaxBig63) > 0 {
|
|
|
|
|
+ return fmt.Errorf("invalid gasLimit: have %v, max %v", header.GasLimit, math.MaxBig63)
|
|
|
|
|
+ }
|
|
|
|
|
+ // Verify that the gasUsed is <= gasLimit
|
|
|
|
|
+ if header.GasUsed.Cmp(header.GasLimit) > 0 {
|
|
|
|
|
+ return fmt.Errorf("invalid gasUsed: have %v, gasLimit %v", header.GasUsed, header.GasLimit)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
// Verify that the gas limit remains within allowed bounds
|
|
// Verify that the gas limit remains within allowed bounds
|
|
|
diff := new(big.Int).Set(parent.GasLimit)
|
|
diff := new(big.Int).Set(parent.GasLimit)
|
|
|
diff = diff.Sub(diff, header.GasLimit)
|
|
diff = diff.Sub(diff, header.GasLimit)
|