Перейти к содержимому
ecdsa.com
Bitcoin Core RPCКошельки и подписи Web3

Сообщение об ошибке

Malformed base64 encoding

Также выводится как

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

`bitcoin-cli` выводит перед текстом «error code: -3» и «error message:». Корректная строка base64, которая не содержит действительной подписи, даёт `false`, а не ошибку.

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

Что это означает

`verifymessage` ожидает компактную подпись длиной 65 байт в стандартном base64 (88 символов, обычно начинается с `H`, `I`, `G` или `J`). Переданная строка — некорректный base64, поэтому Core даже не пытался восстановить ключ и вернул ошибку RPC -3. Сама подпись может быть верной — она просто в неправильной текстовой кодировке.

Почему это происходит

Как исправить

  1. 1.

    Преобразуйте подписи из hex в base64

    Декодируйте hex в 65 байт и закодируйте их в стандартный base64 без переносов строк.

    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.

    Отмените URL-кодирование и кодирование base64url

    Сначала декодируйте процентное кодирование (percent-encoding), затем преобразуйте base64url в стандартный base64 с дополнением.

    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

Связанные ошибки

Открыть всю базу ошибок подписей