diff options
-rw-r--r-- | cmd/mist/assets/qml/views/transaction.qml | 2 | ||||
-rw-r--r-- | core/chain_manager.go | 2 | ||||
-rw-r--r-- | miner/worker.go | 21 |
3 files changed, 12 insertions, 13 deletions
diff --git a/cmd/mist/assets/qml/views/transaction.qml b/cmd/mist/assets/qml/views/transaction.qml index 62c762956..6637346b5 100644 --- a/cmd/mist/assets/qml/views/transaction.qml +++ b/cmd/mist/assets/qml/views/transaction.qml @@ -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) diff --git a/core/chain_manager.go b/core/chain_manager.go index 54f1ced8c..922d2a8d8 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -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}) } diff --git a/miner/worker.go b/miner/worker.go index 96c8bdd39..2b64f3210 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -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) |