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

Fehlermeldung

Invalid yParityOrV value

Auch ausgegeben als

  • Error: Invalid yParityOrV value

Das Verhalten unterscheidet sich zwischen den Bibliotheken: ethers 6 normalisiert Werte im Stil von EIP-155 (35 und höher) und führt die Wiederherstellung bei derselben Signatur anstandslos aus (in der Reproduktion gezeigt); bei anderen unerwarteten Werten wie 5 wirft es „invalid v“. Code, der von ethers zu viem wechselt, kann deshalb plötzlich an Signaturen scheitern, deren Prüfung bisher gelang.

viem (TypeScript) — recoverAddress / recoverMessageAddress / recoverPublicKey

Was der Fehler bedeutet

Das letzte Byte der Signatur (die Recovery-ID) hat keinen der Werte, die viem akzeptiert: 0 oder 1 (`yParity`) beziehungsweise 27 oder 28 (das alte `v`). Signaturen über Nachrichten und Typed Data verwenden immer einen davon; andere Werte stammen aus Konventionen für das Signieren von Transaktionen oder aus Fehlern in der Byte-Reihenfolge. viem bricht vor der Wiederherstellung ab.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    v vor der Wiederherstellung normalisieren

    Bilde EIP-155-Werte und 0/1 auf 27/28 ab (oder auf yParity 0/1) und stelle sicher, dass die Signatur als r‖s‖v zusammengesetzt ist.

    ts
    import { hexToNumber, numberToHex, type Hex } from "viem";
    
    // Message signatures carry v = 27/28 (or 0/1); map EIP-155 style values back.
    function normaliseV(signature: Hex): Hex {
      let v = hexToNumber(`0x${signature.slice(130)}`);
      if (v >= 35) v = ((v - 35) % 2) + 27; // EIP-155: chainId * 2 + 35 + yParity
      if (v === 0 || v === 1) v += 27;
      return `${signature.slice(0, 130)}${numberToHex(v).slice(2)}` as Hex;
    }

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen