geth: added a `admin.debug.block` command which reprocess the block

This commit is contained in:
obscuren 2015-04-20 16:03:19 +02:00
parent 72d065d491
commit 76025cc424
1 changed files with 25 additions and 0 deletions

View File

@ -10,6 +10,7 @@ import (
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/state"
"github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/core/vm"
"github.com/ethereum/go-ethereum/logger/glog" "github.com/ethereum/go-ethereum/logger/glog"
"github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/rlp"
"github.com/ethereum/go-ethereum/rpc" "github.com/ethereum/go-ethereum/rpc"
@ -52,6 +53,7 @@ func (js *jsre) adminBindings() {
debug.Set("dumpBlock", js.dumpBlock) debug.Set("dumpBlock", js.dumpBlock)
debug.Set("getBlockRlp", js.getBlockRlp) debug.Set("getBlockRlp", js.getBlockRlp)
debug.Set("setHead", js.setHead) debug.Set("setHead", js.setHead)
debug.Set("block", js.debugBlock)
} }
func (js *jsre) getBlock(call otto.FunctionCall) (*types.Block, error) { func (js *jsre) getBlock(call otto.FunctionCall) (*types.Block, error) {
@ -72,6 +74,29 @@ func (js *jsre) getBlock(call otto.FunctionCall) (*types.Block, error) {
return nil, errors.New("requires block number or block hash as argument") return nil, errors.New("requires block number or block hash as argument")
} }
func (js *jsre) debugBlock(call otto.FunctionCall) otto.Value {
block, err := js.getBlock(call)
if err != nil {
fmt.Println(err)
return otto.UndefinedValue()
}
if block == nil {
fmt.Println("block not found")
return otto.UndefinedValue()
}
old := vm.Debug
vm.Debug = true
_, err = js.ethereum.BlockProcessor().RetryProcess(block)
if err != nil {
glog.Infoln(err)
}
vm.Debug = old
return otto.UndefinedValue()
}
func (js *jsre) setHead(call otto.FunctionCall) otto.Value { func (js *jsre) setHead(call otto.FunctionCall) otto.Value {
block, err := js.getBlock(call) block, err := js.getBlock(call)
if err != nil { if err != nil {