最近在研究零知识证明,也就是大家常说的zkp。

以前的我只觉得zk比op好,比如什么更加快速便捷,更加安全之类的,这些泛泛而谈其实忽略了一个重要的点,那就是为什么比op好,zk的本质是什么?

zk所用的一个证明方法叫做snark,这个证明方法很有意思,证明者prover会生成一个证明,来表示完成了某项计算,而验证者verifier则只需要验证这个证明的正确性即可,就能确认这件事真的发生了。

这个描述可能有点抽象,我用一个比较形象的比喻来描述「证明」这件事。

当你有一个AI大模型需要计算,但是手头没有相应的算力工具时,这时候小明出来了,他说他有机器愿意帮你算,只要你给他费用就行。十天后,小明给了你一个AI结果「明天的股市会跌」,这时候你如何判断小明有没有真的帮你算呢?还是说随便告诉你一个结果就说算了,换句话说「小明是不是值得信任?」。最好的验证方式是,你找另一个人也算一遍,比较两个人的结果,但是这就会导致双重费用,甚至说自己直接算,毕竟自己才是最靠谱的,那就引入另一个问题,你缺少工具没法进行这个AI复杂计算。

那如何解决这个信任危机问题呢?

聪明的数学家发明了一种叫做snark的证明方式,这种方式的特点是会将计算过程的每一步记录下来,将这些中间结果通过一系列的代数变化形成一个小巧的proof,也就是所谓的「证明」,这个证明的特点就是和计算过程强相关,如果计算过程和预期不符,那么这个proof就会发生变化。

而作为验证者,也就是你,只需要证明这个proof是正确的,就能保证小明确实按照我说的去做了,并不是瞎编一个结果给我。

还得提醒一下,生成proof的过程很复杂,但是验证proof的过程很简单,也就是说作为一个验收者来说,我只要确保proof对,那么这笔交易就是合理的,大大节省了验证的时间花销,在这个例子就是说,你不需要去自己另找一个人再算一遍。

所以本质上来讲,zkp解决的是人与人的信任问题。没有第三方作为监督参与的情况下,两个陌生人如何进行有效的沟通和交易,zkp给了一个很好的解决方案。

同样,映射到区块链世界里,为什么layer2要用zkp,因为复杂的计算可以放到链下,而上链的过程只需要验证一个proof即可,甚至只需要存一个proof即可,这对于寸土寸金的主网区块来说,无异于是扩容的最佳方案之一。

透过对zkp的理解,我意识到两件事:第一,zkp不光能解决以太坊拥堵的问题,还能给实际生活中提供安全证明的方法,加速人与人之间的合作;第二,人的大多数创新其实都是在修复人本身的劣根性,如果没法修复就去迎合,比如人天生会欺诈,所以需要引入技术来避免,人天生就懒惰,所以怎样让人越懒,越爽就会有商机。