Avoid penalizing legit transactions
This commit is contained in:
parent
2874f464aa
commit
efaef85565
@ -292,7 +292,7 @@ impl Miner {
|
||||
};
|
||||
|
||||
let mut invalid_transactions = HashSet::new();
|
||||
let mut too_big_transactions = HashSet::new();
|
||||
let mut transactions_to_penalize = HashSet::new();
|
||||
let block_number = open_block.block().fields().header.number();
|
||||
// TODO: push new uncles, too.
|
||||
for tx in transactions {
|
||||
@ -300,7 +300,11 @@ impl Miner {
|
||||
match open_block.push_transaction(tx, None) {
|
||||
Err(Error::Execution(ExecutionError::BlockGasLimitReached { gas_limit, gas_used, gas })) => {
|
||||
debug!(target: "miner", "Skipping adding transaction to block because of gas limit: {:?} (limit: {:?}, used: {:?}, gas: {:?})", hash, gas_limit, gas_used, gas);
|
||||
too_big_transactions.insert(hash);
|
||||
|
||||
// Penalize transaction if it's above current gas limit
|
||||
if gas > gas_limit {
|
||||
transactions_to_penalize.insert(hash);
|
||||
}
|
||||
|
||||
// Exit early if gas left is smaller then min_tx_gas
|
||||
let min_tx_gas: U256 = 21000.into(); // TODO: figure this out properly.
|
||||
@ -337,7 +341,7 @@ impl Miner {
|
||||
for hash in invalid_transactions.into_iter() {
|
||||
queue.remove_invalid(&hash, &fetch_account);
|
||||
}
|
||||
for hash in too_big_transactions {
|
||||
for hash in transactions_to_penalize {
|
||||
queue.penalize(&hash);
|
||||
}
|
||||
}
|
||||
|
@ -610,6 +610,10 @@ impl TransactionQueue {
|
||||
|
||||
/// Penalize transactions from sender of transaction with given hash.
|
||||
/// I.e. it should change the priority of the transaction in the queue.
|
||||
///
|
||||
/// NOTE: We need to penalize all transactions from particular sender
|
||||
/// to avoid breaking invariants in queue (ordered by nonces).
|
||||
/// Consecutive transactions from this sender would fail otherwise (because of invalid nonce).
|
||||
pub fn penalize(&mut self, transaction_hash: &H256) {
|
||||
let transaction = self.by_hash.get(transaction_hash);
|
||||
if transaction.is_none() {
|
||||
|
Loading…
Reference in New Issue
Block a user