@@ -7,8 +7,6 @@ use std::future::IntoFuture;
77use std:: sync:: Arc ;
88
99use anyhow:: { bail, Context , Result } ;
10- #[ cfg( feature = "cartridge" ) ]
11- use cartridge:: rpc:: { layer:: PaymasterLayer , Paymaster } ;
1210use config:: rpc:: RpcModuleKind ;
1311use config:: Config ;
1412use http:: header:: CONTENT_TYPE ;
@@ -52,10 +50,12 @@ use katana_rpc_api::tee::TeeApiServer;
5250use katana_rpc_client:: starknet:: Client as StarknetClient ;
5351#[ cfg( feature = "cartridge" ) ]
5452use katana_rpc_server:: cartridge:: { CartridgeApi , CartridgeConfig } ;
55- use katana_rpc_server:: cors:: Cors ;
5653use katana_rpc_server:: dev:: DevApi ;
57- use katana_rpc_server:: logger:: RpcLoggerLayer ;
58- use katana_rpc_server:: metrics:: RpcServerMetricsLayer ;
54+ #[ cfg( feature = "cartridge" ) ]
55+ use katana_rpc_server:: middleware:: cartridge:: ControllerDeploymentLayer ;
56+ use katana_rpc_server:: middleware:: cors:: Cors ;
57+ use katana_rpc_server:: middleware:: logger:: RpcLoggerLayer ;
58+ use katana_rpc_server:: middleware:: metrics:: RpcServerMetricsLayer ;
5959#[ cfg( feature = "paymaster" ) ]
6060use katana_rpc_server:: paymaster:: PaymasterProxy ;
6161use katana_rpc_server:: starknet:: { StarknetApi , StarknetApiConfig } ;
@@ -75,16 +75,16 @@ use crate::exit::NodeStoppedFuture;
7575
7676/// The concrete type of the RPC middleware stack used by the node.
7777#[ cfg( feature = "cartridge" ) ]
78- type NodeRpcMiddleware < P > = Stack <
79- Either < PaymasterLayer < P > , Identity > ,
78+ type NodeRpcMiddleware < Pool , PP , PF > = Stack <
79+ Either < ControllerDeploymentLayer < Pool , PP , PF > , Identity > ,
8080 Stack < RpcLoggerLayer , Stack < RpcServerMetricsLayer , Identity > > ,
8181> ;
8282
8383#[ cfg( not( feature = "cartridge" ) ) ]
8484type NodeRpcMiddleware = Stack < RpcLoggerLayer , Stack < RpcServerMetricsLayer , Identity > > ;
8585
8686#[ cfg( feature = "cartridge" ) ]
87- pub type NodeRpcServer < P > = RpcServer < NodeRpcMiddleware < P > > ;
87+ pub type NodeRpcServer < Pool , PP , PF > = RpcServer < NodeRpcMiddleware < Pool , PP , PF > > ;
8888
8989#[ cfg( not( feature = "cartridge" ) ) ]
9090pub type NodeRpcServer = RpcServer < NodeRpcMiddleware > ;
@@ -254,14 +254,60 @@ where
254254 rpc_modules. merge ( proxy. into_rpc ( ) ) ?;
255255 } ;
256256
257+ // --- build starknet api
258+
259+ let starknet_api_cfg = StarknetApiConfig {
260+ max_event_page_size : config. rpc . max_event_page_size ,
261+ max_proof_keys : config. rpc . max_proof_keys ,
262+ max_call_gas : config. rpc . max_call_gas ,
263+ max_concurrent_estimate_fee_requests : config. rpc . max_concurrent_estimate_fee_requests ,
264+ simulation_flags : execution_flags,
265+ versioned_constant_overrides,
266+ } ;
267+
268+ let chain_spec = backend. chain_spec . clone ( ) ;
269+
270+ let starknet_api = StarknetApi :: new (
271+ chain_spec. clone ( ) ,
272+ pool. clone ( ) ,
273+ task_spawner. clone ( ) ,
274+ block_producer. clone ( ) ,
275+ gas_oracle. clone ( ) ,
276+ starknet_api_cfg,
277+ provider. clone ( ) ,
278+ ) ;
279+
280+ if config. rpc . apis . contains ( & RpcModuleKind :: Starknet ) {
281+ #[ cfg( feature = "explorer" ) ]
282+ if config. rpc . explorer {
283+ rpc_modules. merge ( StarknetApiExtServer :: into_rpc ( starknet_api. clone ( ) ) ) ?;
284+ }
285+
286+ rpc_modules. merge ( StarknetApiServer :: into_rpc ( starknet_api. clone ( ) ) ) ?;
287+ rpc_modules. merge ( StarknetWriteApiServer :: into_rpc ( starknet_api. clone ( ) ) ) ?;
288+ rpc_modules. merge ( StarknetTraceApiServer :: into_rpc ( starknet_api. clone ( ) ) ) ?;
289+ }
290+
291+ if config. rpc . apis . contains ( & RpcModuleKind :: Starknet ) {
292+ rpc_modules. merge ( KatanaApiServer :: into_rpc ( starknet_api. clone ( ) ) ) ?;
293+ }
294+
295+ if config. rpc . apis . contains ( & RpcModuleKind :: Dev ) {
296+ let api = DevApi :: new ( backend. clone ( ) , block_producer. clone ( ) ) ;
297+ rpc_modules. merge ( DevApiServer :: into_rpc ( api) ) ?;
298+ }
299+
300+ // --- build cartridge api (plus middleware)
301+
257302 #[ cfg( feature = "cartridge" ) ]
258303 let controller_deployment_layer = if let Some ( cfg) = & config. paymaster {
259304 if let Some ( cartridge_api_cfg) = & cfg. cartridge_api {
305+ use anyhow:: ensure;
260306 use katana_rpc_client:: HttpClient ;
261307 use katana_rpc_server:: cartridge:: VrfService ;
262308 use katana_rpc_server:: middleware:: cartridge:: ControllerDeploymentLayer ;
263309
264- anyhow :: ensure!(
310+ ensure ! (
265311 config. rpc. apis. contains( & RpcModuleKind :: Cartridge ) ,
266312 "Cartridge API should be enabled when paymaster is set"
267313 ) ;
@@ -289,9 +335,6 @@ where
289335 paymaster_url : cfg. url . clone ( ) ,
290336 paymaster_api_key : cfg. api_key . clone ( ) ,
291337 api_url : cartridge_api_cfg. cartridge_api_url . clone ( ) ,
292- controller_deployer_address : cartridge_api_cfg. controller_deployer_address ,
293- controller_deployer_private_key : cartridge_api_cfg
294- . controller_deployer_private_key ,
295338 #[ cfg( feature = "vrf" ) ]
296339 vrf : vrf. clone ( ) ,
297340 } ;
@@ -323,49 +366,6 @@ where
323366 None
324367 } ;
325368
326- // --- build starknet api
327-
328- let starknet_api_cfg = StarknetApiConfig {
329- max_event_page_size : config. rpc . max_event_page_size ,
330- max_proof_keys : config. rpc . max_proof_keys ,
331- max_call_gas : config. rpc . max_call_gas ,
332- max_concurrent_estimate_fee_requests : config. rpc . max_concurrent_estimate_fee_requests ,
333- simulation_flags : execution_flags,
334- versioned_constant_overrides,
335- } ;
336-
337- let chain_spec = backend. chain_spec . clone ( ) ;
338-
339- let starknet_api = StarknetApi :: new (
340- chain_spec. clone ( ) ,
341- pool. clone ( ) ,
342- task_spawner. clone ( ) ,
343- block_producer. clone ( ) ,
344- gas_oracle. clone ( ) ,
345- starknet_api_cfg,
346- provider. clone ( ) ,
347- ) ;
348-
349- if config. rpc . apis . contains ( & RpcModuleKind :: Starknet ) {
350- #[ cfg( feature = "explorer" ) ]
351- if config. rpc . explorer {
352- rpc_modules. merge ( StarknetApiExtServer :: into_rpc ( starknet_api. clone ( ) ) ) ?;
353- }
354-
355- rpc_modules. merge ( StarknetApiServer :: into_rpc ( starknet_api. clone ( ) ) ) ?;
356- rpc_modules. merge ( StarknetWriteApiServer :: into_rpc ( starknet_api. clone ( ) ) ) ?;
357- rpc_modules. merge ( StarknetTraceApiServer :: into_rpc ( starknet_api. clone ( ) ) ) ?;
358- }
359-
360- if config. rpc . apis . contains ( & RpcModuleKind :: Starknet ) {
361- rpc_modules. merge ( KatanaApiServer :: into_rpc ( starknet_api. clone ( ) ) ) ?;
362- }
363-
364- if config. rpc . apis . contains ( & RpcModuleKind :: Dev ) {
365- let api = DevApi :: new ( backend. clone ( ) , block_producer. clone ( ) ) ;
366- rpc_modules. merge ( DevApiServer :: into_rpc ( api) ) ?;
367- }
368-
369369 // --- build tee api (if configured)
370370 #[ cfg( feature = "tee" ) ]
371371 if config. rpc . apis . contains ( & RpcModuleKind :: Tee ) {
0 commit comments