Инструменты командной строки
Публичные инструменты 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-странице); инструменты избавляют от этой работы.