Messaging
Z-Text messages are blockchain transactions. Every message is encrypted, permanent, and censorship-resistant.
Sending Messages
To send a message, open a conversation with a handshake-verified contact and type your message. The app encrypts it with the shared key and broadcasts it as a shielded transaction on the BitcoinZ blockchain.
- Open a conversation from the Messages tab
- Type your message in the input field
- Tap the send button -- the message is encrypted locally
- A shielded transaction is created and broadcast to the network
- The message is delivered almost instantly via mempool G-stream push (typically 1-5 seconds)
Message Delivery
Messages are delivered almost instantly via mempool G-stream push. When a transaction is broadcast, G-stream pushes the unread memo to the recipient's device within 1-5 seconds. Block confirmation follows later for permanent settlement on the blockchain.
| Status | Meaning |
|---|---|
| Sending | Transaction is being created and signed |
| Pending | Transaction broadcast to mempool |
| Delivered | Mempool G-stream push received by recipient |
| Confirmed | Transaction mined into a block for permanent settlement |
Handshake Protocol
Before you can message someone, you must complete a cryptographic handshake. This establishes a shared secret key that both parties use for message encryption.
- Initiation -- You send a handshake request containing your public key, embedded in a shielded transaction
- Response -- The recipient accepts by sending back their public key in another shielded transaction
- Key derivation -- Both clients compute a shared secret using Diffie-Hellman key exchange
- Ready -- The shared secret is stored locally and used to encrypt/decrypt all future messages
Trustless Verification
The handshake is trustless -- no server mediates the key exchange. Both public keys travel through shielded transactions, so observers learn nothing about who is connecting or which keys they exchange.
Encryption Explained
Z-Text uses a two-layer encryption model:
- Layer 1 -- zk-SNARK shielding: The transaction memo (containing your message) is encrypted by the blockchain's native shielded transaction mechanism. Only the sender and recipient z-addresses can decrypt it.
- Layer 2 -- Shared key encryption: Before being placed in the memo field, your message is additionally encrypted with the shared key established during the handshake. This means even if someone compromises the z-address viewing key, they still can't read messages without the handshake-derived key.
Stickers
Z-Text supports sending sticker images in conversations. Stickers are encoded and embedded in the transaction memo just like text messages. The app includes a built-in sticker pack, and premium users get access to additional packs.
Message Limits
Since messages are stored in transaction memos, there is a character limit per message determined by the blockchain's memo field size. For longer messages, the app automatically splits the content across multiple transactions and reassembles them on the recipient's end.