BlockGasLimit taken from push_transaction result

This commit is contained in:
Tomasz Drwięga 2016-03-18 14:22:25 +01:00 committed by arkpar
parent 4d984ead4f
commit b3dd72ab0a

View File

@ -419,36 +419,28 @@ impl<V> BlockChainClient for Client<V> where V: Verifier {
// Add transactions // Add transactions
let block_number = b.block().header().number(); let block_number = b.block().header().number();
let min_tx_gas = U256::from(self.engine.schedule(&b.env_info()).tx_gas); let min_tx_gas = U256::from(self.engine.schedule(&b.env_info()).tx_gas);
let gas_limit = *b.block().header().gas_limit();
let mut gas_left = gas_limit;
let mut invalid_transactions = HashSet::new(); let mut invalid_transactions = HashSet::new();
for tx in transactions { for tx in transactions {
// Stop early if we are sure that no other transaction will be included
if gas_left < min_tx_gas {
break;
}
// TODO [todr] It seems that calculating gas_left here doesn't look nice. After moving this function
// to miner crate we should consider rewriting this logic in some better way.
if tx.gas > gas_left {
trace!(target: "miner", "Skipping adding transaction to block because of gas limit: {:?}", tx.hash());
continue;
}
// Push transaction to block // Push transaction to block
let hash = tx.hash(); let hash = tx.hash();
let import = b.push_transaction(tx, None); let import = b.push_transaction(tx, None);
match import { match import {
Err(Error::Execution(ExecutionError::BlockGasLimitReached { gas_limit, gas_used, .. })) => {
trace!(target: "miner", "Skipping adding transaction to block because of gas limit: {:?}", hash);
// Exit early if gas left is smaller then min_tx_gas
if gas_limit - gas_used < min_tx_gas {
break;
}
},
Err(e) => { Err(e) => {
invalid_transactions.insert(hash); invalid_transactions.insert(hash);
trace!(target: "miner", trace!(target: "miner",
"Error adding transaction to block: number={}. transaction_hash={:?}, Error: {:?}", "Error adding transaction to block: number={}. transaction_hash={:?}, Error: {:?}",
block_number, hash, e); block_number, hash, e);
}, },
Ok(receipt) => { _ => {}
gas_left = gas_limit - receipt.gas_used;
}
} }
} }