Делаем чат без сервера, часть 2
Нам добавили новые требования. Теперь мы не просто медиа для псевдонимной публикации контента, но и p2p чат с анонимностью и шифрованием.
После изучения XMTP мы нашли еще одно интересное решение для P2P — протокол Waku от Status Network.
☝️ Это штука для децентрализованных коммуникаций в Web3, которое не требует привязки к Ethereum кошельку и работает бесплатно, без регистраций.
💡 Основное отличие от XMTP заключается в уровне абстракции этого решения. Если вы читали Таненбаума, то знакомы с сетевой моделью OSI, на которой строится интернет. Она делится на несколько уровней.
XMTP работает на прикладном (7) уровне — это готовое решение для чатов со встроенным шифрованием и идентификацией через ETH адреса.
Waku-же находится на транспортном (4) уровне, что делает его более гибким инструментом для создания своих решений.
⚙️ Если XMTP можно сравнить с готовым WhatsApp, то Waku — это конструктор для создания собственного мессенджера.
Он даёт базовый транспорт сообщений через систему топиков и нод, позволяя разработчикам самим выбирать способы шифрования и авторизации.
⌛ Обмен сообщениями в сети Waku работает следующим образом: создается легкая нода в браузере, которая подключается к P2P сети «тяжелых нод».
Затем сообщения передаются через выбранный топик (канал), и все его участники автоматически получают обновления. Вот как это выглядит в коде c waku/sdk:
const node = await createLightNode()
await node.start()
const chatTopic = `/myapp/${crypto.randomUUID()}`
const encoder = createEncoder({ contentTopic: chatTopic })
// Отправка сообщения
await node.lightPush.send(encoder, {
payload: encryptMessage("Привет, Waku!")
})
// Получение новых сообщений
node.subscribe(chatTopic, message => {
console.log(decryptMessage(message))
})
🛡 В плане безопасности Waku даёт все необходимые инструменты: end-to-end для шифрования, ZKP для анонимных чатов, уведомления, хранение тп и тд…
Но все же самое главное — отсутствие центральной точки отказа, что делает систему устойчивой к цензуре!
📊 #статистика День 1148 == 2430 час в IT