Zum Inhalt springen
ecdsa.com
ethers v6 (JavaScript)Web3-Wallets und -Signaturen

Fehlermeldung

ambiguous primary types or unused types: "EIP712Domain", "Mail"

Auch ausgegeben als

  • ambiguous primary types or unused types

Die aufgeführten Namen sind deine nicht referenzierten Typen. `err.message` ergänzt den vollständigen Wert von `types` und die ethers-Version; `err.code` ist `INVALID_ARGUMENT`.

ethers v6 (JavaScript) — TypedDataEncoder used by signTypedData / verifyTypedData

Was der Fehler bedeutet

ethers ermittelt den Primärtyp von Typed Data nach EIP-712 als den einzigen Typ, auf den kein anderer Typ verweist. In deinem `types`-Objekt werden mehrere Typen nirgends referenziert, daher kann ethers nicht erkennen, welcher davon signiert wird – und in der Praxis ist der überzählige fast immer `EIP712Domain`. ethers baut den Domain-Typ selbst aus dem Argument `domain` und darf ihn nicht in `types` erhalten, während das JSON-Format von `eth_signTypedData_v4` (MetaMask, WalletConnect) ihn enthält.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    EIP712Domain vor dem Aufruf von ethers entfernen

    Entferne den Typ per Destrukturierung; die Signatur ist identisch mit der, die eine Wallet für die v4-Payload erzeugt, weil der Domain-Typ aus denselben Feldern abgeleitet wird.

    js
    const { EIP712Domain, ...types } = typedData.types; // ethers derives the domain type itself
    const signature = await signer.signTypedData(typedData.domain, types, typedData.message);
    const signer2 = verifyTypedData(typedData.domain, types, typedData.message, signature);
  2. 2.

    Ermittelten Primärtyp prüfen

    `TypedDataEncoder.from(types).primaryType` wirft denselben Fehler oder gibt den Typ zurück, den ethers hashen wird – eine schnelle Prüfung für Tests.

    js
    import { TypedDataEncoder } from "ethers";
    
    // Inspect what ethers considers the primary type before signing.
    console.log(TypedDataEncoder.from(types).primaryType);

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen