@@ -27,7 +27,7 @@ use katana_rpc_server::middleware::cartridge::ControllerDeploymentLayer;
2727use katana_rpc_server:: starknet:: { PendingBlockProvider , StarknetApi , StarknetApiConfig } ;
2828use katana_rpc_types:: * ;
2929use katana_tasks:: TaskManager ;
30- use serde_json:: json;
30+ use serde_json:: { json, Value } ;
3131use starknet:: signers:: SigningKey ;
3232use tokio:: net:: TcpListener ;
3333use tower:: Layer ;
@@ -68,10 +68,7 @@ async fn estimate_fee_forwards_when_no_controllers() {
6868 let setup = setup_test ( HashMap :: new ( ) , inner_responses) . await ;
6969
7070 let tx = make_invoke_tx_json ( DEPLOYER_ADDRESS ) ;
71- let params = json ! ( [ [ tx] , [ ] , "latest" ] ) ;
72- let raw = make_rpc_request_str ( "starknet_estimateFee" , & params) ;
73-
74- let request: Request < ' _ > = serde_json:: from_str ( & raw ) . unwrap ( ) ;
71+ let request = make_rpc_request ( "starknet_estimateFee" , & json ! ( [ [ tx] , [ ] , "latest" ] ) ) ;
7572 let response = setup. service . call ( request) . await ;
7673
7774 // The inner service should have been called exactly once.
@@ -102,9 +99,9 @@ async fn estimate_fee_prepends_deploy_tx_for_controller() {
10299 m
103100 } ;
104101
102+ // The inner service will receive 2 txs (1 deploy + 1 original) thus return 2 estimates.
105103 let inner_responses = {
106104 let mut m = HashMap :: new ( ) ;
107- // The inner service will receive 2 txs (1 deploy + 1 original).
108105 m. insert (
109106 "starknet_estimateFee" . to_string ( ) ,
110107 json ! ( [
@@ -133,11 +130,8 @@ async fn estimate_fee_prepends_deploy_tx_for_controller() {
133130
134131 let setup = setup_test ( cartridge_responses, inner_responses) . await ;
135132
136- let tx = make_invoke_tx_json ( CONTROLLER_ADDRESS ) ;
137- let params = json ! ( [ [ tx] , [ ] , "latest" ] ) ;
138- let raw = make_rpc_request_str ( "starknet_estimateFee" , & params) ;
139-
140- let request: Request < ' _ > = serde_json:: from_str ( & raw ) . unwrap ( ) ;
133+ let txs = [ make_invoke_tx_json ( CONTROLLER_ADDRESS ) ] ;
134+ let request = make_rpc_request ( "starknet_estimateFee" , & json ! ( [ txs, [ ] , "latest" ] ) ) ;
141135 let response = setup. service . call ( request) . await ;
142136
143137 // Inner service should receive 2 txs: deploy tx + original tx.
@@ -192,11 +186,8 @@ async fn estimate_fee_forwards_for_non_controller() {
192186
193187 let setup = setup_test ( HashMap :: new ( ) , inner_responses) . await ;
194188
195- let tx = make_invoke_tx_json ( NON_CONTROLLER_ADDRESS ) ;
196- let params = json ! ( [ [ tx] , [ ] , "latest" ] ) ;
197- let raw = make_rpc_request_str ( "starknet_estimateFee" , & params) ;
198-
199- let request: Request < ' _ > = serde_json:: from_str ( & raw ) . unwrap ( ) ;
189+ let txs = [ make_invoke_tx_json ( NON_CONTROLLER_ADDRESS ) ] ;
190+ let request = make_rpc_request ( "starknet_estimateFee" , & json ! ( [ txs, [ ] , "latest" ] ) ) ;
200191 let response = setup. service . call ( request) . await ;
201192
202193 // Inner service receives the request unchanged (1 tx).
@@ -245,13 +236,10 @@ async fn estimate_fee_deduplicates_same_controller() {
245236
246237 let setup = setup_test ( cartridge_responses, inner_responses) . await ;
247238
248- let tx1 = make_invoke_tx_json ( CONTROLLER_ADDRESS ) ;
249- let tx2 = make_invoke_tx_json ( CONTROLLER_ADDRESS ) ;
250- let tx3 = make_invoke_tx_json ( CONTROLLER_ADDRESS ) ;
251- let params = json ! ( [ [ tx1, tx2, tx3] , [ ] , "latest" ] ) ;
252- let raw = make_rpc_request_str ( "starknet_estimateFee" , & params) ;
239+ let tx = make_invoke_tx_json ( CONTROLLER_ADDRESS ) ;
240+ let txs = [ tx, tx. clone ( ) , tx. clone ( ) ] ;
253241
254- let request: Request < ' _ > = serde_json :: from_str ( & raw ) . unwrap ( ) ;
242+ let request = make_rpc_request ( "starknet_estimateFee" , & json ! ( [ txs , [ ] , "latest" ] ) ) ;
255243 let response = setup. service . call ( request) . await ;
256244
257245 // Inner service should receive 4 txs: 1 deploy + 3 original.
@@ -294,9 +282,7 @@ async fn execute_outside_skips_deploy_when_already_deployed() {
294282 let setup = setup_test ( HashMap :: new ( ) , HashMap :: new ( ) ) . await ;
295283
296284 let params = make_execute_outside_params ( DEPLOYER_ADDRESS ) ;
297- let raw = make_rpc_request_str ( "cartridge_addExecuteFromOutside" , & params) ;
298-
299- let request: Request < ' _ > = serde_json:: from_str ( & raw ) . unwrap ( ) ;
285+ let request = make_rpc_request ( "cartridge_addExecuteFromOutside" , & params) ;
300286 let _response = setup. service . call ( request) . await ;
301287
302288 // Pool should be empty — no deploy tx was added.
@@ -333,9 +319,7 @@ async fn execute_outside_deploys_controller() {
333319 let setup = setup_test ( cartridge_responses, HashMap :: new ( ) ) . await ;
334320
335321 let params = make_execute_outside_params ( CONTROLLER_ADDRESS ) ;
336- let raw = make_rpc_request_str ( "cartridge_addExecuteFromOutside" , & params) ;
337-
338- let request: Request < ' _ > = serde_json:: from_str ( & raw ) . unwrap ( ) ;
322+ let request = make_rpc_request ( "cartridge_addExecuteFromOutside" , & params) ;
339323 let _response = setup. service . call ( request) . await ;
340324
341325 // A deploy transaction should have been added to the pool.
@@ -361,9 +345,7 @@ async fn execute_outside_skips_deploy_for_non_controller() {
361345 let setup = setup_test ( HashMap :: new ( ) , HashMap :: new ( ) ) . await ;
362346
363347 let params = make_execute_outside_params ( NON_CONTROLLER_ADDRESS ) ;
364- let raw = make_rpc_request_str ( "cartridge_addExecuteFromOutside" , & params) ;
365-
366- let request: Request < ' _ > = serde_json:: from_str ( & raw ) . unwrap ( ) ;
348+ let request = make_rpc_request ( "cartridge_addExecuteFromOutside" , & params) ;
367349 let _response = setup. service . call ( request) . await ;
368350
369351 // Pool should be empty — no deploy tx was added.
@@ -395,9 +377,7 @@ async fn execute_outside_tx_method_variant() {
395377 let setup = setup_test ( cartridge_responses, HashMap :: new ( ) ) . await ;
396378
397379 let params = make_execute_outside_params ( CONTROLLER_ADDRESS ) ;
398- let raw = make_rpc_request_str ( "cartridge_addExecuteOutsideTransaction" , & params) ;
399-
400- let request: Request < ' _ > = serde_json:: from_str ( & raw ) . unwrap ( ) ;
380+ let request = make_rpc_request ( "cartridge_addExecuteOutsideTransaction" , & params) ;
401381 let _response = setup. service . call ( request) . await ;
402382
403383 // A deploy transaction should have been added to the pool.
@@ -425,9 +405,7 @@ async fn execute_outside_tx_method_variant() {
425405async fn passthrough_other_methods ( ) {
426406 let setup = setup_test ( HashMap :: new ( ) , HashMap :: new ( ) ) . await ;
427407
428- let raw = make_rpc_request_str ( "starknet_getBlockNumber" , & json ! ( [ ] ) ) ;
429-
430- let request: Request < ' _ > = serde_json:: from_str ( & raw ) . unwrap ( ) ;
408+ let request = make_rpc_request ( "starknet_getBlockNumber" , & json ! ( [ ] ) ) ;
431409 let _response = setup. service . call ( request) . await ;
432410
433411 let calls = setup. mock_rpc . recorded_calls ( ) ;
@@ -451,9 +429,7 @@ async fn passthrough_malformed_estimate_fee() {
451429 let setup = setup_test ( HashMap :: new ( ) , HashMap :: new ( ) ) . await ;
452430
453431 // Malformed params — not a valid array of transactions.
454- let raw = make_rpc_request_str ( "starknet_estimateFee" , & json ! ( [ "not_valid" ] ) ) ;
455-
456- let request: Request < ' _ > = serde_json:: from_str ( & raw ) . unwrap ( ) ;
432+ let request = make_rpc_request ( "starknet_estimateFee" , & json ! ( [ "not_valid" ] ) ) ;
457433 let _response = setup. service . call ( request) . await ;
458434
459435 // The inner service should have received the request (fallthrough).
@@ -724,14 +700,14 @@ fn make_invoke_tx_json(sender_address: &str) -> serde_json::Value {
724700}
725701
726702/// Creates a JSON-RPC 2.0 request string and constructs the corresponding `Request<'_>`.
727- fn make_rpc_request_str ( method : & str , params : & serde_json:: Value ) -> String {
728- json ! ( {
703+ fn make_rpc_request < ' a > ( method : & str , params : & serde_json:: Value ) -> Request < ' a > {
704+ serde_json :: from_value ( json ! ( {
729705 "jsonrpc" : "2.0" ,
730706 "id" : 1 ,
731707 "method" : method,
732708 "params" : params
733- } )
734- . to_string ( )
709+ } ) )
710+ . unwrap ( )
735711}
736712
737713/// A complete test setup context.
0 commit comments