Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: OP: keep encoded txs in payload attributes #9467

Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions crates/optimism/node/tests/e2e/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ pub(crate) fn optimism_payload_attributes(timestamp: u64) -> OptimismPayloadBuil
OptimismPayloadBuilderAttributes {
payload_attributes: EthPayloadBuilderAttributes::new(B256::ZERO, attributes),
transactions: vec![],
encoded_transactions: vec![],
no_tx_pool: false,
gas_limit: Some(30_000_000),
}
Expand Down
18 changes: 17 additions & 1 deletion crates/optimism/payload/src/payload.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

//! Optimism builder support

use reth_primitives::Bytes;
use alloy_rlp::Encodable;
use reth_chainspec::{ChainSpec, EthereumHardforks};
use reth_evm_optimism::revm_spec_by_timestamp_after_bedrock;
Expand Down Expand Up @@ -33,12 +34,23 @@ pub struct OptimismPayloadBuilderAttributes {
pub payload_attributes: EthPayloadBuilderAttributes,
/// `NoTxPool` option for the generated payload
pub no_tx_pool: bool,
/// Transactions for the generated payload
/// Decoded Transactions for the generated payload
pub transactions: Vec<TransactionSigned>,
/// Encoded Transactions for the generated payload
pub encoded_transactions: Vec<Bytes>,
/// The gas limit for the generated payload
pub gas_limit: Option<u64>,
}

/// Optimism Payload Builder Attributes Helper
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct OptimismPayloadBuilderAttributesHelper {
/// An decoded signed transaction
pub decoded_transaction: TransactionSigned,
/// An encoded signed transaction
pub encoded_transaction: Bytes,
}

impl PayloadBuilderAttributes for OptimismPayloadBuilderAttributes {
type RpcPayloadAttributes = OptimismPayloadAttributes;
type Error = alloy_rlp::Error;
Expand All @@ -58,6 +70,9 @@ impl PayloadBuilderAttributes for OptimismPayloadBuilderAttributes {
(payload_id_optimism(&parent, &attributes, &transactions), transactions)
};

// save the encoded transactions
let encoded_transactions = attributes.transactions.unwrap_or_default();

let payload_attributes = EthPayloadBuilderAttributes {
id,
parent,
Expand All @@ -72,6 +87,7 @@ impl PayloadBuilderAttributes for OptimismPayloadBuilderAttributes {
payload_attributes,
no_tx_pool: attributes.no_tx_pool.unwrap_or_default(),
transactions,
encoded_transactions,
gas_limit: attributes.gas_limit,
})
}
Expand Down