@@ -4,8 +4,8 @@ use ethers::{
44 signers:: { LocalWallet , Signer } ,
55 types:: { Signature , SignatureError , TransactionRequest } ,
66} ;
7- use serde:: Serialize ;
8- use sp_core:: H160 ;
7+ use serde:: { Deserialize , Serialize } ;
8+ use sp_core:: { crypto :: Ss58Codec , H160 } ;
99
1010use sp_core:: {
1111 crypto:: { Pair , Public } ,
@@ -96,6 +96,24 @@ pub fn verify_polkadot_signature_ed25519(
9696 // Verify the signature
9797 signature. verify ( message, & public_key)
9898}
99+ pub fn verify_polkadot_signature_ecdsa ( message : & [ u8 ] , signature : & [ u8 ] , public_key : & str ) -> bool {
100+ // Convert the signature from bytes to the correct type
101+ let signature = EcdsaSignature :: from_slice ( signature) ;
102+ if signature. is_none ( ) {
103+ return false ;
104+ }
105+ let signature = signature. unwrap ( ) ;
106+
107+ // Convert the public key from bytes to the correct type
108+ let public_key = EcdsaPublic :: from_ss58check ( public_key) ;
109+ if public_key. is_err ( ) {
110+ return false ;
111+ }
112+ let public_key = public_key. unwrap ( ) ;
113+
114+ // Verify the signature
115+ signature. verify ( message, & public_key)
116+ }
99117
100118pub fn cosmos_verify_keplr_sign (
101119 cosmos_address_with_prefix : String ,
0 commit comments