Skip to content

Commit

Permalink
chore: remove ckzg dep from rpc types (#5392)
Browse files Browse the repository at this point in the history
  • Loading branch information
mattsse authored Nov 13, 2023
1 parent 5baa158 commit 79abf2b
Show file tree
Hide file tree
Showing 10 changed files with 71 additions and 45 deletions.
1 change: 0 additions & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

23 changes: 8 additions & 15 deletions bin/reth/src/debug_cmd/build_block.rs
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,6 @@ impl Command {
Factory::new(self.chain.clone()),
Arc::clone(&self.chain),
);
let _tree_config = BlockchainTreeConfig::default();
let tree = BlockchainTree::new(tree_externals, BlockchainTreeConfig::default(), None)?;
let blockchain_tree = ShareableBlockchainTree::new(tree);

Expand Down Expand Up @@ -198,27 +197,21 @@ impl Command {
"encountered a blob tx. `--blobs-bundle-path` must be provided"
))?;

let (commitments, proofs, blobs) =
blobs_bundle.take(blob_versioned_hashes.len());
let sidecar: BlobTransactionSidecar =
blobs_bundle.pop_sidecar(blob_versioned_hashes.len()).into();

// first construct the tx, calculating the length of the tx with sidecar before
// insertion
let sidecar = BlobTransactionSidecar::new(
blobs.clone(),
commitments.clone(),
proofs.clone(),
);
let tx =
BlobTransaction::try_from_signed(transaction.as_ref().clone(), sidecar)
.expect("should not fail to convert blob tx if it is already eip4844");
let tx = BlobTransaction::try_from_signed(
transaction.as_ref().clone(),
sidecar.clone(),
)
.expect("should not fail to convert blob tx if it is already eip4844");
let pooled = PooledTransactionsElement::BlobTransaction(tx);
let encoded_length = pooled.length_without_header();

// insert the blob into the store
blob_store.insert(
transaction.hash,
BlobTransactionSidecar { blobs, commitments, proofs },
)?;
blob_store.insert(transaction.hash, sidecar)?;

encoded_length
}
Expand Down
8 changes: 2 additions & 6 deletions crates/payload/builder/src/payload.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ use reth_rpc_types::engine::{

use reth_rpc_types_compat::engine::payload::{
block_to_payload_v3, convert_block_to_payload_field_v2,
convert_standalone_withdraw_to_withdrawal, from_primitive_sidecar, try_block_to_payload_v1,
convert_standalone_withdraw_to_withdrawal, try_block_to_payload_v1,
};
use revm_primitives::{BlobExcessGasAndPrice, BlockEnv, CfgEnv, SpecId};

Expand Down Expand Up @@ -116,11 +116,7 @@ impl From<BuiltPayload> for ExecutionPayloadEnvelopeV3 {
// Spec:
// <https://github.com/ethereum/execution-apis/blob/fe8e13c288c592ec154ce25c534e26cb7ce0530d/src/engine/cancun.md#specification-2>
should_override_builder: false,
blobs_bundle: sidecars
.into_iter()
.map(from_primitive_sidecar)
.collect::<Vec<_>>()
.into(),
blobs_bundle: sidecars.into_iter().map(Into::into).collect::<Vec<_>>().into(),
}
}
}
Expand Down
17 changes: 17 additions & 0 deletions crates/primitives/src/transaction/sidecar.rs
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,20 @@ impl BlobTransactionSidecar {
}
}

impl From<reth_rpc_types::BlobTransactionSidecar> for BlobTransactionSidecar {
fn from(value: reth_rpc_types::BlobTransactionSidecar) -> Self {
// SAFETY: Same repr and size
unsafe { std::mem::transmute(value) }
}
}

impl From<BlobTransactionSidecar> for reth_rpc_types::BlobTransactionSidecar {
fn from(value: BlobTransactionSidecar) -> Self {
// SAFETY: Same repr and size
unsafe { std::mem::transmute(value) }
}
}

// Wrapper for c-kzg rlp
#[repr(C)]
struct BlobTransactionSidecarRlp {
Expand All @@ -364,6 +378,9 @@ struct BlobTransactionSidecarRlp {
const _: [(); std::mem::size_of::<BlobTransactionSidecar>()] =
[(); std::mem::size_of::<BlobTransactionSidecarRlp>()];

const _: [(); std::mem::size_of::<BlobTransactionSidecar>()] =
[(); std::mem::size_of::<reth_rpc_types::BlobTransactionSidecar>()];

impl BlobTransactionSidecarRlp {
fn wrap_ref(other: &BlobTransactionSidecar) -> &Self {
// SAFETY: Same repr and size
Expand Down
15 changes: 1 addition & 14 deletions crates/rpc/rpc-types-compat/src/engine/payload.rs
Original file line number Diff line number Diff line change
Expand Up @@ -360,18 +360,6 @@ pub fn convert_to_payload_body_v1(value: Block) -> ExecutionPayloadBodyV1 {
ExecutionPayloadBodyV1 { transactions: transactions.collect(), withdrawals: withdraw }
}

/// Transforms a [reth_primitives::BlobTransactionSidecar] into a
/// [reth_rpc_types::BlobTransactionSidecar]
pub fn from_primitive_sidecar(
sidecar: reth_primitives::BlobTransactionSidecar,
) -> reth_rpc_types::BlobTransactionSidecar {
reth_rpc_types::BlobTransactionSidecar {
blobs: sidecar.blobs,
commitments: sidecar.commitments,
proofs: sidecar.proofs,
}
}

/// Transforms a [SealedBlock] into a [ExecutionPayloadV1]
pub fn execution_payload_from_sealed_block(value: SealedBlock) -> ExecutionPayloadV1 {
let transactions = value
Expand Down Expand Up @@ -403,11 +391,10 @@ pub fn execution_payload_from_sealed_block(value: SealedBlock) -> ExecutionPaylo

#[cfg(test)]
mod tests {
use super::{block_to_payload_v3, try_payload_v3_to_block};
use reth_primitives::{hex, Bytes, U256};
use reth_rpc_types::{engine::ExecutionPayloadV3, ExecutionPayloadV1, ExecutionPayloadV2};

use super::{block_to_payload_v3, try_payload_v3_to_block};

#[test]
fn roundtrip_payload_to_block() {
let first_transaction_raw = Bytes::from_static(&hex!("02f9017a8501a1f0ff438211cc85012a05f2008512a05f2000830249f094d5409474fd5a725eab2ac9a8b26ca6fb51af37ef80b901040cc7326300000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000001bdd2ed4b616c800000000000000000000000000001e9ee781dd4b97bdef92e5d1785f73a1f931daa20000000000000000000000007a40026a3b9a41754a95eec8c92c6b99886f440c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000009ae80eb647dd09968488fa1d7e412bf8558a0b7a0000000000000000000000000f9815537d361cb02befd9918c95c97d4d8a4a2bc001a0ba8f1928bb0efc3fcd01524a2039a9a2588fa567cd9a7cc18217e05c615e9d69a0544bfd11425ac7748e76b3795b57a5563e2b0eff47b5428744c62ff19ccfc305")[..]);
Expand Down
1 change: 0 additions & 1 deletion crates/rpc/rpc-types/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ serde_with = "3.3"
serde_json.workspace = true
jsonrpsee-types = { workspace = true, optional = true }
alloy-primitives = { workspace = true, features = ["rand", "rlp", "serde"] }
c-kzg = { workspace = true, features = ["serde"] }
url = "2.3"
# necessary so we don't hit a "undeclared 'std'":
# https://github.com/paradigmxyz/reth/pull/177#discussion_r1021172198
Expand Down
31 changes: 25 additions & 6 deletions crates/rpc/rpc-types/src/eth/engine/payload.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
use crate::eth::transaction::BlobTransactionSidecar;
pub use crate::Withdrawal;
use crate::{
eth::transaction::BlobTransactionSidecar,
kzg::{Blob, Bytes48},
};
use alloy_primitives::{Address, Bloom, Bytes, B256, B64, U256};
use c_kzg::{Blob, Bytes48};
use serde::{ser::SerializeMap, Deserialize, Deserializer, Serialize, Serializer};

/// The execution payload body response that allows for `null` values.
Expand Down Expand Up @@ -202,8 +204,11 @@ pub struct BlobsBundleV1 {
pub blobs: Vec<Blob>,
}

impl From<Vec<BlobTransactionSidecar>> for BlobsBundleV1 {
fn from(sidecars: Vec<BlobTransactionSidecar>) -> Self {
impl BlobsBundleV1 {
/// Creates a new blob bundle from the given sidecars.
///
/// This folds the sidecar fields into single commit, proof, and blob vectors.
pub fn new(sidecars: impl IntoIterator<Item = BlobTransactionSidecar>) -> Self {
let (commitments, proofs, blobs) = sidecars.into_iter().fold(
(Vec::new(), Vec::new(), Vec::new()),
|(mut commitments, mut proofs, mut blobs), sidecar| {
Expand All @@ -215,9 +220,7 @@ impl From<Vec<BlobTransactionSidecar>> for BlobsBundleV1 {
);
Self { commitments, proofs, blobs }
}
}

impl BlobsBundleV1 {
/// Take `len` blob data from the bundle.
///
/// # Panics
Expand All @@ -230,6 +233,22 @@ impl BlobsBundleV1 {
self.blobs.drain(0..len).collect(),
)
}

/// Returns the sidecar from the bundle
///
/// # Panics
///
/// If len is more than the blobs bundle len.
pub fn pop_sidecar(&mut self, len: usize) -> BlobTransactionSidecar {
let (commitments, proofs, blobs) = self.take(len);
BlobTransactionSidecar { commitments, proofs, blobs }
}
}

impl From<Vec<BlobTransactionSidecar>> for BlobsBundleV1 {
fn from(sidecars: Vec<BlobTransactionSidecar>) -> Self {
Self::new(sidecars)
}
}

/// An execution payload, which can be either [ExecutionPayloadV1], [ExecutionPayloadV2], or
Expand Down
12 changes: 12 additions & 0 deletions crates/rpc/rpc-types/src/eth/transaction/kzg.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
//! KZG type bindings
use alloy_primitives::FixedBytes;

/// How many bytes are in a blob
pub const BYTES_PER_BLOB: usize = 131072;

/// A Blob serialized as 0x-prefixed hex string
pub type Blob = FixedBytes<BYTES_PER_BLOB>;

/// A commitment/proof serialized as 0x-prefixed hex string
pub type Bytes48 = FixedBytes<48>;
1 change: 1 addition & 0 deletions crates/rpc/rpc-types/src/eth/transaction/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ pub use typed::*;

mod access_list;
mod common;
pub mod kzg;
mod receipt;
mod request;
mod signature;
Expand Down
7 changes: 5 additions & 2 deletions crates/rpc/rpc-types/src/eth/transaction/typed.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,12 @@
//! transaction deserialized from the json input of an RPC call. Depending on what fields are set,
//! it can be converted into the container type [`TypedTransactionRequest`].
use crate::eth::transaction::AccessList;
use crate::{
eth::transaction::AccessList,
kzg::{Blob, Bytes48},
};
use alloy_primitives::{Address, Bytes, B256, U128, U256, U64};
use alloy_rlp::{BufMut, Decodable, Encodable, Error as RlpError};
use c_kzg::{Blob, Bytes48};
use serde::{Deserialize, Serialize};

/// Container type for various Ethereum transaction requests
Expand Down Expand Up @@ -136,6 +138,7 @@ impl Decodable for TransactionKind {

/// This represents a set of blobs, and its corresponding commitments and proofs.
#[derive(Clone, Debug, PartialEq, Eq, Default, Serialize, Deserialize)]
#[repr(C)]
pub struct BlobTransactionSidecar {
/// The blob data.
pub blobs: Vec<Blob>,
Expand Down

0 comments on commit 79abf2b

Please sign in to comment.