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

chore: remove ckzg dep from rpc types #5392

Merged
merged 2 commits into from
Nov 13, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
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: 0 additions & 1 deletion Cargo.lock

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

2 changes: 1 addition & 1 deletion bin/reth/src/cli/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -363,7 +363,7 @@ mod tests {
let end = format!("reth/logs/{}", SUPPORTED_CHAINS[0]);
assert!(log_dir.as_ref().ends_with(end), "{:?}", log_dir);

let mut iter = SUPPORTED_CHAINS.into_iter();
let mut iter = SUPPORTED_CHAINS.iter();
iter.next();
for chain in iter {
let mut reth = Cli::<()>::try_parse_from(["reth", "node", "--chain", chain]).unwrap();
Expand Down
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