Pular para o conteúdo
ecdsa.com
Bitcoin Core RPCCarteiras e assinaturas Web3

Mensagem de erro

Address does not refer to key

Também aparece como

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

O `bitcoin-cli` imprime “error code: -3” e “error message:” nas linhas antes do texto. Clientes JSON-RPC recebem `{"code": -3, "message": "Address does not refer to key"}`.

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

O que significa

A assinatura de mensagens do Bitcoin Core (`signmessage`/`verifymessage`) implementa o esquema original “Bitcoin Signed Message”, que só funciona com endereços P2PKH legados: a chave pública é recuperada da assinatura, e o Core compara o hash dela com o endereço. Endereços SegWit nativos (`bc1q…`), Taproot (`bc1p…`) e P2SH (`3…`) não são endereços “de chave” nesse sentido, por isso o Core os rejeita com o erro RPC -3 em vez de retornar true ou false.

Por que acontece

Como corrigir

  1. 1.

    Assinar com um endereço legado no Core

    Se a outra parte só precisa de uma prova de controle sobre uma chave da sua carteira, crie um endereço legado para a prova.

    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 o BIP-322 para SegWit e Taproot

    O BIP-322 define assinaturas de mensagens para todos os tipos de endereço. Use uma biblioteca ou carteira que o implemente e combine seu uso com o 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);

Erros relacionados

Ver toda a base de erros de assinatura