01.12.2021

Прототип P2P-версии клиента Matrix поверх новой overlay-сети Pinecone

Эксперименты с децентрализацией продолжаются!

Ранее разработчики Matrix предложили бессерверный вариант веб-клиента Element с использованием библиотеки libp2p (использующуюся в IPFS). Параллельно с этим шло тестирование iOS-клиента Element поверх mesh-сети Yggdrasil. Изучив доступные инструменты, был привлечён Neil Alexander (разработчик Yggdrasil и Dendrite) для создания дизайна и разработки новой P2P overlay-сети, оптимизированной специально для Matrix — Pinecone (видеопрезентация для FOSDEM 2021).

Пользователям предлагаются для тестирования мобильные клиенты, работающие поверх Pinecone в условиях локальной mesh-сети и глобального Интернета.

Протокол Matrix построен на основе линейной истории событий (events) в формате JSON внутри ациклического графа событий (DAG): простыми словами, является распределённой базой данных, хранящей полную историю отправленных сообщений и данные участвующих пользователей, реплицируя эту информацию между участвующими серверами — ближайшей аналогичной по работе технологией может быть Git и блокчейн.

Основной реализацией этой сети является мессенджер с поддержкой сквозного шифрования и VoIP (аудио- и видеозвонков, групповых конференций). Эталонные реализации клиентов и серверов разрабатываются коммерческой компанией Element, сотрудники которой также возглавляют некоммерческую организацию Matrix.org Foundation, курирующую разработку спецификации протокола Matrix.

Dendrite — сервер сети Matrix нового поколения, основанный на микросервисной архитектуре, написанный на Go.

Yggdrasil — зашифрованная (с поддержкой TLS), одноранговая (P2P), IPv6, overlay-сеть, написанная на Go.

Дизайн Pinecone вдохновлён Yggdrasil и создан для решения проблемы создания маршрутов между пирами сети, используя source routing или virtual ring routing вместо greedy routing. Введение overlay-сети решает только часть проблем, сам протокол Matrix всё ещё остаётся full-mesh. В дальнейшем могут быть введены оптимизации, вроде механизма gossip или store-and-forward. Больше подробностей во всё той же видеопрезентации для FOSDEM 2021 от Neil Alexander.

В текущем виде на телефонах пользователей запускается полноценный Matrix-сервер на Go — Dendrite, встроенный прямо в клиенте Element и работающий в фоне. Всё ещё не предусмотрено никакого механизма для использования одного пользовательского идентификатора на нескольких устройствах, но это может измениться после принятия правки в протокол под номером MSC2787: Portable Identities. Она позволит отвязать идентификатор пользователя от конкретного сервера, используя вместо этого публичный ключ и привязку внешних идентификаторов к этому публичному ключу. Подразумевается, что после этого пользователь сможет привязать к своему публичному ключу произвольное количество человекочитаемых алиасов вида @username:domain.tld, настроив синхронизацию своего профиля с избранными публично доступными серверами. Пользователь сможет дать и забрать разрешение серверу отправлять сообщения от своего имени.

Matrix потенциально может стать самой крупной и эффективной mesh-сетью: европейские правительства и учебные заведения уже используют федерацию серверов этой сети в публичном секторе. После появления P2P-опции, сотни и тысячи госслужащих и студентов, сосредоточенные в одном месте, смогут коммуницировать друг с другом, минуя серверы. Точно так же и вся остальная имеющаяся пользовательская база сети Matrix может быть конвертирована в бессерверный вариант.

P2P и создание маршрутов не единственные нововведение, также стоит ожидать появление нового транспортного протокола вместо текущего JSON over HTTPS.

Для тестирования достаточно установить клиент на свой смартфон. После запуска программы вам будет доступна связь между клиентами с помощью локальной mesh-сети. Для подключения к глобальной Интернет-сети зайдите в настройки, раздел «Peer-to-Peer», и включите опцию «Connect to static peer». После этого вы можете зайти в тестовую комнату, предлагаемую самими разработчиками, по адресу #beachparty:3bf0258d23c60952639cc4c69c71d1508a7d43a0475d9000ff900a1848411ec7 или создать свою, оставив её адрес в комментариях! После входа в комнату должна загрузиться история предыдущих отправленных сообщений и картинок.

>>> Прототип для Android (10+)

>>> Прототип для iOS

>>> Подробности

Источник.