Z-TextDocs

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.

  1. Open a conversation from the Messages tab
  2. Type your message in the input field
  3. Tap the send button -- the message is encrypted locally
  4. A shielded transaction is created and broadcast to the network
  5. 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.

StatusMeaning
SendingTransaction is being created and signed
PendingTransaction broadcast to mempool
DeliveredMempool G-stream push received by recipient
ConfirmedTransaction 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.

  1. Initiation -- You send a handshake request containing your public key, embedded in a shielded transaction
  2. Response -- The recipient accepts by sending back their public key in another shielded transaction
  3. Key derivation -- Both clients compute a shared secret using Diffie-Hellman key exchange
  4. 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.