11use std:: borrow:: Cow ;
2- use std:: collections:: HashSet ;
32use std:: future:: Future ;
43
54use cartridge:: vrf:: VrfClientError ;
@@ -27,6 +26,7 @@ use starknet::core::types::SimulationFlagForEstimateFee;
2726use starknet:: macros:: selector;
2827use starknet:: signers:: local_wallet:: SignError ;
2928use starknet:: signers:: { LocalWallet , Signer , SigningKey } ;
29+ use tower:: Layer ;
3030use tracing:: { debug, trace} ;
3131
3232use crate :: cartridge:: { encode_calls, VrfService } ;
@@ -37,9 +37,10 @@ const CARTRIDGE_ADD_EXECUTE_FROM_OUTSIDE: &str = "cartridge_addExecuteFromOutsid
3737const CARTRIDGE_ADD_EXECUTE_FROM_OUTSIDE_TX : & str = "cartridge_addExecuteOutsideTransaction" ;
3838
3939#[ derive( Debug ) ]
40- pub struct ControllerDeploymentLayer < Pool , PP , PF >
40+ pub struct ControllerDeploymentLayer < Pool , PoolTx , PP , PF >
4141where
42- Pool : TransactionPool + ' static ,
42+ Pool : TransactionPool < Transaction = PoolTx > + ' static ,
43+ PoolTx : From < BroadcastedTxWithChainId > ,
4344 PP : PendingBlockProvider ,
4445 PF : ProviderFactory ,
4546 <PF as ProviderFactory >:: Provider : ProviderRO ,
5253 vrf_service : Option < VrfService > ,
5354}
5455
56+ impl < Pool , PoolTx , PP , PF > ControllerDeploymentLayer < Pool , PoolTx , PP , PF >
57+ where
58+ Pool : TransactionPool < Transaction = PoolTx > + ' static ,
59+ PoolTx : From < BroadcastedTxWithChainId > ,
60+ PP : PendingBlockProvider ,
61+ PF : ProviderFactory ,
62+ <PF as ProviderFactory >:: Provider : ProviderRO ,
63+ {
64+ pub fn new (
65+ starknet : StarknetApi < Pool , PP , PF > ,
66+ cartridge_api : CartridgeApiClient ,
67+ paymaster_client : HttpClient ,
68+ deployer_address : ContractAddress ,
69+ deployer_private_key : SigningKey ,
70+ vrf_service : Option < VrfService > ,
71+ ) -> Self {
72+ Self {
73+ starknet,
74+ cartridge_api,
75+ paymaster_client,
76+ deployer_address,
77+ deployer_private_key,
78+ vrf_service,
79+ }
80+ }
81+ }
82+
83+ impl < S , Pool , PoolTx , PP , PF > Layer < S > for ControllerDeploymentLayer < Pool , PoolTx , PP , PF >
84+ where
85+ Pool : TransactionPool < Transaction = PoolTx > + ' static ,
86+ PoolTx : From < BroadcastedTxWithChainId > ,
87+ PP : PendingBlockProvider ,
88+ PF : ProviderFactory ,
89+ <PF as ProviderFactory >:: Provider : ProviderRO ,
90+ {
91+ type Service = ControllerDeploymentService < S , Pool , PP , PF > ;
92+
93+ fn layer ( & self , inner : S ) -> Self :: Service {
94+ ControllerDeploymentService {
95+ service : inner,
96+ starknet : self . starknet . clone ( ) ,
97+ cartridge_api : self . cartridge_api . clone ( ) ,
98+ paymaster_client : self . paymaster_client . clone ( ) ,
99+ vrf_service : self . vrf_service . clone ( ) ,
100+ deployer_address : self . deployer_address ,
101+ deployer_private_key : self . deployer_private_key . clone ( ) ,
102+ }
103+ }
104+ }
105+
55106#[ derive( Debug ) ]
56107pub struct ControllerDeploymentService < S , Pool , PP , PF >
57108where
89140 request : Request < ' a > ,
90141 ) -> S :: MethodResponse {
91142 let request_id = request. id ( ) . clone ( ) ;
92- match self . handle_estimate_fee_inner ( params, request) . await {
143+ match self . starknet_estimate_fee_inner ( params, request) . await {
93144 Ok ( response) => response,
94145 Err ( err) => MethodResponse :: error ( request_id, ErrorObjectOwned :: from ( err) ) ,
95146 }
@@ -100,14 +151,14 @@ where
100151 params : AddExecuteOutsideParams ,
101152 request : Request < ' a > ,
102153 ) -> S :: MethodResponse {
103- if let Err ( err) = self . handle_execute_outside_inner ( params) . await {
154+ if let Err ( err) = self . cartridge_add_execute_from_outside_inner ( params) . await {
104155 MethodResponse :: error ( request. id ( ) . clone ( ) , ErrorObjectOwned :: from ( err) )
105156 } else {
106157 self . service . call ( request) . await
107158 }
108159 }
109160
110- async fn handle_estimate_fee_inner < ' a > (
161+ async fn starknet_estimate_fee_inner < ' a > (
111162 & self ,
112163 params : EstimateFeeParams ,
113164 request : Request < ' a > ,
@@ -169,7 +220,7 @@ where
169220 }
170221 }
171222
172- async fn handle_execute_outside_inner (
223+ async fn cartridge_add_execute_from_outside_inner (
173224 & self ,
174225 params : AddExecuteOutsideParams ,
175226 ) -> Result < ( ) , CartridgeApiError > {
@@ -180,6 +231,7 @@ where
180231 let is_deployed = match self . starknet . class_hash_at_address ( block_id, address) . await {
181232 Ok ( ..) => true ,
182233 Err ( StarknetApiError :: ContractNotFound ) => false ,
234+
183235 Err ( e) => {
184236 return Err ( CartridgeApiError :: ControllerDeployment {
185237 reason : format ! ( "failed to check Controller deployment status: {e}" ) ,
0 commit comments