Skip to content

GolosChain/bandwidth-service

Repository files navigation

Bandwidth service

Bandwidth service является сервисом для предоставления необходимых мощностей (бендвича) пользователям golos.io (например, для публикации постов). Сервис подписывает транзакции вместо пользователя, сохраняя его авторство.

Основное

Микросервис содержит 2 контроллера и 1 сервис, помимо служебных:

Сервисы:

  • Storage: сервис, который является, по сути, базой данных в оперативной памяти. Его задачей является хранение имен пользователей и идентификаторов каналов, а также самоочищаться раз в один час. Предоставляет публичные методы для добавления/удаления пользователей в базу, для проверки, есть ли пользователь в базе и для удаления канала соединения при его разрыве.

Контроллеры:

  • Whitelist: контроллер, задачей которого является управление списком пользователей, которым разрешен доступ к запросу бендвича. Данный контроллер предоставляет два публичных метода класса: на бан пользователя и на проверку доступа по его имени и его идентификатору канала (channelId, cid). Когда запрашивается проверка доступа, сначала контроллер ищет пользователя в базе данных в памяти (storage service), и если он там не найден, то в базе данных монго, а если и там пользователь не найден, то контроллер делает запрос в сервис регистрации. Если пользователь найден в сервисе регистрации, то он добавляется и в монго и в базу данных в памяти, если нет, то доступ запрещается. Если пользователь забанен (что выясняется на этапе запроса к монго), то доступ запрещается. Когда запрашивается бан пользователя, то в базе данных пользователю присваивается флаг "забанен" и он удаляется из базы данных в памяти.

  • Bandwidth Provider: контроллер, который предоставляет один публичный метод: предоставления бендвича. Этот метод принимает транзакцию и проверяет, есть ли в ней запрос на предоставление бендвича и совпадает ли имя пользователя, который должен предоставить бендвич с пользователем, от имени которого запущен микросервис, а также, разрешено ли пользователю запрашивать бендвич. Если транзакцию не требуется подписывать, то она передается в блокчейн. Если требуется, и у пользователя есть право это запросить, то транзакция подписывается и передается в блокчейн.

Микросервис реализует 3 метода:

  • 'bandwidth.provide': метод, который принимает транзакцию, для которой требуется предоставить бендвич, подписывает и отправляет ее в блокчейн. Метод возвращает ответ от блокчейна.
  • 'bandwidth.banUser': метод, который принимает имя пользователя, которого требуется исключить пользователя из списка пользователей, которым разрешено получение бендвича (вайтлист). Возвращает статус исполнения запроса.
  • 'bandwidth.notifyOffline': метод, который принимает имя пользователя, статус которого поменялся на "оффлайн", а также его channelId и исключает его из вайтлиста, который хранится в оперативной памяти (но не из базы данных).
API JSON-RPC
  • bandwidth.provide: принимает параметры вида {transaction, chainId}, возвращает ответ от блокчейна либо ошибку
  • bandwidth.banUser: принимает параметры вида {user, channelId}, возвращает статус либо ошибку
  • bandwidth.notifyOffline: принимает параметры вида {user, channelId}, возвращает статус либо ошибку

Переменные окружения

Возможные переменные окружения ENV:

  • GLS_CONNECTOR_HOST (обязательно) - адрес, который будет использован для входящих подключений связи микросервисов. Дефолтное значение при запуске без докера - 127.0.0.1

  • GLS_CONNECTOR_PORT (обязательно) - адрес порта, который будет использован для входящих подключений связи микросервисов. Дефолтное значение при запуске без докера - 3000, пересекается с GLS_FRONTEND_GATE_PORT

  • GLS_METRICS_HOST (обязательно) - адрес хоста для метрик StatsD. Дефолтное значение при запуске без докера - 127.0.0.1

  • GLS_METRICS_PORT (обязательно) - адрес порта для метрик StatsD. Дефолтное значение при запуске без докера - 8125

  • GLS_MONGO_CONNECT (обязательно) - ссылка на подключение к MongoDB

  • GLS_CYBERWAY_HTTP_URL (обязательно) - ссылка на подключение к блокчейну Cyberway

  • GLS_PROVIDER_PUBLIC_KEY (обязательно) - публичный ключ провайдера бендвича

  • GLS_PROVIDER_WIF (обязательно) - приватный ключ провайдера бендвича

  • GLS_PROVIDER_USERNAME (обязательно) - имя пользователя провайдера бендвича

  • GLS_PRISM_CONNECT (обязательно) - ссылка для подключения к сервису призма

  • GLS_REGISTRATION_CONNECT (обязательно) - ссылка для подключения к сервису регистрации

  • GLS_CHANNEL_TTL (обязательно) - время жизни канала (время, которое будет хранится channelId в базе данных в памяти). Важно: _storage проверяет, не превышено ли это значение лишь раз в определенное время, поэтому между тем, как данный лимит будет превышен, и тем, как канал будет фактически удален из памяти, может пройти существенное количество времени

  • GLS_STORAGE_CLEANUP_TIMEOUT - значение равных промежутков времени (в миллисекундах), через которые сервис очищает каналы с истекшим TTL из базы в памяти. Дефолтное значение равняется одному часу

Запуск

Для запуска достаточно вызвать команду docker-compose up в корне проекта, предварительно указав необходимые ENV переменные.


About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •