1+ use crate :: OwWalletConfig ;
12use alloy:: eips:: BlockId ;
23use alloy:: network:: EthereumWallet ;
34use alloy:: primitives:: { Address , B256 } ;
@@ -7,13 +8,13 @@ use alloy::providers::fillers::{
78use alloy:: providers:: { Provider , ProviderBuilder } ;
89use alloy:: signers:: Signer ;
910use alloy:: signers:: local:: PrivateKeySigner ;
11+ use alloy:: sol_types:: SolStruct ;
1012use alloy_signer_aws:: AwsSigner ;
13+ use alloy_sol_types:: Eip712Domain ;
1114use anyhow:: Context ;
1215use aws_config:: BehaviorVersion ;
1316use aws_config:: meta:: region:: RegionProviderChain ;
1417
15- use crate :: OwWalletConfig ;
16-
1718pub struct OwWallet {
1819 pub use_kms : bool ,
1920 pub wallet : EthereumWallet ,
@@ -134,4 +135,20 @@ impl OwWallet {
134135 }
135136 Ok ( signature)
136137 }
138+
139+ pub async fn sign_typed_data < T : SolStruct + Send + Sync > (
140+ & self ,
141+ payload : & T ,
142+ domain : & Eip712Domain ,
143+ ) -> anyhow:: Result < alloy:: signers:: Signature > {
144+ let signature;
145+ if self . use_kms {
146+ let aws_signer = self . try_aws_signer ( ) ?;
147+ signature = aws_signer. sign_typed_data ( payload, domain) . await ?;
148+ } else {
149+ let private_key_signer = self . try_private_key_signer ( ) ?;
150+ signature = private_key_signer. sign_typed_data ( payload, domain) . await ?;
151+ }
152+ Ok ( signature)
153+ }
137154}
0 commit comments