diff options
author | Jeffrey Wilcke <jeffrey@ethereum.org> | 2015-11-19 17:57:00 +0800 |
---|---|---|
committer | Jeffrey Wilcke <jeffrey@ethereum.org> | 2015-11-19 17:57:00 +0800 |
commit | ae37a8013d5a348bdb21d4a66d5f462e0baf7cd8 (patch) | |
tree | 5ce6b23c32fc1f47cc688ac954b3d26d4eec9cad /rpc | |
parent | 23f42d9463e55fe86100b86c2ab0b7c95f181f91 (diff) | |
parent | a1d9ef48c505ab4314ca8e3ee1fc272032da3034 (diff) | |
download | dexon-ae37a8013d5a348bdb21d4a66d5f462e0baf7cd8.tar dexon-ae37a8013d5a348bdb21d4a66d5f462e0baf7cd8.tar.gz dexon-ae37a8013d5a348bdb21d4a66d5f462e0baf7cd8.tar.bz2 dexon-ae37a8013d5a348bdb21d4a66d5f462e0baf7cd8.tar.lz dexon-ae37a8013d5a348bdb21d4a66d5f462e0baf7cd8.tar.xz 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.go | 28 |
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) { |