Skip to content

Commit

Permalink
Skip mining on transactions that don't meet the min accepted gas price
Browse files Browse the repository at this point in the history
  • Loading branch information
obscuren committed Dec 4, 2014
1 parent 3db9c80 commit 8dbca75
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 26 deletions.
28 changes: 12 additions & 16 deletions core/block_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,7 @@ func (sm *BlockManager) ProcessWithParent(block, parent *types.Block) (td *big.I
return
}

_, err = sm.TransitionState(state, parent, block)
receipts, err := sm.TransitionState(state, parent, block)
if err != nil {
return
}
Expand All @@ -242,26 +242,22 @@ func (sm *BlockManager) ProcessWithParent(block, parent *types.Block) (td *big.I
return
}

/*
receiptSha := types.DeriveSha(receipts)
if bytes.Compare(receiptSha, block.ReceiptSha) != 0 {
err = fmt.Errorf("validating receipt root. received=%x got=%x", block.ReceiptSha, receiptSha)
return
}
*/
receiptSha := types.DeriveSha(receipts)
if bytes.Compare(receiptSha, block.ReceiptSha) != 0 {
err = fmt.Errorf("validating receipt root. received=%x got=%x", block.ReceiptSha, receiptSha)
return
}

if err = sm.AccumelateRewards(state, block, parent); err != nil {
return
}

/*
//block.receipts = receipts // although this isn't necessary it be in the future
rbloom := types.CreateBloom(receipts)
if bytes.Compare(rbloom, block.LogsBloom) != 0 {
err = fmt.Errorf("unable to replicate block's bloom=%x", rbloom)
return
}
*/
//block.receipts = receipts // although this isn't necessary it be in the future
rbloom := types.CreateBloom(receipts)
if bytes.Compare(rbloom, block.LogsBloom) != 0 {
err = fmt.Errorf("unable to replicate block's bloom=%x", rbloom)
return
}

state.Update(ethutil.Big0)

Expand Down
8 changes: 4 additions & 4 deletions core/transaction_pool.go
Original file line number Diff line number Diff line change
Expand Up @@ -115,10 +115,6 @@ func (pool *TxPool) ValidateTransaction(tx *types.Transaction) error {
return fmt.Errorf("tx.v != (28 || 27)")
}

if tx.GasPrice.Cmp(MinGasPrice) < 0 {
return fmt.Errorf("Gas price to low. Require %v > Got %v", MinGasPrice, tx.GasPrice)
}

// Get the sender
sender := pool.Ethereum.BlockManager().CurrentState().GetAccount(tx.Sender())

Expand Down Expand Up @@ -169,6 +165,10 @@ func (self *TxPool) Add(tx *types.Transaction) error {
return nil
}

func (self *TxPool) Size() int {
return self.pool.Len()
}

func (pool *TxPool) CurrentTransactions() []*types.Transaction {
pool.mutex.Lock()
defer pool.mutex.Unlock()
Expand Down
22 changes: 16 additions & 6 deletions miner/miner.go
Original file line number Diff line number Diff line change
Expand Up @@ -228,23 +228,33 @@ func (self *Miner) mine() {

func (self *Miner) finiliseTxs() types.Transactions {
// Sort the transactions by nonce in case of odd network propagation
var txs types.Transactions
actualSize := len(self.localTxs) // See copy below
txs := make(types.Transactions, actualSize+self.eth.TxPool().Size())

state := self.eth.BlockManager().TransState()
// XXX This has to change. Coinbase is, for new, same as key.
key := self.eth.KeyManager()
for _, ltx := range self.localTxs {
for i, ltx := range self.localTxs {
tx := types.NewTransactionMessage(ltx.To, ethutil.Big(ltx.Value), ethutil.Big(ltx.Gas), ethutil.Big(ltx.GasPrice), ltx.Data)
tx.Nonce = state.GetNonce(self.Coinbase)
state.SetNonce(self.Coinbase, tx.Nonce+1)

tx.Sign(key.PrivateKey())

txs = append(txs, tx)
txs[i] = tx
}

txs = append(txs, self.eth.TxPool().CurrentTransactions()...)
sort.Sort(types.TxByNonce{txs})
// Faster than append
for _, tx := range self.eth.TxPool().CurrentTransactions() {
if tx.GasPrice.Cmp(self.MinAcceptedGasPrice) >= 0 {
txs[actualSize] = tx
actualSize++
}
}

newTransactions := make(types.Transactions, actualSize)
copy(newTransactions, txs[:actualSize])
sort.Sort(types.TxByNonce{newTransactions})

return txs
return newTransactions
}

0 comments on commit 8dbca75

Please sign in to comment.