«А давайте на блокчейне соцсеть построим!» (с) Часть 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