Wagmi is not available on React Native. Use Ethers.js or Viem for EVM operations.
Sign Personal Messages
- Ethers.js
- Viem
import { ethers } from "ethers";
import { ParaEthersSigner } from "@getpara/ethers-v6-integration";
async function signMessage(signer: ParaEthersSigner, message: string) {
const signature = await signer.signMessage(message);
const address = await signer.getAddress();
const recoveredAddress = ethers.verifyMessage(message, signature);
return {
signature,
address,
isValid: address.toLowerCase() === recoveredAddress.toLowerCase()
};
}
import { verifyMessage } from "viem";
async function signMessage(
walletClient: any,
address: `0x${string}`,
message: string
) {
const signature = await walletClient.signMessage({ message });
const isValid = await verifyMessage({ address, message, signature });
return { signature, address, isValid };
}
Sign Structured Messages
- Ethers.js
- Viem
async function signStructuredMessage(signer: ParaEthersSigner, data: any) {
const message = JSON.stringify(data, null, 2);
const signature = await signer.signMessage(message);
const signerAddress = await signer.getAddress();
const recoveredAddress = ethers.verifyMessage(message, signature);
return {
signature,
isValid: signerAddress.toLowerCase() === recoveredAddress.toLowerCase()
};
}
import { recoverMessageAddress } from "viem";
async function signStructuredMessage(
walletClient: any,
address: `0x${string}`,
data: any
) {
const message = JSON.stringify(data, null, 2);
const signature = await walletClient.signMessage({ message });
const recoveredAddress = await recoverMessageAddress({ message, signature });
return {
signature,
isValid: address.toLowerCase() === recoveredAddress.toLowerCase()
};
}