开发者指南 · Zikaron

命令行

zikaron 提供与窗口相同的账本操作,一个动作一个子命令。它面向脚本:输出是单个 JSON 值,结论体现在退出码里。完整的输出形状、退出码、拒绝原因与参数,见源码里的 CLI-SCHEMA.md。

在哪里

用 dmg 安装的
/Applications/ZIKARON.app/Contents/MacOS/zikaron
用 pkg 安装的
/usr/local/bin/zikaron
从源码构建的
target/release/zikaron

三条约定

标准输出是单个规范 JSON 值
每次调用输出一个值,以值的最后一个字符结束。字节格式依法 §3.4:紧凑书写,成员按字节序排列。
误用时标准输出为空
参数有误、路径读取失败时,退出码为 2,标准输出零字节,标准错误的第一行写作 <原因> <对象>,如 E_UNREADABLE /nowhere/at/all。调用方凭标准输出是否为空,即可分清答案与误用。
状态词原样传出
GREEN、PARTIAL、FAIL、COMPLETE、GAPS 等由核写出,命令行原样传出。

写文件只有一种方式:--out 先在旁边写完整个临时文件、落盘,再改名到位;同名文件已经存在时,这次写入作罢,原文件一个字节都保持原样。

退出码

码含义示例
0已答,答案肯定GREEN、COMPLETE
1已答,答案否定条目被拒,或结论为 FAIL、BROKEN_CHAIN、NO_LABEL
2误用参数有误、路径读取失败,标准输出为空
3已答,介于两者之间PARTIAL、GAPS、UNAVAILABLE
4答案缺席节点失联、多个节点读数相左、扫描被拒

3 与 4 各占一个码,是这张表的分量所在。把「尚未上链」并入 0,买方会把尚待锚定的授权当作放行;并入 1,一次「暂不可知」会被读成「伪造」。把「节点不通」并入 1,一次网络故障会被读成「这条链是假的」。扫描失败是答案缺席,调用方应重试或换节点。

二十一个子命令

子命令作用
keygen生成一把密钥,输出地址与私钥
init在空账本上写创建账本条目
history追加一条存证
grant签一份授权并写入账本
revoke签一份撤销并写入账本(裁决文件摘要可选)
adopt写一条导入条目
attest用外部密钥出一份连署
succeed写一条换密钥或移交条目
annotate写一条注记
retract写一条删除条目(目标须是本账本里一条现存的存证)
anchor把哈希锚定上链:调用登记合约,或自转账裸锚
scan按链设置扫描锚
audit用扫描结果加账本做审计,输出报告与结论
check-grant六项核验一份授权
chain-check逐跳核验转授权链(--hop <授权文件>[=<审计输入文件>],可重复)
depth一件记录的深度读数
fpm-sign签指纹清单
ack-sign签收执
badge编码或解码凭证(--encode 与 --decode 二选一)
kit-export导出记录包,自验通过才写出
show显示一条条目的作者、ID、类型、上一条、序号与内容

子命令之外的第一个词按误用处理,退出码为 2。

参数

五十三个参数一律是长参数,且每个都带一个值;每个子命令有自己的一张参数表,表外参数按误用处理。条目正文中法所要求的成员,在命令行上都可以省略;省略后由核依法拒收,命令行只检查它自己做事所必需的几项。这样判断规则只在核里存在一份。

示例

生成密钥、创建账本、存证一份文件、上链、审计:

zikaron keygen # {"address":"0x…","ok":true,"privkey":"0x…"} zikaron init --ledger ./ledger --key <私钥> --statement "作品存证" zikaron history --ledger ./ledger --key <私钥> \ --content 0x$(shasum -a 256 手稿.pdf | cut -d' ' -f1) \ --mark bytes-sha256/1 \ --toolchain 0xb7f3c4a226684d6da684b0ac82d36ed5bcba7bb61d09c955bff9437f84a52a4d # {"entryId":"0x…","ledger":"…","ok":true,"seq":1,"written":true} zikaron anchor --key <私钥> --endpoint <链号>=<节点> \ --form registry --registry <合约地址> --hash <entryId> zikaron scan --endpoint <链号>=<节点一> --endpoint <链号>=<节点二> \ --basis basis.json > fragment.json zikaron audit --ledger ./ledger --fragment fragment.json echo $?

--toolchain 的值是字面量 bytes-sha256/1 的 SHA-256,表示「内容指纹是一串字节的 SHA-256」。命令行的读链层只认 http://主机:端口 形式的节点地址,请指向本机节点或本机代理;anchor 恰好收一个 --endpoint。basis.json 写明扫描范围:哪些链、哪个登记合约、哪些发送地址、起止区块,格式见法 §9.4。

时间由调用方注入

期限与时段只按链上时间和 --now 注入的时刻判断;省略 --now 即只用链上时间。时刻都由调用方给出,所以同一输入始终得到同一结论。

读应用自己的账本

ZIKARON Desk 数据目录里的账本是加密的,口令只在应用里,命令行读到时拒绝:

E_UNREADABLE 已锁定:这是 ZIKARON Desk 封存的本机数据,命令行不读

退出码为 2。要交给命令行处理,先在应用里导出「账本镜像」:镜像 entries/ 里每个文件是一条条目的原文,文件名就是 64 位十六进制。单条可用 show --path 按文件读;要当作 --ledger 账本目录,把这些文件复制到一个空文件夹,并在文件名后加 .entry。