Resolved some bugs in the miner
* TODO nonce error sometimes persists * Fixed mining on wrong blocks * Fixed state error & receipt fail
This commit is contained in:
parent
c924a841c7
commit
2c3a014f03
@ -177,7 +177,7 @@ Rectangle {
|
||||
mainContractColumn.state = "ERROR"
|
||||
} else {
|
||||
txResult.text = "Your transaction has been submitted:\n"
|
||||
txOutput.text = res[0].address
|
||||
txOutput.text = res.toString()
|
||||
mainContractColumn.state = "DONE"
|
||||
|
||||
console.log(res)
|
||||
|
@ -392,7 +392,7 @@ func (self *ChainManager) InsertChain(chain types.Blocks) error {
|
||||
|
||||
self.setTotalDifficulty(td)
|
||||
self.insert(block)
|
||||
self.transState = state.New(cblock.Root(), self.db) //state.New(cblock.Trie().Copy())
|
||||
self.transState = state.New(cblock.Root(), self.db)
|
||||
|
||||
self.eventMux.Post(ChainEvent{block, td})
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ import (
|
||||
"fmt"
|
||||
"math/big"
|
||||
"sort"
|
||||
"sync"
|
||||
|
||||
"github.com/ethereum/go-ethereum/core"
|
||||
"github.com/ethereum/go-ethereum/core/types"
|
||||
@ -55,6 +56,7 @@ type Agent interface {
|
||||
}
|
||||
|
||||
type worker struct {
|
||||
mu sync.Mutex
|
||||
agents []Agent
|
||||
recv chan Work
|
||||
mux *event.TypeMux
|
||||
@ -115,9 +117,7 @@ out:
|
||||
select {
|
||||
case event := <-events.Chan():
|
||||
switch event.(type) {
|
||||
case core.ChainEvent:
|
||||
self.commitNewWork()
|
||||
case core.TxPreEvent:
|
||||
case core.ChainEvent, core.TxPreEvent:
|
||||
self.commitNewWork()
|
||||
}
|
||||
case <-self.quit:
|
||||
@ -163,6 +163,9 @@ func (self *worker) push() {
|
||||
}
|
||||
|
||||
func (self *worker) commitNewWork() {
|
||||
self.mu.Lock()
|
||||
defer self.mu.Unlock()
|
||||
|
||||
self.current = env(self.chain.NewBlock(self.coinbase), self.eth)
|
||||
parent := self.chain.GetBlock(self.current.block.ParentHash())
|
||||
self.current.coinbase.SetGasPool(core.CalcGasLimit(parent, self.current.block))
|
||||
@ -176,12 +179,11 @@ func (self *worker) commitNewWork() {
|
||||
err := self.commitTransaction(tx)
|
||||
switch {
|
||||
case core.IsNonceErr(err):
|
||||
// Remove invalid transactions
|
||||
remove = append(remove, tx)
|
||||
case core.IsGasLimitErr(err):
|
||||
// Break on gas limit
|
||||
break
|
||||
default:
|
||||
remove = append(remove, tx)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
@ -227,16 +229,13 @@ func (self *worker) commitUncle(uncle *types.Header) error {
|
||||
|
||||
func (self *worker) commitTransaction(tx *types.Transaction) error {
|
||||
snapshot := self.current.state.Copy()
|
||||
receipt, txGas, err := self.proc.ApplyTransaction(self.current.coinbase, self.current.state, self.current.block, tx, self.current.totalUsedGas, true)
|
||||
if err != nil {
|
||||
if core.IsNonceErr(err) || core.IsGasLimitErr(err) {
|
||||
self.current.state.Set(snapshot)
|
||||
}
|
||||
receipt, _, err := self.proc.ApplyTransaction(self.current.coinbase, self.current.state, self.current.block, tx, self.current.totalUsedGas, true)
|
||||
if err != nil && (core.IsNonceErr(err) || core.IsGasLimitErr(err)) {
|
||||
self.current.state.Set(snapshot)
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
self.current.totalUsedGas.Add(self.current.totalUsedGas, txGas)
|
||||
self.current.block.AddTransaction(tx)
|
||||
self.current.block.AddReceipt(receipt)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user