11use alloy:: {
22 core:: sol_types:: SolValue ,
3- primitives:: { keccak256 , Address , ChainId , Bytes , U256 , B256 } ,
3+ primitives:: { Address , B256 , Bytes , ChainId , U256 , keccak256 } ,
44 rpc:: types:: { PackedUserOperation , UserOperation } ,
55} ;
66use serde:: { Deserialize , Serialize } ;
@@ -14,7 +14,15 @@ pub enum VersionedUserOp {
1414}
1515
1616/// Error type for UserOp operations
17- #[ derive( Debug , Clone , thiserror:: Error , serde:: Serialize , serde:: Deserialize , schemars:: JsonSchema , utoipa:: ToSchema ) ]
17+ #[ derive(
18+ Debug ,
19+ Clone ,
20+ thiserror:: Error ,
21+ serde:: Serialize ,
22+ serde:: Deserialize ,
23+ schemars:: JsonSchema ,
24+ utoipa:: ToSchema ,
25+ ) ]
1826#[ serde( tag = "type" , rename_all = "SCREAMING_SNAKE_CASE" ) ]
1927pub enum UserOpError {
2028 #[ error( "Unexpected error: {0}" ) ]
@@ -68,7 +76,12 @@ pub fn compute_user_op_v07_hash(
6876 // Construct initCode from factory and factoryData
6977 let init_code: Bytes = if let Some ( factory) = op. factory {
7078 if factory != Address :: ZERO {
71- [ & factory[ ..] , & op. factory_data . clone ( ) . unwrap_or_default ( ) [ ..] ] . concat ( ) . into ( )
79+ [
80+ & factory[ ..] ,
81+ & op. factory_data . clone ( ) . unwrap_or_default ( ) [ ..] ,
82+ ]
83+ . concat ( )
84+ . into ( )
7285 } else {
7386 op. factory_data . clone ( ) . unwrap_or_default ( )
7487 }
@@ -80,9 +93,10 @@ pub fn compute_user_op_v07_hash(
8093 let vgl_u128: u128 = op. verification_gas_limit . try_into ( ) . map_err ( |_| {
8194 UserOpError :: UnexpectedError ( "verification_gas_limit too large" . to_string ( ) )
8295 } ) ?;
83- let cgl_u128: u128 = op. call_gas_limit . try_into ( ) . map_err ( |_| {
84- UserOpError :: UnexpectedError ( "call_gas_limit too large" . to_string ( ) )
85- } ) ?;
96+ let cgl_u128: u128 = op
97+ . call_gas_limit
98+ . try_into ( )
99+ . map_err ( |_| UserOpError :: UnexpectedError ( "call_gas_limit too large" . to_string ( ) ) ) ?;
86100
87101 let mut account_gas_limits_bytes = [ 0u8 ; 32 ] ;
88102 account_gas_limits_bytes[ 0 ..16 ] . copy_from_slice ( & vgl_u128. to_be_bytes ( ) ) ;
@@ -93,9 +107,10 @@ pub fn compute_user_op_v07_hash(
93107 let mpfpg_u128: u128 = op. max_priority_fee_per_gas . try_into ( ) . map_err ( |_| {
94108 UserOpError :: UnexpectedError ( "max_priority_fee_per_gas too large" . to_string ( ) )
95109 } ) ?;
96- let mfpg_u128: u128 = op. max_fee_per_gas . try_into ( ) . map_err ( |_| {
97- UserOpError :: UnexpectedError ( "max_fee_per_gas too large" . to_string ( ) )
98- } ) ?;
110+ let mfpg_u128: u128 = op
111+ . max_fee_per_gas
112+ . try_into ( )
113+ . map_err ( |_| UserOpError :: UnexpectedError ( "max_fee_per_gas too large" . to_string ( ) ) ) ?;
99114
100115 let mut gas_fees_bytes = [ 0u8 ; 32 ] ;
101116 gas_fees_bytes[ 0 ..16 ] . copy_from_slice ( & mpfpg_u128. to_be_bytes ( ) ) ;
@@ -105,12 +120,24 @@ pub fn compute_user_op_v07_hash(
105120 // Construct paymasterAndData
106121 let paymaster_and_data: Bytes = if let Some ( paymaster) = op. paymaster {
107122 if paymaster != Address :: ZERO {
108- let pm_vgl_u128: u128 = op. paymaster_verification_gas_limit . unwrap_or_default ( ) . try_into ( ) . map_err ( |_| {
109- UserOpError :: UnexpectedError ( "paymaster_verification_gas_limit too large" . to_string ( ) )
110- } ) ?;
111- let pm_pogl_u128: u128 = op. paymaster_post_op_gas_limit . unwrap_or_default ( ) . try_into ( ) . map_err ( |_| {
112- UserOpError :: UnexpectedError ( "paymaster_post_op_gas_limit too large" . to_string ( ) )
113- } ) ?;
123+ let pm_vgl_u128: u128 = op
124+ . paymaster_verification_gas_limit
125+ . unwrap_or_default ( )
126+ . try_into ( )
127+ . map_err ( |_| {
128+ UserOpError :: UnexpectedError (
129+ "paymaster_verification_gas_limit too large" . to_string ( ) ,
130+ )
131+ } ) ?;
132+ let pm_pogl_u128: u128 = op
133+ . paymaster_post_op_gas_limit
134+ . unwrap_or_default ( )
135+ . try_into ( )
136+ . map_err ( |_| {
137+ UserOpError :: UnexpectedError (
138+ "paymaster_post_op_gas_limit too large" . to_string ( ) ,
139+ )
140+ } ) ?;
114141 [
115142 & paymaster[ ..] ,
116143 & pm_vgl_u128. to_be_bytes ( ) [ ..] ,
@@ -154,4 +181,4 @@ pub fn compute_user_op_v07_hash(
154181 let outer_encoded = outer_tuple. abi_encode ( ) ;
155182 let final_hash = keccak256 ( & outer_encoded) ;
156183 Ok ( final_hash)
157- }
184+ }
0 commit comments