Verify the authenticity of signed messages and typed data to ensure they originated from the expected address.
Wagmi is not available on React Native. Use Ethers.js or Viem for EVM operations.
Verify Personal Signatures
import { ethers } from "ethers";
async function verifyPersonalSignature(
message: string,
signature: string,
signerAddress: string
) {
const recoveredAddress = ethers.verifyMessage(message, signature);
const isValid = recoveredAddress.toLowerCase() === signerAddress.toLowerCase();
console.log("Signature valid:", isValid);
return isValid;
}
import { verifyMessage } from "viem";
async function verifyPersonalSignature(
address: `0x${string}`,
message: string,
signature: `0x${string}`
) {
const isValid = await verifyMessage({
address,
message,
signature,
});
console.log("Signature valid:", isValid);
return isValid;
}
Verify Typed Data Signatures (EIP-712)
import { ethers } from "ethers";
async function verifyTypedDataSignature(
domain: any,
types: any,
value: any,
signature: string,
signerAddress: string
) {
const recoveredAddress = ethers.verifyTypedData(domain, types, value, signature);
const isValid = recoveredAddress.toLowerCase() === signerAddress.toLowerCase();
console.log("Signature valid:", isValid);
return isValid;
}
import { verifyTypedData } from "viem";
async function verifyTypedDataSignature(
address: `0x${string}`,
domain: any,
types: any,
primaryType: string,
message: any,
signature: `0x${string}`
) {
const isValid = await verifyTypedData({
address,
domain,
types,
primaryType,
message,
signature,
});
console.log("Signature valid:", isValid);
return isValid;
}
Next Steps