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

Инструменты командной строки

Публичные инструменты ZooBC позволяют любому пользоваться цепочкой из терминала или из собственного кода. Они находятся на github.com/zoobc/tools и опубликованы ZooBC Foundation под лицензией MIT, которая позволяет любому встраивать их в собственные программы, коммерческие или нет, не спрашивая разрешения. Это не узел: они обращаются к узлу или шлюзу только через его публичный HTTP API, точно так же, как любой другой клиент.

Десять языков, одно поведение

Одни и те же инструменты существуют на десяти языках программирования: C++, TypeScript, JavaScript (один файл без зависимостей, который веб-страница загружает одним тегом script), Python, Go, Rust, Kotlin, Swift, PHP и Perl. Каждый порт предлагает ключи и адреса, сборку и подписание транзакций и zbc-cli — одну команду для всех типов транзакций. Порты на C++, Go и Rust также поставляют по небольшой программе на каждую транзакцию. Собственный комплект узла включает инструменты на C++, такие как zbc-account-gen, zbc-send, zbc-monitor и zbc-cli.

Десять портов остаются одинаковыми благодаря одной общей спецификации и одному набору эталонных тестовых векторов (spec/vectors). Каждый порт прогоняет одни и те же векторы в автоматических проверках сборки, и единственный отличающийся байт проваливает сборку. Поэтому транзакция, собранная на Perl, байт в байт совпадает с транзакцией, собранной на Rust.

Десять меток языков сходятся в одну общую спецификацию с эталонными векторами и дают одни и те же байты на каждом языке
Десять меток языков сходятся в одну общую спецификацию с эталонными векторами и дают одни и те же байты на каждом языке

Контракт zbc-cli

zbc-cli ведёт себя одинаково на каждом языке, поэтому скрипты могут на него полагаться:

  • Вывод: один объект JSON в стандартный вывод и код выхода от 0 до 10.
  • Куда подключаться: --api называет узел или шлюз. Без него инструмент читает переменную окружения ZBC_API, а без неё использует http://localhost:8080 — узел на той же машине.
  • Тайм-ауты: --timeout или переменная ZBC_TIMEOUT; по умолчанию 20 секунд.
  • Ключ: его передаёт переменная окружения ZBC_KEY, так что ключ не попадает в командную строку.
  • Поля: zbc-cli help <command> перечисляет точные поля команды; --json-input принимает их в виде JSON, а --verbose выводит больше подробностей.
zbc-cli help send-zbc

Каждая сумма — целое число атомарных единиц (1 ZBC = 100 000 000 единиц, см. Монета ZBC и её единицы). Значения вроде 1.5, 1e3 или 12abc отклоняются, а не истолковываются.

Что ещё делают инструменты

Инструменты также подписывают и проверяют сообщения вне цепочки, например чтобы доказать сайту, что вы контролируете адрес, не отправляя транзакции (подписанные и зашифрованные сообщения). Как и любой подписант ZooBC, они подписывают транзакции над дайджестом, который включает хеш генезиса цепочки, поэтому транзакция, собранная для одной сети, никогда не действительна в другой (подписи, привязанные к цепочке).

Чем они не являются

  • Это не узел — у узла собственный репозиторий и лицензия.
  • Они не создают блоков и не зарабатывают монет: блоки создают только зарегистрированные узлы по очереди (работа узла).
  • Они не обязательны. Веб-страница может подписывать транзакции, имея лишь Ed25519, SHA3-256 и хеш генезиса цепочки (приложение на одной HTML-странице); инструменты избавляют от этой работы.

См. также