Removed the need of having a backend for the tx pool

This commit is contained in:
obscuren 2015-01-02 12:26:55 +01:00
parent ae2c90cc28
commit d336e24dce
4 changed files with 14 additions and 17 deletions

View File

@ -78,7 +78,7 @@ func TestChainInsertions(t *testing.T) {
var eventMux event.TypeMux var eventMux event.TypeMux
chainMan := NewChainManager(&eventMux) chainMan := NewChainManager(&eventMux)
txPool := NewTxPool(chainMan, &eventMux) txPool := NewTxPool(&eventMux)
blockMan := NewBlockManager(txPool, chainMan, &eventMux) blockMan := NewBlockManager(txPool, chainMan, &eventMux)
chainMan.SetProcessor(blockMan) chainMan.SetProcessor(blockMan)
@ -122,7 +122,7 @@ func TestChainMultipleInsertions(t *testing.T) {
} }
var eventMux event.TypeMux var eventMux event.TypeMux
chainMan := NewChainManager(&eventMux) chainMan := NewChainManager(&eventMux)
txPool := NewTxPool(chainMan, &eventMux) txPool := NewTxPool(&eventMux)
blockMan := NewBlockManager(txPool, chainMan, &eventMux) blockMan := NewBlockManager(txPool, chainMan, &eventMux)
chainMan.SetProcessor(blockMan) chainMan.SetProcessor(blockMan)
done := make(chan bool, max) done := make(chan bool, max)

View File

@ -43,22 +43,19 @@ type TxPool struct {
subscribers []chan TxMsg subscribers []chan TxMsg
stateQuery StateQuery
eventMux *event.TypeMux eventMux *event.TypeMux
} }
func NewTxPool(stateQuery StateQuery, eventMux *event.TypeMux) *TxPool { func NewTxPool(eventMux *event.TypeMux) *TxPool {
return &TxPool{ return &TxPool{
pool: set.New(), pool: set.New(),
queueChan: make(chan *types.Transaction, txPoolQueueSize), queueChan: make(chan *types.Transaction, txPoolQueueSize),
quit: make(chan bool), quit: make(chan bool),
stateQuery: stateQuery,
eventMux: eventMux, eventMux: eventMux,
} }
} }
func (pool *TxPool) addTransaction(tx *types.Transaction) { func (pool *TxPool) addTransaction(tx *types.Transaction) {
pool.pool.Add(tx) pool.pool.Add(tx)
// Broadcast the transaction to the rest of the peers // Broadcast the transaction to the rest of the peers
@ -75,6 +72,10 @@ func (pool *TxPool) ValidateTransaction(tx *types.Transaction) error {
return fmt.Errorf("tx.v != (28 || 27) => %v", v) return fmt.Errorf("tx.v != (28 || 27) => %v", v)
} }
/* XXX this kind of validation needs to happen elsewhere in the gui when sending txs.
Other clients should do their own validation. Value transfer could throw error
but doesn't necessarily invalidate the tx. Gas can still be payed for and miner
can still be rewarded for their inclusion and processing.
// Get the sender // Get the sender
senderAddr := tx.From() senderAddr := tx.From()
if senderAddr == nil { if senderAddr == nil {
@ -82,10 +83,6 @@ func (pool *TxPool) ValidateTransaction(tx *types.Transaction) error {
} }
sender := pool.stateQuery.GetAccount(senderAddr) sender := pool.stateQuery.GetAccount(senderAddr)
/* XXX this kind of validation needs to happen elsewhere in the gui when sending txs.
Other clients should do their own validation. Value transfer could be throw error
but doesn't necessarily invalidate the tx. Gas can still be payed for and miner
can still be rewarded for their inclusion and processing.
totAmount := new(big.Int).Set(tx.Value()) totAmount := new(big.Int).Set(tx.Value())
// Make sure there's enough in the sender's account. Having insufficient // Make sure there's enough in the sender's account. Having insufficient
// funds won't invalidate this transaction but simple ignores it. // funds won't invalidate this transaction but simple ignores it.

View File

@ -25,7 +25,7 @@ func transaction() *types.Transaction {
func setup() (*TxPool, *ecdsa.PrivateKey) { func setup() (*TxPool, *ecdsa.PrivateKey) {
var m event.TypeMux var m event.TypeMux
key, _ := crypto.GenerateKey() key, _ := crypto.GenerateKey()
return NewTxPool(stateQuery{}, &m), key return NewTxPool(&m), key
} }
func TestTxAdding(t *testing.T) { func TestTxAdding(t *testing.T) {

View File

@ -70,7 +70,7 @@ func New(db ethutil.Database, identity p2p.ClientIdentity, keyManager *crypto.Ke
} }
eth.chainManager = core.NewChainManager(eth.EventMux()) eth.chainManager = core.NewChainManager(eth.EventMux())
eth.txPool = core.NewTxPool(eth.chainManager, eth.EventMux()) eth.txPool = core.NewTxPool(eth.EventMux())
eth.blockManager = core.NewBlockManager(eth.txPool, eth.chainManager, eth.EventMux()) eth.blockManager = core.NewBlockManager(eth.txPool, eth.chainManager, eth.EventMux())
eth.chainManager.SetProcessor(eth.blockManager) eth.chainManager.SetProcessor(eth.blockManager)
eth.whisper = whisper.New() eth.whisper = whisper.New()