开发者指南 · Zikaron

接入

让你的应用读取 Zikaron 的记录:核验授权、读取记录包,或在业务流程中提示用户留证。

接入方式

你的应用是读者。账本始终由用户在 Zikaron 中亲自写入;读者拿到的是用户导出的成品:授权码、授权文件、记录包。这样一本账本始终只有一个写入者,密钥也始终只在一处。

用命令行核验

最简便的接入方式是以子进程调用 zikaron,读取其退出码与标准输出。

zikaron check-grant --grant grant.entry --ledger ./issuer-ledger \ --fragment fragment.json --now $(date +%s)
退出码应用的处理
0放行
1拒绝。核验失败时列出失败的项;账本或输入有误时显示原因
3暂缓。告知用户哪一项尚待结果,稍后重试
4答案缺席:scan 与 anchor 读链失败,或 keygen 取随机数失败;重试,或更换节点
2调用有误,请检查参数

--grant 接受一个条目文件。授权码的每一段是条目字节的 base64url 编码(省去填充),解码后存为文件即可;多段的授权码(转授权链)用 chain-check --hop 逐跳核验;签发者账本目录可由账本镜像改成,见命令行;授权文件 .zkgrant 是一个容器,拆法见文件与格式。命令行读链只认 http:// 节点,请接本机节点或本机代理。

请把 3 作为独立的一档处理:「暂无结果」「通过」「失败」是三种状态,界面上也以三种样式呈现。

直接调用核

Rust 项目可依赖 zikaron 与 zikaron-kit 两个 crate。它们只做判断:链由你的代码去读,再把字节交给核;记录包目录可以交给 zikaron_kit::kitdir::verify_kit 直接从盘上读取核验。其他语言请依据法文自行实现,并用一致性套件验收,见测试一份实现。

读取用户导出的记录包

同一台机器上的应用可以列出用户已导出的记录包,供用户选择递交。机器目录按应用自己的顺序找:

  1. 用户在你的应用设置中手动指定的目录。
  2. 指针文件 ~/.zikaron-desk 中写明的路径。指针存在时以它为准:目标读取失败,请明确告知用户「Zikaron 的数据已迁移」,并请其重新指定。
  3. 指针缺席时,早先版本的位置 ~/Library/Application Support/ZIKARON(存在时),其次是默认位置 ~/.zikaron-desk.d/。

「有效」的唯一标准:该处的 kits/index.json 可读,且格式名为 zikaron.kits-index/1。

你的应用对 Zikaron 数据的权限限于读取:机器目录里的 kits/index.json,以及索引行 path 指向的记录包文件夹(它们在各数据目录的 kits/ 下)。拿到记录包后先自行核验,再使用其中的文件。

让记录指向你的交易

用户为你应用中的一笔交易留证时,可在「为谁留证(可选)」中填写你的应用名、对方身份、对方编号,以及可选的对方角色,这些内容原样写入条目的 for 成员(角色存为 seat);对方身份须为 0x 加 40 位十六进制。日后读到这条记录的人,据此对应到具体交易。

请在界面中列出这几个值,便于用户照抄:应用名用固定的短字符串,编号用你系统中该笔交易的编号。

在关键时刻提醒

事前留下的记录分量最重。请在流程中找出这些时刻并提醒用户留证:交付文件时、确认收货时、双方就条款达成一致时。

签名请求

需要用户签名时,请让用户使用交易密钥。身份密钥专用于账本;Zikaron 的界面也照此设计,签名只发生在用户自己发起的写入中。

约定新的条目类型

条目类型是开放的。你可以约定一种新类型,写明类型名、正文成员与读法,并公开这份约定。其他读者遇到它时列入「无法识别的类型」,法的检查结论照旧;ZIKARON Desk 的账本状态行会把它算作问题。

  • 类型名选用带项目前缀的字面量,与现有类型区分开。
  • 正文引用其他条目时,使用条目编号。
  • 读法写成对全部输入都有定义的规则:格式相符时如何读,格式有误时如何显示。
  • 把约定登记在仓库的讨论区,便于其他实现采纳。