Aller au contenu
ecdsa.com
Bitcoin Core RPCPortefeuilles et signatures Web3

Message d’erreur

Address does not refer to key

Également affiché sous la forme

  • error code: -3 error message: Address does not refer to key

`bitcoin-cli` affiche « error code: -3 » et « error message: » sur les lignes qui précèdent le texte. Les clients JSON-RPC reçoivent `{"code": -3, "message": "Address does not refer to key"}`.

Bitcoin Core RPC — verifymessage / signmessage with a non-P2PKH address

Ce que cela signifie

La signature de messages de Bitcoin Core (`signmessage`/`verifymessage`) implémente le schéma d’origine « Bitcoin Signed Message », qui ne fonctionne qu’avec les adresses P2PKH dites legacy : la signature permet de récupérer une clé publique, et Core compare le condensat de cette clé avec l’adresse. Les adresses SegWit natives (`bc1q…`), Taproot (`bc1p…`) et P2SH (`3…`) ne sont pas des adresses « de clé » en ce sens, si bien que Core les rejette avec l’erreur RPC -3 au lieu de renvoyer true ou false.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Signer avec une adresse legacy dans Core

    Si la contrepartie a seulement besoin de la preuve que vous contrôlez une clé de votre portefeuille, créez une adresse legacy pour cette preuve.

    bash
    # Bitcoin Core signs and verifies messages only for legacy P2PKH addresses (1... / m... / n...)
    addr=$(bitcoin-cli getnewaddress "proof" legacy)
    sig=$(bitcoin-cli signmessage "$addr" "I own this address")
    bitcoin-cli verifymessage "$addr" "$sig" "I own this address"
  2. 2.

    Utiliser BIP-322 pour SegWit et Taproot

    BIP-322 définit des signatures de messages pour tous les types d’adresses. Utilisez une bibliothèque ou un portefeuille qui l’implémente, et convenez de son usage avec le vérificateur.

    js
    // SegWit / Taproot addresses: BIP-322 "simple" signatures, e.g. with the bip322-js library
    import { Verifier } from "bip322-js";
    
    const ok = Verifier.verifySignature("bc1q...", "I own this address", signatureBase64);

Erreurs associées

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