Вики ZooBC
Интеграции

Шлюзы

Узлы говорят на простом HTTP на собственных портах и заняты поддержкой цепочки. Шлюз стоит перед ними для публики. Он держит сертификат домена, поэтому браузеры подключаются по HTTPS, и отдаёт страницы, которые открывают люди: кошелёк, обозреватель, страницу проверки файлов, руководства и загрузки. Шлюзы перечислены в цепочке, поэтому кошельки могут найти другой, когда их шлюз отказывает.

Что делает шлюз

Шлюз — это роль, которую настраивает установщик ZooBC, отдельная от узла программа. Он завершает TLS (шифрование, на котором держится HTTPS) и передаёт запросы к API под /api/v1/ двум внутренним сервисам:

  • сначала архивному сервису, который хранит глубокую историю с возможностью поиска (обозреватель и архивные узлы);
  • затем узлу, когда архивный сервис отвечает пустым 404, то есть такого маршрута у него нет.

Поэтому новые транзакции в итоге попадают к полному узлу, ведь только у узла есть пул ожидающих транзакций. Ответы — это собственные данные цепочки; шлюз лишь передаёт их. Он добавляет собственные заголовки для межсайтовых запросов (CORS), разрешающие GET, POST и OPTIONS и заголовок X-API-Key, с кешированием на 600 секунд.

Браузер обращается к шлюзу по HTTPS; шлюз отдаёт страницы кошелька, обозревателя и проверки, сначала спрашивает архивный сервис и при неудаче переходит к узлу, пул которого принимает новые транзакции
Браузер обращается к шлюзу по HTTPS; шлюз отдаёт страницы кошелька, обозревателя и проверки, сначала спрашивает архивный сервис и при неудаче переходит к узлу, пул которого принимает новые транзакции

Шлюз никогда не создаёт блоков — это делают только зарегистрированные узлы, — никогда не хранит чьих-либо ключей и не обменивает валюты.

Регистрация шлюза

Владелец вносит шлюз в список транзакцией RegisterGateway (тип 36). Она записывает:

  • собственный ключ шлюза, записываемый как ZBG_…;
  • его домен: от 1 до 256 символов, только буквы, цифры, точки и дефисы;
  • его URL, который должен начинаться с https:// и занимать не более 1 024 байт.

Она блокирует стейк 10 ZBC (1 000 000 000 атомарных единиц) с аккаунта владельца. Сумма — это устанавливаемая голосованием gateway_registration_cost, которая во всех цепочках начинается с 10 ZBC и меняется только голосованиями мест по ценам.

Как остаться в списке

Шлюз доказывает, что он жив, транзакциями GatewayHeartbeat (тип 37). Каждый сигнал активности — тело в 132 байта: ключ шлюза, высота и хеш недавнего блока и подпись ключом шлюза над первыми 68 байтами. Названный блок должен находиться не дальше 20 блоков от вершины, поэтому сигнал нельзя подготовить заранее.

Цепочка допускает интервал сигналов в 240 блоков плюс льготный период в 480: шлюз, молчащий 720 блоков (3 часа), становится неактивным, а его владелец получает стейк обратно. Владелец может также в любой момент уйти транзакцией UnregisterGateway (тип 38), которая тоже возвращает стейк. Ничего не сжигается: стейк — это депозит, а не плата, и подписки нет.

Сигналы активности, каждый из которых называет блок не глубже 20, удерживают шлюз в списке; после 720 блоков молчания он становится неактивным, и стейк 10 ZBC возвращается владельцу
Сигналы активности, каждый из которых называет блок не глубже 20, удерживают шлюз в списке; после 720 блоков молчания он становится неактивным, и стейк 10 ZBC возвращается владельцу

Любой может получить список шлюзов по адресу GET /api/v1/registry/gateways. Ответ этого маршрута отличается по форме в зависимости от того, кто его даёт — архивный сервис или узел. Когда шлюз отказывает, веб-кошелёк заново читает этот список вместе со списками ретрансляторов и архивных сервисов и переходит дальше. К каждому шлюзу также могут быть привязаны ретрансляторы.

Кран testnet

В testnet, монеты которой не имеют ценности, шлюз также отдаёт кран по адресу /faucet/. Укажите ему адрес, и он пришлёт тестовые ZBC. Выплата уменьшается вдвое по мере получения: до 100 ZBC по первому запросу, затем 50, 25, 12,5 и так далее, пока запрос не принёс бы меньше 1 ZBC; после этого больше ничего не приходит до еженедельного сброса. Полученное учитывается по адресу или по интернет-адресу (IP), поэтому многие аккаунты за одним подключением делят один лимит. Кран — единственное место, которое принимает сумму в ZBC с дробной частью, а не в атомарных единицах.

Он платит на любой поддерживаемый адрес, а не только на ZBC_…: подходит и адрес Bitcoin, Ethereum или другой чужой цепочки, поскольку такие ключи могут управлять аккаунтами ZooBC (ключи и типы аккаунтов). Тестовые монеты нельзя обменять на ZBC в mainnet, и никто их не продаёт (devnet, testnet и mainnet).

См. также