Skip to content
1 change: 1 addition & 0 deletions crates/node/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ tempo-chainspec.workspace = true
tempo-consensus.workspace = true
tempo-payload-builder.workspace = true
tempo-payload-types.workspace = true
tempo-contracts.workspace = true
tempo-precompiles.workspace = true
tempo-primitives = { workspace = true, features = ["default"] }

Expand Down
5 changes: 3 additions & 2 deletions crates/node/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ pub use tempo_primitives as primitives;

mod version;

type TempoNodeAdapter = NodeAdapter<RethFullAdapter<DatabaseEnv, TempoNode>>;
type TempoFullNodeTypes = RethFullAdapter<DatabaseEnv, TempoNode>;
type TempoNodeAdapter = NodeAdapter<TempoFullNodeTypes>;

/// Type alias for a launched tempo node.
pub type TempoFullNode = FullNode<TempoNodeAdapter, TempoAddOns<TempoNodeAdapter>>;
pub type TempoFullNode = FullNode<TempoNodeAdapter, TempoAddOns<TempoFullNodeTypes>>;
80 changes: 38 additions & 42 deletions crates/node/src/node.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@ use crate::{
TempoPayloadTypes,
engine::TempoEngineValidator,
rpc::{
TempoAdminApi, TempoAdminApiServer, TempoEthApiBuilder, TempoEthExt, TempoEthExtApiServer,
TempoForkScheduleApiServer, TempoForkScheduleRpc, TempoToken, TempoTokenApiServer,
TempoAdminApi, TempoAdminApiServer, TempoEthApi, TempoEthApiBuilder, TempoEthExt,
TempoEthExtApiServer, TempoForkScheduleApiServer, TempoForkScheduleRpc, TempoSimulate,
TempoSimulateApiServer, TempoToken, TempoTokenApiServer,
},
};
use alloy_primitives::B256;
use reth_evm::revm::primitives::Address;
use reth_node_api::{
AddOnsContext, FullNodeComponents, FullNodeTypes, NodeAddOns, NodePrimitives, NodeTypes,
AddOnsContext, FullNodeComponents, FullNodeTypes, NodeAddOns, NodeTypes,
PayloadAttributesBuilder, PayloadTypes,
};
use reth_node_builder::{
Expand All @@ -19,8 +20,8 @@ use reth_node_builder::{
PayloadBuilderBuilder, PoolBuilder, TxPoolBuilder, spawn_maintenance_tasks,
},
rpc::{
BasicEngineValidatorBuilder, EngineValidatorAddOn, EngineValidatorBuilder, EthApiBuilder,
NoopEngineApiBuilder, PayloadValidatorBuilder, RethRpcAddOns, RpcAddOns,
BasicEngineValidatorBuilder, EngineValidatorAddOn, NoopEngineApiBuilder,
PayloadValidatorBuilder, RethRpcAddOns, RpcAddOns, RpcHandle, RpcHooks,
},
};
use reth_node_ethereum::EthereumNetworkBuilder;
Expand Down Expand Up @@ -152,18 +153,19 @@ impl NodeTypes for TempoNode {
}

#[derive(Debug)]
pub struct TempoAddOns<
N: FullNodeComponents,
EthB: EthApiBuilder<N> = TempoEthApiBuilder,
PVB = TempoEngineValidatorBuilder,
EVB = BasicEngineValidatorBuilder<PVB>,
RpcMiddleware = Identity,
> {
inner: RpcAddOns<N, EthB, PVB, NoopEngineApiBuilder, EVB, RpcMiddleware>,
pub struct TempoAddOns<N: FullNodeTypes<Types = TempoNode>> {
inner: RpcAddOns<
NodeAdapter<N>,
TempoEthApiBuilder,
TempoEngineValidatorBuilder,
NoopEngineApiBuilder,
BasicEngineValidatorBuilder<TempoEngineValidatorBuilder>,
Identity,
>,
validator_key: Option<B256>,
}

impl<N> TempoAddOns<NodeAdapter<N>, TempoEthApiBuilder>
impl<N> TempoAddOns<N>
where
N: FullNodeTypes<Types = TempoNode>,
{
Expand All @@ -182,20 +184,20 @@ where
}
}

impl<N, EthB, PVB, EVB> NodeAddOns<N> for TempoAddOns<N, EthB, PVB, EVB>
impl<N> NodeAddOns<NodeAdapter<N>> for TempoAddOns<N>
where
N: FullNodeComponents<Types = TempoNode, Evm = TempoEvmConfig>,
EthB: EthApiBuilder<N>,
PVB: Send + PayloadValidatorBuilder<N>,
EVB: EngineValidatorBuilder<N>,
EthB::EthApi:
RpcNodeCore<Evm = TempoEvmConfig, Primitives: NodePrimitives<BlockHeader = TempoHeader>>,
N: FullNodeTypes<Types = TempoNode>,
{
type Handle = <RpcAddOns<N, EthB, PVB, NoopEngineApiBuilder, EVB> as NodeAddOns<N>>::Handle;
type Handle = RpcHandle<NodeAdapter<N>, TempoEthApi<N>>;

async fn launch_add_ons(self, ctx: AddOnsContext<'_, N>) -> eyre::Result<Self::Handle> {
let eth_config =
EthConfigHandler::new(ctx.node.provider().clone(), ctx.node.evm_config().clone());
async fn launch_add_ons(
self,
ctx: AddOnsContext<'_, NodeAdapter<N>>,
) -> eyre::Result<Self::Handle> {
let eth_config = EthConfigHandler::new(
ctx.node.provider.clone(),
ctx.node.components.evm_config.clone(),
);

self.inner
.launch_add_ons_with(ctx, move |container| {
Expand All @@ -205,13 +207,15 @@ where

let eth_api = registry.eth_api().clone();
let token = TempoToken::new(eth_api.clone());
let eth_ext = TempoEthExt::new(eth_api);
let eth_ext = TempoEthExt::new(eth_api.clone());
let simulate = TempoSimulate::new(eth_api);
let admin = TempoAdminApi::new(self.validator_key);
let fork_schedule =
TempoForkScheduleRpc::new(registry.eth_api().provider().clone());

modules.merge_configured(token.into_rpc())?;
modules.merge_configured(eth_ext.into_rpc())?;
modules.merge_if_module_configured(RethRpcModule::Eth, simulate.into_rpc())?;
modules.merge_configured(fork_schedule.into_rpc())?;
modules.merge_if_module_configured(RethRpcModule::Admin, admin.into_rpc())?;
modules.merge_if_module_configured(RethRpcModule::Eth, eth_config.into_rpc())?;
Expand All @@ -222,30 +226,22 @@ where
}
}

impl<N, EthB, PVB, EVB> RethRpcAddOns<N> for TempoAddOns<N, EthB, PVB, EVB>
impl<N> RethRpcAddOns<NodeAdapter<N>> for TempoAddOns<N>
where
N: FullNodeComponents<Types = TempoNode, Evm = TempoEvmConfig>,
EthB: EthApiBuilder<N>,
PVB: PayloadValidatorBuilder<N>,
EVB: EngineValidatorBuilder<N>,
EthB::EthApi:
RpcNodeCore<Evm = TempoEvmConfig, Primitives: NodePrimitives<BlockHeader = TempoHeader>>,
N: FullNodeTypes<Types = TempoNode>,
{
type EthApi = EthB::EthApi;
type EthApi = TempoEthApi<N>;

fn hooks_mut(&mut self) -> &mut reth_node_builder::rpc::RpcHooks<N, Self::EthApi> {
fn hooks_mut(&mut self) -> &mut RpcHooks<NodeAdapter<N>, Self::EthApi> {
self.inner.hooks_mut()
}
}

impl<N, EthB, PVB, EVB> EngineValidatorAddOn<N> for TempoAddOns<N, EthB, PVB, EVB>
impl<N> EngineValidatorAddOn<NodeAdapter<N>> for TempoAddOns<N>
where
N: FullNodeComponents<Types = TempoNode, Evm = TempoEvmConfig>,
EthB: EthApiBuilder<N>,
PVB: Send,
EVB: EngineValidatorBuilder<N>,
N: FullNodeTypes<Types = TempoNode>,
{
type ValidatorBuilder = EVB;
type ValidatorBuilder = BasicEngineValidatorBuilder<TempoEngineValidatorBuilder>;

fn engine_validator_builder(&self) -> Self::ValidatorBuilder {
self.inner.engine_validator_builder()
Expand All @@ -265,7 +261,7 @@ where
TempoConsensusBuilder,
>;

type AddOns = TempoAddOns<NodeAdapter<N>>;
type AddOns = TempoAddOns<N>;

fn components_builder(&self) -> Self::ComponentsBuilder {
Self::components(self.pool_builder, self.payload_builder_builder)
Expand Down
4 changes: 3 additions & 1 deletion crates/node/src/rpc/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ pub mod consensus;
pub mod error;
pub mod eth_ext;
pub mod fork_schedule;
pub mod simulate;
pub mod token;

pub use admin::{TempoAdminApi, TempoAdminApiServer};
Expand All @@ -18,6 +19,7 @@ use reth_primitives_traits::{
};
use reth_rpc_eth_api::{FromEthApiError, RpcTxReq};
use reth_transaction_pool::{PoolPooledTx, TransactionOrigin};
pub use simulate::{TempoSimulate, TempoSimulateApiServer, TempoSimulateV1Response};
use std::sync::Arc;
pub use tempo_alloy::rpc::TempoTransactionRequest;
use tempo_chainspec::TempoChainSpec;
Expand Down Expand Up @@ -87,7 +89,7 @@ pub const SUBBLOCK_TX_CHANNEL_CAPACITY: usize = 10_000;
///
/// This type implements the [`FullEthApi`](reth_rpc_eth_api::helpers::FullEthApi) by implemented
/// all the `Eth` helper traits and prerequisite traits.
#[derive(Clone)]
#[derive(Debug, Clone)]
pub struct TempoEthApi<N: FullNodeTypes<Types = TempoNode>> {
/// Gateway to node's core components.
inner: EthApi<NodeAdapter<N>, DynRpcConverter<TempoEvmConfig, TempoNetwork>>,
Expand Down
Loading
Loading