BastyonBastyon
  • Начало работы

    • Начало работы
    • Руководство по настройке Easy Node
    • Руководство по настройке Full Node
  • Монетизация

    • Руководство по монетизации Bastyon
  • Обзор платформы

    • Обзор платформы
    • Участие в разработке Bastyon
  • Блокчейн-узел

    • Начало работы
    • Исходный код
    • Сборка
    • Использование
    • RPC
  • API

    • Введение
    • Начало работы
    • RPC
    • Мини-приложения
  • Мини-приложения

    • Начало работы
    • Разрешения
    • SDK
  • Barteron

    • API Barteron
  • English
  • Русский
  • Начало работы

    • Начало работы
    • Руководство по настройке Easy Node
    • Руководство по настройке Full Node
  • Монетизация

    • Руководство по монетизации Bastyon
  • Обзор платформы

    • Обзор платформы
    • Участие в разработке Bastyon
  • Блокчейн-узел

    • Начало работы
    • Исходный код
    • Сборка
    • Использование
    • RPC
  • API

    • Введение
    • Начало работы
    • RPC
    • Мини-приложения
  • Мини-приложения

    • Начало работы
    • Разрешения
    • SDK
  • Barteron

    • API Barteron
  • English
  • Русский
  • Блокчейн-узел

    • Начало работы
    • /ru/dev/node/source_ru.html
    • Сборка
    • Использование
    • RPC

Использование

Обзор

Все узлы сети имеют идентичную базу данных, что позволяет клиентам взаимодействовать с любым узлом без опасений несогласованности данных. Клиент может переключаться между узлами "внутри сессии", может использовать API для повышения производительности или для дополнительной проверки "честности" узла. Один и тот же метод API можно вызвать на двух или более узлах, чтобы убедиться, что данные согласованы и корректны.

Со стороны клиента сеть узлов может быть представлена как единое облако со стандартизированным API. Вот несколько парадигм, которые должен обеспечивать каждый узел в таком облаке:

  • Узел должен обеспечивать доступ к облаку как минимум с одной точкой входа, предоставляя минимальный API для работы с данными.
  • Узел должен иметь минимальный набор публичного сервисного API (getnodeinfo, getpeerinfo).
  • Узел должен иметь механизмы валидации базы данных - например, сумму всех рейтингов или хеш данных.

Публичный доступ

Узел должен обеспечивать доступ к API следующими способами:

  • HTTP через порт 38081
  • WS TCP через порт 38082
  • WS UDP через порт 38083
  • WS TCP через динамический порт, определяемый методом STUN с использованием пиров с внешне доступными интерфейсами 1-3
  • WS UDP через динамический порт, определяемый методом STUN с использованием пиров с внешне доступными интерфейсами 1-3

Порты STUN

Для реализации доступа к узлу через NAT, узел должен запустить UDP или TCP сокет для определения своего внешнего IP-адреса (STUN-Address) и порта (STUN-Port), которые могут отличаться из-за использования маршрутизации NAT.

Для реализации этого механизма узел должен запустить один сокет STUN-Server и N STUN-Client сокетов, по одному для каждого подключенного пира.

Сокет STUN-Server действует как STUN-сервер и помогает другим узлам определить их внешний IP и порт.

Сокеты STUN-Client используются для определения внешнего IP-адреса узла и "резервирования" порта в таблице маршрутизации NAT.

Таким образом, каждый узел, помимо локального IP-адреса и статических открытых портов, может получить внешний IP-адрес и набор портов для внешних подключений. Пока узел поддерживает соединение с пиром, порт остается открытым, и в большинстве случаев NAT будет пропускать входящие запросы на подключение от клиентов.

Узлы должны обеспечивать обмен информацией об известных данных STUN между узлами и клиентами:

  • API методы getnodeinfo и getpeerinfo должны возвращать данные STUN

  • Узлы должны получать и отправлять свои данные STUN известным пирам

  • Узлы должны сохранять данные STUN пиров, запросивших данные через STUN-Server

Дополнительная информация о Port Hole Punching:

Последнее обновление:
Участники: gked
Prev
Сборка
Next
RPC