aboutsummaryrefslogtreecommitdiffstats
path: root/core/block_validator.go
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2016-07-08 23:48:17 +0800
committerPéter Szilágyi <peterke@gmail.com>2016-07-15 21:52:55 +0800
commita87089fd2dc08a69a4a4f1ef93db9a2871d819a3 (patch)
treeb1634faefc24ee8b80b9ad9c06ac8df7f409558b /core/block_validator.go
parent1e24c2e4f428c85c2f83272af2696469cb8f5bed (diff)
downloadgo-tangerine-a87089fd2dc08a69a4a4f1ef93db9a2871d819a3.tar
go-tangerine-a87089fd2dc08a69a4a4f1ef93db9a2871d819a3.tar.gz
go-tangerine-a87089fd2dc08a69a4a4f1ef93db9a2871d819a3.tar.bz2
go-tangerine-a87089fd2dc08a69a4a4f1ef93db9a2871d819a3.tar.lz
go-tangerine-a87089fd2dc08a69a4a4f1ef93db9a2871d819a3.tar.xz
go-tangerine-a87089fd2dc08a69a4a4f1ef93db9a2871d819a3.tar.zst
go-tangerine-a87089fd2dc08a69a4a4f1ef93db9a2871d819a3.zip
cmd, core, miner: add extradata validation to consensus rules
Diffstat (limited to 'core/block_validator.go')
-rw-r--r--core/block_validator.go21
1 files changed, 21 insertions, 0 deletions
diff --git a/core/block_validator.go b/core/block_validator.go
index c3f959324..73d581328 100644
--- a/core/block_validator.go
+++ b/core/block_validator.go
@@ -17,6 +17,7 @@
package core
import (
+ "bytes"
"fmt"
"math/big"
"time"
@@ -247,6 +248,26 @@ func ValidateHeader(config *ChainConfig, pow pow.PoW, header *types.Header, pare
return &BlockNonceErr{header.Number, header.Hash(), header.Nonce.Uint64()}
}
}
+ // DAO hard-fork extension to the header validity: a) if the node is no-fork,
+ // do not accept blocks in the [fork, fork+10) range with the fork specific
+ // extra-data set; b) if the node is pro-fork, require blocks in the specific
+ // range to have the unique extra-data set.
+ if daoBlock := config.DAOForkBlock; daoBlock != nil {
+ // Check whether the block is among the fork extra-override range
+ limit := new(big.Int).Add(daoBlock, params.DAOForkExtraRange)
+ if daoBlock.Cmp(header.Number) <= 0 && header.Number.Cmp(limit) < 0 {
+ // Depending whether we support or oppose the fork, verrift the extra-data contents
+ if config.DAOForkSupport {
+ if bytes.Compare(header.Extra, params.DAOForkBlockExtra) != 0 {
+ return ValidationError("DAO pro-fork bad block extra-data: 0x%x", header.Extra)
+ }
+ } else {
+ if bytes.Compare(header.Extra, params.DAOForkBlockExtra) == 0 {
+ return ValidationError("DAO no-fork bad block extra-data: 0x%x", header.Extra)
+ }
+ }
+ }
+ }
return nil
}