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

Message d’erreur

invalid signature length

Également affiché sous la forme

  • Error: invalid signature length

viem (TypeScript) — recoverMessageAddress / recoverAddress / recoverTypedDataAddress / recoverPublicKey

Ce que cela signifie

Les fonctions de récupération de viem acceptent une signature d’exactement 65 octets (r‖s‖v), sous forme hexadécimale ou de tableau d’octets, et s’arrêtent avec cette simple `Error` pour toute autre longueur, y compris la forme compacte EIP-2098 de 64 octets, que viem ne prend en charge que via des fonctions de conversion explicites. Rien n’a été récupéré : la signature est dans un autre format, ou ce n’est pas du tout une signature d’EOA.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Convertir les signatures compactes avant la récupération

    `parseCompactSignature` suivi de `compactSignatureToSignature` convertit la forme de 64 octets en forme de 65 octets.

    ts
    import { compactSignatureToSignature, parseCompactSignature, recoverMessageAddress, serializeSignature, size } from "viem";
    
    const sig = size(signature) === 64
      ? serializeSignature(compactSignatureToSignature(parseCompactSignature(signature)))
      : signature;
    const signer = await recoverMessageAddress({ message, signature: sig });
  2. 2.

    Utiliser publicClient.verifyMessage pour tous les types de portefeuilles

    Un client public vérifie localement les signatures d’EOA, et celles des comptes intelligents via ERC-1271/ERC-6492 : le même code fonctionne donc pour tous les types de portefeuilles.

    ts
    import { createPublicClient, http } from "viem";
    import { mainnet } from "viem/chains";
    
    // Handles EOAs, ERC-1271 smart accounts and ERC-6492 (undeployed) accounts.
    const client = createPublicClient({ chain: mainnet, transport: http(process.env.RPC_URL) });
    const valid = await client.verifyMessage({ address, message, signature });

Erreurs associées

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