命令行
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。