|
|
|
@ -188,6 +188,8 @@ func (sm *StateManager) ApplyTransactions(coinbase []byte, state *State, block * |
|
|
|
|
// Process each transaction/contract
|
|
|
|
|
var receipts []*Receipt |
|
|
|
|
var validTxs []*Transaction |
|
|
|
|
var ignoredTxs []*Transaction // Transactions which go over the gasLimit
|
|
|
|
|
|
|
|
|
|
totalUsedGas := big.NewInt(0) |
|
|
|
|
|
|
|
|
|
for _, tx := range txs { |
|
|
|
@ -196,6 +198,12 @@ func (sm *StateManager) ApplyTransactions(coinbase []byte, state *State, block * |
|
|
|
|
if IsNonceErr(err) { |
|
|
|
|
continue |
|
|
|
|
} |
|
|
|
|
if IsGasLimitErr(err) { |
|
|
|
|
ignoredTxs = append(ignoredTxs, tx) |
|
|
|
|
// We need to figure out if we want to do something with thse txes
|
|
|
|
|
ethutil.Config.Log.Debugln("Gastlimit:", err) |
|
|
|
|
continue |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ethutil.Config.Log.Infoln(err) |
|
|
|
|
} |
|
|
|
@ -207,6 +215,9 @@ func (sm *StateManager) ApplyTransactions(coinbase []byte, state *State, block * |
|
|
|
|
validTxs = append(validTxs, tx) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Update the total gas used for the block (to be mined)
|
|
|
|
|
block.GasUsed = totalUsedGas |
|
|
|
|
|
|
|
|
|
return receipts, validTxs |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -226,6 +237,7 @@ func (sm *StateManager) ApplyTransaction(coinbase []byte, state *State, block *B |
|
|
|
|
script []byte |
|
|
|
|
) |
|
|
|
|
totalGasUsed = big.NewInt(0) |
|
|
|
|
snapshot := state.Snapshot() |
|
|
|
|
|
|
|
|
|
ca := state.GetAccount(coinbase) |
|
|
|
|
// Apply the transaction to the current state
|
|
|
|
@ -266,6 +278,14 @@ func (sm *StateManager) ApplyTransaction(coinbase []byte, state *State, block *B |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
parent := sm.bc.GetBlock(block.PrevHash) |
|
|
|
|
total := new(big.Int).Add(block.GasUsed, totalGasUsed) |
|
|
|
|
limit := block.CalcGasLimit(parent) |
|
|
|
|
if total.Cmp(limit) > 0 { |
|
|
|
|
state.Revert(snapshot) |
|
|
|
|
err = GasLimitError(total, limit) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|