Zum Inhalt springen
ecdsa.com
viem (TypeScript)Web3-Wallets und -Signaturen

Fehlermeldung

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

Die Namen in Backticks sind dein `primaryType` und die verfügbaren Typen. viem 2.57 wirft den Fehler mit `err.name` „BaseError“; `err.shortMessage` ist der Text oben, und `err.message` ergänzt einen Hinweis, einen Link zur Dokumentation („typeddatainvalidprimarytypeerror“) und die viem-Version.

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

Was der Fehler bedeutet

Der übergebene `primaryType` ist kein Schlüssel im Objekt `types` (viem ergänzt `EIP712Domain` in der angezeigten Liste). EIP-712 hasht die Nachricht als Instanz des Primärtyps, deshalb weigert sich viem zu raten. Die Typed Data selbst können in Ordnung sein; der Name des Structs, das signiert wird, kommt darin nicht vor.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    Typen als const deklarieren

    Mit `as const` machen die Typen von viem aus `primaryType` einen Union-Typ deiner Struct-Namen, sodass eine Abweichung schon beim Kompilieren scheitert statt erst beim Signieren.

    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 });

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen