命令行
应用随附命令行 zikaron:一个操作一个子命令,每条命令在标准输出给一个 JSON 值,结论看退出码。它有三种用法:经桌面 App 操作、经凭据操作,或者纯命令行。
接进终端
在「设置 › 命令行与 AI 控制」的「终端」里打开「启用 zikaron 命令」,之后在终端里直接敲 zikaron 就能用。用 .pkg 或 .deb 安装的,装完就已经可以;用 AppImage 的,要用命令行请装 .deb。Windows 上的 zikaron.exe 要在终端里运行。
同一页的「自动控制等级」决定命令行怎样写桌面封存的数据:「经桌面 App 操作」(默认开)是用法一,「经凭据操作」(默认关)是用法二。「经凭据操作」开着时,「经桌面 App 操作」变灰,任何时候只有一条路开着;两个都关着时,封存的数据只由桌面自己写。纯命令行写它自己的账本目录,与这两个开关无关。
同一页「终端」一组里还有「接入 AI 应用」:按「复制配置」,把配置贴进 AI 代理的 MCP 设置,AI 代理不经终端也能调用命令行(zikaron mcp)。每次写入照这一页的开关走用法一或用法二,见经 MCP 接入。
运行 zikaron contract,列出全部子命令、各自的参数和退出码。每条命令的写法见开发者指南 · 命令行。
用法一:经桌面 App 操作
桌面开着并已解锁时,命令带上数据目录 --home "<数据目录>",就交给正在运行的 ZIKARON Desk 去做。桌面用你的身份签名,写进它的账本,走的是与你亲手点按同一条路:同样的检查,同样的提示,窗口里随即更新。私钥和口令一直留在桌面里,命令行只递请求。
- 数据目录在哪:「设置 › 本机数据」的「详细信息」里,「数据目录」一行就是当前身份这一角色的数据目录路径。
- 只读的事:核验别人的材料这类只读的操作,命令行直接就能做。
- 桌面上做的事:设口令、管理密钥、整机备份、打开「经凭据操作」、「加价重发」,以及要输口令的操作,在桌面上做。把账本移交给另一把钥也在桌面上亲手做:
succeed带--home一律答E_ON_DESKTOP。 - 通道何时开着:本机通道只对这台电脑上的你开放,只在「经桌面 App 操作」开着、桌面解锁并开着这个数据目录时开着;锁定、关闭数据目录或退出,通道即关,命令行收到退出码 4。「经凭据操作」开着时,带
--home的命令答E_DESKTOP,detail为ALONE:去掉--home,照用法二写。
用法二:经凭据操作
你在桌面上授权一份限期的凭据,命令行凭它直接写桌面封存的账本、发它的待上链队列,桌面关着、锁着都行。
- 打开开关。在「设置 › 命令行与 AI 控制」的「自动控制等级」里打开「经凭据操作」,在弹出的卡上输口令,填有效期:天、小时、分钟三格(至多 365、23、59,合计一分钟到一年),或打开「不过期」;按「打开」。开着时,这一行下面写着凭据何时到期。
- 找到账本文件夹。「设置 › 本机数据」的「详细信息」里「数据目录」一行是数据目录的路径;命令里的
--ledger给它里面的ledger文件夹。 - 写与读。写条目的命令带
--ledger "<数据目录里的 ledger 文件夹>",用桌面密钥库里这个身份这一角色的钥签名,不带--key、--key-file或--home;写进去的条目照桌面的样子排进待上链。核验、导出记录包等读的命令给同一个文件夹,导出时照桌面带上所选存证的原件。 - 上链。
zikaron anchor --ledger "<数据目录里的 ledger 文件夹>"发这个数据目录的待上链队列:链、登记合约和节点取这个数据目录的设置,代理取「设置 › 网络」的「代理」。
收回。关掉「经凭据操作」,凭据即删。到期即删,桌面提示一句,命令行答 E_CREDENTIAL_EXPIRED。换主身份或整机恢复之后,凭据作废,开关自动回到关,提示「主钥已换,「经凭据操作」已关。」。改口令照用;凭据出错不计口令错次。
与桌面轮流写。桌面和命令行每写一笔各自拿这个数据目录的写者锁,写完即放。命令行正赶上桌面在写,答 E_HOME_HELD,稍后再试;桌面正赶上命令行在写,这一笔不做,提示「命令行正在写入。」,提示上的「去设置」直达这一页。桌面开着并已解锁时每秒看一眼盘,命令行写进的条目随即出现;开着「自动上链」时,照桌面自己记一条之后那样弹出发送确认。
凭据文件。它在机器目录里,只有你这个系统账户能读写,里面封着打开本机数据的主钥。拿到它的人或程序,能像命令行一样以这台电脑上的各个身份写账本、发上链交易,直到它到期或你关掉开关。有效期按需要设,用完就关。
命令行上链的两种模式
用法一与用法二上链时,都按「设置 › 命令行与 AI 控制」「上链操作」里的「命令行上链」走:
- 自动发送
- 默认。照「全部上链」的做法,把队里能发的条目装进一笔交易发出,费用从这个身份的地址里付。进入区块即交回区块号和交易号;等到时限还没入块,答交易还没入块(退出码 4),这一批留在途,桌面或下一次上链接着问收据。经桌面等 30 秒,经凭据缺省等 90 秒。这一批里有存证已在链上时一笔不发,答
E_ON_CHAIN;那几条移出队列之后,再发一次即发其余的。 - 仅加入队列
- 条目留在队里,命令行答「已在队列,待用户在桌面上发」(
E_QUEUED,退出码 3)。经桌面时,桌面弹出提示「命令行提交了 N 条记录,已加入队列」并提醒你一次。你在桌面上核对后按「确认上链」。
打开「经凭据操作」的卡上写明:「命令行上链」为「自动发送」时,命令行可花这个身份的 gas。
用法三:纯命令行
命令行自己就能从头做起,用不着桌面,也用不着图形界面:
- 生成密钥。在你自己的终端里运行
zikaron keygen,它输出一个新地址和它的私钥。把私钥那一串存进一个文件,设成只有你能读(macOS 与 Linux 上用chmod 600),之后的命令用--key-file指向它。 - 充值 gas。往这个地址转一点 ETH。
- 建账本。
zikaron init --ledger "<账本目录>" --key-file "<私钥文件>" --statement "<说明>"。之后存证、授权、撤销、注记等写入,都带这两项写进这个账本目录。 - 上链。
anchor用--key-file给私钥文件,--endpoint指定节点,--form registry指明经登记合约,--registry指定登记合约(以太坊主网上是0x36Ea8A857a5FE813429d4D9947000C644A88809A),--hash给要上链的条目编号,可以给好几个,一笔交易锚多条。签名之前它先问登记合约这把钥是否已锚过这几个编号:有一条已在链上即答E_ON_CHAIN,names列出已有的,一笔不发。同一条命令重跑时,先查已经签过的交易,同一次上链只付一次费。 - 核验与出示。用
scan和audit对着链检查账本;用kit-export导出记录包(缺省写成--out给的一个文件,名字自己取,桌面导出的叫.zkit;--as folder为文件夹);用kit-verify逐条核验一份记录包,带上scan的读数才判上没上链;用check-grant核验授权;kit-export加--to-key <公钥>(或--to <地址>并给--endpoint)即加密给一个接收方;kit-verify加--originals-to <文件夹>即把原件取到那个文件夹。
写出的账本与桌面写的是同一种格式,任何人用桌面应用或命令行都能核验。日后要把这本账接进桌面,先用「导入密钥」导入这把私钥,再在「设置 › 本机数据」的「高级选项」里用「收编已有账本目录」。收编之后,这本账由桌面接着写:命令行再写原目录即答 E_ADOPTED,原目录保持原样;要从命令行接着写,用用法二。要让一本账在两处之间来回写,见交接账本。
交接账本
一本账可以在两处之间来回交,比如远程主机上命令行的账本目录与本机桌面的数据目录;任何时候只有一处在写。两端用同一组命令:
zikaron hand-over --ledger "<这一处>" --out "<交接件>":把整本账写成一份交接件(.zkhand),这一处随即停写,再写即答E_HANDED_OFF。交接件路上丢了,再跑一次写出的是同一份。zikaron take-over --ledger "<那一处>" --handoff "<交接件>":只收顺接的交接件,把这一处没有的条目按序号写进来,这一处随即复写。收不下时答E_HANDOFF,token写明原因,什么也不写。
两处写的是同一本账、用同一把钥:命令行那一侧用 --key-file 给的私钥,桌面那一侧是用「导入密钥」导入同一把私钥的身份。桌面那一侧给数据目录里的 ledger 文件夹,要开着「经凭据操作」,桌面锁着也行。桌面那一侧交出之后,桌面上写这本账即提示「这本账已交接到另一处。」,等那一处交回、用命令行收下交接件再写。上链记录不随交接件走:桌面下一趟账本检查从链上现读,只把链上还没有的排进待上链,另一处上过的不会再付一次 gas。
明文的文件
纯命令行时,下面几样以明文存在磁盘上:
| 文件 | 里面是什么 |
|---|---|
| 私钥文件 | 这把密钥本身。拿到它,就能以你的身份签任何条目,也能花掉地址里的 ETH |
| 账本目录 | 每条条目,内容本来就要交给别人核验;条目文件从建起就只有你能读写,改一个字节签名就对不上 |
cli-sent/ | 命令行签过的交易的 nonce 与哈希 |
要紧的是私钥文件。能用这个系统账户读文件的人或程序,都能读到它,所以这样保管:
- 只放小钱、只管专用的账。这把钥单独用,地址里只放够付 gas 的 ETH,与你主要的身份分开。
- 守住系统账户。开启系统的全盘加密;远程登录只许用密钥。
- 私钥只经文件交给命令行。用
--key-file给,命令行只认只有你能读的私钥文件;文件放在同步盘与自动备份的文件夹之外,另抄一份放在离线的安全处。 - 能走桌面就走桌面。用法一与用法二里,私钥在桌面的密钥库里,用口令加密。纯命令行留给真正需要无界面、只用一把专用钥的场合。
三种用法怎么选
| 经桌面 App 操作 | 经凭据操作 | 纯命令行 | |
|---|---|---|---|
| 私钥 | 在桌面的密钥库里,口令加密,有助记词与整机备份 | 同左;另有一份限期的凭据文件,封着打开本机数据的主钥 | 一个明文文件,只靠文件权限保护;备份是另存的一份 |
| 桌面 | 开着并已解锁 | 在桌面上打开一次开关;之后桌面关着、锁着都行 | 用不着 |
| 怎样写 | --home 给数据目录 | --ledger 给数据目录里的 ledger 文件夹 | --ledger 给账本目录,--key-file 给私钥文件 |
| 上链 | 桌面的队列与发送器,照「命令行上链」 | 同一个队列与发送器(anchor --ledger),照「命令行上链」 | 自己指定节点和要上链的条目,一次问一个节点 |
| 检查与提醒 | 桌面定期自动做,有「提醒」页 | 桌面开着时照做;命令行也可以跑 audit | 自己运行 scan 与 audit |
| 适合 | 在你自己的电脑上日常使用 | 桌面托管的身份,交给 AI 代理或脚本在桌面关着、锁着时写 | 一把专用的钥、无界面的主机、成批的自动化 |
命令行的答复
| 退出码 | 意思 |
|---|---|
| 0 | 完成,或核验通过 |
| 1 | 被拒,或核验未通过;原因在输出里,例如凭据过期 E_CREDENTIAL_EXPIRED、桌面正在写 E_HOME_HELD、链上已有 E_ON_CHAIN |
| 2 | 命令写错了,标准输出为空 |
| 3 | 部分结果(例如有的项还在等结果),或已加入队列(E_QUEUED),等你在桌面上发 |
| 4 | 没有答案:桌面没有作答(已退出、已锁定、开着别的数据目录,或「经凭据操作」开着)、连不上节点,或交易还没入块 |