0%

以太坊与黑盒子

知乎同名文章笔记,特此说明

智能合约

之前提到的一些技术,是支撑比特币正常运转的技术,使用同样的技术可以产生其他不同的应用,接下来我们来讨论一下整个区块链领域最热门,被认为能够改变世界的应用——智能合约

智能合约并不是合约电子化,而是——双方达成协议并签署后,无需第三方就可以强制执行合约上的内容,无法单方面撤销或者反悔的合约

Alt text

想象比特币是这样一个黑盒系统,给定输入,返回输出:

  • 输入包含交易信息:签名,金额等
  • 系统验证,签名正确,金额合法并且没有被使用过,输出一个新的记录这些交易的账本存起来
  • 同时把这些交易记录发布到网上
  • 如果系统验证没有通过,那么什么也不做

在中心化的场景下,实现这个功能并不难,但是在去中心化的场景下就需要区块链的那套技术了

区块链与图灵机

如果把上述黑盒子的输入和输出改变,实际上这个黑盒子可以处理去中心话的几乎各种需求

图灵当年设想了一下人类所有的思维活动,发现其实一切计算,一切思考,无非是几个简单的逻辑动作
于是,他就设计了一个可以模拟一切人类思考和计算行为的机器,叫做图灵机

而刚才我们提到的黑盒子也是一台图灵机——你想得到的,区块链都能做

而以太坊,就是一个(接近)图灵机的黑盒子

换句话说,以太坊是台计算机而不止是一台记账的机器
记账系统只是一个软件,而以太坊的功能是可以装几乎任何软件,实现几乎任何功能

假设我们要在以太坊上装一个象棋程序可以这么设定:

  • 输入:
    • 象棋程序,内含规则,胜负条件等
    • 双方各10个数字货币
    • 双方每人一步输入自己走的某一步
  • 黑盒子:
    • 按照输入的象棋程序中规定的规则读取双方输入,判定双方收入合法性,以及最终结果,按照给定规则输出
  • 输出:
    • 更新账本,将20个数字货币转入赢家账户

从这个角度上看,区块链又是什么呢?
区块链其实是把中心化的黑盒子搬到一个去中心的,不安全的网络中的技术

为了能让黑盒子正常运行,区块链主要干了两件事:

  • 用密码学防止内存中的数据被篡改
  • 用共识算法保证只要大部分节点是好的,这个黑盒子就能正常工作

这是区块链真正让人兴奋的地方

性能瓶颈

由于工作原理,区块链的黑盒子与传统的电脑有很大不同
传统电脑的瓶颈主要在于运算速度,而分布式系统由于使用了共识算法,输出结果才是瓶颈所在

黑盒子的性能非常有限,体现在两个方面:

  • 前面提到了,输出速度是有限的,算的再快没有用,只要结果的数据量大,或者节点太多,最终的输出都会卡在这里
  • 如果某个运算需要用到输出结果的话,这个问题会被放大

所以这就要求黑盒子的程序需要尽量少的确认结果,(例如A + B + C + D,最后对一次答案就行了,不用做一次加法对一次答案)

但是对于某些场景这个优化方案不适用,因为需要严格的时序,比如转账消费,需要在交易发起的时候就验证交易的合法性

法律和伦理问题

假设我们设计一个盒子,然而发现这个盒子跟我们想象的不一样,怎么办?
一个分布式共识的系统,如果出了问题该由谁负责?
如果有人利用这个问题获得了本不应该获得的好处,是否算是犯罪?

一个理想的角度来看,自然是设计者负责,而由于漏洞所获得的好处不应该是犯罪

但实际上现实要比理想复杂的多

最著名的例子,就是以太坊的DAO事件

DAO是一个以太坊成立之初就高调成立的,认为去中心化和以太坊可以解决一切问题的组织

某一次某个智能合约出现了问题,黑客利用漏洞转走了360万以太币

最终的结果是以太坊用硬分叉逆转了这个结果,然而也导致了以太坊分裂为了如今的以太坊和以太坊经典

在这里我们来看看这件事揭示的问题——

  1. 我们的社会不是代码组成的。“代码即法律”听起来很美好,但是作为法律的制定者的程序员们能否承担起可能承担的后果
  2. 事实上类似的问题不是第一次出现,但是硬分叉是第一次。所以当问题足够严重时,就必须做出选择,是保存规则的公正还是破坏游戏规则让系统继续运转下去
  3. DAO的黑客没有收到起诉,他自己也不认为自己做了一件错事——代码就是法律,他做的事是法律所许可的

以上三个问题是智能合约所面临的最大问题

专用和通用之间的矛盾

在共识网络里黑盒子的可靠性和使用的人数挂钩,所以,无论黑盒子是否通用,都会被宣传成通用的,以达到让更多人使用的目的

但是通用的意思是可以接受任何输入包括死循环

以太坊为了防止这种现象发生用了一个非常聪明的方案——给所有运算加上了运算费
然而这个钱是付给打包这个程序进区块的节点的,收到奖励的只有一个人
所以产生了一个问题,衡量程序的运算是否值得被打包的是由一个节点控制,所有节点都需要被迫运行这个程序
一旦运算量过大,算力小的节点可能会退出

所以这个方案并不完美,需要找到其他的方式

这里就面临一个选择:

  • 面对一个具体应用,实现具体功能实现可量化的安全性
  • 提供一个类图灵完备应用,其中有各种条件限制,有更大概率出bug

两条路都有人选,但是后者用户量更大,更容易拿到钱

以太坊选择了后者

尽管以太坊现在还不是一个完美的系统,但是以太坊勇于承认错误并修正
以太坊走在一条正确的道路上