refactor: store plain receipts instead Options in Receipts (#14010)

This commit is contained in:
Arsenii Kulikov
2025-01-27 20:05:48 +04:00
committed by GitHub
parent 0fa79c6c65
commit cde951732e
22 changed files with 88 additions and 128 deletions

View File

@ -198,7 +198,7 @@ impl<N: ProviderNodeTypes> ConsistentProvider<N> {
let receipt = receipt_iter
.next()
.ok_or_else(|| ProviderError::ReceiptNotFound(tx_num.into()))?;
block_receipts.push(Some(receipt));
block_receipts.push(receipt);
}
receipts.push(block_receipts);
}

View File

@ -1810,8 +1810,7 @@ impl<TX: DbTxMut + DbTx + 'static, N: NodeTypesForProvider> StateWriter
));
}
let has_receipts_pruning = self.prune_modes.has_receipts_pruning() ||
execution_outcome.receipts.iter().flatten().any(|receipt| receipt.is_none());
let has_receipts_pruning = self.prune_modes.has_receipts_pruning();
// Prepare receipts cursor if we are going to write receipts to the database
//
@ -1869,26 +1868,21 @@ impl<TX: DbTxMut + DbTx + 'static, N: NodeTypesForProvider> StateWriter
for (idx, receipt) in receipts.iter().enumerate() {
let receipt_idx = first_tx_index + idx as u64;
if let Some(receipt) = receipt {
// Skip writing receipt if log filter is active and it does not have any logs to
// retain
if prunable_receipts &&
has_contract_log_filter &&
!receipt
.logs()
.iter()
.any(|log| allowed_addresses.contains(&log.address))
{
continue
}
// Skip writing receipt if log filter is active and it does not have any logs to
// retain
if prunable_receipts &&
has_contract_log_filter &&
!receipt.logs().iter().any(|log| allowed_addresses.contains(&log.address))
{
continue
}
if let Some(writer) = &mut receipts_static_writer {
writer.append_receipt(receipt_idx, receipt)?;
}
if let Some(writer) = &mut receipts_static_writer {
writer.append_receipt(receipt_idx, receipt)?;
}
if let Some(cursor) = &mut receipts_cursor {
cursor.append(receipt_idx, receipt)?;
}
if let Some(cursor) = &mut receipts_cursor {
cursor.append(receipt_idx, receipt)?;
}
}
}
@ -2283,9 +2277,7 @@ impl<TX: DbTxMut + DbTx + 'static, N: NodeTypesForProvider> StateWriter
let mut block_receipts = Vec::with_capacity(block_body.tx_count as usize);
for num in block_body.tx_num_range() {
if receipts_iter.peek().is_some_and(|(n, _)| *n == num) {
block_receipts.push(receipts_iter.next().map(|(_, r)| r));
} else {
block_receipts.push(None);
block_receipts.push(receipts_iter.next().unwrap().1);
}
}
receipts.push(block_receipts);

View File

@ -207,7 +207,7 @@ fn block1(number: BlockNumber) -> (RecoveredBlock<reth_primitives::Block>, Execu
.revert_account_info(number, account2, Some(None))
.state_storage(account1, HashMap::from_iter([(slot, (U256::ZERO, U256::from(10)))]))
.build(),
vec![vec![Some(
vec![vec![
#[allow(clippy::needless_update)] // side-effect of optimism fields
Receipt {
tx_type: TxType::Eip2930,
@ -220,7 +220,7 @@ fn block1(number: BlockNumber) -> (RecoveredBlock<reth_primitives::Block>, Execu
)],
..Default::default()
},
)]]
]]
.into(),
number,
Vec::new(),
@ -266,7 +266,7 @@ fn block2(
)
.revert_storage(number, account, Vec::from([(slot, U256::from(10))]))
.build(),
vec![vec![Some(
vec![vec![
#[allow(clippy::needless_update)] // side-effect of optimism fields
Receipt {
tx_type: TxType::Eip1559,
@ -279,7 +279,7 @@ fn block2(
)],
..Default::default()
},
)]]
]]
.into(),
number,
Vec::new(),
@ -334,7 +334,7 @@ fn block3(
}
let execution_outcome = ExecutionOutcome::new(
bundle_state_builder.build(),
vec![vec![Some(
vec![vec![
#[allow(clippy::needless_update)] // side-effect of optimism fields
Receipt {
tx_type: TxType::Eip1559,
@ -347,7 +347,7 @@ fn block3(
)],
..Default::default()
},
)]]
]]
.into(),
number,
Vec::new(),
@ -422,7 +422,7 @@ fn block4(
}
let execution_outcome = ExecutionOutcome::new(
bundle_state_builder.build(),
vec![vec![Some(
vec![vec![
#[allow(clippy::needless_update)] // side-effect of optimism fields
Receipt {
tx_type: TxType::Eip1559,
@ -435,7 +435,7 @@ fn block4(
)],
..Default::default()
},
)]]
]]
.into(),
number,
Vec::new(),
@ -507,7 +507,7 @@ fn block5(
}
let execution_outcome = ExecutionOutcome::new(
bundle_state_builder.build(),
vec![vec![Some(
vec![vec![
#[allow(clippy::needless_update)] // side-effect of optimism fields
Receipt {
tx_type: TxType::Eip1559,
@ -520,7 +520,7 @@ fn block5(
)],
..Default::default()
},
)]]
]]
.into(),
number,
Vec::new(),

View File

@ -1059,7 +1059,7 @@ mod tests {
fn revert_to_indices() {
let base: ExecutionOutcome = ExecutionOutcome {
bundle: BundleState::default(),
receipts: vec![vec![Some(Receipt::default()); 2]; 7].into(),
receipts: vec![vec![Receipt::default(); 2]; 7].into(),
first_block: 10,
requests: Vec::new(),
};
@ -1270,7 +1270,7 @@ mod tests {
let mut test: ExecutionOutcome = ExecutionOutcome {
bundle: present_state,
receipts: vec![vec![Some(Receipt::default()); 2]; 1].into(),
receipts: vec![vec![Receipt::default(); 2]; 1].into(),
first_block: 2,
requests: Vec::new(),
};