|
|
|
@ -1,6 +1,7 @@ |
|
|
|
|
package main |
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
|
"errors" |
|
|
|
|
"fmt" |
|
|
|
|
"os" |
|
|
|
|
"time" |
|
|
|
@ -50,15 +51,10 @@ func (js *jsre) adminBindings() { |
|
|
|
|
debug.Set("printBlock", js.printBlock) |
|
|
|
|
debug.Set("dumpBlock", js.dumpBlock) |
|
|
|
|
debug.Set("getBlockRlp", js.getBlockRlp) |
|
|
|
|
debug.Set("setHead", js.setHead) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (js *jsre) downloadProgress(call otto.FunctionCall) otto.Value { |
|
|
|
|
current, max := js.ethereum.Downloader().Stats() |
|
|
|
|
|
|
|
|
|
return js.re.ToVal(fmt.Sprintf("%d/%d", current, max)) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (js *jsre) getBlockRlp(call otto.FunctionCall) otto.Value { |
|
|
|
|
func (js *jsre) getBlock(call otto.FunctionCall) (*types.Block, error) { |
|
|
|
|
var block *types.Block |
|
|
|
|
if len(call.ArgumentList) > 0 { |
|
|
|
|
if call.Argument(0).IsNumber() { |
|
|
|
@ -68,12 +64,43 @@ func (js *jsre) getBlockRlp(call otto.FunctionCall) otto.Value { |
|
|
|
|
hash, _ := call.Argument(0).ToString() |
|
|
|
|
block = js.ethereum.ChainManager().GetBlock(common.HexToHash(hash)) |
|
|
|
|
} else { |
|
|
|
|
fmt.Println("invalid argument for dump. Either hex string or number") |
|
|
|
|
return nil, errors.New("invalid argument for dump. Either hex string or number") |
|
|
|
|
} |
|
|
|
|
return block, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} else { |
|
|
|
|
block = js.ethereum.ChainManager().CurrentBlock() |
|
|
|
|
return nil, errors.New("requires block number or block hash as argument") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (js *jsre) setHead(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() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
js.ethereum.ChainManager().SetHead(block) |
|
|
|
|
return otto.UndefinedValue() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (js *jsre) downloadProgress(call otto.FunctionCall) otto.Value { |
|
|
|
|
current, max := js.ethereum.Downloader().Stats() |
|
|
|
|
|
|
|
|
|
return js.re.ToVal(fmt.Sprintf("%d/%d", current, max)) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (js *jsre) getBlockRlp(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() |
|
|
|
|