chore: simplify rpc tx conversion (#14736)

This commit is contained in:
Matthias Seitz
2025-03-10 19:51:32 +01:00
committed by GitHub
parent bd81f69cce
commit 4c6dce3881
3 changed files with 15 additions and 29 deletions

View File

@@ -37,6 +37,7 @@ alloy-transport-ipc.workspace = true
alloy-transport-ws.workspace = true
alloy-transport.workspace = true
op-alloy-rpc-types.workspace = true
op-alloy-consensus = { workspace = true, features = ["alloy-compat"] }
# reqwest
reqwest = { workspace = true, default-features = false, features = ["rustls-tls-native-roots"] }

View File

@@ -1,16 +1,11 @@
use alloy_consensus::{
Block as PrimitiveBlock, BlockBody, Header as PrimitiveHeader,
Transaction as PrimitiveTransaction,
};
use alloy_rpc_types::{Block as RpcBlock, BlockTransactions};
use alloy_provider::network::AnyRpcBlock;
use alloy_rpc_types_engine::ExecutionPayload;
use clap::Parser;
use eyre::{OptionExt, Result};
use op_alloy_consensus::OpTxEnvelope;
use reth_cli_runner::CliContext;
use std::io::{BufReader, Read, Write};
use super::rpc_transaction::RpcTransaction;
/// Command for generating and sending an `engine_newPayload` request constructed from an RPC
/// block.
#[derive(Debug, Parser)]
@@ -90,35 +85,24 @@ impl Command {
let jwt_secret = self.load_jwt_secret()?;
// Parse the block
let block: RpcBlock<RpcTransaction> = serde_json::from_str(&block_json)?;
let block = serde_json::from_str::<AnyRpcBlock>(&block_json)?
.into_inner()
.map_header(|header| header.map(|h| h.into_header_with_defaults()))
.try_map_transactions(|tx| {
// try to convert unknowns into op type so that we can also support optimism
tx.try_into_either::<OpTxEnvelope>()
})?
.into_consensus();
// Extract parent beacon block root
let parent_beacon_block_root = block.header.parent_beacon_block_root;
// Extract transactions
let transactions = match block.transactions {
BlockTransactions::Hashes(_) => {
return Err(eyre::eyre!("Block must include full transaction data. Send the eth_getBlockByHash request with full: `true`"));
}
BlockTransactions::Full(txs) => txs,
BlockTransactions::Uncle => {
return Err(eyre::eyre!("Cannot process uncle blocks"));
}
};
// Extract blob versioned hashes
let blob_versioned_hashes = transactions
.iter()
.filter_map(|tx| tx.blob_versioned_hashes().map(|v| v.to_vec()))
.flatten()
.collect::<Vec<_>>();
let blob_versioned_hashes =
block.body.blob_versioned_hashes_iter().copied().collect::<Vec<_>>();
// Convert to execution payload
let execution_payload = ExecutionPayload::from_block_slow(&PrimitiveBlock::new(
PrimitiveHeader::from(block.header),
BlockBody { transactions, ommers: vec![], withdrawals: block.withdrawals },
))
.0;
let execution_payload = ExecutionPayload::from_block_slow(&block).0;
// Create JSON request data
let json_request = serde_json::to_string(&(