Commit a291745d authored by Conner Fromknecht's avatar Conner Fromknecht

feat: create commitTransactionsWithError for commiting sequencer txs

parent d27252b6
...@@ -77,6 +77,16 @@ const ( ...@@ -77,6 +77,16 @@ const (
staleThreshold = 7 staleThreshold = 7
) )
var (
// ErrCannotCommitTxn signals that the transaction execution failed
// when attempting to mine a transaction.
//
// NOTE: This error is not expected to occur in regular operation of
// l2geth, rather the actual execution error should be returned to the
// user.
ErrCannotCommitTxn = errors.New("Cannot commit transaction in miner")
)
// environment is the worker's current environment and holds all of the current state information. // environment is the worker's current environment and holds all of the current state information.
type environment struct { type environment struct {
signer types.Signer signer types.Signer
...@@ -773,9 +783,13 @@ func (w *worker) commitTransaction(tx *types.Transaction, coinbase common.Addres ...@@ -773,9 +783,13 @@ func (w *worker) commitTransaction(tx *types.Transaction, coinbase common.Addres
} }
func (w *worker) commitTransactions(txs *types.TransactionsByPriceAndNonce, coinbase common.Address, interrupt *int32) bool { func (w *worker) commitTransactions(txs *types.TransactionsByPriceAndNonce, coinbase common.Address, interrupt *int32) bool {
return w.commitTransactionsWithError(txs, coinbase, interrupt) != nil
}
func (w *worker) commitTransactionsWithError(txs *types.TransactionsByPriceAndNonce, coinbase common.Address, interrupt *int32) error {
// Short circuit if current is nil // Short circuit if current is nil
if w.current == nil { if w.current == nil {
return true return ErrCannotCommitTxn
} }
if w.current.gasPool == nil { if w.current.gasPool == nil {
...@@ -803,7 +817,11 @@ func (w *worker) commitTransactions(txs *types.TransactionsByPriceAndNonce, coin ...@@ -803,7 +817,11 @@ func (w *worker) commitTransactions(txs *types.TransactionsByPriceAndNonce, coin
inc: true, inc: true,
} }
} }
return w.current.tcount == 0 || atomic.LoadInt32(interrupt) == commitInterruptNewHead if w.current.tcount == 0 ||
atomic.LoadInt32(interrupt) == commitInterruptNewHead {
return ErrCannotCommitTxn
}
return nil
} }
// If we don't have enough gas for any further transactions then we're done // If we don't have enough gas for any further transactions then we're done
if w.current.gasPool.Gas() < params.TxGas { if w.current.gasPool.Gas() < params.TxGas {
...@@ -883,7 +901,10 @@ func (w *worker) commitTransactions(txs *types.TransactionsByPriceAndNonce, coin ...@@ -883,7 +901,10 @@ func (w *worker) commitTransactions(txs *types.TransactionsByPriceAndNonce, coin
if interrupt != nil { if interrupt != nil {
w.resubmitAdjustCh <- &intervalAdjust{inc: false} w.resubmitAdjustCh <- &intervalAdjust{inc: false}
} }
return w.current.tcount == 0 if w.current.tcount == 0 {
return ErrCannotCommitTxn
}
return nil
} }
// commitNewTx is an OVM addition that mines a block with a single tx in it. // commitNewTx is an OVM addition that mines a block with a single tx in it.
...@@ -945,8 +966,8 @@ func (w *worker) commitNewTx(tx *types.Transaction) error { ...@@ -945,8 +966,8 @@ func (w *worker) commitNewTx(tx *types.Transaction) error {
acc, _ := types.Sender(w.current.signer, tx) acc, _ := types.Sender(w.current.signer, tx)
transactions[acc] = types.Transactions{tx} transactions[acc] = types.Transactions{tx}
txs := types.NewTransactionsByPriceAndNonce(w.current.signer, transactions) txs := types.NewTransactionsByPriceAndNonce(w.current.signer, transactions)
if w.commitTransactions(txs, w.coinbase, nil) { if err := w.commitTransactionsWithError(txs, w.coinbase, nil); err != nil {
return errors.New("Cannot commit transaction in miner") return err
} }
return w.commit(nil, w.fullTaskHook, tstart) return w.commit(nil, w.fullTaskHook, tstart)
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment