1

Децентрализованный форум - размышления (часть 1)

Просто пофантазируем.

Допустим у нас сейчас тестовое задание. Вероятно оно неосуществимо, но стоит задача максимально его обсудить, мозговым штурмом довести до максимально рабочего состояния. Даже если зашли в тупик, то найти обходные решения, костыли, любые условности, которые создадут иллюзию выполнения. Пройти дальше, а потом возможно вернуться и переделать всё до еще более близкого к идеальному состояния.

Задача — создать децентрализованный форум примерно и условно описанный здесь — ссылка.

Напомню основные го функции:

- децентрализация (отсутствие хозяина, сервера, админа и т. д. и самораспространение и доработка сообществом). Бесплатный (платить некому). Без коммерции и беспристрастный.

- минимализм (базовая версия клиента имеет только самый необходимый функционал и ничего более). Другие клиенты доступны, там может быть, что угодно, но базовый клиент максимально урезан от всего лишнего и упрощен.

- самоцензура и самофильтрация от спама — на основе рейтингов и сообществ.

Вопросы, которые сразу возникают — что значит децентрализованный. Насколько? Пока что идеализируем идею и допустим, что у нас вообще нет серверов. Каждый клиент (компьютер, смартфон, ноутбук, где был установлен клиент и который вышел в сеть с галочкой «разрешить синхронизацию — т. е. стал узлом) сам является полноценным сервером. При необходимости его функционал может быть урезан самим пользователем, но по умолчанию, при выходе в сеть, он по имеющейся в нем базе оповещает все известные узлы что он тоже узел и они все обновляют себе информацию о нем. Здесь сразу понятен подвох. А сам клиент где брать? А главное, как подтвердить его подлинность? Как будет происходить его обновление? Всё равно нужен сервер или сервера, где выкладывается установщик клиента. Его исходники. Всё равно будет команда которая его дорабатывает, а значит они его хозяева и имеют над ним влияние. Как нам решить эту задачу?

Варианты костылей:

- код клиента изначально максимально открыт и задокументирован. Каждый имеет возможность его изучить и повторить. Изначальное ядро (некий набор первых IP адресов, с которых всё начиналось) захешировано и любое добавление к нему можно отследить и подтвердить подлинность изначального ядра. Возможно это ядро-клиент имеет некий базовый функционал, которого достаточно, чтобы, сканируя сеть, найти откликнувшиеся узлы и, используя свой хеш как приватный ключ, подтвердить свою подлинность. Т.е. в ядро вшита некая самозащита клиента.

- в сам изначальный клиент вшита область для доработки и обновления. Это же у нас форум. Вот один из его базовых разделов — упрощенный аналог гитхаба. В нем ведется разработка и доработка, исправление багов и обсуждение теми, кто получает некий рейтинг от остальных топовых сообществ и затем они между собой голосование большинства утверждают новый релиз.

- используем технологии торрентов и блокчейнов. Новая версия клиента признается стабильной только при одобрении и верификации от большинства узлов. При этом все эти красивые умные слова не должны перегружать систему максимально экономя трафик и время пользователя.

Теперь обсудим синхронизацию узлов.

Клиент установлен, он оповестил по своей изначальной базе все доступные узлы и сообщил о себе. Он нашел среди узлов тот, где наиболее новый раздел обновлений и, сверив его подлинность с другими узлами, самообновился. Он сверил хеши и временные метки актуальности всех корневых разделов форума и выяснил на каком из узлов какой раздел наиболее актуален на данный момент. И ждет команды. Мы в клиенте подождали всей этой базовой синхронизации (надеюсь не очень долго) и зашли в нужный нам раздел. Теперь клиент загружает все подразделы этого раздела с уже известного и наиболее актуального узла. И далее ищет по узлам наиболее актуальные подразделы, сверяя хеши и временные метки. Так вниз до последнего нужного нам комментария. Синхронизация может происходить после каждого нашего перехода, а можно принудительно поставить какие-то разделы, подразделы или темы на автосинхронизацию.

И немного про мотивацию энтузиастам. Раз у нас есть как минимум один системный раздел на форуме (по обновлениям) и наши клиенты могут выбирать будут они узлами или нет, то стоит предусмотреть им все же какую-то мотивацию. Привяжем к этим хешам и системным рейтингам криптовалюту и пусть майнят её, поддерживая сеть и улучшая клиент. Внутренней валютой также станет какой-нибудь из системных рейтингов, который позволит на что-то его менять в специальных разделах. Все мы догадываемся к чему это может привести, но вдруг в этот раз всё будет немного иначе?)