aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeffrey Wilcke <obscuren@users.noreply.github.com>2014-10-30 04:10:04 +0800
committerJeffrey Wilcke <obscuren@users.noreply.github.com>2014-10-30 04:10:04 +0800
commitfa890c8c0140dac1e02038a6134db0d83bb85af9 (patch)
tree806fb16adbbec3bcd3ff93b8dfbdcdb73290fabb
parentce2ec1980bbc97fb9b2acc27c6249be1249fa44c (diff)
parent6b3f5fb82b0304f477a1c36b68b0d07232405aff (diff)
downloadgo-tangerine-fa890c8c0140dac1e02038a6134db0d83bb85af9.tar
go-tangerine-fa890c8c0140dac1e02038a6134db0d83bb85af9.tar.gz
go-tangerine-fa890c8c0140dac1e02038a6134db0d83bb85af9.tar.bz2
go-tangerine-fa890c8c0140dac1e02038a6134db0d83bb85af9.tar.lz
go-tangerine-fa890c8c0140dac1e02038a6134db0d83bb85af9.tar.xz
go-tangerine-fa890c8c0140dac1e02038a6134db0d83bb85af9.tar.zst
go-tangerine-fa890c8c0140dac1e02038a6134db0d83bb85af9.zip
Merge pull request #167 from fjl/feature/split-tx-event
Split TxEvent type for tx pre/post
-rw-r--r--cmd/mist/gui.go51
-rw-r--r--ethchain/events.go14
-rw-r--r--ethchain/state_manager.go2
-rw-r--r--ethchain/transaction_pool.go9
-rw-r--r--ethminer/miner.go28
5 files changed, 48 insertions, 56 deletions
diff --git a/cmd/mist/gui.go b/cmd/mist/gui.go
index 45a99659b..e6da33475 100644
--- a/cmd/mist/gui.go
+++ b/cmd/mist/gui.go
@@ -408,7 +408,8 @@ func (gui *Gui) update() {
eth.ChainSyncEvent{},
eth.PeerListEvent{},
ethchain.NewBlockEvent{},
- ethchain.TxEvent{},
+ ethchain.TxPreEvent{},
+ ethchain.TxPostEvent{},
ethminer.Event{},
)
@@ -430,40 +431,38 @@ func (gui *Gui) update() {
gui.setWalletValue(gui.eth.StateManager().CurrentState().GetAccount(gui.address()).Balance(), nil)
}
- case ethchain.TxEvent:
+ case ethchain.TxPreEvent:
tx := ev.Tx
- if ev.Type == ethchain.TxPre {
- object := state.GetAccount(gui.address())
+ object := state.GetAccount(gui.address())
- if bytes.Compare(tx.Sender(), gui.address()) == 0 {
- unconfirmedFunds.Sub(unconfirmedFunds, tx.Value)
- } else if bytes.Compare(tx.Recipient, gui.address()) == 0 {
- unconfirmedFunds.Add(unconfirmedFunds, tx.Value)
- }
-
- gui.setWalletValue(object.Balance(), unconfirmedFunds)
-
- gui.insertTransaction("pre", tx)
+ if bytes.Compare(tx.Sender(), gui.address()) == 0 {
+ unconfirmedFunds.Sub(unconfirmedFunds, tx.Value)
+ } else if bytes.Compare(tx.Recipient, gui.address()) == 0 {
+ unconfirmedFunds.Add(unconfirmedFunds, tx.Value)
+ }
- } else if ev.Type == ethchain.TxPost {
- object := state.GetAccount(gui.address())
- if bytes.Compare(tx.Sender(), gui.address()) == 0 {
- object.SubAmount(tx.Value)
+ gui.setWalletValue(object.Balance(), unconfirmedFunds)
+ gui.insertTransaction("pre", tx)
- //gui.getObjectByName("transactionView").Call("addTx", ethpipe.NewJSTx(tx), "send")
- gui.txDb.Put(tx.Hash(), tx.RlpEncode())
- } else if bytes.Compare(tx.Recipient, gui.address()) == 0 {
- object.AddAmount(tx.Value)
+ case ethchain.TxPostEvent:
+ tx := ev.Tx
+ object := state.GetAccount(gui.address())
- //gui.getObjectByName("transactionView").Call("addTx", ethpipe.NewJSTx(tx), "recv")
- gui.txDb.Put(tx.Hash(), tx.RlpEncode())
- }
+ if bytes.Compare(tx.Sender(), gui.address()) == 0 {
+ object.SubAmount(tx.Value)
- gui.setWalletValue(object.Balance(), nil)
+ //gui.getObjectByName("transactionView").Call("addTx", ethpipe.NewJSTx(tx), "send")
+ gui.txDb.Put(tx.Hash(), tx.RlpEncode())
+ } else if bytes.Compare(tx.Recipient, gui.address()) == 0 {
+ object.AddAmount(tx.Value)
- state.UpdateStateObject(object)
+ //gui.getObjectByName("transactionView").Call("addTx", ethpipe.NewJSTx(tx), "recv")
+ gui.txDb.Put(tx.Hash(), tx.RlpEncode())
}
+ gui.setWalletValue(object.Balance(), nil)
+ state.UpdateStateObject(object)
+
// case object:
// gui.loadAddressBook()
diff --git a/ethchain/events.go b/ethchain/events.go
index 05c21edfe..304e741b7 100644
--- a/ethchain/events.go
+++ b/ethchain/events.go
@@ -1,10 +1,10 @@
package ethchain
-type TxEvent struct {
- Type int // TxPre || TxPost
- Tx *Transaction
-}
+// TxPreEvent is posted when a transaction enters the transaction pool.
+type TxPreEvent struct{ Tx *Transaction }
-type NewBlockEvent struct {
- Block *Block
-}
+// TxPostEvent is posted when a transaction has been processed.
+type TxPostEvent struct{ Tx *Transaction }
+
+// NewBlockEvent is posted when a block has been imported.
+type NewBlockEvent struct{ Block *Block }
diff --git a/ethchain/state_manager.go b/ethchain/state_manager.go
index e45d44752..0fe7001c6 100644
--- a/ethchain/state_manager.go
+++ b/ethchain/state_manager.go
@@ -191,7 +191,7 @@ done:
}
// Notify all subscribers
- self.eth.EventMux().Post(TxEvent{TxPost, tx})
+ self.eth.EventMux().Post(TxPostEvent{tx})
receipts = append(receipts, receipt)
handled = append(handled, tx)
diff --git a/ethchain/transaction_pool.go b/ethchain/transaction_pool.go
index 7f8a5de42..7bd3e9ffd 100644
--- a/ethchain/transaction_pool.go
+++ b/ethchain/transaction_pool.go
@@ -14,17 +14,12 @@ import (
var txplogger = ethlog.NewLogger("TXP")
-const (
- txPoolQueueSize = 50
-)
+const txPoolQueueSize = 50
type TxPoolHook chan *Transaction
type TxMsgTy byte
const (
- TxPre = iota
- TxPost
-
minGasPrice = 1000000
)
@@ -169,7 +164,7 @@ out:
txplogger.Debugf("(t) %x => %x (%v) %x\n", tx.Sender()[:4], tmp, tx.Value, tx.Hash())
// Notify the subscribers
- pool.Ethereum.EventMux().Post(TxEvent{TxPre, tx})
+ pool.Ethereum.EventMux().Post(TxPreEvent{tx})
}
case <-pool.quit:
break out
diff --git a/ethminer/miner.go b/ethminer/miner.go
index 24af7fbcb..57cf0cd57 100644
--- a/ethminer/miner.go
+++ b/ethminer/miner.go
@@ -64,7 +64,7 @@ func (miner *Miner) Start() {
miner.block = miner.ethereum.ChainManager().NewBlock(miner.coinbase)
mux := miner.ethereum.EventMux()
- miner.events = mux.Subscribe(ethchain.NewBlockEvent{}, ethchain.TxEvent{})
+ miner.events = mux.Subscribe(ethchain.NewBlockEvent{}, ethchain.TxPreEvent{})
// Prepare inital block
//miner.ethereum.StateManager().Prepare(miner.block.State(), miner.block.State())
@@ -118,25 +118,23 @@ func (miner *Miner) listener() {
}
miner.startMining()
- case ethchain.TxEvent:
- if event.Type == ethchain.TxPre {
- miner.stopMining()
+ case ethchain.TxPreEvent:
+ miner.stopMining()
- found := false
- for _, ctx := range miner.txs {
- if found = bytes.Compare(ctx.Hash(), event.Tx.Hash()) == 0; found {
- break
- }
- }
- if found == false {
- // Undo all previous commits
- miner.block.Undo()
- // Apply new transactions
- miner.txs = append(miner.txs, event.Tx)
+ found := false
+ for _, ctx := range miner.txs {
+ if found = bytes.Compare(ctx.Hash(), event.Tx.Hash()) == 0; found {
+ break
}
miner.startMining()
}
+ if found == false {
+ // Undo all previous commits
+ miner.block.Undo()
+ // Apply new transactions
+ miner.txs = append(miner.txs, event.Tx)
+ }
}
case <-miner.powDone: