wip
This commit is contained in:
parent
b26f5e0bb7
commit
770a0e7839
@ -78,6 +78,12 @@ func (js *jsre) adminBindings() {
|
|||||||
miner.Set("stopAutoDAG", js.stopAutoDAG)
|
miner.Set("stopAutoDAG", js.stopAutoDAG)
|
||||||
miner.Set("makeDAG", js.makeDAG)
|
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{}{})
|
admin.Set("debug", struct{}{})
|
||||||
t, _ = admin.Get("debug")
|
t, _ = admin.Get("debug")
|
||||||
debug := t.Object()
|
debug := t.Object()
|
||||||
@ -89,6 +95,7 @@ func (js *jsre) adminBindings() {
|
|||||||
debug.Set("setHead", js.setHead)
|
debug.Set("setHead", js.setHead)
|
||||||
debug.Set("processBlock", js.debugBlock)
|
debug.Set("processBlock", js.debugBlock)
|
||||||
debug.Set("seedhash", js.seedHash)
|
debug.Set("seedhash", js.seedHash)
|
||||||
|
debug.Set("insertBlock", js.insertBlockRlp)
|
||||||
// undocumented temporary
|
// undocumented temporary
|
||||||
debug.Set("waitForBlocks", js.waitForBlocks)
|
debug.Set("waitForBlocks", js.waitForBlocks)
|
||||||
}
|
}
|
||||||
@ -140,6 +147,32 @@ func (js *jsre) seedHash(call otto.FunctionCall) otto.Value {
|
|||||||
return otto.UndefinedValue()
|
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 {
|
func (js *jsre) pendingTransactions(call otto.FunctionCall) otto.Value {
|
||||||
txs := js.ethereum.TxPool().GetTransactions()
|
txs := js.ethereum.TxPool().GetTransactions()
|
||||||
|
|
||||||
@ -237,17 +270,48 @@ func (js *jsre) debugBlock(call otto.FunctionCall) otto.Value {
|
|||||||
return otto.UndefinedValue()
|
return otto.UndefinedValue()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tstart := time.Now()
|
||||||
|
|
||||||
old := vm.Debug
|
old := vm.Debug
|
||||||
vm.Debug = true
|
vm.Debug = true
|
||||||
_, err = js.ethereum.BlockProcessor().RetryProcess(block)
|
_, err = js.ethereum.BlockProcessor().RetryProcess(block)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
|
r, _ := call.Otto.ToValue(map[string]interface{}{"success": false, "time": time.Since(tstart).Seconds()})
|
||||||
|
return r
|
||||||
}
|
}
|
||||||
vm.Debug = old
|
vm.Debug = old
|
||||||
|
|
||||||
fmt.Println("ok")
|
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()
|
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 {
|
func (js *jsre) setHead(call otto.FunctionCall) otto.Value {
|
||||||
block, err := js.getBlock(call)
|
block, err := js.getBlock(call)
|
||||||
|
@ -178,7 +178,6 @@ func (sm *BlockProcessor) Process(block *types.Block) (logs state.Logs, err erro
|
|||||||
return nil, ParentError(header.ParentHash)
|
return nil, ParentError(header.ParentHash)
|
||||||
}
|
}
|
||||||
parent := sm.bc.GetBlock(header.ParentHash)
|
parent := sm.bc.GetBlock(header.ParentHash)
|
||||||
|
|
||||||
return sm.processWithParent(block, parent)
|
return sm.processWithParent(block, parent)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -254,14 +253,9 @@ func (sm *BlockProcessor) processWithParent(block, parent *types.Block) (logs st
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calculate the td for this block
|
|
||||||
//td = CalculateTD(block, parent)
|
|
||||||
// Sync the current block's state to the database
|
// Sync the current block's state to the database
|
||||||
state.Sync()
|
state.Sync()
|
||||||
|
|
||||||
// Remove transactions from the pool
|
|
||||||
sm.txpool.RemoveTransactions(block.Transactions())
|
|
||||||
|
|
||||||
// This puts transactions in a extra db for rpc
|
// This puts transactions in a extra db for rpc
|
||||||
for i, tx := range block.Transactions() {
|
for i, tx := range block.Transactions() {
|
||||||
putTx(sm.extraDb, tx, block, uint64(i))
|
putTx(sm.extraDb, tx, block, uint64(i))
|
||||||
|
@ -560,6 +560,7 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) {
|
|||||||
defer close(nonceQuit)
|
defer close(nonceQuit)
|
||||||
|
|
||||||
for i, block := range chain {
|
for i, block := range chain {
|
||||||
|
bstart := time.Now()
|
||||||
// Wait for block i's nonce to be verified before processing
|
// Wait for block i's nonce to be verified before processing
|
||||||
// its state transition.
|
// its state transition.
|
||||||
for nonceChecked[i] {
|
for nonceChecked[i] {
|
||||||
@ -642,11 +643,11 @@ func (self *ChainManager) InsertChain(chain types.Blocks) (int, error) {
|
|||||||
queueEvent.canonicalCount++
|
queueEvent.canonicalCount++
|
||||||
|
|
||||||
if glog.V(logger.Debug) {
|
if glog.V(logger.Debug) {
|
||||||
glog.Infof("[%v] inserted block #%d (%d TXs %d UNCs) (%x...)\n", time.Now().UnixNano(), block.Number(), len(block.Transactions()), len(block.Uncles()), block.Hash().Bytes()[0:4])
|
glog.Infof("[%v] inserted block #%d (%d TXs %d UNCs) (%x...). Took %v\n", time.Now().UnixNano(), block.Number(), len(block.Transactions()), len(block.Uncles()), block.Hash().Bytes()[0:4], time.Since(bstart))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if glog.V(logger.Detail) {
|
if glog.V(logger.Detail) {
|
||||||
glog.Infof("inserted forked block #%d (TD=%v) (%d TXs %d UNCs) (%x...)\n", block.Number(), block.Difficulty(), len(block.Transactions()), len(block.Uncles()), block.Hash().Bytes()[0:4])
|
glog.Infof("inserted forked block #%d (TD=%v) (%d TXs %d UNCs) (%x...). Took %v\n", block.Number(), block.Difficulty(), len(block.Transactions()), len(block.Uncles()), block.Hash().Bytes()[0:4], time.Since(bstart))
|
||||||
}
|
}
|
||||||
|
|
||||||
queue[i] = ChainSideEvent{block, logs}
|
queue[i] = ChainSideEvent{block, logs}
|
||||||
|
Loading…
Reference in New Issue
Block a user