Сетевые сообщения Ethereum

Я пытаюсь «присоединиться к точкам» вокруг сетевого аспекта Ethereum. Из документов, по-видимому, базовый протокол RLPx , который управляет Протоколом ΞVp2p. .

  

Хотя TCP обеспечивает среду, ориентированную на соединение, узлы ΞVp2p обмениваются сообщениями в терминах пакетов. RLPx предоставляет средства для отправки и получения пакетов.

В документах RLPx есть tangential , в котором используется RLP .

  

Пакеты динамически обрамлены, с префиксом закодированного заголовка RLP, зашифрованы и аутентифицированы. Мультиплексирование достигается через заголовок кадра, который определяет протокол назначения пакета.

Протокол связи ΞVp2p, в свою очередь, поддерживает под-протоколы, из которых Протокол эфирной связи является одним.

Из документов ΞVp2p:

  

ÐΞVp2p предназначен для поддержки произвольных суб-протоколов (ака возможностей) по основному протоколу проводки.

Из документов Ethereum:

  

Одноранговая связь между узлами, на которых запущены клиенты Ethereum, выполняется с использованием базового протокола протокола ΞVp2p.

Вопросы:

  1. Не могли бы вы объяснить, где /как подключен субпротокол Ethereum в протоколе ΞVp2p?
  2. Может ли API-интерфейс SDK (скажем, Javascript ) сопоставляться с Ethereum идентификаторы сообщений суб-протокола?
  3. Или это сопоставление идентификаторов сообщений, ограниченных клиентами, таких как Geth ?
5 голосов | спросил cogitoergosum 22 Jam1000000amMon, 22 Jan 2018 03:42:28 +030018 2018, 03:42:28

1 ответ


4

Я написал это на канале gitter.im, так что здесь все равно. Предостережение: я не смотрел на недавний geth-код для этого, так что могут быть тонкие расхождения с актуальностью.

Ключевым пунктом является это: «Идентификаторы сообщений считаются компактными от ID 0x10 и далее (0x00-0x10 зарезервирован для сообщений ΞVp2p) и передается каждому под-протоколу с общим (равным-версией, равным имени) в алфавитном порядке. Под-протоколы, которые не являются общими, игнорируются. Если несколько версий разделены одним и тем же (равным именем) суб-протоколом, числовые наивысшие выигрыши, другие игнорируются. "

В основном сообщения DevP2P идентифицируются по типу, который является первым целым числом.

Первые 0x0F (?) зарезервированы для сообщений DevP2P, указанных в документе DevP2P-Wire-Protocol.

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

Подпрограммы, совместно используемые одноранговыми узлами, устанавливаются в сообщении Hello (0x00). Ключевая фраза в документах, связанных с этим, - «cap» Указывает имя возможности одноранговой сети как строку ASCII длиной 3. , shh. "

Итак, скажем, оба одноранговых узла после сообщения «Привет» поддерживают только «eth», то, согласно протоколу проводного протокола Ethereum, следующий идентификатор сообщения смещен + 0x00 для сообщения «Состояние» Ethereum (что делает его 0x10)

На ваш вопрос: «Предположим, я хочу ввести новый подпротокол», я думаю, что приведенные выше ответы. Вам нужно будет создать новый 3-буквенный идентификатор (например, ETH, LES, SHH) и рекламировать его как возможность в вашем клиенте DevP2P. Клиенты рукопожат и в сообщении Hello установили, что у вас есть ваш ??? общий протокол, и это станет частью пространства id сообщения.

Итак, подведем итог: «вспомогательный протокол» - это пространство идентификаторов сообщений, обозначенное 3-буквенным именем. Рукопожатие сверстников и в сообщениях Hello указывается, какие подпрограммы они поддерживают. Для этого отношения p2p общие протоколы расположены в алфавитном порядке, а когда отправляются сообщения, их идентификатор представляет собой смещение относительно начала пространства идентификатора сообщения, заданного в пространстве с идентификатором в алфавитном порядке.

ответил Sentinel 24 Jam1000000amWed, 24 Jan 2018 10:36:51 +030018 2018, 10:36:51

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132