Aller au contenu
ecdsa.com
ethers v6 (JavaScript)Portefeuilles et signatures Web3

Message d’erreur

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

Également affiché sous la forme

  • ambiguous primary types or unused types

Les noms listés sont vos types non référencés. `err.message` ajoute la valeur complète de `types` et la version d’ethers ; `err.code` vaut `INVALID_ARGUMENT`.

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

Ce que cela signifie

ethers déduit le type principal des données typées EIP-712 : c’est l’unique type qu’aucun autre type ne référence. Dans votre objet `types`, plusieurs types ne sont pas référencés : ethers ne peut donc pas savoir lequel est signé, et en pratique le type en trop est presque toujours `EIP712Domain`. ethers construit lui-même le type du domaine à partir de l’argument `domain` et ne doit pas le recevoir dans `types`, alors que le format JSON de `eth_signTypedData_v4` (MetaMask, WalletConnect) l’inclut.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Retirer EIP712Domain avant d’appeler ethers

    Écartez-le par déstructuration ; la signature est identique à celle qu’un portefeuille produit pour la charge utile v4, car le type du domaine est dérivé des mêmes champs.

    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.

    Vérifier le type principal déduit

    `TypedDataEncoder.from(types).primaryType` lève la même erreur ou renvoie le type qu’ethers va hacher : une vérification rapide à placer dans les tests.

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

Erreurs associées

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