Sign plain text messages for authentication or verification with Web3 libraries
Sign plain text messages using Para’s secure signing infrastructure.
You need Web3 libraries configured with Para authentication.
import { ethers } from "ethers";
import { ParaEthersSigner } from "@getpara/ethers-v6-integration@alpha";
async function signMessage(
signer: ParaEthersSigner,
message: string
) {
try {
const signature = await signer.signMessage(message);
console.log("Signature:", signature);
const address = await signer.getAddress();
const recoveredAddress = ethers.verifyMessage(message, signature);
console.log("Signer address:", address);
console.log("Recovered address:", recoveredAddress);
console.log("Signature valid:", address === recoveredAddress);
return {
signature,
address,
message,
isValid: address.toLowerCase() === recoveredAddress.toLowerCase()
};
} catch (error) {
console.error("Failed to sign message:", error);
throw error;
}
}
async function signStructuredMessage(
signer: ParaEthersSigner,
data: any
) {
try {
const message = JSON.stringify(data, null, 2);
const messageHash = ethers.hashMessage(message);
console.log("Message hash:", messageHash);
const signature = await signer.signMessage(message);
const signerAddress = await signer.getAddress();
const recoveredAddress = ethers.recoverAddress(
messageHash,
signature
);
return {
message,
messageHash,
signature,
signerAddress,
recoveredAddress,
isValid: signerAddress.toLowerCase() === recoveredAddress.toLowerCase()
};
} catch (error) {
console.error("Failed to sign structured message:", error);
throw error;
}
}