Мост и обёрнутые монеты
Мост соединяет ZooBC с Bitcoin и Ethereum. Монеты, внесённые на адрес хранения в этих цепочках, появляются в ZooBC как обёрнутые монеты, одна к одной, и тем же путём могут быть отправлены обратно. Ни одна сторона не управляет им единолично: голосуют зарегистрированные узлы, и цепочка выпускает или сжигает монеты, только когда согласны две трети мест, которые не приостановлены.
Мост входит в ZooBC начиная с версии 0.5.8: киперы аттестуют депозиты и выводы, а цепочка по их голосам выпускает и сжигает обёрнутые монеты. Цепочки перезапускаются на версии 0.5.8 без запуска сервиса моста.
Мостовые монеты
Четыре из четырнадцати генезис-монет — мостовые монеты:
| Монета | Представляет |
|---|---|
| ZBTC | биткоин |
| ZETH | эфир |
| ZUSDC | USDC, токен ERC-20 в Ethereum |
| ZUSDT | USDT, токен ERC-20 в Ethereum |
У каждой есть адрес хранения в её родной цепочке, зафиксированный в генезисе и входящий в хеш генезиса. GET /api/v1/bridge/coins перечисляет все четыре. У остальных десяти генезис-монет адреса хранения нет. Символы из 4 или 5 знаков, начинающиеся или заканчивающиеся на Z, зарезервированы для этого пространства имён, поэтому ни один пользовательский токен не может занять название мостовой монеты (см. Выпуск токена).
Киперы и голоса
Узел ZooBC не следит ни за какой чужой цепочкой. Отдельная программа-кипер, zbc-bridge, работает рядом с узлом, у которого есть конфигурация моста. Она следит за адресами хранения и голосует в ZooBC транзакциями AttestEvent (см. Триггеры и аттестации): идентификатор события голоса за депозит начинается с ZBRDEP1:, а голоса за вывод — с ZBWDR1:. Каждый голос — обязанность без комиссии, отправляемая с комиссией ровно 0 с собственного ключа узла.
Депозит: монеты внутрь
- Пользователь отправляет монеты на адрес хранения в Bitcoin или Ethereum.
- Каждый кипер, увидевший подтверждённый депозит, отправляет аттестацию, называющую депозит и значение: токен, сумму и получателя в ZooBC.
- В конце каждого блока цепочка подсчитывает голоса. Когда две трети учтённых мест — зарегистрированных узлов, которые не приостановлены (например, 8 из 11), — аттестовали в точности одно и то же значение, каждый узел выпускает эту сумму получателю, одна к одной и без комиссии моста, а событие окончательно закрывается.
Приостановленные места не голосуют и не учитываются. Сверху действуют две меры защиты:
- Суточный лимит. Если депозит поднял бы выпуск монеты за сутки (последние 5 760 блоков) выше большего из одной целой монеты и 10 % её предложения, должны согласиться все места, которые не приостановлены, и никогда не меньше двух третей всех мест.
- Нижняя граница реестра. Ни одно решение моста не принимается, пока реестр меньше своей нижней границы в max(3,
min_registry_size) мест и различных владельцев (см. Правила двух третей).
Вывод: монеты наружу
- Пользователь отправляет обёрнутую монету обычной транзакцией TransferToken на счёт хранения с сообщением
ZBW1|, за которым следует адрес назначения. Этот перевод и есть запрос: BurnToken не участвует, и пользователь ничего не отправляет в чужой цепочке. - Киперы действуют, только когда запрос стал окончательным, а это занимает от примерно 3 до примерно 27 часов после его блока (см. Финальность и откат); кипер просматривает цепочку начиная с последнего обработанного им финализированного блока. Голос каждого кипера называет запрос, токен, сумму и адрес назначения и несёт подпись этого кипера для чужой цепочки.
- Когда согласны две трети, каждый узел ещё раз проверяет запрос и сжигает эти единицы со счёта хранения.
- Собранные подписи киперов, доступные для чтения через API, санкционируют выдачу монет на адрес назначения.
Событие, которое 720 блоков (3 часа) не получает новых аттестаций, выбывает из рассмотрения.
Обёрнутые монеты в ZooBC
После выпуска обёрнутая монета — обычный генезис-токен с 8 знаками после запятой: её можно отправлять, помещать в эскроу, передавать потоком, предлагать в обмен или торговать на рынке. Её предложение меняется только через мост, а MintToken и BurnToken для неё отклоняются. Выпуски через мост не делятся политикой разделения получателя (см. Политики разделения и транзакций). Сжигания обёрнутых монет учитываются в подсчёте сожжённого в цепочке, который для самого ZBC остаётся нулевым.