diff options
author | Jeffrey Wilcke <obscuren@users.noreply.github.com> | 2014-10-30 04:10:04 +0800 |
---|---|---|
committer | Jeffrey Wilcke <obscuren@users.noreply.github.com> | 2014-10-30 04:10:04 +0800 |
commit | fa890c8c0140dac1e02038a6134db0d83bb85af9 (patch) | |
tree | 806fb16adbbec3bcd3ff93b8dfbdcdb73290fabb | |
parent | ce2ec1980bbc97fb9b2acc27c6249be1249fa44c (diff) | |
parent | 6b3f5fb82b0304f477a1c36b68b0d07232405aff (diff) | |
download | go-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.go | 51 | ||||
-rw-r--r-- | ethchain/events.go | 14 | ||||
-rw-r--r-- | ethchain/state_manager.go | 2 | ||||
-rw-r--r-- | ethchain/transaction_pool.go | 9 | ||||
-rw-r--r-- | ethminer/miner.go | 28 |
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: |