Вики ZooBC
Токены и рынки

Мост и обёрнутые монеты

Мост соединяет ZooBC с Bitcoin и Ethereum. Монеты, внесённые на адрес хранения в этих цепочках, появляются в ZooBC как обёрнутые монеты, одна к одной, и тем же путём могут быть отправлены обратно. Ни одна сторона не управляет им единолично: голосуют зарегистрированные узлы, и цепочка выпускает или сжигает монеты, только когда согласны две трети мест, которые не приостановлены.

Мост входит в ZooBC начиная с версии 0.5.8: киперы аттестуют депозиты и выводы, а цепочка по их голосам выпускает и сжигает обёрнутые монеты. Цепочки перезапускаются на версии 0.5.8 без запуска сервиса моста.

Мостовые монеты

Четыре из четырнадцати генезис-монет — мостовые монеты:

МонетаПредставляет
ZBTCбиткоин
ZETHэфир
ZUSDCUSDC, токен ERC-20 в Ethereum
ZUSDTUSDT, токен ERC-20 в Ethereum

У каждой есть адрес хранения в её родной цепочке, зафиксированный в генезисе и входящий в хеш генезиса. GET /api/v1/bridge/coins перечисляет все четыре. У остальных десяти генезис-монет адреса хранения нет. Символы из 4 или 5 знаков, начинающиеся или заканчивающиеся на Z, зарезервированы для этого пространства имён, поэтому ни один пользовательский токен не может занять название мостовой монеты (см. Выпуск токена).

Киперы и голоса

Узел ZooBC не следит ни за какой чужой цепочкой. Отдельная программа-кипер, zbc-bridge, работает рядом с узлом, у которого есть конфигурация моста. Она следит за адресами хранения и голосует в ZooBC транзакциями AttestEvent (см. Триггеры и аттестации): идентификатор события голоса за депозит начинается с ZBRDEP1:, а голоса за вывод — с ZBWDR1:. Каждый голос — обязанность без комиссии, отправляемая с комиссией ровно 0 с собственного ключа узла.

Депозит: монеты внутрь

Мост: эфир поступает на адрес хранения; киперы каждый аттестуют «1 ZETH на Y»; подсчёт переходит две трети, и ZETH выпускается на Y; ниже — обратный путь через счёт хранения, сжигание и подписи киперов
Мост: эфир поступает на адрес хранения; киперы каждый аттестуют «1 ZETH на Y»; подсчёт переходит две трети, и ZETH выпускается на Y; ниже — обратный путь через счёт хранения, сжигание и подписи киперов
  1. Пользователь отправляет монеты на адрес хранения в Bitcoin или Ethereum.
  2. Каждый кипер, увидевший подтверждённый депозит, отправляет аттестацию, называющую депозит и значение: токен, сумму и получателя в ZooBC.
  3. В конце каждого блока цепочка подсчитывает голоса. Когда две трети учтённых мест — зарегистрированных узлов, которые не приостановлены (например, 8 из 11), — аттестовали в точности одно и то же значение, каждый узел выпускает эту сумму получателю, одна к одной и без комиссии моста, а событие окончательно закрывается.

Приостановленные места не голосуют и не учитываются. Сверху действуют две меры защиты:

  • Суточный лимит. Если депозит поднял бы выпуск монеты за сутки (последние 5 760 блоков) выше большего из одной целой монеты и 10 % её предложения, должны согласиться все места, которые не приостановлены, и никогда не меньше двух третей всех мест.
  • Нижняя граница реестра. Ни одно решение моста не принимается, пока реестр меньше своей нижней границы в max(3, min_registry_size) мест и различных владельцев (см. Правила двух третей).

Вывод: монеты наружу

Вывод: перевод на счёт хранения с сообщением ZBW1, финальность его блока, голоса киперов с подписями для чужой цепочки, подсчёт двух третей, сжигание со счёта хранения и подписи, освобождающие эфир на адрес назначения
Вывод: перевод на счёт хранения с сообщением ZBW1, финальность его блока, голоса киперов с подписями для чужой цепочки, подсчёт двух третей, сжигание со счёта хранения и подписи, освобождающие эфир на адрес назначения
  1. Пользователь отправляет обёрнутую монету обычной транзакцией TransferToken на счёт хранения с сообщением ZBW1|, за которым следует адрес назначения. Этот перевод и есть запрос: BurnToken не участвует, и пользователь ничего не отправляет в чужой цепочке.
  2. Киперы действуют, только когда запрос стал окончательным, а это занимает от примерно 3 до примерно 27 часов после его блока (см. Финальность и откат); кипер просматривает цепочку начиная с последнего обработанного им финализированного блока. Голос каждого кипера называет запрос, токен, сумму и адрес назначения и несёт подпись этого кипера для чужой цепочки.
  3. Когда согласны две трети, каждый узел ещё раз проверяет запрос и сжигает эти единицы со счёта хранения.
  4. Собранные подписи киперов, доступные для чтения через API, санкционируют выдачу монет на адрес назначения.

Событие, которое 720 блоков (3 часа) не получает новых аттестаций, выбывает из рассмотрения.

Обёрнутые монеты в ZooBC

После выпуска обёрнутая монета — обычный генезис-токен с 8 знаками после запятой: её можно отправлять, помещать в эскроу, передавать потоком, предлагать в обмен или торговать на рынке. Её предложение меняется только через мост, а MintToken и BurnToken для неё отклоняются. Выпуски через мост не делятся политикой разделения получателя (см. Политики разделения и транзакций). Сжигания обёрнутых монет учитываются в подсчёте сожжённого в цепочке, который для самого ZBC остаётся нулевым.

См. также