Messages de paiement sur la blockchain
HOBCMSG1 permet aux portefeuilles d'associer un message UTF-8 privé à un paiement via une seule sortie OP_RETURN. Le texte chiffré est public ; seule la clé de paiement du destinataire peut le déchiffrer.
Aperçu
L'envoi via Web Wallet prend en charge l'envoi de messages privés (300 caractères maximum). Le même format de transfert est publié afin que Windows, Linux, Android et les applications tierces puissent ultérieurement implémenter des fonctionnalités d'envoi/réception compatibles.
Modèle de confidentialité
Le montant, l'adresse et l'heure du paiement restent publics. Les données chiffrées sur la blockchain sont accessibles à toute personne possédant la clé privée du destinataire. Les portefeuilles électroniques de dépôt sont déchiffrés par le site pour le destinataire connecté (même niveau de confiance que pour le dépôt).
Format filaire
Charge utile de données OP_RETURN unique :
HOBCMSG1 | ver:1 | flags:0 | utf8_plaintext
Préfixe ASCII HOBCMSG1, puis ver (1 octet, actuellement 1), flags (1 octet ; bit0 = chiffré), clé publique compressée éphémère (33 octets), nonce AES-GCM (12 octets), texte chiffré, puis étiquette d'authentification de 16 octets.
Cryptographie
L'expéditeur génère une paire de clés éphémères secp256k1, ECDH avec la clé publique de paiement compressée du destinataire, HKDF-SHA256 (info HOBCMSG1-v1) vers une clé de 32 octets, puis AES-256-GCM. La clé publique du destinataire DOIT correspondre au hachage 160 du programme témoin P2WPKH de l'adresse de destination hobc1….
Limites
Les portefeuilles HobbyHash limitent la taille des mémos de paiement à 300 caractères UTF-8 en clair. La politique de relais des nœuds autorise des supports de données OP_RETURN plus volumineux ; veillez à ce que les charges utiles des applications soient adaptées aux frais.
Clé publique du destinataire
Si l'adresse de destination possède déjà une clé publique connue (dépense antérieure ou adresse de portefeuille en lecture seule), les portefeuilles peuvent la résoudre automatiquement. Sinon, l'expéditeur doit fournir la clé publique compressée correspondant à l'adresse. Sans clé publique correspondante, il est impossible de joindre un message privé (l'envoi en clair reste possible).
Exemple RPC
Créez un paiement et une sortie de données (le code hexadécimal correspond à la charge utile HOBCMSG1), puis financez/signez/diffusez — ou utilisez les fonctions expérimentales send et RPC lorsqu'elles sont disponibles :
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
Pour les développeurs d'applications
Implémentez le chiffrement/déchiffrement de ce document. Détectez HOBCMSG1 dans les explorateurs et affichez un badge de message chiffré ; le texte chiffré ne doit pas être affiché dans le chat. Les portefeuilles HobbyHash pour ordinateur et mobile réutiliseront ce format.