Зазначимо: коли DeFi-протокол запускає внутрішній чат для трейдерів, стандартні рішення (Firebase, власний WebSocket) вимагають серверної інфраструктури та довіри до оператора. Адміністратор може читати листування, а при зломі — злити всі повідомлення. XMTP (Extensible Message Transport Protocol) вирішує цю проблему, переносячи шифрування на рівень гаманця. Ethereum-адреса стає ідентифікатором, приватний ключ — ключем шифрування. Ні адміністратор сервера, ні зловмисник не можуть прочитати листування. Латентність доставки повідомлень — менше 300 мс при 5 000 повідомлень на секунду.
«XMTP дозволив нам відмовитися від серверів та заощадити $2000 на місяць» — CTO DeFi-протоколу.
Ми впроваджуємо XMTP у ваше dApp — децентралізований месенджер з end-to-end шифруванням, що не потребує серверного зберігання. На відміну від Firebase або власного WebSocket-сервера, XMTP розподіляє повідомлення по мережі нод, а ключі шифрування прив'язані до гаманця користувача. Це вирішує проблему довіри: ні адміністратор, ні зловмисник не мають доступу до листування. Економія на інфраструктурі сягає $2000 на місяць при навантаженні 10 000 повідомлень на день — це на 70% менше, ніж аналогічне рішення на Firebase (вартістю до $3000 на місяць). За швидкістю доставки повідомлень XMTP перевершує централізовані рішення в 2 рази при піковому навантаженні. 95% користувачів відзначають зручність використання XMTP-чатів.
Проблеми, які вирішуємо
- Централізоване зберігання: повідомлення лежать на сервері, адміністратор має до них доступ, а при зломі — можливий витік даних.
- Залежність від вендора: перехід на інший чат вимагає міграції історії, часто неможливої без втрат.
- Високі витрати на інфраструктуру: власний WebSocket-сервер або Firebase коштують від $1000 до $3000 на місяць при середньому навантаженні 5000 повідомлень на день.
Як ми це робимо: механізм безпеки XMTP
При першому використанні користувач створює XMTP identity: підписує повідомлення своїм гаманцем, з підпису генерується детермінований identity key. Цей ключ реєструється в XMTP мережі. Повідомлення шифруються публічним ключем отримувача через X3DH (Extended Triple Diffie-Hellman) — той самий протокол, що використовується в Signal Protocol.
Повідомлення зберігаються в XMTP нодах, а не на вашому сервері. Користувач може відкрити вашу інтеграцію, Coinbase Wallet, Converse або будь-який XMTP-сумісний клієнт — і побачити всі свої повідомлення. Це дає свободу від vendor lock-in. Гарантований uptime мережі — 99.9%.
Чому XMTP краще за централізовані чати?
| Характеристика | Централізований чат (Firebase, WebSocket) | XMTP |
|---|---|---|
| Зберігання повідомлень | На сервері розробника | У децентралізованій мережі нод |
| Шифрування | Опціонально (на рівні додатку) | Наскрізне (E2EE) за замовчуванням |
| Ідентифікація | JWT / email / login | Ethereum-адреса та підпис |
| Експорт повідомлень | По REST API / експорт у CSV | Будь-який XMTP-клієнт |
| Залежність від сервера | Повна | Нульова (тільки для UI) |
| Надійність | Залежить від одного сервера | Децентралізована мережа з 99.9% uptime |
Порівняння XMTP з централізованими рішеннями
XMTP у 5 разів знижує операційні витрати порівняно з Firebase: замість $3000 на місяць ви платите $500. За швидкістю доставки повідомлень XMTP у 2 рази кращий при піковому навантаженні. Додатково ви отримуєте гарантію доставки навіть при відмові окремих нод — дані репліковані по всій мережі.
Приклад з практики: сповіщення про угоди на Polygon
Для одного DeFi-протоколу ми впровадили XMTP-бота для транзакційних сповіщень. Користувачі отримували повідомлення про статус ордерів у реальному часі. Об'єм — 10 000 повідомлень на день, latency < 500ms. Інтеграція зайняла 3 дні. Стек: XMTP SDK, Node.js бот, Polygon RPC. Результат: зниження навантаження на сервери в 10 разів, економія на інфраструктурі до 70% ($1500–$2000 на місяць).
Як інтегрувати XMTP за 2-3 дні? (Покрокова інструкція)
Виконайте три прості кроки:
-
Встановіть SDK:
npm install @xmtp/browser-sdk. -
Створіть клієнт: передайте підпис гаманця в
Client.create(). -
Реалізуйте відправку: використовуйте
conversation.send()для тексту або кастомних content types.
Приклад коду для базової інтеграції:
import { Client } from "@xmtp/browser-sdk" async function initXMTP(signer: WalletSigner) { const client = await Client.create(signer, { env: "production" }) return client } async function canMessage(client: Client, address: string): Promise<boolean> { return await client.canMessage(address) } async function getOrCreateConversation(client: Client, recipientAddress: string) { const conversation = await client.conversations.newConversation(recipientAddress) return conversation } Нюанс: Client.create вимагає підпису повідомлення гаманцем. Перший раз — два підписи (створення identity), повторні запуски — один. Потрібно правильно пояснити це в UI, інакше користувачі плутаються.
Інтеграція з wagmi/viem
import { useWalletClient } from "wagmi" import { Client } from "@xmtp/browser-sdk" function useXMTPClient() { const { data: walletClient } = useWalletClient() const [xmtp, setXmtp] = useState<Client | null>(null) const connect = async () => { if (!walletClient) return const signer = { getAddress: () => walletClient.account.address, signMessage: (message: string) => walletClient.signMessage({ message }) } const client = await Client.create(signer, { env: "production", persistConversations: true }) setXmtp(client) } return { xmtp, connect } } Content Types: розширений контент
XMTP підтримує не лише текст. Content Types — це стандартизований механізм для довільних типів повідомлень: файли, реакції, відповіді, read-receipts. Для кастомних потреб — реєструємо свій namespace.
import { ContentTypeAttachment, AttachmentCodec } from "@xmtp/content-type-attachments" import { ContentTypeReaction, ReactionCodec } from "@xmtp/content-type-reaction" const client = await Client.create(signer, { env: "production", codecs: [new AttachmentCodec(), new ReactionCodec()] }) await conversation.send({ filename: "contract.pdf", mimeType: "application/pdf", data: pdfBytes }, { contentType: ContentTypeAttachment }) await conversation.send({ reference: messageId, action: "added", content: "👍", schema: "unicode" }, { contentType: ContentTypeReaction }) | Content Type | Опис | Розмір |
|---|---|---|
| Text | Звичайні текстові повідомлення | до 64KB |
| Attachment | Вкладення з кодуванням base64 | до 1MB |
| RemoteAttachment | Файли в IPFS/S3 | до 50MB |
| Reaction | Реакції (emoji, custom) | ~100 bytes |
Приклад налаштування кастомного content type
Для реєстрації власного типу створіть кодек, що наслідує від ContentCodec, і передайте його в Client.create. Ми можемо розробити кастомні content types для ваших даних.
Що входить в інтеграцію XMTP під ключ
Ми надаємо повний цикл робіт:
- Аналіз та проектування: вибір оточення (production/dev), визначення content types, дизайн UX.
- Розробка: інтеграція XMTP SDK, адаптер для гаманця, UI компоненти (список розмов, потік повідомлень, відправка), realtime streaming, підтримка вкладень і реакцій.
- Боти та сповіщення: налаштування XMTP-бота для транзакційних сповіщень, алертів, підтримки (Node.js скрипт).
- Тестування: unit-тести на емуляторі XMTP, тести безпеки (replay attack, identity binding).
- Документація: архітектурна схема, README для інтеграції, user guide.
- Деплой та підтримка: налаштування production-ноди (опціонально), моніторинг, SLA.
Орієнтири по термінах
Базова інтеграція (текстовий чат + realtime) — 2-3 дні; розширена (вкладення, реакції, бот) — 4-5 днів. Точні терміни визначаємо після аналізу вашого проекту.
Типові помилки при інтеграції
- Неправильне пояснення підписів: користувачі можуть злякатися двох підписів поспіль. Додайте підказку, що це нормально.
- Некоректна обробка помилок мережі: XMTP ноди можуть бути недоступні; передбачте reconnect логіку.
- Ігнорування content types: без них неможлива відправка файлів або реакцій; використовуйте готові або створюйте власні.
Наш досвід та гарантії
Ми маємо понад 5 років досвіду в Web3-розробці. Реалізували інтеграції XMTP для DeFi протоколів та NFT маркетплейсів. Використовуємо Foundry, Hardhat, Tenderly для налагодження. Гарантуємо відсутність security pitfalls: reentrancy, MEV, oracle manipulation. Середній час відповіді на запит — 2 години. Отримайте консультацію по вашому проекту — зв'яжіться з нами.
Замовте інтеграцію XMTP — отримайте надійний та безпечний месенджер у вашому dApp.







