@@ -27,7 +27,6 @@ use yttrium::erc7579::smart_sessions::{
27
27
use yttrium:: smart_accounts:: account_address:: AccountAddress ;
28
28
use yttrium:: {
29
29
bundler:: { config:: BundlerConfig , pimlico:: client:: BundlerClient } ,
30
- call:: Call ,
31
30
chain:: ChainId ,
32
31
entry_point:: { EntryPointConfig , EntryPointVersion } ,
33
32
smart_accounts:: { nonce:: get_nonce_with_key, safe:: get_call_data} ,
@@ -41,10 +40,28 @@ pub type PrepareCallsRequest = Vec<PrepareCallsRequestItem>;
41
40
pub struct PrepareCallsRequestItem {
42
41
from : AccountAddress ,
43
42
chain_id : U64 ,
44
- calls : Vec < Call > ,
43
+ calls : Vec < CallShim > ,
45
44
capabilities : Capabilities ,
46
45
}
47
46
47
+ #[ derive( Debug , Clone , PartialEq , Eq , Serialize , Deserialize ) ]
48
+ #[ serde( rename_all = "camelCase" ) ]
49
+ pub struct CallShim {
50
+ pub to : Address ,
51
+ pub value : U256 ,
52
+ pub data : Bytes ,
53
+ }
54
+
55
+ impl From < CallShim > for yttrium:: call:: Call {
56
+ fn from ( call : CallShim ) -> Self {
57
+ Self {
58
+ to : call. to ,
59
+ value : call. value ,
60
+ input : call. data ,
61
+ }
62
+ }
63
+ }
64
+
48
65
#[ derive( Debug , Clone , PartialEq , Eq , Serialize , Deserialize ) ]
49
66
#[ serde( rename_all = "camelCase" ) ]
50
67
pub struct Capabilities {
@@ -264,7 +281,7 @@ async fn handler_internal(
264
281
nonce,
265
282
factory : None ,
266
283
factory_data : None ,
267
- call_data : get_call_data ( request. calls ) ,
284
+ call_data : get_call_data ( request. calls . into_iter ( ) . map ( |c| c . into ( ) ) . collect ( ) ) ,
268
285
call_gas_limit : U256 :: ZERO ,
269
286
verification_gas_limit : U256 :: ZERO ,
270
287
pre_verification_gas : U256 :: ZERO ,
@@ -731,4 +748,45 @@ mod tests {
731
748
bytes!( "010000e015000040e0151e0104e0e0151fe018000080e01621e0165f010420e0163f0001e0141f1f014a3464b2d184c4b8517d7f2f59bab7e6269b6aa524e268fcd1eec34a9c8e2702d7389fe0033f12207b90941d9cff79a750c1e5c05ddaa17ea01be0041fe00a0001e031e00a14e021000001e1167f010160e0154b0001e1163fe018001f2b02001b60aa8eb31e11c41279f6a102026edeeb848ec600bae0435ac2bccb870bc2ef2db5e215fac4dec876f4e0184ce02a00e016ff0000e016ffe03800e2153f221203efef39a12007e01c00132e65bafa07238666c3b239e94f32dad3cdd6498de01638e017dfe0189fe0035f139a6c4974dce237e01ff35c602ca9555a3c0fa5efe0031fe00a00e1177fe0045f0366f864d5e00a43e013001f559388056f9cecfa536e70649154db93485a1f3448f0c9cba469e26f15ae4c091f8ff1b474b48673bb75d32e7e360391cb6e6db11c931dcc81986a86b380fcd48015464b5f504fd5fa527fd9437e46ea75098adce216c81fe01371e004000001e4177fe004dfe00a000002e00a13e00300e1173f00c0e0032ce00a001f41e8b94748580ca0b4993c9a1b86b5be851bfc076ff5ce3a1ff65bf16392acfc1fb800f9b4f1aef1555c7fce5599fffb17e7c635502154a0333ba21f3ae491839a01f51ce00a54e02200e0587f" ) ,
732
749
) ;
733
750
}
751
+
752
+ #[ test]
753
+ fn request_body_encoding_decoding ( ) {
754
+ let request = vec ! [ PrepareCallsRequestItem {
755
+ chain_id: U64 :: from( 1 ) ,
756
+ from: address!( "207b90941d9cff79A750C1E5c05dDaA17eA01B9F" ) . into( ) ,
757
+ calls: vec![ CallShim {
758
+ to: address!( "207b90941d9cff79a750c1e5c05ddaa17ea01b9f" ) ,
759
+ data: Bytes :: new( ) ,
760
+ value: U256 :: from( 13 ) ,
761
+ } ] ,
762
+ capabilities: Capabilities {
763
+ permissions: Permissions {
764
+ context: Uuid :: nil( ) ,
765
+ } ,
766
+ paymaster_service: None ,
767
+ } ,
768
+ } ] ;
769
+ let value = serde_json:: json!( [ {
770
+ "chainId" : "0x1" ,
771
+ "from" : "0x207b90941d9cff79a750c1e5c05ddaa17ea01b9f" ,
772
+ "calls" : [
773
+ {
774
+ "to" : "0x207b90941d9cff79a750c1e5c05ddaa17ea01b9f" ,
775
+ "data" : "0x" ,
776
+ "value" : "0xd"
777
+ }
778
+ ] ,
779
+ "capabilities" : {
780
+ "permissions" : {
781
+ "context" : "00000000-0000-0000-0000-000000000000" ,
782
+ } ,
783
+ "paymasterService" : null,
784
+ } ,
785
+ } ] ) ;
786
+ assert_eq ! ( serde_json:: to_value( & request) . unwrap( ) , value) ;
787
+ assert_eq ! (
788
+ serde_json:: from_value:: <Vec <PrepareCallsRequestItem >>( value) . unwrap( ) ,
789
+ request
790
+ ) ;
791
+ }
734
792
}
0 commit comments