интересно и вовремя, как раз занят переработкой всей игры wildviz, поэтому думаю внедрить в ней такой протокол. А по поводу отслеживания комментариев, думаю можно в цепочку активностей автора статьи вносить появление нового комментария от любого пользователя. Все-таки статья пишется не просто для себя, а для получения обратной связи, и отказываться от комментариев "незнакомцев" было бы излишне жестко.
[RU] Протокол Голос на блокчейне VIZ
Протокол Голос (он же Voice) на блокчейне Виз должен обладать следующими возможностями:
- Пользователь и есть сам социальная сеть — он сам формирует круг своего восприятия;
- Отказ от последовательного обхода всех блоков;
- Доступ и загрузка истории активности аккаунта от новых записей к более старым;
- Каждый аккаунт — самостоятельная и независимая сущность;
- Отсутствие цензуры (свобода слова, свобода выбора);
- Отсутствие обязательной публичной информации о подписке на ленту активности или лайки за конкретную активность (пользователи могут сами порекомендовать другой аккаунт или активность);
- Не зависеть от посредника для обработки и подготовки данных;
- Иметь возможность ссылаться на сущности в блокчейне VIZ используя свою адресацию;
- Пользователь видит только то, за чем наблюдает, он не видит активности других пользователей, если не подписался на них или кто-то из наблюдаемых не поделился чужой активностью;
Ниже рассмотрим концепт, как возможно было бы это реализовать.
Предыдущие статьи:
Протокол децентрализованной социальной сети на распределенном реестре
Отказ от последовательного обхода всех блоков
Было бы глупо следить за активностью всего мира в каком-нибудь twitter. Это просто невозможно как по техническим ограничениям, так и по разумным доводам. Зачем? Как вы будете хранить всю эту информацию? Зачем вам матный стишок из Зимбабве от незнакомого человека? Зачем вам фото черепахи из аквариума, если вам это не нужно?
Пользователь сам выбирает за кем следить, что ему интересно. В централизованных сервисах социальной сети за вас всё делает посредник. Он предложит круг знакомых, сообщества по вашим интересам и сам будет доставлять вам контент в ленту новостей. Сам перемешает контент по популярности. Ну и рекламу вставит между той или иной сетевой активности. Хватит это терпеть!
Пришла пора децентрализации, где сам пользователь у руля! Он сам решает, на кого подписаться и за кем наблюдать. И сам формирует ленту активности исходя из наблюдаемых объектов. Пользователь сам и есть социальная сеть.
Но как этого добиться? В обычных сервисах история пишется последовательно. Вот Петя выложил фотографию, обновил статус, написал сообщение про смену места работы и поделился отзывом про воооон-то кафе по гео-метке. Социальные сети последовательно получают данные от Пети и добавляют в вашу «ленту новостей». Ничего не напоминает? Например, «цепочку блоков»?
Так и есть — пользовательская активность последовательна. Но вам не нужно изучать её от начала времён, можно изменить правила игры и спускаться от нового к старому. Не хватает только адресации данных. Если Петя опубликует фото и запишет это в блок 1, а через год напишет статью про путешествие по Европе в блоке 10512001, вы же не будете перебирать все эти блоки за год между двумя событиями.
Решение есть. Достаточно продумать адресацию активности. Достаточно Пете в своей статье про путешествие указать мета-данные, что прошлая его активность была в блоке 1.
Блокчейн ноде достаточно хранить номер блока с последней активностью аккаунта, чтобы используя адресацию на предыдущее действие загрузить всю ленту активности!
Вот как это должно выглядеть на практике:
Любая пользовательская активность внутри протокола Голоса просто должна содержать ссылку на номер блока с предыдущей записью.
Формирование ленты активности
Представим, что такая сеть уже работает. Люди пишут в блокчейн и связывают данные блок за блоком действие за действием. Новый пользователь решил подписаться на знакомого и узнал его аккаунт в сети VIZ (устно, визиткой ли или ссылкой из статьи в интернете), вручную вбил в своей социальной сети его аккаунт.
Программное обеспечение, в нашем случае собственная социальная сеть (как софт) обратилась к одной из публичных нод блокчейна и запросила данные об этом аккаунте, узнала, что последняя запись по протоколу Голос была в блоке 1006 и запросила данный блок. Сама разобрала его в поисках операции custom протокола voice и увидела действие article. Разобрала данные в ней, сформировала для своего пользователя объект статьи и отдала его пользователю на прочтение. А фоном увидела ссылку на прошлое действие в блоке 1004, и, шаг за шагом, загрузила историю в 10 шагов. Если пользователю понравилась статья, он может пролистать другую активность наблюдаемого аккаунта и подписаться на его активность.
Подписка даст сигнал личной социальной сети периодически наблюдать за этим аккаунтом и проверять, появилась ли новая активность (в блоке выше чем 1006). Если активность появилась — загрузить её и вставить в общую ленту активности для пользователя.
Таким образом пользователь сам формирует за кем он наблюдает, их активность заполняет его ленту и он может её просматривать и формировать свою социальную сеть.
Проблема обратной связи
Пользователь сам формирует ленту наблюдения? Здорово, не будет получать ничего лишнего!
Так, стоп. А что делать с комментариями? Если Вася вдруг оставил комментарий к статье Пети, но Петя на него не подписан, то как Петя об этом узнает?
Ответ может показаться необычным, но он довольно справедлив. Никак, если Петя не озаботится этим. Он же не может наблюдать за всем остальным миром? Тут на чаше весов 2 состояния — либо следить только за тем, что тебя интересует, либо за всем сразу.
За всем сразу мы уже следили, точнее за нас это делали централизованные социальные сети. В децентрализованном мире этим придется пожертвовать. И либо запускать оракула, который будет уведомлять о комментариях к вашей активности, либо ограничить круг своего общения теми, за кем вы сами наблюдаете. Ученые могут наблюдать друг за другом и комментарий одного к статье другого будет замечен. Но вопрос студента или зеваки (левого человека) может быть просто «мимо». Если тема публично важна и пользователь опубликовавший статью хочет дать обратную связь заинтересованной публике — то в этом помогут оракулы.
Оракулы всеядные, они будут мониторить блок за блоком активность всех пользователей и при публичной записи в виде комментария сообщать об этом автору статьи. Каким способом? Любым. Это может быть email, сообщение от бота в телеграме или push уведомление. Главное, чтобы пользователь мог ответить на комментарий используя адресацию. Тогда его подписчики получат активность в виде его ответа с явным указанием и адресацией исходного комментария.
Адресация активности
Как сделать адресацию активности в блокчейне? Конечно же с указанием номера блока и аккаунта, на чью активность мы хотим сослаться.
Например, для пользователя из примера выше, мы можем сослаться так: viz://@user/1006/voice
- Транспортный протокол viz:// указывает на то, где искать информацию (с помощью какого программного обеспечения до неё добраться);
- @user указывает аккаунт, чью информацию мы ищем;
- 1006 — номер блока;
- voice — наименование протокола активности (в случае, если на базе VIZ будет действовать несколько протоколов).
Социальная сеть пользователя сможет разобрать такую адресацию и добраться до данных, показать их пользователю. А он уже сможет перейти к активности пользователя @user и решить, интересен он ему или нет.
Проблема множественности протоколов
Это вопрос времени, когда в сети VIZ будут появляться все больше и больше новых протоколов. Нужна возможность правильно ссылаться на предыдущую активность в рамках конкретного протокола. Иначе может получиться, что активность протокола voice будет ссылаться на активность протокола chess, например. Для упрощения такой обратной адресации необходимо разработать плагин для ноды, который будет хранить номер блока с последней активностью конкретного протокола, а не просто номер последней custom операции у аккаунта (сейчас за счетчик операций отвечает свойство custom_sequence, а за номер блока custom_sequence_block_num).
После этого можно будет создать основу для децентрализованной социальной сети.
Структура протокола
Custom операция с id voice, содержащий json с указанием действия и его данных. Список действий можно расширять со временем, достаточно иметь аналог простых записей без сложной структуры. Предлагаю первым действием сделать status, который будет работать как сообщение от аккаунта (поле text). На его основе можно построить аналог, например, Твиттера.
Обязательное поле с указанием номера блока с предыдущим действием (prev). Если он отсутствует, то считать данное действие началом активности аккаунта (вся предыдущая активность остается в истории блокчейна для оракулов).
В будущем VIZ сможет предложить миру изложенную модель децентрализованной социальной сети. Все в руках кузнецов нового мира! ⚒️
А как ты эту активность увидишь? Нужен другой оракул.
Речь же что ты подписался на author, а пришел commentator и написал активность. Ты не подписан на commentator, значит не видишь его custom операции. В целом - это решает проблему спама, так как от спамеров просто отписываешься и все. Но усложняет вопрос необходимости иметь своего или чужого оракула для просмотра комментариев от "всех" юзеров. Это можно сделать, не так и сложно-то (в виде стороннего оракула и запроса к нему). Но изначальная модель не позволяет иметь такую возможность по своей топологии. И это хорошо. Невозможно сделать все идеально. Получая одно, жертвуем другим.
Интересная модель для построения индивидуальной ленты подписок.
А сторонний сервис может парсить всю активность, строить топы контента, предлагать рекомендации и т.д.
На очередь еще один пост, который раскроет возможность GDPR даже в такой ситуации. Ну и хэши. Куда без хэшей.