use crate::utils::eth_payload_attributes; use reth_chainspec::{ChainSpecBuilder, MAINNET}; use reth_e2e_test_utils::{setup, transaction::TransactionTestContext}; use reth_node_ethereum::EthereumNode; use std::sync::Arc; #[tokio::test] async fn can_sync() -> eyre::Result<()> { reth_tracing::init_test_tracing(); let (mut nodes, _tasks, wallet) = setup::( 2, Arc::new( ChainSpecBuilder::default() .chain(MAINNET.chain) .genesis(serde_json::from_str(include_str!("../assets/genesis.json")).unwrap()) .cancun_activated() .build(), ), false, ) .await?; let raw_tx = TransactionTestContext::transfer_tx_bytes(1, wallet.inner).await; let mut second_node = nodes.pop().unwrap(); let mut first_node = nodes.pop().unwrap(); // Make the first node advance let tx_hash = first_node.rpc.inject_tx(raw_tx).await?; // make the node advance let (payload, _) = first_node.advance_block(vec![], eth_payload_attributes).await?; let block_hash = payload.block().hash(); let block_number = payload.block().number; // assert the block has been committed to the blockchain first_node.assert_new_block(tx_hash, block_hash, block_number).await?; // only send forkchoice update to second node second_node.engine_api.update_forkchoice(block_hash, block_hash).await?; // expect second node advanced via p2p gossip second_node.assert_new_block(tx_hash, block_hash, 1).await?; Ok(()) }