|
|
|
@ -78,6 +78,12 @@ func (js *jsre) adminBindings() { |
|
|
|
|
miner.Set("stopAutoDAG", js.stopAutoDAG) |
|
|
|
|
miner.Set("makeDAG", js.makeDAG) |
|
|
|
|
|
|
|
|
|
admin.Set("txPool", struct{}{}) |
|
|
|
|
t, _ = admin.Get("txPool") |
|
|
|
|
txPool := t.Object() |
|
|
|
|
txPool.Set("pending", js.allPendingTransactions) |
|
|
|
|
txPool.Set("queued", js.allQueuedTransactions) |
|
|
|
|
|
|
|
|
|
admin.Set("debug", struct{}{}) |
|
|
|
|
t, _ = admin.Get("debug") |
|
|
|
|
debug := t.Object() |
|
|
|
@ -89,6 +95,7 @@ func (js *jsre) adminBindings() { |
|
|
|
|
debug.Set("setHead", js.setHead) |
|
|
|
|
debug.Set("processBlock", js.debugBlock) |
|
|
|
|
debug.Set("seedhash", js.seedHash) |
|
|
|
|
debug.Set("insertBlock", js.insertBlockRlp) |
|
|
|
|
// undocumented temporary
|
|
|
|
|
debug.Set("waitForBlocks", js.waitForBlocks) |
|
|
|
|
} |
|
|
|
@ -140,6 +147,32 @@ func (js *jsre) seedHash(call otto.FunctionCall) otto.Value { |
|
|
|
|
return otto.UndefinedValue() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (js *jsre) allPendingTransactions(call otto.FunctionCall) otto.Value { |
|
|
|
|
txs := js.ethereum.TxPool().GetTransactions() |
|
|
|
|
|
|
|
|
|
ltxs := make([]*tx, len(txs)) |
|
|
|
|
for i, tx := range txs { |
|
|
|
|
// no need to check err
|
|
|
|
|
ltxs[i] = newTx(tx) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
v, _ := call.Otto.ToValue(ltxs) |
|
|
|
|
return v |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (js *jsre) allQueuedTransactions(call otto.FunctionCall) otto.Value { |
|
|
|
|
txs := js.ethereum.TxPool().GetQueuedTransactions() |
|
|
|
|
|
|
|
|
|
ltxs := make([]*tx, len(txs)) |
|
|
|
|
for i, tx := range txs { |
|
|
|
|
// no need to check err
|
|
|
|
|
ltxs[i] = newTx(tx) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
v, _ := call.Otto.ToValue(ltxs) |
|
|
|
|
return v |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (js *jsre) pendingTransactions(call otto.FunctionCall) otto.Value { |
|
|
|
|
txs := js.ethereum.TxPool().GetTransactions() |
|
|
|
|
|
|
|
|
@ -237,16 +270,47 @@ func (js *jsre) debugBlock(call otto.FunctionCall) otto.Value { |
|
|
|
|
return otto.UndefinedValue() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
tstart := time.Now() |
|
|
|
|
|
|
|
|
|
old := vm.Debug |
|
|
|
|
vm.Debug = true |
|
|
|
|
_, err = js.ethereum.BlockProcessor().RetryProcess(block) |
|
|
|
|
if err != nil { |
|
|
|
|
fmt.Println(err) |
|
|
|
|
r, _ := call.Otto.ToValue(map[string]interface{}{"success": false, "time": time.Since(tstart).Seconds()}) |
|
|
|
|
return r |
|
|
|
|
} |
|
|
|
|
vm.Debug = old |
|
|
|
|
|
|
|
|
|
fmt.Println("ok") |
|
|
|
|
return otto.UndefinedValue() |
|
|
|
|
r, _ := call.Otto.ToValue(map[string]interface{}{"success": true, "time": time.Since(tstart).Seconds()}) |
|
|
|
|
return r |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (js *jsre) insertBlockRlp(call otto.FunctionCall) otto.Value { |
|
|
|
|
tstart := time.Now() |
|
|
|
|
|
|
|
|
|
var block types.Block |
|
|
|
|
if call.Argument(0).IsString() { |
|
|
|
|
blockRlp, _ := call.Argument(0).ToString() |
|
|
|
|
err := rlp.DecodeBytes(common.Hex2Bytes(blockRlp), &block) |
|
|
|
|
if err != nil { |
|
|
|
|
fmt.Println(err) |
|
|
|
|
return otto.UndefinedValue() |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
old := vm.Debug |
|
|
|
|
vm.Debug = true |
|
|
|
|
_, err := js.ethereum.BlockProcessor().RetryProcess(&block) |
|
|
|
|
if err != nil { |
|
|
|
|
fmt.Println(err) |
|
|
|
|
r, _ := call.Otto.ToValue(map[string]interface{}{"success": false, "time": time.Since(tstart).Seconds()}) |
|
|
|
|
return r |
|
|
|
|
} |
|
|
|
|
vm.Debug = old |
|
|
|
|
|
|
|
|
|
r, _ := call.Otto.ToValue(map[string]interface{}{"success": true, "time": time.Since(tstart).Seconds()}) |
|
|
|
|
return r |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (js *jsre) setHead(call otto.FunctionCall) otto.Value { |
|
|
|
|