aboutsummaryrefslogtreecommitdiffstats
path: root/rpc
diff options
context:
space:
mode:
authorJeffrey Wilcke <jeffrey@ethereum.org>2015-11-19 17:57:00 +0800
committerJeffrey Wilcke <jeffrey@ethereum.org>2015-11-19 17:57:00 +0800
commitae37a8013d5a348bdb21d4a66d5f462e0baf7cd8 (patch)
tree5ce6b23c32fc1f47cc688ac954b3d26d4eec9cad /rpc
parent23f42d9463e55fe86100b86c2ab0b7c95f181f91 (diff)
parenta1d9ef48c505ab4314ca8e3ee1fc272032da3034 (diff)
downloaddexon-ae37a8013d5a348bdb21d4a66d5f462e0baf7cd8.tar.gz
dexon-ae37a8013d5a348bdb21d4a66d5f462e0baf7cd8.tar.zst
dexon-ae37a8013d5a348bdb21d4a66d5f462e0baf7cd8.zip
Merge pull request #1917 from obscuren/validator-interface
core, eth, rpc: split out block validator and state processor
Diffstat (limited to 'rpc')
-rw-r--r--rpc/api/debug.go28
1 files changed, 24 insertions, 4 deletions
diff --git a/rpc/api/debug.go b/rpc/api/debug.go
index d2cbc7f19..a6faa335e 100644
--- a/rpc/api/debug.go
+++ b/rpc/api/debug.go
@@ -22,6 +22,7 @@ import (
"time"
"github.com/ethereum/ethash"
+ "github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/core/state"
"github.com/ethereum/go-ethereum/core/vm"
"github.com/ethereum/go-ethereum/eth"
@@ -166,11 +167,30 @@ func (self *debugApi) ProcessBlock(req *shared.Request) (interface{}, error) {
defer func() { vm.Debug = old }()
vm.Debug = true
- _, err := self.ethereum.BlockProcessor().RetryProcess(block)
- if err == nil {
- return true, nil
+ var (
+ blockchain = self.ethereum.BlockChain()
+ validator = blockchain.Validator()
+ processor = blockchain.Processor()
+ )
+
+ err := core.ValidateHeader(blockchain.AuxValidator(), block.Header(), blockchain.GetHeader(block.ParentHash()), true, false)
+ if err != nil {
+ return false, err
}
- return false, err
+ statedb, err := state.New(blockchain.GetBlock(block.ParentHash()).Root(), self.ethereum.ChainDb())
+ if err != nil {
+ return false, err
+ }
+ receipts, _, usedGas, err := processor.Process(block, statedb)
+ if err != nil {
+ return false, err
+ }
+ err = validator.ValidateState(block, blockchain.GetBlock(block.ParentHash()), statedb, receipts, usedGas)
+ if err != nil {
+ return false, err
+ }
+
+ return true, nil
}
func (self *debugApi) SeedHash(req *shared.Request) (interface{}, error) {