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 页面构建应用);这些工具只是省去了这部分工作。

另见