账本与条目
每种角色有一本自己的账本:一串签名条目,按顺序写成,只能追加。第一条是「创建账本」,一本账只有这一个根。
条目的构成
- 作者
- 签署这一条的密钥地址。
- 序号
- 在账本中的位置,从 0 起算。
- 前一个条目
- 前一条的编号,把本条与此前的整本账本连在一起。
- 类型与正文
- 这一条记的内容,如一份内容指纹、一次授权、一次撤销。
- 签名
- 作者的密钥对以上全部内容的签名。
每个条目都带着前一条的编号。任何一条被改动、增删或调换,其后所有编号都随之改变;所以核实了最新一条,即核实了此前的整本账本。
条目类型
| 类型 | 说明 |
|---|---|
| 创建账本 | 账本的根 |
| 存证 | 一件记录的内容指纹 |
| 授权 | 授权某个地址在一段时间内使用某件记录 |
| 撤销 | 撤销一份授权 |
| 注记 | 给某一条补充说明 |
| 导入 | 把这把密钥早先上链的锚收进账本 |
| 换密钥或移交 | 把账本交给新密钥 |
| 删除条目 | 把一条存证标为已删除 |
条目类型是开放的。其他工具可以约定自己的类型写进账本;读者遇到陌生的类型,把它列为「无法识别的类型」,法的检查结论照旧。「删除条目」就是这样一种读法约定:本应用认得它,别的工具把它列进这一栏。本应用的账本状态行把这一栏算作问题,自己的删除条目除外:条数正好等于删除条目数时,这一项亮绿灯「约定条目 N 条」。
只追加
账本只做一件事:在末尾追加。写错了,追加注记;作废一条存证,追加删除;收回授权,追加撤销。既有条目永远原样保留,账本的历史因此确定。
存证
在首页或「记录存证」页,把文件、文件夹或 Git 仓库拖进拖放区,或点它选择,打开「新建存证」卡。内容指纹这样算:
| 类型 | 算法 |
|---|---|
| 文件 | 文件字节的 SHA-256 |
| 文件夹 | 连同各文件名和内容一起算 |
| Git 仓库 | 按当前提交算 |
- 填「记录名称」。留空时自动填上:文件取去掉扩展名的文件名,文件夹或仓库取全名。记录名称写进存证条目。
- 可选的「为谁留证(可选)」折叠有四格:「应用」「对方身份(0x…)」「对方编号」「对方角色(可选)」。填了任一格,前三格都要有,对方身份写成
0x加 40 位十六进制。这些字原样写进存证条目,供日后读到这条记录的人对应到具体的交易。 - 可选的「高级选项」里可以关联一个 Git 仓库,以后按「检查新提交」查看上次存证之后新增了几个提交。
- 按「加入账本」,在确认卡上核对「文件」「费用」,再按红色的「加入账本」,条目即写入账本并排进待上链队列。
批量存证。往卡里的拖放区一次拖进两份以上文件,就成为一批:一个文件写一条存证,「记录名称」写进每一条。中途有一件失败即停下,已签入的留在账本里,其余文件留在表里,处理后可以再按。批量只收文件。
验一份文件。「记录存证」页搜索格旁的「验一份文件」:选一份文件,应用算出它的 SHA-256,在当前账本里找同样指纹的存证,答出第几条、是否已上链、块时间。
写入即公开
签入时的文件位置只存在这台机器上。记录名称、注记文字、「为谁留证」的内容、授权中的使用范围都写在条目里:凡拿到你账本的人都能读到(授权文件就带着整本账本),并且永久保留。落笔前请慎重;记录名称留空时,填进条目的是文件名。
指纹只回答两份内容是否相同。内容很短、容易猜时(如一个日期、一个金额),别人可以逐个算候选答案的指纹来比对。这类内容存证前,请与一段随机文字合成一个文件。
删除存证
在记录详情页底部按「删除存证…」,确认卡写着「存证将标为已删除,已发出的授权不受影响。」按「删除」后,账本里写入一条「删除条目」指向这条存证,原条目一个字节都保持原样。此后这件记录划掉显示,详情页注明它已被删除,新建授权的选单也随之略去它。
| 被删的存证 | 结果 |
|---|---|
| 还在队里待发,或始终只在本地 | 存证从队里拿掉,删除只记在本地,显示「本地删除」 |
| 已经发出、入块或上链 | 删除条目进待上链队列,像其他条目一样上链;链上记录照旧,深度照旧计入 |
删除条目的格式与读法是本应用的约定,写在文件与格式里。
注记
「账本」页「更多」菜单里的「添加注记…」,或条目详情里的「注记…」:写注记内容,点选目标条目,按「添加注记」。注记另存为新条目,原条目保持原样。
导入上链存证
把这把密钥早先上链、账本里尚缺的锚收进账本。打开「账本 › 更多 › 导入已有存证…」:
- 「密钥地址」空着:列出本机密钥早先发过、账本里尚缺的锚,清单来自上一趟账本检查。
- 填一个地址:扫链列出那把密钥发过的锚。表中「通过」的行默认勾选,只有这一种能导入。
- 导入别人的地址时,要那把密钥的持有人签字:把卡上的「文本」发给对方,对方在自己的应用里用「更多 › 为他人签认领…」输入本机口令签字,签回后你粘贴进来,当场核验。缺了签字也能导入,那几枚锚记为未证实。
按「导入 N 枚」,写一条导入条目,进待上链队列。
移交账本
「账本 › 更多 › 换密钥或移交…」:填「新密钥地址」(新密钥的上链存证须为零条,读数为零才能继续),选「仅换钥」或「交给他人」,可写说明,按红色的「确认移交」。移交后这本账由新密钥续写,本机转为只读。移交是单向的。
一钥一账
一把密钥只写一本账。同一把密钥在同一序号上签出两个相异的条目,任何核验者都能发现,账本检查随即判为「未通过」。所以:
- 同一个数据目录同一时间只有一个窗口写入,后打开的窗口只能读,页顶挂只读提示条。
- 凭助记词、私钥或密钥文件在另一台机器上还原的身份,先暂停写入,从整机备份取回账本并与链上核对相符后再恢复,见取回账本。
- 换密钥前先登记移交,新密钥凭此续写这本账。