РАСПРЕДЕЛЕННАЯ СОЦИАЛЬНАЯ СЕТЬ

СОЦИАЛЬНЫЙ ОДНОРАНГОВЫЙ ПРОТОКОЛ В МАСШТАБЕ СЕТИ ИНТЕРНЕТ

TLDR:

Solcial - это предоставление пользователям возможности, максимально приближенной  к платформам социальных сетей Web2, с использованием преимуществ технологий Web3.

  • Одним из препятствий, с которым сталкивается любая платформа на основе блокчейна, является плата за пользование. Чтобы устранить пользовательские сборы за операции, не связанные с токенами, при сохранении конфиденциальности Solcial создает уровень одноранговой связи (P2P), привязанный к Solana и построенный на основе libp2p, который доставляет контент (каналы, лайки и т. д.) посредством самостоятельного размещения и одноранговой репликации.
  • Мы также разработали специальный тип узла, который имеет тот же внешний протокол, что и типовое приложение для рабочего стола или телефона, с дополнительными оптимизациями, предназначенными для обработки десятков тысяч одновременных одноранговых узлов, которые называются Beacon Nodes. Ноды — это, по сути, обеспечение, которое сохраняет пользовательский контент, когда создатели отключаются от сети, и делает его доступным для других пользователей; весь пользовательский контент хранится в IPFS и доступен через уровень P2P, не полагаясь на цензурированные серверы или шлюзы.

Введение

Это первый пост в серии, который объясняет, как внутренняя работа протокола Solcial придает ему уникальные свойства устойчивости к цензуре, сохраняя при этом разумную производительность обмена данными.

Топология сети

Узлы обмениваются данными через общедоступный Интернет, образуя оверлейную сеть, специфичную для Solcial, с использованием модифицированной версии протокола HyparView¹.

Каждый узел поддерживает список активных пиров размером log 2(N)+1,  где N - предполагаемый размер всей сети. Значение N извлекается из блокчейна путем определения количества учетных записей пользователей, зарегистрированных на сегодняшний день, и периодически обновляется по мере роста числа пользователей. Соединения с активными узлами являются стабильными, двунаправленными и постоянными, и это узлы, с которыми они общаются напрямую во время контакта  или любой другой активности p2p. Каждый узел также поддерживает список пассивных пиров размером  6⋅(log2(N)+1), которые используются в качестве резервных одноранговых узлов на случай, если какой-либо из активных одноранговых узлов отключится или перестанет отвечать. Базовым протоколом для соединений между активными одноранговыми узлами является QUIC² с шифрованием NOISE, работающем на базе libp2p³.

Протокол NAT Traversal достигается с помощью трех методов, которые используются в зависимости от сетевых обстоятельств узла. Первый метод — по возможности использовать IPv6 вместо IPv4, потому что в этом случае нет необходимости в NAT, однако, согласно статистике, только менее 40% Интернета использует IPv6⁴.

Резервный механизм заключается в использовании AutoNAT с использованием протокола идентификации libp2p, который запрашивает у других узлов в сети видимый адрес нашего устройства. Этот адрес, инициированный узлом за NAT, уже зарегистрирован на их маршрутизаторе на целевой машине, однако бывают обстоятельства, когда это не работает, тогда мы возвращаемся к третьему и самому надежному, но дорогому варианту.

Третий вариант заключается в использовании протокола ретрансляции каналов libp2p⁵ , который имитирует работу протокола TURN⁶, имея промежуточный узел, который ретранслирует пакеты между двумя одноранговыми узлами за NAT. Эту роль могут взять на себя beacon ноды и некоторые одноранговые узлы с общедоступными IP-адресами, которые выбирают ретрансляторы с настроенными ограничениями. Подробнее о bacon нодах далее в этом посте.

Индентичность узлов

Пиры идентифицируются с помощью их открытого ключа в виде мультихэша⁷ , который равен открытому ключу адреса их кошелька в Solana, который зарегистрирован в ончейн-контракте Solcial. Единственный способ принять данный общедоступный идентификатор узла — это иметь секретный ключ из пары ключей ED25519.

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

Оверлейное членство

Одноранговые узлы с открытыми ключами, не зарегистрированными в цепочке, не смогут присоединиться к сетевому оверлею HyparView и тем самым автоматически выпадут из одноранговой сети Solcial.

Все пиры, желающие присоединиться к Solcial p2p, отправят JOIN сообщение на один из узлов начальной загрузки (некоторые из этих узлов начальной загрузки также являются beacon нодами) по /solcial/public теме. Введение тем в HyparView является одной из наших модификаций оригинальной статьи.

Любой узел, получающий JOIN запрос от однорангового узла, сначала проверит, что мультихэш существует в цепочке и связан с учетной записью Solcial, а затем отправит FORWARDJOIN сообщение одному из своих активных одноранговых узлов с активным случайным блужданием, установленным на 3, они, в свою очередь, передать это сообщение всем своим активным одноранговым узлам, увеличивая текущий номер hop на единицу, пока он не достигнет 3 hop. Это защита от DDoS-атак на загрузочные узлы, а также эффективная техника децентрализации для максимально возможного распространения и рандомизации связи между узлами.

Любой узел, находящийся в пределах 3 hop от исходного JOIN получателя, отправит NEIGHBOR сообщение исходному запросу JOIN , установив активное постоянное соединение между ними.

Периодически каждые 15 секунд узлы будут передавать SHUFFLE сообщение случайному активному одноранговому узлу со случайной выборкой его активных и пассивных одноранговых узлов и устанавливать длину случайного обхода этого сообщения на 4. Это гарантирует, что все одноранговые узлы в сети всегда будут иметь свежую информацию о других узлах, которые они смогут хранить  в пассивном использовании для целей восстановления сети, когда какой-либо из их активных одноранговых узлов перестает отвечать на запросы или отключается.

Эффективный Gossip-протокол

Только активные одноранговые узлы участвуют в распространении сообщений между одноранговыми узлами. Активные одноранговые узлы образуют оверлейную сеть в общедоступном Интернете, и в графе подключения между узлами существуют циклы. Чтобы обеспечить эффективную передачу сообщений между одноранговыми узлами в сети, нам необходимо, во-первых, свести к минимуму дублирование распространения сообщений между одноранговыми узлами, а во-вторых, найти наиболее оптимальный путь сообщений.

Это достигается с помощью алгоритма  Epidemic Broadcast Trees⁸, который формирует минимальное остовное дерево между одноранговыми узлами путем их разделения на eager-push nodes and lazy push nodes. Узлы Eager-push всегда пересылают сообщения, как только они получены любым узлом.

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

Каждый раз, когда полученное сообщение оказывается дубликатом ранее полученного сообщения от активного узла, тогда соединение с этим узлом считается циклом в графе и преобразуется в lazy-push путем отправки PRUNE сообщения.

Другой случай сокращения активного соединения и замены его соединением из lazy  list — это когда мы наблюдаем, что количество hop, пройденных сообщением, чтобы добраться до нас через lazy-push node, меньше на 4 прыжка, чем сообщение от нетерпеливого активного партнера. Это составляет алгоритм оптимизации широковещательного дерева.

Распространение контента

Сообщения, передаваемые через протокол p2p, описанный в предыдущих разделах, представляют собой сообщения IPFS Bitswap⁹   с идентификаторами контента, созданными пользователями Solcial. Чтобы лучше понять, как Bitswap и IPFS используются в Solcial, давайте опишем структуру профиля пользователя.

Каждая учетная запись пользователя в сети имеет то, что называется индексом профиля . Этот индекс указывает на CID последних версий их содержимого. Индекс представляет собой CRDT конечной последовательности, который формирует неизменный журнал операций, выполняемых учетной записью.

Индекс профиля можно рассматривать как связанный список, в котором каждый элемент указывает на CID предыдущего элемента и принимается одноранговыми узлами в качестве следующего элемента по порядку, только если он подписан закрытым ключом владельца учетной записи. Высокоуровневый логический пример фида профиля, размещенного в закодированном виде в этом формате, выглядит так:

{

“author”: “12D3KooWSoeYKbpkb5UoL2T5eiomWRHdxR9cPC4tk11gKU89fFwT”,

“prev”: “QmYtUc4iTCbbfVSDNKvtQqrfyezPPnFvE33wFmutw9PBBk”,

“action”: “append-feed-post”,

“timestamp”: “2022–01–11T15:58Z”,

“params”: {

“content”: “QmV8cfu6n4NT5xRr2AHdKxFMTZEJrA44qgrBCr739BN9Wb”

“enckey”: “z2DhMLJmV8kNQm6zeWUrXQKtmzoh6YkKHSRxVSibscDQ7nq”

},

“signature”: “2Lpnvt23H6qHswCNPmwCCUSas7YNP[…]jV1dC9qdNPR4zDqsCuBX”

}  



Такая запись имеет свой собственный CID и передается как объект IPFS PB-DAG¹⁰ в тему /solcial/content оверлея HyparView. Эта запись связана с предыдущей записью и дополнительным контентом, рекурсивно запрашивая связанные CID, пользователи могут получить всю историю и контент учетной записи.

Сначала этот объект проверяется любым принимающим узлом, если подпись содержимого соответствует открытому ключу автора. В случае неудачной проверки подписи узел-отправитель навсегда блокируется от текущего узла за нарушение протокола. Успешная проверка подписи распространяет содержимое на все другие одноранговые узлы, заинтересованные в содержимом, созданном этой учетной записью.

Когда такой CID получен пиром, он добавляется в журнал операций автора. Сумма всех операций, выполненных автором, составляет текущее состояние профиля.

По умолчанию каждый узел закрепляет и заполняет контент своей учетной записи и контент друзей. Существуют специальные одноранговые узлы, которые мы создаем как часть нашей инфраструктуры, называемые beacon nodes , и они похожи на одноранговые узлы обычных пользователей, за исключением того, что они заинтересованы в общем контенте и служат своего рода социальной службой закрепления IPFS для всего контента,  если все текущие узлы отключены. Представьте себе, что это друзья, которые являются друзьями каждого. Сеть может работать и без них, но они обеспечивают дополнительный уровень доступности контента.

Доступ для чтения

Каждый в оверлее Solcial p2p может запрашивать, загружать и предоставлять любой пользовательский контент, отправляя сообщения IWANT и IHAVE сообщения Bitswap в /solcial/content тему с CID корневого индекса верхнего уровня учетной записи, а затем рекурсивно запрашивать все связанные CID.

Первоначальная синхронизация учетной записи или получение самых последних записей учетной записи достигается путем широковещательной передачи HEAD сообщения в /solcial/sync тему, где другие одноранговые узлы, являющиеся рассадниками (включая beacon nodes), отвечают CID последнего контента, о котором они знают. Перевод между пользовательскими дескрипторами и пользовательскими открытыми ключами выполняется путем запроса блокчейна Solana.

Поле предыдущей записи можно использовать для разрешения конфликтующих HEAD и выбора самой последней записи.

Доступ для записи

Чтобы иметь возможность писать в журнал учетной записи, пользователь должен иметь закрытый ключ из пары ключей ED25519, которая соответствует идентификатору его учетной записи. Имея этот ключ, пользователь может генерировать действительную подпись записи, которую он добавляет в журнал, которая не будет отклонена другими одноранговыми узлами в сети.

Привилегии в доступе к контенту

Некоторый контент, публикуемый пользователями, предназначен только для избранной группы получателей, например, подписка уровня 1 или уровня 2. Эти сообщения сначала шифруются с использованием симметричного ключа шифрования AES-256. Хэш этого ключа прикреплен к метаданным контента в исходном сообщении.

Ключ распространяется среди случайного подмножества подходящих одноранговых узлов по NOISE зашифрованному каналу, установленному во время рукопожатия libp2p. Автор поста может разрешить узлам-маякам также участвовать в этой схеме обмена ключами, чтобы сделать процесс почти мгновенным для всех пользователей, но он не обязан этого делать, если считает, что их контент очень конфиденциальный. Когда уполномоченный  пользователь хочет расшифровать контент, он отправляет GETKEY сообщение в /solcial/keyexchange тему оверлея с хэшем ключа шифрования.

Все пиры, владеющие этим ключом, которые находятся в сети, будут проверять право пира на получение этого ключа, запрашивая блокчейн и проверяя, есть ли у пользователя необходимые токены для доступа к контенту. После успешной проверки ключ передается запрашивающему узлу с использованием прямого соединения quic/noise в обход gossip-протокола.

Поддержка платформы

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

Веб-версия почти всегда будет централизованной из-за того, как работают браузеры и что время жизни вкладки браузера короткое, и любой контент, созданный через веб-интерфейс, будет отражаться на p2p узлами-маяками. Любой контент, потребляемый веб-клиентом, будет копией файла p2p. P2P — источник правды.

Базовый технический стек реализован с использованием Rust, libp2p с привязками к React Native и Tauri¹¹ .

[1] Лейтао, Жоао, Хосе Перейра и Луис Родригес. « HyParView : протокол членства для надежной трансляции на основе сплетен».

[2] https://en.wikipedia.org/wiki/QUIC

[3] https://libp2p.io/

[4] https://www.google.com/intl/en/ipv6/statistics.html

[ 5] https://docs.libp2p.io/concepts/circuit-relay/

[6] https://datatracker.ietf.org/doc/html/rfc5766

[7] https://docs.libp2p.io/reference /glossary/#multihash

[8] Лейтао, Жоао, Хосе Перейра и Луис Родригес. « Эпидемические широковещательные деревья. 2007 г. 26-й Международный симпозиум IEEE по надежным распределенным системам (SRDS 2007). IEEE, 2007.

[9] https://docs.ipfs.io/concepts/bitswap/

[10] https://github.com/ipld/ipld/blob/master/specs/codecs/dag-pb/spec.md

[11] https://tauri.studio/

О соцсетях

Solcial — это децентрализованная социальная сеть, которая предоставляет пользователям возможности web3, позволяя людям взаимодействовать друг с другом, не опасаясь цензуры, и позволяя создателям контента получать за свою работу справедливое вознаграждение по рыночной стоимости.

Связь

Telegram: https://t.me/solcialrussia
Discord: https://discord.gg/solcial
Twitter: https://twitter.com/solcialofficial
Блог: http://blog.solcial.io/
Сайт: https:/ /solcial.io
Электронная почта: [email protected]
Linktree: https://linktr.ee/solcial

You've successfully subscribed to Solcial Blog
Great! Next, complete checkout to get full access to all premium content.
Error! Could not sign up. invalid link.
Welcome back! You've successfully signed in.
Error! Could not sign in. Please try again.
Success! Your account is fully activated, you now have access to all content.
Error! Stripe checkout failed.
Success! Your billing info is updated.
Error! Billing info update failed.