diff --git a/crates/cast/bin/cmd/wallet/mod.rs b/crates/cast/bin/cmd/wallet/mod.rs index 240134ef933b..c5c045b75c80 100644 --- a/crates/cast/bin/cmd/wallet/mod.rs +++ b/crates/cast/bin/cmd/wallet/mod.rs @@ -1,4 +1,4 @@ -use alloy_primitives::{Address, Signature, B256}; +use alloy_primitives::{Address, Signature}; use alloy_signer::{ coins_bip39::{English, Mnemonic}, LocalWallet, MnemonicBuilder, Signer as AlloySigner, @@ -12,7 +12,7 @@ use foundry_config::Config; use foundry_wallets::{RawWalletOpts, WalletOpts, WalletSigner}; use rand::thread_rng; use serde_json::json; -use std::{path::Path, str::FromStr}; +use std::path::Path; use yansi::Paint; pub mod vanity; @@ -273,9 +273,8 @@ impl WalletSubcommands { println!("0x{sig}"); } WalletSubcommands::Verify { message, signature, address } => { - let recovered_address = - signature.recover_address_from_prehash(&B256::from_str(&message)?)?; - if recovered_address == address { + let recovered_address = Self::recover_address_from_message(&message, &signature)?; + if address == recovered_address { println!("Validation succeeded. Address {address} signed this message."); } else { println!("Validation failed. Address {address} did not sign this message."); @@ -355,6 +354,11 @@ flag to set your key via: Ok(()) } + /// Recovers an address from the specified message and signature + fn recover_address_from_message(message: &str, signature: &Signature) -> Result
{ + Ok(signature.recover_address_from_msg(message)?) + } + fn hex_str_to_bytes(s: &str) -> Result