forked from cerc-io/plugeth
Merge pull request #167 from fjl/feature/split-tx-event
Split TxEvent type for tx pre/post
This commit is contained in:
commit
fa890c8c01
@ -408,7 +408,8 @@ func (gui *Gui) update() {
|
|||||||
eth.ChainSyncEvent{},
|
eth.ChainSyncEvent{},
|
||||||
eth.PeerListEvent{},
|
eth.PeerListEvent{},
|
||||||
ethchain.NewBlockEvent{},
|
ethchain.NewBlockEvent{},
|
||||||
ethchain.TxEvent{},
|
ethchain.TxPreEvent{},
|
||||||
|
ethchain.TxPostEvent{},
|
||||||
ethminer.Event{},
|
ethminer.Event{},
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -430,40 +431,38 @@ func (gui *Gui) update() {
|
|||||||
gui.setWalletValue(gui.eth.StateManager().CurrentState().GetAccount(gui.address()).Balance(), nil)
|
gui.setWalletValue(gui.eth.StateManager().CurrentState().GetAccount(gui.address()).Balance(), nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
case ethchain.TxEvent:
|
case ethchain.TxPreEvent:
|
||||||
tx := ev.Tx
|
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 {
|
if bytes.Compare(tx.Sender(), gui.address()) == 0 {
|
||||||
unconfirmedFunds.Sub(unconfirmedFunds, tx.Value)
|
unconfirmedFunds.Sub(unconfirmedFunds, tx.Value)
|
||||||
} else if bytes.Compare(tx.Recipient, gui.address()) == 0 {
|
} else if bytes.Compare(tx.Recipient, gui.address()) == 0 {
|
||||||
unconfirmedFunds.Add(unconfirmedFunds, tx.Value)
|
unconfirmedFunds.Add(unconfirmedFunds, tx.Value)
|
||||||
}
|
|
||||||
|
|
||||||
gui.setWalletValue(object.Balance(), unconfirmedFunds)
|
|
||||||
|
|
||||||
gui.insertTransaction("pre", tx)
|
|
||||||
|
|
||||||
} else if ev.Type == ethchain.TxPost {
|
|
||||||
object := state.GetAccount(gui.address())
|
|
||||||
if bytes.Compare(tx.Sender(), gui.address()) == 0 {
|
|
||||||
object.SubAmount(tx.Value)
|
|
||||||
|
|
||||||
//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)
|
|
||||||
|
|
||||||
//gui.getObjectByName("transactionView").Call("addTx", ethpipe.NewJSTx(tx), "recv")
|
|
||||||
gui.txDb.Put(tx.Hash(), tx.RlpEncode())
|
|
||||||
}
|
|
||||||
|
|
||||||
gui.setWalletValue(object.Balance(), nil)
|
|
||||||
|
|
||||||
state.UpdateStateObject(object)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gui.setWalletValue(object.Balance(), unconfirmedFunds)
|
||||||
|
gui.insertTransaction("pre", tx)
|
||||||
|
|
||||||
|
case ethchain.TxPostEvent:
|
||||||
|
tx := ev.Tx
|
||||||
|
object := state.GetAccount(gui.address())
|
||||||
|
|
||||||
|
if bytes.Compare(tx.Sender(), gui.address()) == 0 {
|
||||||
|
object.SubAmount(tx.Value)
|
||||||
|
|
||||||
|
//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)
|
||||||
|
|
||||||
|
//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:
|
// case object:
|
||||||
// gui.loadAddressBook()
|
// gui.loadAddressBook()
|
||||||
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package ethchain
|
package ethchain
|
||||||
|
|
||||||
type TxEvent struct {
|
// TxPreEvent is posted when a transaction enters the transaction pool.
|
||||||
Type int // TxPre || TxPost
|
type TxPreEvent struct{ Tx *Transaction }
|
||||||
Tx *Transaction
|
|
||||||
}
|
|
||||||
|
|
||||||
type NewBlockEvent struct {
|
// TxPostEvent is posted when a transaction has been processed.
|
||||||
Block *Block
|
type TxPostEvent struct{ Tx *Transaction }
|
||||||
}
|
|
||||||
|
// NewBlockEvent is posted when a block has been imported.
|
||||||
|
type NewBlockEvent struct{ Block *Block }
|
||||||
|
@ -191,7 +191,7 @@ done:
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Notify all subscribers
|
// Notify all subscribers
|
||||||
self.eth.EventMux().Post(TxEvent{TxPost, tx})
|
self.eth.EventMux().Post(TxPostEvent{tx})
|
||||||
|
|
||||||
receipts = append(receipts, receipt)
|
receipts = append(receipts, receipt)
|
||||||
handled = append(handled, tx)
|
handled = append(handled, tx)
|
||||||
|
@ -14,17 +14,12 @@ import (
|
|||||||
|
|
||||||
var txplogger = ethlog.NewLogger("TXP")
|
var txplogger = ethlog.NewLogger("TXP")
|
||||||
|
|
||||||
const (
|
const txPoolQueueSize = 50
|
||||||
txPoolQueueSize = 50
|
|
||||||
)
|
|
||||||
|
|
||||||
type TxPoolHook chan *Transaction
|
type TxPoolHook chan *Transaction
|
||||||
type TxMsgTy byte
|
type TxMsgTy byte
|
||||||
|
|
||||||
const (
|
const (
|
||||||
TxPre = iota
|
|
||||||
TxPost
|
|
||||||
|
|
||||||
minGasPrice = 1000000
|
minGasPrice = 1000000
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -169,7 +164,7 @@ out:
|
|||||||
txplogger.Debugf("(t) %x => %x (%v) %x\n", tx.Sender()[:4], tmp, tx.Value, tx.Hash())
|
txplogger.Debugf("(t) %x => %x (%v) %x\n", tx.Sender()[:4], tmp, tx.Value, tx.Hash())
|
||||||
|
|
||||||
// Notify the subscribers
|
// Notify the subscribers
|
||||||
pool.Ethereum.EventMux().Post(TxEvent{TxPre, tx})
|
pool.Ethereum.EventMux().Post(TxPreEvent{tx})
|
||||||
}
|
}
|
||||||
case <-pool.quit:
|
case <-pool.quit:
|
||||||
break out
|
break out
|
||||||
|
@ -64,7 +64,7 @@ func (miner *Miner) Start() {
|
|||||||
miner.block = miner.ethereum.ChainManager().NewBlock(miner.coinbase)
|
miner.block = miner.ethereum.ChainManager().NewBlock(miner.coinbase)
|
||||||
|
|
||||||
mux := miner.ethereum.EventMux()
|
mux := miner.ethereum.EventMux()
|
||||||
miner.events = mux.Subscribe(ethchain.NewBlockEvent{}, ethchain.TxEvent{})
|
miner.events = mux.Subscribe(ethchain.NewBlockEvent{}, ethchain.TxPreEvent{})
|
||||||
|
|
||||||
// Prepare inital block
|
// Prepare inital block
|
||||||
//miner.ethereum.StateManager().Prepare(miner.block.State(), miner.block.State())
|
//miner.ethereum.StateManager().Prepare(miner.block.State(), miner.block.State())
|
||||||
@ -118,25 +118,23 @@ func (miner *Miner) listener() {
|
|||||||
}
|
}
|
||||||
miner.startMining()
|
miner.startMining()
|
||||||
|
|
||||||
case ethchain.TxEvent:
|
case ethchain.TxPreEvent:
|
||||||
if event.Type == ethchain.TxPre {
|
miner.stopMining()
|
||||||
miner.stopMining()
|
|
||||||
|
|
||||||
found := false
|
found := false
|
||||||
for _, ctx := range miner.txs {
|
for _, ctx := range miner.txs {
|
||||||
if found = bytes.Compare(ctx.Hash(), event.Tx.Hash()) == 0; found {
|
if found = bytes.Compare(ctx.Hash(), event.Tx.Hash()) == 0; found {
|
||||||
break
|
break
|
||||||
}
|
|
||||||
}
|
|
||||||
if found == false {
|
|
||||||
// Undo all previous commits
|
|
||||||
miner.block.Undo()
|
|
||||||
// Apply new transactions
|
|
||||||
miner.txs = append(miner.txs, event.Tx)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
miner.startMining()
|
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:
|
case <-miner.powDone:
|
||||||
|
Loading…
Reference in New Issue
Block a user