Сообщения о платежах в блокчейне
HOBCMSG1 позволяет кошелькам прикреплять к платежу закрытое сообщение в кодировке UTF-8, используя один выход OP_RETURN. Зашифрованный текст является общедоступным; расшифровать его может только ключ платежа получателя.
Обзор
Функция отправки через веб-кошелек поддерживает необязательное личное сообщение (максимум 300 символов). Используется тот же формат передачи данных, поэтому приложения для Windows, Linux, Android и сторонних разработчиков смогут в дальнейшем реализовать совместимую отправку/получение.
модель конфиденциальности
Сумма платежа, адреса и время остаются общедоступными. Байты сообщения в блокчейне зашифрованы. Любой, у кого есть закрытый ключ платежа получателя, может расшифровать его. Данные, полученные через веб-кошелек для хранения, расшифровываются сайтом для авторизованного получателя (такой же уровень доверия, как и при хранении).
Формат провода
Один пакет данных OP_RETURN:
HOBCMSG1 | ver:1 | flags:0 | utf8_plaintext
Префикс ASCII HOBCMSG1, затем ver (1 байт, в настоящее время 1), flags (1 байт; бит 0 = зашифровано), эфемерный сжатый открытый ключ (33 байта), одноразовый код AES-GCM (12 байт), зашифрованный текст, затем 16-байтовый тег аутентификации.
Криптография
Отправитель генерирует временную пару ключей secp256k1, ECDH с сжатым платежным открытым ключом получателя, HKDF-SHA256 (информация HOBCMSG1-v1) в 32-байтовый ключ, затем AES-256-GCM. Открытый ключ получателя ДОЛЖЕН совпадать по хешированию с программой-свидетелем P2WPKH адреса назначения hobc1….
Пределы
В кошельках HobbyHash для платежных сообщений используется ограничение в 300 символов в кодировке UTF-8. Политика ретрансляции узла допускает использование более крупных носителей данных OP_RETURN; необходимо учитывать размер комиссионных сборов в приложениях.
Открытый ключ получателя
Если для адреса назначения уже известен открытый ключ (полученный в результате предыдущей транзакции или для адреса, используемого только для просмотра/горячего кошелька), кошельки могут определить его автоматически. В противном случае отправитель должен предоставить сжатый открытый ключ, соответствующий адресу. Без соответствующего открытого ключа прикрепить личное сообщение невозможно (обычная отправка по-прежнему работает).
Пример RPC
Создайте платеж и выходные данные (шестнадцатеричное значение — полезная нагрузка HOBCMSG1), затем профинансируйте/подпишите/отправьте — или используйте экспериментальный send RPC, когда он станет доступен:
hobbyhash-cli -rpcwallet=WALLET send '{"hobc1q…": 1.5, "data": "484f42434d534731…"}'
# Or raw construction:
hobbyhash-cli createrawtransaction '[]' '[{"hobc1q…":1.5},{"data":"484f42434d534731…"}]'
hobbyhash-cli -rpcwallet=WALLET fundrawtransaction HEX
hobbyhash-cli -rpcwallet=WALLET signrawtransactionwithwallet FUNDED_HEX
hobbyhash-cli sendrawtransaction SIGNED_HEX
Для разработчиков приложений
Реализуйте кодирование/дешифрование для этого документа. Обнаруживайте HOBCMSG1 в обозревателях и отображайте значок зашифрованного сообщения — не отображайте зашифрованный текст в качестве текста чата. Кошельки HobbyHash для настольных компьютеров и мобильных устройств будут использовать этот формат.