接入
让你的应用读取 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 直接从盘上读取核验。其他语言请依据法文自行实现,并用一致性套件验收,见测试一份实现。
读取用户导出的记录包
同一台机器上的应用可以列出用户已导出的记录包,供用户选择递交。机器目录按应用自己的顺序找:
- 用户在你的应用设置中手动指定的目录。
- 指针文件
~/.zikaron-desk中写明的路径。指针存在时以它为准:目标读取失败,请明确告知用户「Zikaron 的数据已迁移」,并请其重新指定。 - 指针缺席时,早先版本的位置
~/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 的账本状态行会把它算作问题。
- 类型名选用带项目前缀的字面量,与现有类型区分开。
- 正文引用其他条目时,使用条目编号。
- 读法写成对全部输入都有定义的规则:格式相符时如何读,格式有误时如何显示。
- 把约定登记在仓库的讨论区,便于其他实现采纳。