feat: add helpers to obtain the engine API client (#7413)

This commit is contained in:
Matthias Seitz
2024-04-01 19:25:49 +02:00
committed by GitHub
parent 2de0bc4976
commit 9e55ba6d13
2 changed files with 36 additions and 21 deletions

View File

@ -9,7 +9,10 @@ pub use reth_node_api::NodeTypes;
use reth_node_core::{ use reth_node_core::{
dirs::{ChainPath, DataDirPath}, dirs::{ChainPath, DataDirPath},
node_config::NodeConfig, node_config::NodeConfig,
rpc::builder::{auth::AuthServerHandle, RpcServerHandle}, rpc::{
api::EngineApiClient,
builder::{auth::AuthServerHandle, RpcServerHandle},
},
}; };
use reth_payload_builder::PayloadBuilderHandle; use reth_payload_builder::PayloadBuilderHandle;
use reth_primitives::ChainSpec; use reth_primitives::ChainSpec;
@ -124,6 +127,20 @@ impl<Node: FullNodeComponents> FullNode<Node> {
pub fn auth_server_handle(&self) -> &AuthServerHandle { pub fn auth_server_handle(&self) -> &AuthServerHandle {
&self.rpc_server_handles.auth &self.rpc_server_handles.auth
} }
/// Returns the [EngineApiClient] interface for the authenticated engine API.
///
/// This will send authenticated http requests to the node's auth server.
pub fn engine_http_client(&self) -> impl EngineApiClient<Node::Engine> {
self.auth_server_handle().http_client()
}
/// Returns the [EngineApiClient] interface for the authenticated engine API.
///
/// This will send authenticated ws requests to the node's auth server.
pub async fn engine_ws_client(&self) -> impl EngineApiClient<Node::Engine> {
self.auth_server_handle().ws_client().await
}
} }
impl<Node: FullNodeComponents> Clone for FullNode<Node> { impl<Node: FullNodeComponents> Clone for FullNode<Node> {

View File

@ -12,7 +12,7 @@ use reth::{
tasks::TaskManager, tasks::TaskManager,
}; };
use reth_node_core::{args::RpcServerArgs, node_config::NodeConfig}; use reth_node_core::{args::RpcServerArgs, node_config::NodeConfig};
use reth_node_ethereum::{EthEngineTypes, EthereumNode}; use reth_node_ethereum::EthereumNode;
use reth_primitives::{Address, BlockNumberOrTag, B256}; use reth_primitives::{Address, BlockNumberOrTag, B256};
use std::time::{SystemTime, UNIX_EPOCH}; use std::time::{SystemTime, UNIX_EPOCH};
@ -46,8 +46,10 @@ async fn can_run_eth_node() -> eyre::Result<()> {
let payload_id = node.payload_builder.new_payload(eth_attr.clone()).await?; let payload_id = node.payload_builder.new_payload(eth_attr.clone()).await?;
// resolve best payload via engine api // resolve best payload via engine api
let client = node.auth_server_handle().http_client(); let client = node.engine_http_client();
EngineApiClient::<EthEngineTypes>::get_payload_v3(&client, payload_id).await?;
// ensure we can get the payload over the engine api
let _payload = client.get_payload_v3(payload_id).await?;
let mut payload_event_stream = payload_events.into_stream(); let mut payload_event_stream = payload_events.into_stream();
@ -67,29 +69,25 @@ async fn can_run_eth_node() -> eyre::Result<()> {
let payload_v3 = envelope_v3.execution_payload; let payload_v3 = envelope_v3.execution_payload;
// submit payload to engine api // submit payload to engine api
let submission = EngineApiClient::<EthEngineTypes>::new_payload_v3( let submission = client
&client, .new_payload_v3(payload_v3, vec![], eth_attr.parent_beacon_block_root.unwrap())
payload_v3, .await?;
vec![],
eth_attr.parent_beacon_block_root.unwrap(),
)
.await?;
assert!(submission.is_valid()); assert!(submission.is_valid());
// get latest valid hash from blockchain tree // get latest valid hash from blockchain tree
let hash = submission.latest_valid_hash.unwrap(); let hash = submission.latest_valid_hash.unwrap();
// trigger forkchoice update via engine api to commit the block to the blockchain // trigger forkchoice update via engine api to commit the block to the blockchain
let fcu = EngineApiClient::<EthEngineTypes>::fork_choice_updated_v2( let fcu = client
&client, .fork_choice_updated_v2(
ForkchoiceState { ForkchoiceState {
head_block_hash: hash, head_block_hash: hash,
safe_block_hash: hash, safe_block_hash: hash,
finalized_block_hash: hash, finalized_block_hash: hash,
}, },
None, None,
) )
.await?; .await?;
assert!(fcu.is_valid()); assert!(fcu.is_valid());
// get head block from notifications stream and verify the tx has been pushed to the pool // get head block from notifications stream and verify the tx has been pushed to the pool