@@ -5,6 +5,7 @@ use alloy::{
55use schemars:: JsonSchema ;
66use serde:: { Deserialize , Serialize } ;
77use serde_with:: { DisplayFromStr , PickFirst , serde_as} ;
8+ use thirdweb_core:: iaw:: IAWClient ;
89use vault_sdk:: VaultClient ;
910use vault_types:: enclave:: encrypted:: eoa:: MessageFormat ;
1011
@@ -164,12 +165,13 @@ pub trait AccountSigner {
164165#[ derive( Clone ) ]
165166pub struct EoaSigner {
166167 pub vault_client : VaultClient ,
168+ pub iaw_client : IAWClient ,
167169}
168170
169171impl EoaSigner {
170172 /// Create a new EOA signer
171- pub fn new ( vault_client : VaultClient ) -> Self {
172- Self { vault_client }
173+ pub fn new ( vault_client : VaultClient , iaw_client : IAWClient ) -> Self {
174+ Self { vault_client, iaw_client }
173175 }
174176}
175177
@@ -196,12 +198,37 @@ impl AccountSigner for EoaSigner {
196198 )
197199 . await
198200 . map_err ( |e| {
199- tracing:: error!( "Error signing message with EOA: {:?}" , e) ;
201+ tracing:: error!( "Error signing message with EOA (Vault) : {:?}" , e) ;
200202 e
201203 } ) ?;
202204
203205 Ok ( vault_result. signature )
204206 }
207+ SigningCredential :: Iaw { auth_token, thirdweb_auth } => {
208+ // Convert MessageFormat to IAW MessageFormat
209+ let iaw_format = match format {
210+ MessageFormat :: Text => thirdweb_core:: iaw:: MessageFormat :: Text ,
211+ MessageFormat :: Hex => thirdweb_core:: iaw:: MessageFormat :: Hex ,
212+ } ;
213+
214+ let iaw_result = self
215+ . iaw_client
216+ . sign_message (
217+ auth_token,
218+ thirdweb_auth,
219+ message. to_string ( ) ,
220+ options. from ,
221+ options. chain_id ,
222+ Some ( iaw_format) ,
223+ )
224+ . await
225+ . map_err ( |e| {
226+ tracing:: error!( "Error signing message with EOA (IAW): {:?}" , e) ;
227+ EngineError :: from ( e)
228+ } ) ?;
229+
230+ Ok ( iaw_result. signature )
231+ }
205232 }
206233 }
207234
@@ -218,12 +245,29 @@ impl AccountSigner for EoaSigner {
218245 . sign_typed_data ( auth_method. clone ( ) , typed_data. clone ( ) , options. from )
219246 . await
220247 . map_err ( |e| {
221- tracing:: error!( "Error signing typed data with EOA: {:?}" , e) ;
248+ tracing:: error!( "Error signing typed data with EOA (Vault) : {:?}" , e) ;
222249 e
223250 } ) ?;
224251
225252 Ok ( vault_result. signature )
226253 }
254+ SigningCredential :: Iaw { auth_token, thirdweb_auth } => {
255+ let iaw_result = self
256+ . iaw_client
257+ . sign_typed_data (
258+ auth_token. clone ( ) ,
259+ thirdweb_auth. clone ( ) ,
260+ typed_data. clone ( ) ,
261+ options. from ,
262+ )
263+ . await
264+ . map_err ( |e| {
265+ tracing:: error!( "Error signing typed data with EOA (IAW): {:?}" , e) ;
266+ EngineError :: from ( e)
267+ } ) ?;
268+
269+ Ok ( iaw_result. signature )
270+ }
227271 }
228272 }
229273}
0 commit comments