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 even the key exchange is invisible to observers.
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.
Premium: Faster Messages
Premium subscribers benefit from priority transaction relay, which can reduce message delivery times by routing through optimized node infrastructure.