Skip to content

Commit 719e9a3

Browse files
authored
fix: ci sync test (#364)
* fix ci sync test * refactor code * refactor code * fix no_std
1 parent ee0f11d commit 719e9a3

File tree

6 files changed

+66
-34
lines changed

6 files changed

+66
-34
lines changed

crates/chain-orchestrator/src/error.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,4 +89,7 @@ pub enum ChainOrchestratorError {
8989
/// The derived block number.
9090
derived_block_number: u64,
9191
},
92+
/// An error occurred while handling rollup node primitives.
93+
#[error("An error occurred while handling rollup node primitives: {0}")]
94+
RollupNodePrimitiveError(rollup_node_primitives::RollupNodePrimitiveError),
9295
}

crates/chain-orchestrator/src/lib.rs

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,11 @@
44
use alloy_eips::Encodable2718;
55
use alloy_primitives::{b256, bytes::Bytes, keccak256, B256};
66
use alloy_provider::Provider;
7-
use alloy_rpc_types_engine::ExecutionData;
7+
use alloy_rpc_types_engine::ExecutionPayloadV1;
88
use futures::StreamExt;
99
use reth_chainspec::EthChainSpec;
1010
use reth_network_api::{BlockDownloaderProvider, FullNetwork};
1111
use reth_network_p2p::FullBlockClient;
12-
use reth_scroll_engine_primitives::try_into_block;
1312
use reth_scroll_node::ScrollNetworkPrimitives;
1413
use reth_scroll_primitives::ScrollBlock;
1514
use reth_tasks::shutdown::Shutdown;
@@ -442,22 +441,19 @@ impl<
442441
.engine
443442
.get_payload(fcu.payload_id.expect("payload_id can not be None"))
444443
.await?;
445-
let block: ScrollBlock = try_into_block(
446-
ExecutionData { payload: payload.into(), sidecar: Default::default() },
447-
self.config.chain_spec().clone(),
448-
)
449-
.expect("block must be valid");
450444

451-
let result = self.engine.new_payload(&block).await?;
445+
let block_info: L2BlockInfoWithL1Messages = (&payload)
446+
.try_into()
447+
.map_err(ChainOrchestratorError::RollupNodePrimitiveError)?;
448+
let result = self.engine.new_payload(payload).await?;
452449
if result.is_invalid() {
453450
return Err(ChainOrchestratorError::InvalidBatch(
454-
(&block).into(),
451+
block_info.block_info,
455452
batch_info,
456453
));
457454
}
458455

459456
// Update the forkchoice state to the new head.
460-
let block_info: L2BlockInfoWithL1Messages = (&block).into();
461457
self.engine
462458
.update_fcs(
463459
Some(block_info.block_info),
@@ -1034,7 +1030,8 @@ impl<
10341030

10351031
// Validate the new blocks by sending them to the engine.
10361032
for block in &chain {
1037-
let status = self.engine.new_payload(block).await?;
1033+
let payload = ExecutionPayloadV1::from_block_slow(block);
1034+
let status = self.engine.new_payload(payload).await?;
10381035
tracing::debug!(target: "scroll::chain_orchestrator", block_number = block.number, block_hash = ?block.hash_slow(), ?status, "New payload status from engine");
10391036

10401037
if status.is_invalid() {

crates/engine/src/engine.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use super::{EngineError, ForkchoiceState};
22
use alloy_rpc_types_engine::{
33
ExecutionPayloadV1, ForkchoiceUpdated, PayloadStatus, PayloadStatusEnum,
44
};
5-
use reth_scroll_primitives::ScrollBlock;
65
use rollup_node_primitives::BlockInfo;
76
use scroll_alloy_provider::ScrollEngineApi;
87
use std::sync::Arc;
@@ -100,9 +99,11 @@ where
10099
}
101100

102101
/// Submit a new payload to the engine.
103-
pub async fn new_payload(&self, block: &ScrollBlock) -> Result<PayloadStatus, EngineError> {
104-
tracing::trace!(target: "scroll::engine", block_number = block.number, block_hash = ?block.hash_slow(), "Submitting new payload to engine");
105-
let payload = ExecutionPayloadV1::from_block_slow(block);
102+
pub async fn new_payload(
103+
&self,
104+
payload: ExecutionPayloadV1,
105+
) -> Result<PayloadStatus, EngineError> {
106+
tracing::trace!(target: "scroll::engine", block_number = payload.block_number, block_hash = ?payload.block_hash, "Submitting new payload to engine");
106107
let result = self.client.new_payload_v1(payload).await?;
107108

108109
match &result.status {

crates/primitives/src/block.rs

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1+
use crate::RollupNodePrimitiveError;
12
use alloy_consensus::Header;
23
use alloy_eips::{BlockNumHash, Decodable2718};
34
use alloy_primitives::{B256, U256};
4-
use alloy_rpc_types_engine::ExecutionPayload;
5+
use alloy_rpc_types_engine::{ExecutionPayload, ExecutionPayloadV1};
56
use core::{
67
cmp::Ordering,
78
future::Future,
@@ -179,23 +180,28 @@ impl From<&ScrollBlock> for L2BlockInfoWithL1Messages {
179180
}
180181
}
181182

182-
impl From<&ExecutionPayload> for L2BlockInfoWithL1Messages {
183-
fn from(value: &ExecutionPayload) -> Self {
184-
let block_number = value.block_number();
185-
let block_hash = value.block_hash();
186-
let l1_messages = value
187-
.as_v1()
188-
.transactions
189-
.iter()
190-
.filter_map(|raw| {
191-
(raw.as_ref().first() == Some(&L1_MESSAGE_TRANSACTION_TYPE))
192-
.then(|| {
193-
let tx = ScrollTransactionSigned::decode_2718(&mut raw.as_ref()).ok()?;
194-
Some(*tx.tx_hash())
195-
})
196-
.flatten()
197-
})
198-
.collect();
199-
Self { block_info: BlockInfo { number: block_number, hash: block_hash }, l1_messages }
183+
impl TryFrom<&ExecutionPayload> for L2BlockInfoWithL1Messages {
184+
type Error = RollupNodePrimitiveError;
185+
186+
fn try_from(value: &ExecutionPayload) -> Result<Self, Self::Error> {
187+
value.as_v1().try_into()
188+
}
189+
}
190+
191+
impl TryFrom<&ExecutionPayloadV1> for L2BlockInfoWithL1Messages {
192+
type Error = RollupNodePrimitiveError;
193+
194+
fn try_from(value: &ExecutionPayloadV1) -> Result<Self, Self::Error> {
195+
let block_number = value.block_number;
196+
let block_hash = value.block_hash;
197+
198+
let mut l1_messages = Vec::new();
199+
for tx in &value.transactions {
200+
if tx.as_ref().first() == Some(&L1_MESSAGE_TRANSACTION_TYPE) {
201+
let tx = ScrollTransactionSigned::decode_2718(&mut tx.as_ref())?;
202+
l1_messages.push(*tx.tx_hash())
203+
}
204+
}
205+
Ok(Self { block_info: BlockInfo { number: block_number, hash: block_hash }, l1_messages })
200206
}
201207
}

crates/primitives/src/error.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/// Errors related to Scroll primitives.
2+
#[derive(Debug)]
3+
pub enum RollupNodePrimitiveError {
4+
/// Error decoding an execution payload.
5+
ExecutionPayloadDecodeError(alloy_eips::eip2718::Eip2718Error),
6+
}
7+
8+
impl From<alloy_eips::eip2718::Eip2718Error> for RollupNodePrimitiveError {
9+
fn from(err: alloy_eips::eip2718::Eip2718Error) -> Self {
10+
Self::ExecutionPayloadDecodeError(err)
11+
}
12+
}
13+
14+
impl core::fmt::Display for RollupNodePrimitiveError {
15+
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
16+
match self {
17+
Self::ExecutionPayloadDecodeError(e) => {
18+
write!(f, "execution payload decode error: {e}")
19+
}
20+
}
21+
}
22+
}

crates/primitives/src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ pub use bounded_vec::BoundedVec;
2222
mod chain;
2323
pub use chain::ChainImport;
2424

25+
mod error;
26+
pub use error::RollupNodePrimitiveError;
27+
2528
mod metadata;
2629
pub use metadata::Metadata;
2730

0 commit comments

Comments
 (0)