From 69c63578f18716abe310cc6b2af73d4830c6098e Mon Sep 17 00:00:00 2001 From: thedevbirb Date: Fri, 19 Jul 2024 14:25:15 +0200 Subject: [PATCH 1/4] fix(spammer): random blob data and calldata, higher price --- bolt-spammer/src/utils.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/bolt-spammer/src/utils.rs b/bolt-spammer/src/utils.rs index b3b75fc86..386fdfbb9 100644 --- a/bolt-spammer/src/utils.rs +++ b/bolt-spammer/src/utils.rs @@ -25,7 +25,8 @@ pub fn generate_random_tx() -> TransactionRequest { /// Generate random transaction with blob (eip4844) pub fn generate_random_blob_tx() -> TransactionRequest { - let sidecar: SidecarBuilder = SidecarBuilder::from_slice(b"Blobs are fun!"); + let random_bytes = thread_rng().gen::<[u8; 32]>(); + let sidecar: SidecarBuilder = SidecarBuilder::from_slice(random_bytes.as_slice()); let sidecar: BlobTransactionSidecar = sidecar.build().unwrap(); let dead_address = Address::from_str(DEAD_ADDRESS).unwrap(); @@ -35,10 +36,11 @@ pub fn generate_random_blob_tx() -> TransactionRequest { .with_chain_id(KURTOSIS_CHAIN_ID) .with_value(U256::from(100)) .with_max_fee_per_blob_gas(100u128) - .max_fee_per_gas(100u128) - .max_priority_fee_per_gas(50u128) + .max_fee_per_gas(NOICE_GAS_PRICE) + .max_priority_fee_per_gas(NOICE_GAS_PRICE / 10) .with_gas_limit(1_000_000u128) .with_blob_sidecar(sidecar) + .with_input(random_bytes) } pub fn prepare_rpc_request(method: &str, params: Vec) -> Value { From 9720a8af1f02e71acb174a5228b3494bbccdf1a4 Mon Sep 17 00:00:00 2001 From: thedevbirb Date: Fri, 19 Jul 2024 17:21:21 +0200 Subject: [PATCH 2/4] fix(sidecar): kzg commitments in the header --- bolt-sidecar/src/builder/mod.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/bolt-sidecar/src/builder/mod.rs b/bolt-sidecar/src/builder/mod.rs index c49a69dfb..e6512cb17 100644 --- a/bolt-sidecar/src/builder/mod.rs +++ b/bolt-sidecar/src/builder/mod.rs @@ -1,8 +1,8 @@ use alloy_primitives::U256; use blst::min_pk::SecretKey; use ethereum_consensus::{ - crypto::PublicKey, - deneb::mainnet::ExecutionPayloadHeader, + crypto::{KzgCommitment, PublicKey}, + deneb::mainnet::{ExecutionPayloadHeader, MAX_BLOB_COMMITMENTS_PER_BLOCK}, ssz::prelude::{List, MerkleizationError}, }; use payload_builder::FallbackPayloadBuilder; @@ -132,7 +132,8 @@ impl LocalBuilder { ); // 3. sign the bid with the local builder's BLS key - let signed_bid = self.create_signed_builder_bid(value, eth_header)?; + let signed_bid = + self.create_signed_builder_bid(value, eth_header, blobs_bundle.commitments)?; // 4. prepare a get_payload response for when the beacon node will ask for it let Some(get_payload_res) = @@ -165,6 +166,7 @@ impl LocalBuilder { &self, value: U256, header: ExecutionPayloadHeader, + blob_kzg_commitments: List, ) -> Result { // compat: convert from blst to ethereum consensus types let pubkey = self.secret_key.sk_to_pk().to_bytes(); @@ -172,7 +174,7 @@ impl LocalBuilder { let message = BuilderBid { header, - blob_kzg_commitments: List::default(), + blob_kzg_commitments, public_key: consensus_pubkey, value, }; From 2eafafcdd61152ca3d60438bf399828ffd663508 Mon Sep 17 00:00:00 2001 From: nicolas <48695862+merklefruit@users.noreply.github.com> Date: Fri, 19 Jul 2024 17:29:30 +0200 Subject: [PATCH 3/4] feat: convert commitments to list --- bolt-sidecar/src/builder/mod.rs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/bolt-sidecar/src/builder/mod.rs b/bolt-sidecar/src/builder/mod.rs index e6512cb17..3ea8ff42f 100644 --- a/bolt-sidecar/src/builder/mod.rs +++ b/bolt-sidecar/src/builder/mod.rs @@ -2,7 +2,7 @@ use alloy_primitives::U256; use blst::min_pk::SecretKey; use ethereum_consensus::{ crypto::{KzgCommitment, PublicKey}, - deneb::mainnet::{ExecutionPayloadHeader, MAX_BLOB_COMMITMENTS_PER_BLOCK}, + deneb::mainnet::ExecutionPayloadHeader, ssz::prelude::{List, MerkleizationError}, }; use payload_builder::FallbackPayloadBuilder; @@ -102,6 +102,7 @@ impl LocalBuilder { ) -> Result<(), BuilderError> { let transactions = template.as_signed_transactions(); let blobs_bundle = template.as_blobs_bundle(); + let kzg_commitments = blobs_bundle.commitments.clone(); // 1. build a fallback payload with the given transactions, on top of // the current head of the chain @@ -132,8 +133,7 @@ impl LocalBuilder { ); // 3. sign the bid with the local builder's BLS key - let signed_bid = - self.create_signed_builder_bid(value, eth_header, blobs_bundle.commitments)?; + let signed_bid = self.create_signed_builder_bid(value, eth_header, kzg_commitments)?; // 4. prepare a get_payload response for when the beacon node will ask for it let Some(get_payload_res) = @@ -166,11 +166,12 @@ impl LocalBuilder { &self, value: U256, header: ExecutionPayloadHeader, - blob_kzg_commitments: List, + blob_kzg_commitments: Vec, ) -> Result { // compat: convert from blst to ethereum consensus types let pubkey = self.secret_key.sk_to_pk().to_bytes(); let consensus_pubkey = PublicKey::try_from(pubkey.as_slice()).expect("valid pubkey bytes"); + let blob_kzg_commitments = List::try_from(blob_kzg_commitments).expect("valid list"); let message = BuilderBid { header, From 66d3b0bbe910045ac818d8e10e006a91fe568789 Mon Sep 17 00:00:00 2001 From: thedevbirb Date: Fri, 19 Jul 2024 20:24:34 +0200 Subject: [PATCH 4/4] fix(sidecar): add actual blob gas used to the header --- bolt-sidecar/src/api/builder.rs | 2 +- bolt-sidecar/src/builder/payload_builder.rs | 10 +++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/bolt-sidecar/src/api/builder.rs b/bolt-sidecar/src/api/builder.rs index 1864d0ee4..98cdf9520 100644 --- a/bolt-sidecar/src/api/builder.rs +++ b/bolt-sidecar/src/api/builder.rs @@ -168,7 +168,7 @@ where meta: Default::default(), }; - tracing::info!(elapsed = ?start.elapsed(), %hash, number, "Returning locally built header"); + tracing::info!(elapsed = ?start.elapsed(), %hash, number, ?versioned_bid, "Returning locally built header"); Ok(Json(versioned_bid)) } diff --git a/bolt-sidecar/src/builder/payload_builder.rs b/bolt-sidecar/src/builder/payload_builder.rs index c5f9e4279..56a506636 100644 --- a/bolt-sidecar/src/builder/payload_builder.rs +++ b/bolt-sidecar/src/builder/payload_builder.rs @@ -76,6 +76,7 @@ impl FallbackPayloadBuilder { pub struct Context { extra_data: Bytes, base_fee: u64, + blob_gas_used: u64, excess_blob_gas: u64, prev_randao: B256, fee_recipient: Address, @@ -91,7 +92,6 @@ pub struct Hints { pub gas_used: Option, pub receipts_root: Option, pub logs_bloom: Option, - pub blob_gas_used: Option, pub state_root: Option, pub block_hash: Option, } @@ -173,8 +173,13 @@ impl FallbackPayloadBuilder { latest_block.header.blob_gas_used.unwrap_or_default(), ) as u64; + let blob_gas_used = transactions + .iter() + .fold(0, |acc, tx| acc + tx.blob_gas_used().unwrap_or_default()); + let ctx = Context { base_fee, + blob_gas_used, excess_blob_gas, parent_beacon_block_root, prev_randao, @@ -359,7 +364,6 @@ pub(crate) fn build_header_with_hints_and_context( let gas_used = hints.gas_used.unwrap_or_default(); let receipts_root = hints.receipts_root.unwrap_or_default(); let logs_bloom = hints.logs_bloom.unwrap_or_default(); - let blob_gas_used = hints.blob_gas_used.unwrap_or_default(); let state_root = hints.state_root.unwrap_or_default(); Header { @@ -379,7 +383,7 @@ pub(crate) fn build_header_with_hints_and_context( mix_hash: context.prev_randao, nonce: BEACON_NONCE, base_fee_per_gas: Some(context.base_fee), - blob_gas_used: Some(blob_gas_used), + blob_gas_used: Some(context.blob_gas_used), excess_blob_gas: Some(context.excess_blob_gas), parent_beacon_block_root: Some(context.parent_beacon_block_root), extra_data: context.extra_data.clone(),