我构建了 网格审计,这是一款审查午夜链代码并允许您在链上认证该审查结果的工具。其初衷是帮助人们审查他们自己编写的代码。但随后我的想法进一步扩展:如何在不公开报告且不泄露审计师密钥的情况下,在公共账本上记录由授权审计师针对特定报告进行的审计?
这实际上是一种通用的午夜链模式,本文将详细介绍实现这一功能的小型合约。
问题所在
您需要一份公开的、防篡改的收据,证明“此确切内容已经过审查并签署确认”。但是:
- 报告本身是私密的。它绝不应上链。
- 只有真正的审计师才能发布收据。杜绝冒充行为。
- 任何人都应能在日后验证收据,而无需知晓报告内容或审计师的秘密。
在透明链上,您必须发布报告或信任链下服务器。而在午夜链上,您可以利用两个基本原语来实现:见证人和承诺。
合约
以下是完整的注册表合约。其小巧正是关键所在。
pragma language_version >= 0.23;
import CompactStandardLibrary;
// 公共账本状态。
export ledger ownerCommitment: Bytes<32>; // H(审计师秘密),仅在部署时设置一次
export ledger receipts: Map<Bytes<32>, Bytes<32>>; // 收据ID -> H(报告指纹)
export ledger published: Counter;
// 私有输入(见证人)。由证明者提供,绝不会以明文形式写入账本。
witness auditorSecret(): Bytes<32>;
witness reportFingerprint(): Bytes<32>;
// 在部署时将注册表与审计师的秘密绑定。仅存储承诺,绝不存储秘密本身。
constructor() {
ownerCommitment = disclose(persistentHash<Bytes<32>>免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。