Message d’erreur
Malformed base64 encoding
Également affiché sous la forme
- error code: -3 error message: Malformed base64 encoding
`bitcoin-cli` affiche « error code: -3 » et « error message: » avant le texte. Une chaîne base64 bien formée qui n’est pas une signature valide renvoie `false` au lieu d’une erreur.
Bitcoin Core RPC — verifymessage with a signature that is not base64
Ce que cela signifie
`verifymessage` attend la signature compacte de 65 octets, encodée en base64 standard (88 caractères, commençant généralement par `H`, `I`, `G` ou `J`). La chaîne que vous avez transmise n’est pas du base64 valide : Core n’a donc même pas tenté de récupérer une clé et a renvoyé l’erreur RPC -3. La signature est peut-être correcte, mais elle n’est pas dans le bon encodage de texte.
Pourquoi cela se produit
Hexadécimal au lieu de base64
fréquenteLes applications et les SDK de portefeuilles matériels renvoient souvent les signatures en hexadécimal (130 caractères). Core les rejette.
Signature altérée dans une URL ou un formulaire
occasionnelleUn `+` transformé en espace par le décodage du formulaire, des `%2B`/`%3D` restés encodés, ou du base64url (`-`, `_`) produit par une bibliothèque web.
Une signature Ethereum
occasionnelleUne signature `0x…` issue de `personal_sign` relève d’un autre schéma (préfixe EIP-191, autre convention pour v) et n’est pas du base64.
Comment corriger l’erreur
- 1.
Convertir les signatures hexadécimales en base64
Décodez l’hexadécimal en 65 octets et encodez-les en base64 standard, sans sauts de ligne.
bash sig_b64=$(printf '%s' "$SIG_HEX" | xxd -r -p | base64 -w0) # 65 bytes -> 88 base64 characters bitcoin-cli verifymessage "$ADDRESS" "$sig_b64" "$MESSAGE" - 2.
Annuler l’encodage URL et base64url
Décodez d’abord l’encodage-pourcent, puis convertissez le base64url en base64 standard avec remplissage.
python import base64, urllib.parse sig = urllib.parse.unquote(sig_from_query) # undo %2B / %2F / %3D sig = base64.b64encode(base64.urlsafe_b64decode(sig + "=" * (-len(sig) % 4))).decode() # base64url -> base64