开发者指南 · Zikaron

校验

发布包、签名、法的摘要与登记合约,每个数值都可以自行复算。

发布包

0.1.0 的发布物有三个文件,校验值写在发布清单 SHA256SUMS.txt 里:

.dmg033cccae949d3d37d6c2c8674ae32419a01790c523ab34b84ea54211cc78d1dd
.pkg6f49a4cb35b7e7aeaa2fc724382ff650bd9a6e6a6a5347d598533e8ee5f5464a
源码包383b08847004b3409275c388dd6e1b8bb76c63fab1e73d0d2734e6c6720b81f5

算一个文件,与上表比对:

shasum -a 256 ZIKARON-0.1.0-macos-arm64.dmg

或者把发布清单和下载的文件放在同一个文件夹里,一次核对全部:

shasum -a 256 -c --ignore-missing SHA256SUMS.txt

下载页的拖放框做的是同一件事:在浏览器里算 SHA-256,与清单比对。

签名

应用和 dmg 都由 Kaptonia 的自签证书签名;pkg 以 SHA-256 核对。装好之后查看应用的签名,输出里的 Authority 应为 Kaptonia,Identifier 应为 com.kaptonia.zikaron.app:

codesign -dvv /Applications/ZIKARON.app

再看签名要求,certificate leaf 后面那一串是证书的 SHA-1:

codesign -d -r- /Applications/ZIKARON.app

要算证书的 SHA-256,先把证书取出来:

codesign -d --extract-certificates /Applications/ZIKARON.app shasum -a 256 codesign0
签名者CN=Kaptonia(自签)
证书 SHA-256a6ddc371e855197c5021ef44ab0802749cda318bc12d0138ccac9f46a4d46905
证书 SHA-1570690b34fc35243ae8b45be0aeb800e1074225e
有效期2026-09-26 至 2036-09-23

dmg 本身的签名同样可查:codesign -dvv ZIKARON-0.1.0-macos-arm64.dmg。

Zikaron 证明

每次发布的代码是一次提交。0.1.0 发布之前,项目用 Zikaron 账本记下这次提交和各发布物的指纹,锚定到以太坊主网,写下即定,带有区块时间。下载表的「Zikaron 证明」一栏链到这笔交易。

交易0x028fdb5591635442bb0ca30dced70305438dac34434b7a02c9daa7f9054fd329
区块26094186 · 2026-10-01 01:29:59 UTC
记录者地址0x3be672658efa08b9820bbebaf7c4f0e77433f878
登记合约0x36Ea8A857a5FE813429d4D9947000C644A88809A

账本里记下的内容指纹:

.dmg033cccae949d3d37d6c2c8674ae32419a01790c523ab34b84ea54211cc78d1dd
.pkg6f49a4cb35b7e7aeaa2fc724382ff650bd9a6e6a6a5347d598533e8ee5f5464a
源码包383b08847004b3409275c388dd6e1b8bb76c63fab1e73d0d2734e6c6720b81f5
SHA256SUMS.txtc054be85a20952f986ea46ad9f6201c2c9bdcbecef01ef62e650525a54e52cef
源码提交 54fe7dbb0a679c69cac91c68b99fe704f30abd2bdc9107053650dec2373f2507ed1b434

源码提交的指纹是提交对象的 SHA-256。在仓库标签 v0.1.0 的克隆里运行:

git cat-file commit HEAD | shasum -a 256

链上锚定的是账本条目的编号,条目里记着上面这些指纹。

法的摘要

两部法已冻结,摘要写在法文里。解开源码后自行计算,结果应与下表一致:

cd zikaron-0.1.0/base/zikaron-conformance ./criterion-digest.sh ./criterion-digest-kit.sh
zikaron/1 · §12.50xbecfb6f0d0f8b71c314f1b2efef414abfb6df74b711ca8f81efdef685d0132fc
zikaron.kit/1 · §13.50x3f8368ebc8b5b7c97e4b5c4240f57f6fc06421b4effbd5a7446d128434a20535

两个脚本各读几个 Python 源文件,算出一个摘要;其中任一字节改动,摘要随之改变。详见法文与一致性套件。

登记合约

登记合约只做一件事:收到指纹,发出一条事件。应用内置两处部署,读取链上代码并算 keccak256,结果应等于下表的代码哈希:

cast keccak $(cast code <合约地址> --rpc-url <节点>)
代码哈希0xfa97a1d9b22fab2b52f4e27c9a965b32734c40001b565ab365d05c887118f57d
以太坊主网0x36Ea8A857a5FE813429d4D9947000C644A88809A
Sepolia0xC29410B882c4C3b77e33659d2f06ac563e7B08a3

从源码重算这个哈希的方法,见登记合约与上链。