mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
132 lines
4.0 KiB
Rust
132 lines
4.0 KiB
Rust
use crate::utils::eth_payload_attributes;
|
|
use alloy_genesis::Genesis;
|
|
use reth::{
|
|
args::RpcServerArgs,
|
|
builder::{NodeBuilder, NodeConfig, NodeHandle},
|
|
tasks::TaskManager,
|
|
};
|
|
use reth_chainspec::{ChainSpecBuilder, MAINNET};
|
|
use reth_e2e_test_utils::{
|
|
node::NodeTestContext, setup, transaction::TransactionTestContext, wallet::Wallet,
|
|
};
|
|
use reth_node_ethereum::EthereumNode;
|
|
use std::sync::Arc;
|
|
|
|
#[tokio::test]
|
|
async fn can_run_eth_node() -> eyre::Result<()> {
|
|
reth_tracing::init_test_tracing();
|
|
|
|
let (mut nodes, _tasks, wallet) = setup::<EthereumNode>(
|
|
1,
|
|
Arc::new(
|
|
ChainSpecBuilder::default()
|
|
.chain(MAINNET.chain)
|
|
.genesis(serde_json::from_str(include_str!("../assets/genesis.json")).unwrap())
|
|
.cancun_activated()
|
|
.build(),
|
|
),
|
|
false,
|
|
eth_payload_attributes,
|
|
)
|
|
.await?;
|
|
|
|
let mut node = nodes.pop().unwrap();
|
|
let raw_tx = TransactionTestContext::transfer_tx_bytes(1, wallet.inner).await;
|
|
|
|
// make the node advance
|
|
let tx_hash = node.rpc.inject_tx(raw_tx).await?;
|
|
|
|
// make the node advance
|
|
let (payload, _) = node.advance_block().await?;
|
|
|
|
let block_hash = payload.block().hash();
|
|
let block_number = payload.block().number;
|
|
|
|
// assert the block has been committed to the blockchain
|
|
node.assert_new_block(tx_hash, block_hash, block_number).await?;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[tokio::test]
|
|
#[cfg(unix)]
|
|
async fn can_run_eth_node_with_auth_engine_api_over_ipc() -> eyre::Result<()> {
|
|
reth_tracing::init_test_tracing();
|
|
let exec = TaskManager::current();
|
|
let exec = exec.executor();
|
|
|
|
// Chain spec with test allocs
|
|
let genesis: Genesis = serde_json::from_str(include_str!("../assets/genesis.json")).unwrap();
|
|
let chain_spec = Arc::new(
|
|
ChainSpecBuilder::default()
|
|
.chain(MAINNET.chain)
|
|
.genesis(genesis)
|
|
.cancun_activated()
|
|
.build(),
|
|
);
|
|
|
|
// Node setup
|
|
let node_config = NodeConfig::test()
|
|
.with_chain(chain_spec)
|
|
.with_rpc(RpcServerArgs::default().with_unused_ports().with_http().with_auth_ipc());
|
|
|
|
let NodeHandle { node, node_exit_future: _ } = NodeBuilder::new(node_config)
|
|
.testing_node(exec)
|
|
.node(EthereumNode::default())
|
|
.launch()
|
|
.await?;
|
|
let mut node = NodeTestContext::new(node, eth_payload_attributes).await?;
|
|
|
|
// Configure wallet from test mnemonic and create dummy transfer tx
|
|
let wallet = Wallet::default();
|
|
let raw_tx = TransactionTestContext::transfer_tx_bytes(1, wallet.inner).await;
|
|
|
|
// make the node advance
|
|
let tx_hash = node.rpc.inject_tx(raw_tx).await?;
|
|
|
|
// make the node advance
|
|
let (payload, _) = node.advance_block().await?;
|
|
|
|
let block_hash = payload.block().hash();
|
|
let block_number = payload.block().number;
|
|
|
|
// assert the block has been committed to the blockchain
|
|
node.assert_new_block(tx_hash, block_hash, block_number).await?;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[tokio::test]
|
|
#[cfg(unix)]
|
|
async fn test_failed_run_eth_node_with_no_auth_engine_api_over_ipc_opts() -> eyre::Result<()> {
|
|
reth_tracing::init_test_tracing();
|
|
let exec = TaskManager::current();
|
|
let exec = exec.executor();
|
|
|
|
// Chain spec with test allocs
|
|
let genesis: Genesis = serde_json::from_str(include_str!("../assets/genesis.json")).unwrap();
|
|
let chain_spec = Arc::new(
|
|
ChainSpecBuilder::default()
|
|
.chain(MAINNET.chain)
|
|
.genesis(genesis)
|
|
.cancun_activated()
|
|
.build(),
|
|
);
|
|
|
|
// Node setup
|
|
let node_config = NodeConfig::test().with_chain(chain_spec);
|
|
let NodeHandle { node, node_exit_future: _ } = NodeBuilder::new(node_config)
|
|
.testing_node(exec)
|
|
.node(EthereumNode::default())
|
|
.launch()
|
|
.await?;
|
|
|
|
let node = NodeTestContext::new(node, eth_payload_attributes).await?;
|
|
|
|
// Ensure that the engine api client is not available
|
|
let client = node.inner.engine_ipc_client().await;
|
|
assert!(client.is_none(), "ipc auth should be disabled by default");
|
|
|
|
Ok(())
|
|
}
|