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

Mensagem de erro

Malformed base64 encoding

Também aparece como

  • error code: -3 error message: Malformed base64 encoding

O `bitcoin-cli` imprime “error code: -3” e “error message:” antes do texto. Uma string base64 bem formada que não seja uma assinatura válida retorna `false` em vez de um erro.

Bitcoin Core RPC — verifymessage with a signature that is not base64

O que significa

O `verifymessage` espera a assinatura compacta de 65 bytes codificada em base64 padrão (88 caracteres, geralmente começando com `H`, `I`, `G` ou `J`). A string que você passou não é um base64 válido, então o Core nem tentou recuperar uma chave e retornou o erro RPC -3. A assinatura pode estar correta — ela só está na codificação de texto errada.

Por que acontece

Como corrigir

  1. 1.

    Converter assinaturas hexadecimais para base64

    Decodifique o hexadecimal em 65 bytes e codifique-os em base64 padrão, sem quebras de linha.

    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. 2.

    Desfazer a codificação de URL e base64url

    Primeiro desfaça a codificação percentual, depois converta base64url para base64 padrão com padding.

    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

Erros relacionados

Ver toda a base de erros de assinatura