Skip to content

Sign a Typed Message

EIP-712 typed data signing

EIP-712 typed data signing works through Wagmi's useSignTypedData.

import { useSignTypedData } from "wagmi";
 
const typedData = {
  domain: {
    name: "Ether Mail",
    version: "1",
    chainId: 1,
    verifyingContract: "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC",
  },
  types: {
    Person: [
      { name: "name", type: "string" },
      { name: "wallet", type: "address" },
    ],
    Mail: [
      { name: "from", type: "Person" },
      { name: "to", type: "Person" },
      { name: "contents", type: "string" },
    ],
  },
  primaryType: "Mail",
  message: {
    from: {
      name: "Alice",
      wallet: "0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826",
    },
    to: {
      name: "Bob",
      wallet: "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB",
    },
    contents: "Hello, Bob!",
  },
} as const;
 
export function SignTypedData() {
  const { signTypedData, data, isPending, error } = useSignTypedData();
 
  const handleSign = () => signTypedData(typedData);
 
  return (
    <div>
      <button onClick={handleSign} disabled={isPending}>
        {isPending ? "Signing..." : "Sign typed data"}
      </button>
 
      {data && <p>Signature: {data}</p>}
      {error && <p>Signing failed: {error.message}</p>}
    </div>
  );
}