Ретрансляторы
Кошелёк ZooBC может показывать, кто из контактов в сети, и устанавливать звонки между аккаунтами. Два браузера обычно не могут соединиться друг с другом напрямую, поэтому им нужна точка встречи в открытом интернете. Ретранслятор и есть такая точка встречи. Он передаёт сигнализацию, через которую два кошелька находят друг друга, сообщает им, какие серверы использовать для самого звонка, и сообщает, кто в сети. Ретрансляторы перечислены в цепочке, поэтому кошельки находят их без какого-либо центрального каталога.
Что делает ретранслятор
Ретранслятор обслуживает кошельки тремя способами:
- Сигнализация: короткие сообщения, которыми два кошелька обмениваются, чтобы установить звонок, передаваемые через WebSocket по адресу
/relay/ws. - Присутствие: какие аккаунты сейчас в сети.
- Помощь с соединением: серверы TURN и ICE, которые позволяют двум браузерам за домашними роутерами связаться друг с другом для звонка.
Официальный веб-кошелёк также передаёт через ретранслятор подписанные ходы игр-каналов (приложения-каналы).
Каждый ретранслятор описывает себя по адресу /relay/info: адрес оператора для оплаты, его тариф, его серверы TURN и путь сигнализации. Передаваемые данные оплачиваются отправкой ZBC на адрес оператора, а аккаунты без средств получают отказ.
Вход
Ретранслятор должен знать, какой аккаунт на самом деле в сети, иначе кто угодно мог бы выдавать себя за кого угодно. Поэтому кошелёк входит, подписывая ключом своего аккаунта одноразовый вызов от ретранслятора. Вызов нельзя использовать повторно, а ключ никогда не покидает кошелёк.
Внесение ретранслятора в цепочку
Владелец вносит ретранслятор в список транзакцией RegisterRelay (тип 48), называя:
- собственный ключ ретранслятора, записываемый как
ZBR_…; - ключ шлюза, к которому он относится, — это должен быть активный шлюз, принадлежащий тому же аккаунту;
- его домен и URL по тем же правилам, что и у шлюза: буквы, цифры, точки и дефисы для домена и URL, начинающийся с
https://.
Стейк не блокируется. Владелец отзывает запись транзакцией UnregisterRelay (тип 49), а кошельки находят ретрансляторы по адресу GET /api/v1/registry/relays. Когда шлюз отказывает, веб-кошелёк заново читает списки шлюзов, ретрансляторов и архивных сервисов в цепочке.
Чего ретрансляторы не делают
- Они не пересылают транзакции. Узлы сами передают транзакции своим пирам и ничего за это не берут.
- Они не следят за другими цепочками для моста; это делают программы-киперы рядом с зарегистрированными узлами (мост и обёрнутые монеты).
- Они не создают блоков; это делают только зарегистрированные узлы (работа узла).
- Они никогда не хранят ключ пользователя.