Messaggi di pagamento on-chain
HOBCMSG1 consente ai portafogli di allegare un messaggio privato in formato UTF-8 a un pagamento utilizzando un'unica uscita OP_RETURN. Il testo cifrato è pubblico; solo la chiave di pagamento del destinatario può decifrarlo.
Panoramica
L'invio tramite Web Wallet supporta un messaggio privato opzionale (massimo 300 caratteri). Lo stesso formato di trasferimento viene pubblicato in modo che Windows, Linux, Android e le app di terze parti possano implementare in futuro l'invio/ricezione compatibile.
Modello di privacy
L'importo del pagamento, gli indirizzi e l'orario rimangono pubblici. I byte del messaggio sulla blockchain sono cifrati. Chiunque sia in possesso della chiave privata di pagamento del destinatario può decifrarli. Le destinazioni dei portafogli web di custodia vengono decifrate dal sito per il destinatario che ha effettuato l'accesso (stesso livello di fiducia della custodia).
Formato filo
Payload di dati OP_RETURN singolo:
HOBCMSG1 | ver:1 | flags:0 | utf8_plaintext
Prefisso ASCII HOBCMSG1, poi ver (1 byte, attualmente 1), flags (1 byte; bit0 = crittografato), chiave pubblica compressa effimera (33 byte), nonce AES-GCM (12 byte), testo cifrato, quindi tag di autenticazione di 16 byte.
Crittografia
Il mittente genera una coppia di chiavi effimere secp256k1, ECDH con la chiave pubblica di pagamento compressa del destinatario, HKDF-SHA256 (info HOBCMSG1-v1) in una chiave a 32 byte, quindi AES-256-GCM. La chiave pubblica del destinatario DEVE corrispondere tramite hash 160 al programma witness P2WPKH dell'indirizzo di destinazione hobc1….
Limiti
I portafogli HobbyHash utilizzano un limite di testo in chiaro UTF-8 di 300 caratteri per le note di pagamento. La politica di inoltro del nodo consente vettori di dati OP_RETURN più grandi; mantieni i payload dell'app consapevoli delle commissioni.
Chiave pubblica del destinatario
Se l'indirizzo di destinazione ha già una chiave pubblica nota (ad esempio, una spesa precedente o un indirizzo di sola visualizzazione/portafoglio virtuale), i portafogli possono risolverla automaticamente. Altrimenti, il mittente deve fornire la chiave pubblica compressa corrispondente all'indirizzo. Senza una chiave pubblica corrispondente, non è possibile allegare un messaggio privato (l'invio in chiaro funziona comunque).
Esempio RPC
Crea un output di pagamento più dati (in formato esadecimale il payload HOBCMSG1), quindi finanzia/firma/trasmetti — oppure utilizza il metodo sperimentale send RPC quando disponibile:
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
Per gli sviluppatori di app
Implementare la codifica/decrittografia per questo documento. Rilevare HOBCMSG1 negli explorer e mostrare un badge per i messaggi crittografati: non visualizzare il testo cifrato come testo della chat. I wallet HobbyHash per desktop e dispositivi mobili riutilizzeranno questo formato.