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

Ретрансляторы

Кошелёк ZooBC может показывать, кто из контактов в сети, и устанавливать звонки между аккаунтами. Два браузера обычно не могут соединиться друг с другом напрямую, поэтому им нужна точка встречи в открытом интернете. Ретранслятор и есть такая точка встречи. Он передаёт сигнализацию, через которую два кошелька находят друг друга, сообщает им, какие серверы использовать для самого звонка, и сообщает, кто в сети. Ретрансляторы перечислены в цепочке, поэтому кошельки находят их без какого-либо центрального каталога.

Что делает ретранслятор

Ретранслятор обслуживает кошельки тремя способами:

  • Сигнализация: короткие сообщения, которыми два кошелька обмениваются, чтобы установить звонок, передаваемые через WebSocket по адресу /relay/ws.
  • Присутствие: какие аккаунты сейчас в сети.
  • Помощь с соединением: серверы TURN и ICE, которые позволяют двум браузерам за домашними роутерами связаться друг с другом для звонка.

Официальный веб-кошелёк также передаёт через ретранслятор подписанные ходы игр-каналов (приложения-каналы).

Каждый ретранслятор описывает себя по адресу /relay/info: адрес оператора для оплаты, его тариф, его серверы TURN и путь сигнализации. Передаваемые данные оплачиваются отправкой ZBC на адрес оператора, а аккаунты без средств получают отказ.

Вход

Ретранслятор должен знать, какой аккаунт на самом деле в сети, иначе кто угодно мог бы выдавать себя за кого угодно. Поэтому кошелёк входит, подписывая ключом своего аккаунта одноразовый вызов от ретранслятора. Вызов нельзя использовать повторно, а ключ никогда не покидает кошелёк.

Два кошелька, каждый подключён к ретранслятору для сигнализации и присутствия и входит с аккаунтом и подписью, а сам звонок идёт между ними через TURN; RegisterRelay записывает ключ ретранслятора, домен, URL и шлюз владельца
Два кошелька, каждый подключён к ретранслятору для сигнализации и присутствия и входит с аккаунтом и подписью, а сам звонок идёт между ними через TURN; RegisterRelay записывает ключ ретранслятора, домен, URL и шлюз владельца

Внесение ретранслятора в цепочку

Владелец вносит ретранслятор в список транзакцией RegisterRelay (тип 48), называя:

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

Стейк не блокируется. Владелец отзывает запись транзакцией UnregisterRelay (тип 49), а кошельки находят ретрансляторы по адресу GET /api/v1/registry/relays. Когда шлюз отказывает, веб-кошелёк заново читает списки шлюзов, ретрансляторов и архивных сервисов в цепочке.

Чего ретрансляторы не делают

  • Они не пересылают транзакции. Узлы сами передают транзакции своим пирам и ничего за это не берут.
  • Они не следят за другими цепочками для моста; это делают программы-киперы рядом с зарегистрированными узлами (мост и обёрнутые монеты).
  • Они не создают блоков; это делают только зарегистрированные узлы (работа узла).
  • Они никогда не хранят ключ пользователя.

См. также