Saltar al contenido
ecdsa.com
Bitcoin Core RPCBilleteras y firmas Web3

Mensaje de error

Address does not refer to key

También se muestra como

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

`bitcoin-cli` muestra «error code: -3» y «error message:» en las líneas anteriores al texto. Los clientes JSON-RPC reciben `{"code": -3, "message": "Address does not refer to key"}`.

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

Qué significa

La firma de mensajes de Bitcoin Core (`signmessage`/`verifymessage`) implementa el esquema original «Bitcoin Signed Message», que solo funciona con direcciones P2PKH heredadas (legacy): la firma permite recuperar una clave pública, y Core compara el hash de esa clave con la dirección. Las direcciones SegWit nativas (`bc1q…`), Taproot (`bc1p…`) y P2SH (`3…`) no son direcciones «de clave» en ese sentido, así que Core las rechaza con el error RPC -3 en lugar de devolver true o false.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Firmar con una dirección heredada en Core

    Si la contraparte solo necesita una prueba de control sobre una clave de tu billetera, crea una dirección heredada para la prueba.

    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.

    Usar BIP-322 para SegWit y Taproot

    BIP-322 define firmas de mensajes para todos los tipos de dirección. Usa una biblioteca o billetera que lo implemente y acuérdalo con el verificador.

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

Errores relacionados

Explorar toda la base de datos de errores de firma