仓库结构与分层
判断由核做出,界面负责呈现。先弄清各层的职责,再确定改动的位置。
目录
| 路径 | 内容 |
|---|---|
crates/zikaron | zikaron/1 的核:规范字节、条目、签名、审计。 |
crates/zikaron-kit | zikaron.kit/1 的核:文书、凭证载荷、记录包、读数、授权六项核验。 |
crates/zikaron-store | 账本的磁盘读写,只用标准库与 zikaron-os。 |
crates/zikaron-net | 传输:到节点与远端文件的一趟 HTTP/HTTPS 问答,含代理、多地址拨号与连接复用,TLS 配置只在这一处,以及跑系统代理配置脚本的沙箱(QuickJS)。 |
crates/zikaron-anchor | 链上操作:扫描上链记录、JSON-RPC、估算与发送上链交易;几个节点之间怎样比对的判读表、限流时怎样再问的等待表、节点拒答的分类表,以及费用、gas 额度与加价重发的规则,都在这里,由应用与命令行共用。 |
crates/zikaron-cli | 命令行 zikaron:经桌面代做(--home)的一端,经凭据读写数据目录与发队列的一端,交接(hand-over、take-over),以及经模型上下文协议供 AI 应用调用的 zikaron mcp(mcp.rs)。 |
crates/zikaron-glue | 记录包与授权文件的读写、账本镜像、本机通道的报文格式、单文件容器(.zkit、.zkgrant、.zkhand)、一件记录的核验判法(recordcheck)、取出原件(extract)、加密记录包的格式常量与文件头识别(addressed)、文件夹存证的清单写法(recording),以及应用与命令行共用的约定。 |
crates/zikaron-os | 随操作系统而异的几样:系统随机数、只本人可读写的文件、落盘同步、替换式改名与只落在空名字上的落名、系统代理、只归本进程的锁、主目录与机器目录的位置、「启用 zikaron 命令」、抹去内存里的秘密、窗口底下的系统材质(macOS 的玻璃或活力材质、Windows 11 的 Mica)、系统的「减少动态效果」,以及命令行与桌面之间的本机通道。 |
crates/zikaron-seal | 应用与命令行共用的封存层:每个本机文件的加封与文件名、密钥库、数据目录里加封的账本、机器设置里两端都读的几项、命令行的凭据、收编与交接清单、加密记录包的加密与打开(addressed)、只读网络表的读法(readnets)。 |
crates/zikaron-send | 发送器:桌面的待上链队列、经桌面的 anchor --home 与经凭据的 anchor --ledger 共用的一个;读链、出口检查、写闸、队列的锁与步骤、签发与等收据,以及命令行直发 anchor 的记录(cli-sent/);由地址在链上找接收方公钥(recipient)与只读网络的指纹闸(fingerprint)。 |
crates/zikaron-pack | 打包件:第三方许可清单生成器,去掉包里构建机信息的几步,路径映射与复核,AppImage 运行时核对,以及 Windows 包的排布。 |
crates/zikaron-ui | 控件库与外观。 |
crates/app | 桌面应用,含本机通道的桌面一端。crates/app/local-data-standard.md 写明本机加密文件的格式。 |
base/ | 冻结的两部法文及其参照实现、一致性语料、登记合约。 |
contracts/ | 测试上链路径所用的合约变体。 |
packaging/ | macOS 与 Linux 的打包脚本、图标。 |
.github/workflows/ | test.yml 在三个系统上以发布构建构建并测试,并复核发布构建里只有中性的路径名;package-windows.yml 手动排出 Windows 包。 |
rust-toolchain.toml | 钉定 Rust 1.97.1,本地、持续集成与发布构建同用。 |
docs/manual/ | 使用手册,中英文各一份。 |
CHANGELOG.md、CHANGELOG.en.md | 各版本的更新记录,中英文各一份。 |
CLI-SCHEMA.md | 命令行的输出格式、退出码、拒绝原因与参数。 |
.gitattributes | * -text:任何系统上都不做换行转换,语料与法文按字节比对。 |
四层结构
- 基底(
base/)。法文、冻结核、语料、合约、链面夹具,作为其余一切的参照。其中冻结核由法文写明的摘要钉住,合约由代码哈希钉住;其余是工装,可以重建、替换或删除。 - 核与存取(
zikaron、zikaron-kit、zikaron-store、zikaron-anchor,以及其下的zikaron-net、zikaron-os)。全部判断在此做出。zikaron不依赖工作区里的其他 crate,zikaron-kit只依赖zikaron;连节点只经zikaron-net一处,系统随机数、只本人可读写的文件、落盘同步与替换式改名由zikaron-os提供,存储、传输、胶水、命令行与应用都经由它,主目录与机器目录的位置也由它一处给出。应用自己随系统而异的几样(选档框、写锁、时区、中文字体等)住在crates/app/src/platform/。 - 对接(
zikaron-cli、zikaron-glue、zikaron-seal、zikaron-send)。组装输入、调用核、原样传出结果;封存层与发送器在这一层,由应用与命令行共用。 - 界面(
zikaron-ui、app)。呈现与交互。
依赖自上而下:上层调用下层的公开接口,下层独立于上层。各 crate 都依据法文独立写成,与 base/ 之间零路径依赖。zikaron-pack 在四层之外:它是应用的构建依赖兼打包工具,只用标准库,运行时没有任何东西依赖它。
五条规则
- 界面只呈现
- 条目是否合法、授权是否有效,由核给出结论,界面负责呈现。界面中出现自行判断语法的代码,应移入核。命令行经
--home交来的请求,在桌面里走与点按同一条动作路径。 - 对接层只组装
- 命令行与胶水代码把参数组装成输入、调用核、选定退出码;核写出的字节原样传出,键名与取值保持不变。
- 判据原样
- 两个冻结核由法文里的摘要钉住,登记合约由代码哈希钉住,这些字节保持原样。对其有异议,请提交议题,见兼容与演进。
- 核验页只读链
- 核验授权、核验记录、查看他人账本三页读输入与链上数据,一笔交易也不发;写进本机的只有地址簿、快照、核验结果档,以及用户按「取出原件」选定的文件夹里取出的原件。
- 身份密钥只签账本
- 应用里的密钥只用于签署条目、为导入连署、发送上链交易,以及解开加密给这个身份的记录包(只做一次密钥协商,一个字节也不签);付款、钱包、委托等功能交由其他软件。
一处实现,处处复用
同一判断只实现一次。授权的六项核验由 zikaron-kit 提供,核验页、命令行与「我的授权」的定期复核共用这一实现,读数亦然。应用与命令行另外共用:授权文件的读法(zikaron_glue::grantfile)、账本镜像的布局(zikaron_glue::mirror)、记一份文件的约定(zikaron_glue::recording,history --file 用的就是它)、费用、估算 gas 与加价重发的规则(zikaron-anchor)、节点之间的判读表与限流再问表(zikaron_anchor::judge、zikaron_anchor::patience)、本机加密文件、密钥库与命令行的凭据(zikaron-seal)、待上链的发送(zikaron-send:桌面的队列、经桌面的 anchor --home 与经凭据的 anchor --ledger 同一个发送器)、一件记录的核验(zikaron_glue::recordcheck,桌面「核验记录」与 kit-verify 共用)、取出原件(zikaron_glue::extract,桌面「取出原件」与 kit-verify --originals-to 共用)、加密记录包的加密与打开(zikaron_seal::addressed)、由地址在链上找接收方公钥(zikaron_send::recipient)、只读网络的指纹闸(zikaron_send::fingerprint)、只读网络表的读法(zikaron_seal::readnets)、单文件记录包、授权文件与交接件的容器(zikaron_glue::container)、本机通道的两端(zikaron_glue::door、zikaron_os::door)、机器目录的查找(zikaron_os::machine),以及唯一的一份 TLS 配置与代理选择(zikaron-net)。因此同一输入在任何入口都得到同一结论。
每一种账本条目都有对应的写入子命令。为应用新增操作时,先在命令行中跑通,再做界面。
注释中的法条引用
代码注释以 law §N 指 zikaron/1 的条文(kit 一侧的代码里也写作 parent law §N),以 kit law §N 指 zikaron.kit/1 的条文。修改一段实现之前,先读它所引的条文。