Офлайн-буфер
Конверт для отсутствующего получателя ждёт на узле и уходит, как только устройство подписывается.
Релеи
Релей — обычная программа на чужом сервере. Она держит шифрованный конверт, пока получатель не появится в сети, и помогает устройствам найти друг друга. Текста она не видит.
Релеи не обязательны для mesh и прямых соединений. Это страховка на время офлайна.
Один процесс умеет и ждать, и знакомить, и договариваться с другими узлами.
Конверт для отсутствующего получателя ждёт на узле и уходит, как только устройство подписывается.
Узел отвечает, кто сейчас онлайн, и выдаёт адреса. Дальше устройства соединяются напрямую, минуя релей.
Узлы обмениваются накопленным: живой релей плюс анти-энтропия. Конверт не теряется, если один узел ушёл в офлайн.
Узел не расшифровывает конверты и не хранит ключи. Всё, что он умеет, — принимать, проверять подпись, хранить и пересылать.
Эти адреса уже в сборке. Ключ Ed25519 нужен, чтобы отличить настоящий узел от подмены.
Узлы работают без SLA и могут быть недоступны. Приложение это переживёт: сообщения пойдут через mesh или прямое соединение, а конверт останется у отправителя.
Узел добавляется вручную — приложение не подставляет адреса незаметно.
В Soty: «Настройки → Ретрансляционные хосты → Добавить ретрансляционный хост».
Баннер узла печатает soty://host?addr=…&pk=… — приложение проверит ключ при подключении.
Адрес ws:// или wss:// и Ed25519-ключ отдельно. Ключ обязателен: без него узел не считается доверенным.
В списке появится «Подключено». Отключённый узел можно заменить, не удаляя остальные.
Ключ узла — его личность. Если файл базы потерян, узел получает новый ключ, и клиенты перестают ему доверять.
Один бинарник, один файл SQLite и открытый порт. Инструкция с командами и systemd — в разделе установки.
Инструкция для узлаДля постоянной работы есть deploy/deploy-host.sh: systemd-user, systemd-system, supervisor или nohup, плюс nginx и проверка ключа.
Хосты не ищут друг друга автоматически: список пиров задаёт оператор. Зато внутри списка работает анти-энтропия.
Топология — на усмотрение оператора: полный меш, кольцо или хаб с периферией.
Каждый узел указывает остальных флагом --peer. Без обратной ссылки сообщение дойдёт только в одну сторону.
В --peer можно передать Ed25519-ключ. Если WELCOME вернёт другую личность, соединение рвётся.
После реконнекта узлы обмениваются WANT → HAVE → GET → ENVELOPES и догоняют пропущенное.
Дальше трёх хопов конверт не пересылается. На практике держите путь до получателя в 2–3 узла.
Релей не читает текст, но видит сам факт доставки. Это не баг, а цена офлайн-буфера.
Конверт проверяется по подписи и идентификатору, но не расшифровывается.
Отправитель и получатель видны как публичные ключи. Имена и адресная книга остаются на устройстве.
По метаданным можно анализировать активность. Для чувствительных сценариев используйте mesh или прямое соединение.
Клиент помнит Ed25519-ключ узла. Подменить узел по дороге нельзя без смены ключа.
Свой узел уменьшает число посредников, но не делает метаданные невидимыми для его оператора — если оператор вы.
Поднимите узел на своём сервере или добавьте публичный. Приложение само решит, когда им пользоваться.