diff --git a/core/chain_manager.go b/core/chain_manager.go index 7fed7b8b1..101d0568d 100644 --- a/core/chain_manager.go +++ b/core/chain_manager.go @@ -449,6 +449,8 @@ func (self *ChainManager) InsertChain(chain types.Blocks) error { */ self.setTransState(state.New(block.Root(), self.stateDb)) + self.setTxState(state.New(block.Root(), self.stateDb)) + queue[i] = ChainEvent{block} queueEvent.canonicalCount++ } else { diff --git a/core/error.go b/core/error.go index 04e40646c..69e320eb0 100644 --- a/core/error.go +++ b/core/error.go @@ -78,7 +78,7 @@ func (err *NonceErr) Error() string { } func NonceError(is, exp uint64) *NonceErr { - return &NonceErr{Message: fmt.Sprintf("Nonce err. Is %d, expected %d", is, exp), Is: is, Exp: exp} + return &NonceErr{Message: fmt.Sprintf("Transaction w/ invalid nonce (%d / %d)", is, exp), Is: is, Exp: exp} } func IsNonceErr(err error) bool { diff --git a/core/state_transition.go b/core/state_transition.go index ee99ec7aa..f49aed874 100644 --- a/core/state_transition.go +++ b/core/state_transition.go @@ -148,6 +148,9 @@ func (self *StateTransition) preCheck() (err error) { // Pre-pay gas / Buy gas of the coinbase account if err = self.BuyGas(); err != nil { + if state.IsGasLimitErr(err) { + return err + } return InvalidTxError(err) } diff --git a/miner/worker.go b/miner/worker.go index 9bcea1539..a39a0b43b 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -212,6 +212,7 @@ gasLimit: fallthrough case core.IsInvalidTxErr(err): // Remove invalid transactions + self.chain.TxState().RemoveNonce(tx.From(), tx.Nonce()) remove = append(remove, tx) case state.IsGasLimitErr(err): // Break on gas limit