Aller au contenu
ecdsa.com
viem (TypeScript)Portefeuilles et signatures Web3

Message d’erreur

Invalid primary type `Email` must be one of `["EIP712Domain","Mail"]`.

Les noms entre accents graves sont votre `primaryType` et les types disponibles. viem 2.57 lève cette erreur avec `err.name` égal à « BaseError » ; `err.shortMessage` est le texte ci-dessus et `err.message` y ajoute une indication, un lien vers la documentation (« typeddatainvalidprimarytypeerror ») et la version de viem.

viem (TypeScript) — hashTypedData / signTypedData / verifyTypedData / recoverTypedDataAddress

Ce que cela signifie

Le `primaryType` que vous avez passé n’est pas une clé de `types` (viem ajoute `EIP712Domain` à la liste qu’il affiche). EIP-712 hache le message en tant qu’instance du type principal : viem refuse donc de deviner. Les données typées elles-mêmes peuvent être correctes ; c’est le nom de la structure signée qui n’y existe pas.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Déclarer les types avec as const

    Avec `as const`, les types de viem font de `primaryType` une union des noms de vos structures : une incohérence échoue donc à la compilation et non au moment de la signature.

    ts
    const types = {
      Mail: [
        { name: "to", type: "address" },
        { name: "contents", type: "string" },
      ],
    } as const; // "as const" lets TypeScript reject a wrong primaryType at compile time
    
    const signature = await walletClient.signTypedData({ account, domain, types, primaryType: "Mail", message });

Erreurs associées

Parcourir toute la base de données des erreurs de signature