Native decentralized messaging on Ramestta. V4 Split Architecture: Registry (Identity) + RelayManager (Nodes). Kademlia DHT, STUN/UDP hole punching, X25519+AES-256-GCM encryption.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β MUMBLECHAT PROTOCOL V4.0 STACK β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β RamaPay β β Chrome β β Desktop β CLIENTS β
β β Android β β Extension β β Relay Node β β
β ββββββββ¬βββββββ ββββββββ¬βββββββ ββββββββ¬βββββββ β
β β β β β
β βββββββββββββββββββββΌββββββββββββββββββββ β
β βΌ β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β MumbleChat Core Layer β β
β β ββββββββββββββ ββββββββββββββ ββββββββββββββ β β
β β β Crypto β β MessageCodecβ β ChatServiceβ β β
β β βX25519+GCM β β Binary Wire β β Orchestratorβ β β
β β ββββββββββββββ ββββββββββββββ ββββββββββββββ β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β P2P Transport Layer β β
β β ββββββββββββββ ββββββββββββββ ββββββββββββββ β β
β β β KademliaDHTβ β STUN/NAT β β Rate β SECURITY β β
β β β +Sybil Res.β β Traversal β β Limiter β β β
β β ββββββββββββββ ββββββββββββββ ββββββββββββββ β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βββββββββββββββββββββΌββββββββββββββββββββ β
β βΌ βΌ βΌ β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β UDP Direct β β Relay β β Ramestta β NETWORK β
β β (Hole Punch)ββββββΊβ Nodes ββββββΊβ Blockchain β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββ β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β V4 SMART CONTRACT ARCHITECTURE β β
β β ββββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββ β β
β β β MCTToken β β Registry V4 β β RelayManager β β β
β β β (ERC-20) β β (Identity) β β (Nodes) β β β
β β ββββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββ β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Your wallet address is your identity. Public keys stored immutably on blockchain.
// 1. Generate X25519 keypair on device
val keyPair = X25519.generateKeyPair()
// 2. Store public key on-chain
registry.register(
publicKeyX: keyPair.publicKey,
displayName: "alice.rama"
)
// 3. Identity now discoverable
// Anyone can lookup your public key by wallet address
struct Identity {
bytes32 publicKeyX; // X25519 public key
bytes32 publicKeyY; // Reserved
uint256 registeredAt; // Timestamp
uint256 lastUpdated; // Key rotation
bool isActive; // Active status
string displayName; // Optional name
}
You own your identity. No platform can ban or censor you.
Update your public key anytime via updatePublicKey().
Anyone can lookup your public key by wallet address.
X25519 ECDH key exchange + AES-256-GCM encryption. Military-grade security.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ENCRYPTION PROCESS β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β SENDER (Alice) RECIPIENT (Bob) β
β ββββββββββββββ ββββββββββββββ β
β β
β 1. Lookup Bob's public key from blockchain β
β bobPubKey = registry.getPublicKey(bobAddress) β
β β
β 2. Generate ephemeral keypair β
β ephemeralKey = X25519.generateKeyPair() β
β β
β 3. Derive shared secret (ECDH) β
β sharedSecret = X25519.agree(ephemeralKey.private, bobPubKey) β
β β
β 4. Derive AES key using HKDF β
β aesKey = HKDF(sharedSecret, salt, info) β
β β
β 5. Encrypt message with AES-256-GCM β
β ciphertext = AES_GCM.encrypt(aesKey, nonce, plaintext) β
β β
β 6. Package: [ephemeralPubKey | nonce | ciphertext | authTag] β
β β
β 7. Send to relay node or directly to Bob β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β Bob receives and: β
β 1. Uses his private key + ephemeral public key to derive same secret β
β 2. Decrypts message with AES-256-GCM β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Elliptic-curve Diffie-Hellman for secure key exchange. Each message uses a unique ephemeral key for forward secrecy.
Authenticated encryption with 256-bit key. Provides confidentiality AND integrity verification.
Ephemeral keys ensure past messages stay secure even if long-term keys are compromised.
How messages are structured, routed, and delivered in the MumbleChat network.
data class MumbleChatMessage(
val version: Int = 1, // Protocol version
val type: MessageType, // TEXT, FILE, PAYMENT
val senderKeyHash: ByteArray, // keccak256(sender)[:8]
val recipientKeyHash: ByteArray, // keccak256(recipient)[:8]
val ephemeralPubKey: ByteArray, // 32 bytes
val nonce: ByteArray, // 12 bytes
val ciphertext: ByteArray, // Encrypted content
val authTag: ByteArray, // 16 bytes
val timestamp: Long, // Unix millis
val signature: ByteArray // ECDSA signature
)
When recipient is online, messages go directly peer-to-peer.
// 1. Discover peer via DHT
peerInfo = dht.findPeer(recipientAddress)
// 2. Establish libp2p connection
conn = network.dial(peerInfo.multiaddr)
// 3. Send encrypted message
conn.send(encryptedMessage)
// 4. Receive ACK
ack = conn.receive()
When recipient is offline, relay nodes store messages.
// 1. Peer not found online
if (dht.findPeer(recipient) == null) {
// 2. Find relay nodes for recipient
relays = dht.findRelays(recipientKeyHash)
// 3. Send to multiple relays
relays.forEach { relay ->
relay.store(encryptedMessage, ttl = 7.days)
}
}
Decentralized nodes that store encrypted messages for offline users and earn MCT rewards.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β RELAY NODE ARCHITECTURE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β SENDER RELAY NETWORK RECIPIENT β
β ββββββ βββββββββββββ βββββββββ β
β β
β [Alice] ββββββββββββββΊ βββββββββββββββ β
β β Encrypted β Relay A β Store for Bob β
β β Message β (Gold Tier)βββββββββββββββββΊ [Bob] β
β β βββββββββββββββ β (offline) β
β β β β
β β βββββββββββββββ β β
β ββββββββββββββββββββΊ β Relay B β β β
β Redundancy β(Silver Tier)βββββββββ [Bob] β
β βββββββββββββββ (online) β
β β β² β
β β Deliver when β β
β ββββββββBob onlineβββββββββββ β
β β
β RELAY STORAGE: β
β βββββββββββββββ β
β β’ recipientKeyHash: First 8 bytes of keccak256(address) β
β β’ encryptedBlob: Opaque to relay (can't read content) β
β β’ expiresAt: TTL (default 7 days) β
β β’ size: For storage tracking β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ