我参加过一个链上投票,投完顺手去区块浏览器查了一下——投了什么、什么时候、钱包地址,全躺在那儿,一览无余。所谓匿名投票,不过是没人帮你署名的广场公告。
这就是链上透明的另一面:它对着所有人,包括你自己。
@MidnightNetwork 的 Kachina 协议,解决的正是这件事。
Kachina 把合约状态切成两半:public state 住链上,private state 住你本地机器,永远不上链。 难点在于:一个永远不上链的私有状态,怎么被合约逻辑合法使用?
答案是 ZK SNARKs。你在本地生成一个零知识证明,证明"我的私有状态满足触发这次链上更新的条件",但 proof 本身不含任何私有内容。链上验证器只检查 proof 是否有效,通过就更新 public state私有数据从头到尾没离开你的设备。
还是投票的例子:链上不需要记录"谁投了什么",只需要验证一个 proof:"此选民合法注册,且从未投过票"。票数 +1,没有任何人知道是谁。
$NIGHT 更难得的地方是并发处理:Kachina 用 transcript 追踪状态操作,允许非冲突事务重排序来最大化吞吐量,同时控制信息泄漏。不是"要么快要么私"的取舍,是基于 Universally Composable(安全框架的形式化证明,组合进复杂系统后安全性依然成立。
大多数隐私方案给你一个黑盒说放心。@MidnightNetwork 给你的是一套可以被数学验证的承诺。
