Перейти к содержимому
ecdsa.com
viem (TypeScript)Кошельки и подписи Web3

Сообщение об ошибке

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

Имена в обратных кавычках — это ваш `primaryType` и доступные типы. viem 2.57 выбрасывает эту ошибку с `err.name` «BaseError»; `err.shortMessage` — текст выше, а `err.message` добавляет подсказку, ссылку на документацию («typeddatainvalidprimarytypeerror») и версию viem.

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

Что это означает

Переданного вами `primaryType` нет среди ключей `types` (viem добавляет `EIP712Domain` в показываемый список). EIP-712 хеширует сообщение как экземпляр основного типа, поэтому viem не пытается угадать. Сами типизированные данные могут быть в порядке, но в них нет имени структуры, которую вы подписываете.

Почему это происходит

Как исправить

  1. 1.

    Объявите типы через as const

    С `as const` типы viem превращают `primaryType` в объединение имён ваших структур, поэтому несовпадение даёт ошибку при компиляции, а не при подписи.

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

Связанные ошибки

Открыть всю базу ошибок подписей