aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2014-05-14 22:29:34 +0800
committerobscuren <geffobscura@gmail.com>2014-05-14 22:29:34 +0800
commit98a631b5563b8a87c3fc83f14256087251926a61 (patch)
tree2dbada4e80dd3e70a99fe692c7454c7de9c5a99e
parentff2cf2dacd3470e7c2800e2f3644cfc05dfa6c4e (diff)
downloadgo-tangerine-98a631b5563b8a87c3fc83f14256087251926a61.tar
go-tangerine-98a631b5563b8a87c3fc83f14256087251926a61.tar.gz
go-tangerine-98a631b5563b8a87c3fc83f14256087251926a61.tar.bz2
go-tangerine-98a631b5563b8a87c3fc83f14256087251926a61.tar.lz
go-tangerine-98a631b5563b8a87c3fc83f14256087251926a61.tar.xz
go-tangerine-98a631b5563b8a87c3fc83f14256087251926a61.tar.zst
go-tangerine-98a631b5563b8a87c3fc83f14256087251926a61.zip
Remove any invalid transactions after block processing
-rw-r--r--ethchain/state_manager.go2
-rw-r--r--ethchain/transaction_pool.go17
2 files changed, 16 insertions, 3 deletions
diff --git a/ethchain/state_manager.go b/ethchain/state_manager.go
index f830f2022..57d56469b 100644
--- a/ethchain/state_manager.go
+++ b/ethchain/state_manager.go
@@ -199,6 +199,8 @@ func (sm *StateManager) ProcessBlock(block *Block, dontReact bool) error {
}
sm.Ethereum.Broadcast(ethwire.MsgBlockTy, []interface{}{block.Value().Val})
+
+ sm.Ethereum.TxPool().RemoveInvalid(sm.procState)
} else {
fmt.Println("total diff failed")
}
diff --git a/ethchain/transaction_pool.go b/ethchain/transaction_pool.go
index 56deae0c6..6c0282dc6 100644
--- a/ethchain/transaction_pool.go
+++ b/ethchain/transaction_pool.go
@@ -210,9 +210,9 @@ func (pool *TxPool) CurrentTransactions() []*Transaction {
txList := make([]*Transaction, pool.pool.Len())
i := 0
for e := pool.pool.Front(); e != nil; e = e.Next() {
- if tx, ok := e.Value.(*Transaction); ok {
- txList[i] = tx
- }
+ tx := e.Value.(*Transaction)
+
+ txList[i] = tx
i++
}
@@ -220,6 +220,17 @@ func (pool *TxPool) CurrentTransactions() []*Transaction {
return txList
}
+func (pool *TxPool) RemoveInvalid(state *State) {
+ for e := pool.pool.Front(); e != nil; e = e.Next() {
+ tx := e.Value.(*Transaction)
+ sender := state.GetAccount(tx.Sender())
+ err := pool.ValidateTransaction(tx)
+ if err != nil || sender.Nonce != tx.Nonce {
+ pool.pool.Remove(e)
+ }
+ }
+}
+
func (pool *TxPool) Flush() []*Transaction {
txList := pool.CurrentTransactions()