«А давайте на блокчейне соцсеть построим!» (с) Часть 1
Привет. Меня зовут Андрей. Это история о том, как мы строили децентрализованную социальную сеть на блокчейне — без центральных серверов, к которым привыкли обычные продукты. Всё описанное — мой личный опыт: я занимался разработкой узла и инфраструктурой.
Часть 1 — вводная: идея, принципы и общая картина. Технические детали в части 2. Разбор ошибок — часть 3.
## Идея и правила игры
Исходно задумывалась децентрализованная система отзывов, что-то типа Отзовика, но почти сразу идея ушла в сторону социальной сети. Фундаментально закладывались три правила: децентрализация, доступность, анонимность. Мы хотели, чтобы решение не зависело от ЦОДов и DNS и чтобы его могло поддерживать сообщество — в том числе без глубоких ИТ-навыков. А ещё хотели встроенную микроэкономику. Поэтому блокчейн.
Короткий рецепт: распределённая сеть (Bitcoin) + необслуживаемая СУБД + веб-сервер.
## Зачем блокчейн
Транзакция — базовая «атомарная» единица системы. Всё, что нужно зафиксировать — пост, лайк, комментарий, — подписывается личным ключом и уходит в сеть. Блокчейн гарантирует: запись не подменят и не вычеркнут из истории, а сама история прозрачна и не привязана к паспортной личности.
Обычной биткоин-транзакции для постов и лайков мало — нужно было научить сеть понимать «социальные» действия. Мы расширили транзакцию, чтобы в ней можно было хранить пользовательские данные, и назвали такие транзакции социальными. Вмешательство в исходный код Bitcoin минимизировано для последующего обновления кодовой базы. Расскажу подробнее в части 2.
## Консенсус
В социальной сети нельзя комментировать несуществующий пост или создать пост без аккаунта. За согласованность таких правил отвечает консенсус. В криптовалютах есть простые запреты: нельзя потратить монеты дважды и нельзя потратить то, чего нет. У нас та же идея: регистрация аккаунта и первый пост должны идти в правильном порядке — иначе блок «социальных» действий будет некорректным. Правила кажутся простыми, но на деле их оказалось больше, чем ожидалось.
Тот же консенсус позволил опереться на экономику сети: авторы получали вознаграждения за лайки и комментарии, майнеры (у нас — Proof of Stake) — за сборку блоков, а рейтинг на лайках и комментариях нельзя было «подкрутить» снаружи. Модерация, реклама и другие механизмы — отдельная большая тема, будем обсуждать? ;)
## База на домашнем ПК
Для большой соцсети нужна большая база, но мы хотели запуск на обычных ПК пользователей — буквально в пару кликов. Это амбициозно, возможно нереализуемо, но надежда пока еще теплится, я затрону эту тему в будущем. Сейчас же сеть стабильна: нагрузочные тесты показывали стабильную работу на 1000 транзакций в минуту на средних домашних ПК, объём БД полного узла подходит к 300 ГБ, а загрузка полного узла с нуля происходит за несколько дней.
## Свой узел как торрент
Концепция «все в одном» была ключевой на старте, мы хотели, чтобы это было похоже на торрент, где каждый может запустить узел и иметь доступ к сети через свой узел. Так как все операции в сети атомарны в виде транзакций, а транзакции анонимны (до тех пор пока вы не скомпрометировали свой публичный ключ), то, работая с сетью через собственный узел, нет возможности определить, создали ли вы транзакцию, которая посылается вашим узлом в сеть, или же вы ее просто пересылаете от другого узла. А имея свой собственный встроенный веб-сервер и БД, не нужно ходить за контентом к кому-то и компрометировать историю просмотров.
## Что было сложно и что дальше
За кадром осталась большая работа: сеть без ведущего узла, учёт выходов транзакций, очереди, согласованность с цепочкой, откаты, неравномерная репликация. Не все получилось идеально, за многие решения так и вообще стыдно, но это был хороший опыт и отличный эксперимент, который, возможно, послужит вдохновением для будущей идеальной социальной сети.
Продолжение в Часть 2 - https://set.ki/post/LPwVqCt
// Side effects: // - 2 AI agents damaged during text formatting and proofreading
· 22.10
Выглядит, будто вы сами себя загнали в догматические рамки вместо решения проблемы (аналогично текущим попыткам добавить ллмки всюду)
Не лучше ли было определить ограничения-отрицания вместо ограничений-утверждений (утверждения имеют привычку исключать решения)? Здесь можно добавить мем про ракету, что знает, где она, зная, где её нет
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён
· 22.10
Вы про консенсус? Я думаю об описании реализации, хочется коротко, но емко. А после планирую разобрать собственные ошибки проектирования.
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён
· 22.10
Про выбор технологий и прочего, что влияет на архитектуру решения
Будет интересно почитать, что там было (все пути самому не испробовать)
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён
· 22.10
Аа.. тогда думаю да, можно и так сказать, сами придумали, сами расхлебывали)
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён