@@ -137,6 +137,7 @@ async def _prepare_invoke(
137137 nonce : Optional [int ] = None ,
138138 max_fee : Optional [int ] = None ,
139139 auto_estimate : bool = False ,
140+ cairo_version : int = 0 ,
140141 ) -> Invoke :
141142 """
142143 Takes calls and creates Invoke from them.
@@ -149,10 +150,16 @@ async def _prepare_invoke(
149150 if nonce is None :
150151 nonce = await self .get_nonce ()
151152
152- call_descriptions , calldata = _merge_calls (ensure_iterable (calls ))
153- wrapped_calldata = _execute_payload_serializer .serialize (
154- {"call_array" : call_descriptions , "calldata" : calldata }
155- )
153+ if cairo_version == 1 :
154+ parsed_calls = _parse_calls_v2 (ensure_iterable (calls ))
155+ wrapped_calldata = _execute_payload_serializer_v2 .serialize (
156+ {"calls" : parsed_calls }
157+ )
158+ else :
159+ call_descriptions , calldata = _merge_calls (ensure_iterable (calls ))
160+ wrapped_calldata = _execute_payload_serializer .serialize (
161+ {"call_array" : call_descriptions , "calldata" : calldata }
162+ )
156163
157164 transaction = Invoke (
158165 calldata = wrapped_calldata ,
@@ -246,9 +253,14 @@ async def sign_invoke_transaction(
246253 nonce : Optional [int ] = None ,
247254 max_fee : Optional [int ] = None ,
248255 auto_estimate : bool = False ,
256+ cairo_version : int = 0 ,
249257 ) -> Invoke :
250258 execute_tx = await self ._prepare_invoke (
251- calls , nonce = nonce , max_fee = max_fee , auto_estimate = auto_estimate
259+ calls ,
260+ nonce = nonce ,
261+ max_fee = max_fee ,
262+ auto_estimate = auto_estimate ,
263+ cairo_version = cairo_version ,
252264 )
253265 signature = self .signer .sign_transaction (execute_tx )
254266 return _add_signature_to_transaction (execute_tx , signature )
@@ -375,9 +387,14 @@ async def execute(
375387 nonce : Optional [int ] = None ,
376388 max_fee : Optional [int ] = None ,
377389 auto_estimate : bool = False ,
390+ cairo_version : int = 0 ,
378391 ) -> SentTransactionResponse :
379392 execute_transaction = await self .sign_invoke_transaction (
380- calls , nonce = nonce , max_fee = max_fee , auto_estimate = auto_estimate
393+ calls ,
394+ nonce = nonce ,
395+ max_fee = max_fee ,
396+ auto_estimate = auto_estimate ,
397+ cairo_version = cairo_version ,
381398 )
382399 return await self ._client .send_transaction (execute_transaction )
383400
@@ -529,6 +546,19 @@ def _merge_calls(calls: Iterable[Call]) -> Tuple[List[Dict], List[int]]:
529546 return call_descriptions , entire_calldata
530547
531548
549+ def _parse_calls_v2 (calls : Iterable [Call ]) -> List [Dict ]:
550+ calls_parsed = []
551+ for call in calls :
552+ _data = {
553+ "to" : call .to_addr ,
554+ "selector" : call .selector ,
555+ "calldata" : call .calldata ,
556+ }
557+ calls_parsed .append (_data )
558+
559+ return calls_parsed
560+
561+
532562_felt_serializer = FeltSerializer ()
533563_call_description = StructSerializer (
534564 OrderedDict (
@@ -538,9 +568,22 @@ def _merge_calls(calls: Iterable[Call]) -> Tuple[List[Dict], List[int]]:
538568 data_len = _felt_serializer ,
539569 )
540570)
571+ _call_description_v2 = StructSerializer (
572+ OrderedDict (
573+ to = _felt_serializer ,
574+ selector = _felt_serializer ,
575+ calldata = ArraySerializer (_felt_serializer ),
576+ )
577+ )
578+
541579_execute_payload_serializer = PayloadSerializer (
542580 OrderedDict (
543581 call_array = ArraySerializer (_call_description ),
544582 calldata = ArraySerializer (_felt_serializer ),
545583 )
546584)
585+ _execute_payload_serializer_v2 = PayloadSerializer (
586+ OrderedDict (
587+ calls = ArraySerializer (_call_description_v2 ),
588+ )
589+ )
0 commit comments