mirror of
https://github.com/paradigmxyz/reth.git
synced 2026-01-10 07:48:19 -05:00
chore: simplify rpc tx conversion (#14736)
This commit is contained in:
@@ -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"] }
|
||||
|
||||
@@ -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(&(
|
||||
|
||||
Reference in New Issue
Block a user