From a9233118b5d41920f2e7e5eea136045035638e8a Mon Sep 17 00:00:00 2001 From: Solar Mithril Date: Tue, 20 May 2025 19:15:01 +0600 Subject: [PATCH] Fix withdrawals root --- Cargo.lock | 52 ++++++++++++++++++- crates/op-rbuilder/Cargo.toml | 2 +- crates/op-rbuilder/src/payload_builder.rs | 1 + .../op-rbuilder/src/tests/framework/blocks.rs | 31 ++++++----- 4 files changed, 71 insertions(+), 15 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6096a5953..651584b4e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1303,6 +1303,17 @@ dependencies = [ "zstd-safe", ] +[[package]] +name = "async-lock" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +dependencies = [ + "event-listener", + "event-listener-strategy", + "pin-project-lite", +] + [[package]] name = "async-recursion" version = "1.1.1" @@ -2168,6 +2179,15 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "console" version = "0.15.11" @@ -3022,6 +3042,27 @@ dependencies = [ "syn 2.0.100", ] +[[package]] +name = "event-listener" +version = "5.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3492acde4c3fc54c845eaab3eed8bd00c7a7d881f78bfc801e43a93dec1331ae" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8be9f3dfaaffdae2972880079a491a1a8bb7cbed0b8dd7a347f668b4150a3b93" +dependencies = [ + "event-listener", + "pin-project-lite", +] + [[package]] name = "eyre" version = "0.6.12" @@ -4939,9 +4980,12 @@ version = "0.12.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a9321642ca94a4282428e6ea4af8cc2ca4eac48ac7a6a4ea8f33f76d0ce70926" dependencies = [ + "async-lock", "crossbeam-channel", "crossbeam-epoch", "crossbeam-utils", + "event-listener", + "futures-util", "loom", "parking_lot", "portable-atomic", @@ -5631,6 +5675,12 @@ dependencies = [ "syn 2.0.100", ] +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + [[package]] name = "parking_lot" version = "0.12.3" @@ -9490,7 +9540,7 @@ dependencies = [ [[package]] name = "rollup-boost" version = "0.1.0" -source = "git+http://github.com/flashbots/rollup-boost?rev=60885346d4cf7f241de82790478195747433d472#60885346d4cf7f241de82790478195747433d472" +source = "git+http://github.com/flashbots/rollup-boost?rev=6945842487ac0b0021800589d1660ec9c20cf254#6945842487ac0b0021800589d1660ec9c20cf254" dependencies = [ "alloy-primitives", "alloy-rpc-types-engine", diff --git a/crates/op-rbuilder/Cargo.toml b/crates/op-rbuilder/Cargo.toml index 109551f66..853b91dd4 100644 --- a/crates/op-rbuilder/Cargo.toml +++ b/crates/op-rbuilder/Cargo.toml @@ -98,7 +98,7 @@ serde_yaml = { version = "0.9" } # `flashblocks` branch -rollup-boost = { git = "http://github.com/flashbots/rollup-boost", rev = "60885346d4cf7f241de82790478195747433d472" } +rollup-boost = { git = "http://github.com/flashbots/rollup-boost", rev = "6945842487ac0b0021800589d1660ec9c20cf254" } [target.'cfg(unix)'.dependencies] tikv-jemallocator = { version = "0.6", optional = true } diff --git a/crates/op-rbuilder/src/payload_builder.rs b/crates/op-rbuilder/src/payload_builder.rs index 7065fc750..946028964 100644 --- a/crates/op-rbuilder/src/payload_builder.rs +++ b/crates/op-rbuilder/src/payload_builder.rs @@ -817,6 +817,7 @@ where block_hash, transactions: new_transactions_encoded, withdrawals: ctx.withdrawals().cloned().unwrap_or_default().to_vec(), + withdrawals_root, }, metadata: serde_json::to_value(&metadata).unwrap_or_default(), }; diff --git a/crates/op-rbuilder/src/tests/framework/blocks.rs b/crates/op-rbuilder/src/tests/framework/blocks.rs index 847025d74..261ff2a54 100644 --- a/crates/op-rbuilder/src/tests/framework/blocks.rs +++ b/crates/op-rbuilder/src/tests/framework/blocks.rs @@ -2,13 +2,13 @@ use crate::tx_signer::Signer; use alloy_eips::{eip2718::Encodable2718, BlockNumberOrTag}; use alloy_primitives::{address, hex, Address, Bytes, TxKind, B256, U256}; use alloy_rpc_types_engine::{ - ExecutionPayloadV1, ExecutionPayloadV2, ExecutionPayloadV3, PayloadAttributes, - PayloadStatusEnum, + ExecutionPayload, ExecutionPayloadV1, ExecutionPayloadV2, ExecutionPayloadV3, + PayloadAttributes, PayloadStatusEnum, }; use alloy_rpc_types_eth::Block; use op_alloy_consensus::{OpTypedTransaction, TxDeposit}; use op_alloy_rpc_types_engine::OpPayloadAttributes; -use rollup_boost::{Flashblocks, FlashblocksService}; +use rollup_boost::{Flashblocks, FlashblocksService, OpExecutionPayloadEnvelope, Version}; use super::apis::EngineApi; @@ -236,15 +236,24 @@ impl BlockGenerator { } let payload = if let Some(flashblocks_service) = &self.flashblocks_service { - flashblocks_service.get_best_payload().await?.unwrap() + flashblocks_service + .get_best_payload(Version::V3) + .await? + .unwrap() } else { - self.engine_api.get_payload_v3(payload_id).await? + OpExecutionPayloadEnvelope::V3(self.engine_api.get_payload_v3(payload_id).await?) + }; + + let execution_payload = if let ExecutionPayload::V3(execution_payload) = payload.into() { + execution_payload + } else { + return Err(eyre::eyre!("execution_payload should be V3")); }; // Validate with builder node let validation_status = self .engine_api - .new_payload(payload.execution_payload.clone(), vec![], B256::ZERO) + .new_payload(execution_payload.clone(), vec![], B256::ZERO) .await?; if validation_status.status != PayloadStatusEnum::Valid { @@ -254,7 +263,7 @@ impl BlockGenerator { // Validate with validation node if present if let Some(validation_api) = &self.validation_api { let validation_status = validation_api - .new_payload(payload.execution_payload.clone(), vec![], B256::ZERO) + .new_payload(execution_payload.clone(), vec![], B256::ZERO) .await?; if validation_status.status != PayloadStatusEnum::Valid { @@ -262,11 +271,7 @@ impl BlockGenerator { } } - let new_block_hash = payload - .execution_payload - .payload_inner - .payload_inner - .block_hash; + let new_block_hash = execution_payload.payload_inner.payload_inner.block_hash; // Update forkchoice on builder self.engine_api @@ -282,7 +287,7 @@ impl BlockGenerator { // Update internal state self.latest_hash = new_block_hash; - self.timestamp = payload.execution_payload.timestamp(); + self.timestamp = execution_payload.timestamp(); Ok(new_block_hash) }