# 以太坊与黑盒子

By [dingyuanying](https://paragraph.com/@dingyuanying) · 2024-01-03

---

比特币讲完了，理所当然地，该写以太坊了。

然而，如同比特币一样，这次讲以太坊，我也会选取一个另类的，其他介绍以太坊的文章不会采用的视角——我不会分析如何炒以太币，如何挖矿，以太币会不会涨，也不会介绍如何写智能合约，如何在EVM上做应用。这篇的核心是——以太坊是什么，智能合约是什么，以及，以太坊尚待解决的问题。

如果说比特币的系统已经让很多人觉得不知所云了的话，以太坊的概念比比特币还要复杂许多。所以，在介绍讲解以太坊和智能合约的概念之前，我们来回顾一下比特币。

之前的文章里，我主要讲了两个事情：

**1，比特币是什么：比特币是人类在数字世界复制最原始的货币交易的所有尝试中，到目前为止，第一个接近成功的，也是唯一接近成功的一个。**

**2，比特币的价值是什么：比特币的价值，取决于交易量和挖矿公司价值两者之中较小的一个。**

然而，这两点，是针对想要了解比特币的人说的。

而如果想要更深入地了解区块链技术，我们要换一个角度了解一下比特币——

比特币的实质，是一个在存在恶意节点的网络中，大家共同维护的一个记录相互之间数值转移的账本。

然后，为了保证记录不被篡改，采用了链式结构。

为了简化交易验证，数据采取了UTXO结构。

为了提高大网络里达成共识的效率，采用了工作证明。

为了补偿工作证明的花费，引入了挖矿奖励。

为了简便和系统的自洽性，将数值和挖矿奖励统一为一种代币，而且以增发的形式发给矿工。

这就是比特币了。

也许有人觉得我又在啰嗦了——

这些不是已经说过一遍了吗？

对，然而想要理解区块链技术，就必须理解的第一个概念就是——不要相信许多宣传和科普里说的，似乎比特币前无古人后无来者一般。以上的每个部分，都不是天经地义，不可改变的。

链式结构不是必须的，对于拥有全网共识的区块链而言，链式结构更好。而对于没有全网共识的区块链，DAG（有向无环图）也是可以的。

UTXO结构不是必须的，将比特币里的UTXO结构去掉改成状态库结构也不会对安全性有直接的影响。更确切地说，UTXO结构是针对数字货币这个特殊的应用，对于状态库的一种优化。

工作证明不是必须的，工作证明只是多种共识算法之中的一种，即便在非许可链里，工作证明都不是唯一的方法，POS现在已经完全可用了。

挖矿奖励不是必须的，挖矿奖励只是非许可链中适用的“理性节点”模型里面引入的一个概念，而且，如果想引入更复杂一些的机制的话，即便在非许可链中挖矿奖励也可以被取代。

代币不是必须的，引入代币只是因为比特币的本质是个数值交换系统，至于稀缺性，只不过是让人认为这东西不会无限贬值的噱头而已。

如果要理解区块链，第一件事，就是要把比特币的结构模块化——

其中哪些是区块链的部分，哪些不是区块链的部分。

比特币，从功能上，只是一套数值交换系统，或者说，一份可靠的账本。其他的一切，只是为了实现这个系统的手段，而不是目的。算哈希不是目的，发代币不是目的，所谓稀缺更不是目的。

当然，手段有两个层面——技术上实现这个系统的手段，以及商业上吸引别人来使用这个系统的手段。这里，我们只关注前者，因为对于前者的误解，远比后者多得多，很多我看到很多自称比特币专家的科普文章里将技术上的手段当成是商业上的手段。例如，认为十分钟的区块间隔是为了让矿不那么快挖完，认为稀缺性是比特币的本质，认为密码学的加密是为了匿名性，认为工作证明是唯一的共识算法所以挖矿奖励是不可或缺的，于是得出结论代币是区块链必不可少的部分等等……

那么，有人该疑惑了，比特币的价值难道不是匿名和稀缺吗？如果只是一个数值交换系统，那它的意义何在？

那么，我们用另一种说法来定义一下“价值”。

这里，我们不再考虑比特币的价值，也不考虑货币系统的价值，我们考虑一下世界上任何东西的价值。

其实归根结底，就是一句话——

一个东西的价值，取决于它能不能做别人想做而做不了的事情。

数值交换系统，别人想做吗？

当然，之前的文章里已经写过了所谓“死神币”了，一个安全的数值交换系统，本质上，就可以作为支付系统或者货币系统。所以，从信用卡公司到支付宝再到政府，谁不想做一个安全的数值交换系统？

然而，比特币做的事情，别人做的了吗？

这个问题，会有两种答案——

有些人认为，做不了。因为目前能做得到的，都是中心化系统，而中心化系统是有原罪的，谁也无法绝对保证某个中心不会突然崩溃？

而我则在前面的文章中提了我的观点——去中心化系统并不天然比中心化系统安全有保障，所以，比特币目前不要和说和主流交易系统比，就算和非主流交易系统比都差着量级。然而，相比于其他的虚拟货币，比特币还是有着巨大的优势。而且，比特币安全性的担保，至少也在百亿美元的量级。

所以，我们可以说，比特币最大的价值，就是创造了一个至少需要百亿美元才能摧毁的，去中心化的数值交换系统。

——————————————————————————————————

然而，以上的部分，是从比特币的角度去写的。

比特币的核心，是个数值交换系统。多说一句的话，叫去中心化的，安全的数值交换系统。其中，去中心化是指它没有一个中心节点，而安全是指只要恶意节点是少数，这个系统都能正常工作。

而其他的，例如，链式结构；UTXO；工作证明；代币……都是可替换的，都是手段。

然而，如果反过来看呢？

能不能还用这些技术，把数值交换系统换成别的呢？

如果你也产生了这种疑问，恭喜你，你对于区块链已经入门了。

的确，数值交换系统是应用。

将这个应用去中心化的技术，也即，之前提到的一系列的手段的结合，叫做区块链。

我们这里先不谈区块链的部分，我们来讨论一下整个区块链领域最热门的，被认为能够改变世界的应用——

智能合约。

很多人对于这个理解的不对——他们觉得智能合约就是电子合约，就是把合约电子化了存在区块链上使其无法篡改。

不，这样的合约一点也不智能。

![](https://storage.googleapis.com/papyrus_images/36bbe93150931f1fd4520fc6e5ec3ad6d2d77f587374f30ec02f43ae8ca3ec1e.png)

所谓的“智能”合约，是指在双方达成协议，签署之后，能够不需要通过第三方就强制执行合约上的内容，无法单方面撤销或者反悔的合约。

听起来是不是很玄幻？

其实一点也不，正相反，实际上比特币就已经达到了某种“智能的效果”。

首先，将去中心化和账本这两个概念抛出脑海，比特币是个去中心化的交易系统——让我们姑且只想“系统”这两个字。

不妨叫它“智能交易系统”，将它想成一个给定输入就会给出确定输出的黑盒子或者一个机器。

它的功能是这样的：

![](https://storage.googleapis.com/papyrus_images/2e71e688fd573fc1234ed7f3eb244c60ab1458d39a38ad03d95fbc3a499b3ab4.jpg)

当输入的交易签名正确，金额正确，输入没有被使用过的时候，输出一个新的记录这些交易的账本存起来同时发布到网上。

同时，当输入无效的时候，啥也不做。

在中心化的场景下，以上的功能，你随便搞一台服务器招几个程序员花2两天写个软件就能实现。

然而，想要去中心地实现同样的功能，就得用到比特币那一大堆东西了。

于是，现在我们有了这个去中心化的“智能交易系统”。

听起来不错，但是，就像我说的，这不是区块链唯一能做的。

区块链能做什么呢？

你们听说过安利，呃不对，图灵吗？

![](https://storage.googleapis.com/papyrus_images/429aa9cef9a859ff066f5c1f2068f2b0bde1455756ddbe966883eff537c80851.jpg)

没听说过不要紧，只要知道，简单来说就是，图灵当年设想了一下人类所有的思维活动，发现其实一切计算，一切思考，无非是几个简单的逻辑动作。于是，他就设计了一个可以模拟一切人类思考和计算行为的机器，叫做图灵机。

换句话说，只要人类能完成的计算、思考和逻辑推理，图灵机都能做。最简单的，你的电脑就是一台图灵机。

而区块链的黑盒子，也可以是个图灵机，换句话说，你能想到的，区块链都能做。

而以太坊，就是一个接近图灵机的黑盒子。

——————————————————————————————————

现在，我们来考虑一个两人下象棋，并且有彩头的游戏。这个彩头，我们姑且就算是这个链上的数字货币。

![](https://storage.googleapis.com/papyrus_images/eb9955ad31479c725834871477c8b380b2bed5f93e770a40eff3aebaa47701df.jpg)

我们可以把黑盒子设计成这样：

输入：双方各10个数字货币。接下来，双方每人一步输入自己走的每步。

黑盒子的功能很简单，就是一个象棋程序，它按照规则判定每个人每步是否符合规则，并且，当一方的帅或者将被吃掉的时候，系统会判定那方负（我们先不考虑认输的情况）。

输出：新的账本，同时写入20个数字货币转入赢家的账户。

![](https://storage.googleapis.com/papyrus_images/783c5cef6e446206b826348b60cb6bee63567dbc22d74fc03b5823f88cae788a.png)

这个黑盒子，姑且称之为“智能下棋系统”，看起来其实和之前的“智能交易系统”差不多，只不过，需要判定的东西不是一次输入的，而是分许多次输入的。

这就是智能合约吗？听起来不厉害啊！

的确，如果一个区块链只不过是一个象棋+积分程序，那么确实不厉害。

但是，别忘了，以太坊是（接近）图灵完备的。

换句话说，以太坊的黑盒子，是台计算机而不是下象棋的游戏机！

象棋在计算机里是什么呢？是个软件，或者说，是个程序。

而对于以太坊也同样，我们可以把以上的功能写成程序放进去。

换句话说，以太坊这个黑盒子可以这么玩：

输入：象棋程序。

输入：双方各10个数字货币。接下来，双方每人一步输入自己走的每步。

黑盒子：按照输入的象棋程序中规定的规则读取双方的输入，判定双方收入的合法性，以及最终得出结果，按照象棋程序规定输出。

输出：更新账本，20个数字货币转入赢家的账户。

![](https://storage.googleapis.com/papyrus_images/27e4d7e802c51ef9e2cfb0e46b65e4a96480f1f01a462cfac533ac99c573b0fa.png)

一个图灵完备的黑盒子，代表你能够输入任何程序供其执行。

于是，从这个角度看，区块链又是什么呢？

区块链简单说，就是一个把这个黑盒子从你的家里的电脑或者某个机房的服务器上，搬到一个去中心的，不安全的网络中的技术。为了让这个黑盒子能在这种环境中运行，区块链主要干了两件事——

1，用密码学防止内存中的数据被篡改。

2，用公式算法保证只要大部分节点是好的，这个黑盒子就能正常工作。

而区块链技术，是独立于这个黑盒子的内容的。这个黑盒子里，小到任何一种单一的功能，例如数值交换，大到可以执行（几乎）任何程序的图灵机，都可以装进去。

这才是区块链技术之所以引起这么大的热潮的原因，单单是数值交换系统的话，其实真的没什么好兴奋的，比特币之后的各种山寨币，没哪个进入了主流视野。

——————————————————————————————————

关于区块链技术，我以后会慢慢详述。

在这里，我们继续看这个黑盒子。

区块链的黑盒子，由于工作原理，和我们能够想象的家用电脑，有很大区别。

在家用电脑中，如果读取速度没问题的话，输出结果的速度，仅仅和运算速度相关。换句话说，不管你跑啥东西，CPU或者GPU算完了，输出结果就好了。

然而在区块链里，运算速度不是瓶颈，瓶颈是输出结果。因为区块链的每个节点算出结果之后，所有结果都要漫长的全网共识过程才算是系统的最终输出。因此，这个黑盒子的性能是非常有限的。有限体现在两个方面：

1，首先，输出速度是有限的，算得再快没用，只要结果的数据量大，或者节点太多，最终输出速度都会卡在这里。

2，其次，如果某个运算需要调用结果而不是内存的话，效率会非常低下。因为每次调用都等于你算完了，但是你要等其他所有人都算完决定结果之后，才能继续进行下一步。

于是，如果你是某个区块链应用的设计师，你要怎么做呢？

你肯定得避免结果的调用，先把所有的东西存在内存里。例如，你想算A+B+C+D，在区块链系统里，先算A+B，然后所有节点对对答案确定了结果，然后再加C，再对答案，最后再加D，这种方案显然是最差的。更有效率的做法是算A+B，结果存在内存里，然后不用对答案再加C，再加D，最后再对一次答案，得出最终结果。

两者输出是一样的，然而，对于某些应用，我们却无法使用后者。

例如价值交换体系。

价值交换体系之中，交易之间是互相依存的。A拿到工资，从银行取钱，然后订了外卖。那么关系是，B公司付钱给银行C，然后C把钱给A，A再付给外卖D。如果想最高效的实现这一系列动作，当然是每个节点自行生成这一串交易记录最终汇总记录到账本上。然而，这套逻辑放在现实生活中是很难成立的，D管A要钱的时候，想要获得的是现金，而不是A说：“相信我，我马上发工资了然后我会从银行取钱，取出来的钱里面有一部分会是你的。”换句话说，在现实生活中，有些支付场景可以接受以上的逻辑，但更多的时候，交易的前提是之前的交易要确定才行。

以上，是目前任何采用区块链技术设计这个黑盒子的时候面临的第一个问题——性能不足。

——————————————————————————————————

第二个问题，则是一个结合了技术，法律和伦理的复杂问题。

假设我们设计了一个盒子，然而，发现这个盒子跟我们想要的功能不一样，怎么办？

然后，如果结果出了岔子，那么谁为此负责？

接下来，如果有人利用了这个岔子获得了他按照设计思路不该获得的好处，那么，这种行为是否应该被允许？

从一个理想的角度想，答案是很简单的——自然是设计者负责，出了岔子造成的损失，自然也是设计者负责赔偿，而利用了漏洞得到的好处，不该被认为是犯罪。

然而，现实要比理想复杂得多。

最著名的例子，就是以太坊上的DAO事件。

DAO是一个以太坊成立之初就高调成立的，认为去中心化和以太坊可以解决一切问题的组织，他们致力于将所有的东西智能合约和代码化。然后，某一次，某个智能合约出了问题，导致黑客利用漏洞转走了360万的以太币。

最终的结果，是以太坊采取硬分叉逆转了这个结果，然而，导致了以太坊从此分叉成了如今的以太坊和以太坊经典。这里，我们不去管这件事本身，也不去评价这个决定以及几方的对错，我们来看看这件事揭示的问题——

1，我们的社会不是代码组成的，即便法律也不是代码组成的，否则，也就没有什么量刑范围，也就不需要法院了。“代码即是法律”，听起来很美好，相信DAO的人也是这么想的，而当这件事发生之后，最矛盾的大约也是这些人——如果代码是法律，那么作为法律制定者的程序员们是否负担得起起可能造成的后果。

要知道，任何程序都是有bug的，而任何程序员也都是会犯错的。

![](https://storage.googleapis.com/papyrus_images/75e17ac5fc22432d0c1f41d856cbcb7854f0cbdb4ef47ecd771a3a766cb8d407.png)

2，没人知道一个bug可能会造成什么样的后果，例如DAO，它并不是类似的情况第一次出现，然而，之前的问题并没有导致硬分叉，这多少也表明了以太坊社区的态度——也就是之前说的，理想化的态度。然而，DAO最终硬分叉的决定，以及最终分成了以太坊和以太坊经典的结果，不光是以太坊社区的矛盾，也将是整个智能合约和未来区块链应用的矛盾——不存在什么通用的解决方案，当意外造成的损失足够大，整个社区就必须抉择，是遵守游戏规则，导致整个系统无人问津；还是破坏游戏规则，破坏整个系统的逻辑。

3，DAO的黑客没有受到起诉，他自己也不认为自己做了错误的事情——代码就是法律，他做的事是代码所许可的。然而，这还只是DAO，一个本身就存在于以太坊世界的组织。而如果智能合约的主体变成了真实世界的企业和人，而在真实世界中也有同样的合约的纸质版的时候，问题就来了——哪个具有法律效力呢？如果两者由于程序bug出现了不一致，法律应该保护哪个的合法性？

以上三个问题，实际上是目前智能合约面临的最大问题。

很多人都在描绘区块链的前景，在未来社会中，一切都通过智能合约实现。但是，即便区块链技术进步到那个程度，在智能合约这方面，还会遇到以上的挑战——1，需要大量懂法律和编程的专门人才将现实中的合约翻译成智能合约；2，需要相关的法律规定当两者不符的时候，如何解决。

而在这两个问题解决之前，智能合约很难用来解决现实中的问题。

——————————————————————————————————

智能合约的第三个问题，是专用和通用之间的矛盾。

回到黑盒子——我们说了，黑盒子可以是任何东西，可以用来解决某个具体问题，只有有限的功能，也可以图灵完备，换句话就是啥都能做。这很好理解，我们生活中充满了这两类东西，无论是芯片还是电脑还是服务器，都有专用的和通用的。

也正和其他的专用和通用的机器一样，采用区块链技术的黑盒子也有相同的优势和劣势——

专用的：做同样的事情效率更高，结构更简单。

通用的：结构更复杂。

但在区块链的世界里，还存在着另外一个问题——

区块链是个去中心化的方案，通常情况下，这个黑盒子的价值不仅于它能做什么挂钩，还和它究竟有多可靠挂钩。而它的可靠程度，和使用它的人数量挂钩。

于是，我们发现了专用的黑盒子在区块链应用中的问题——数字货币的受众也许还可以接受，但是，如果你做一个专用于房子交易的区块链，那么怎么吸引足够的用户加入使得这个区块链拥有足够高的可靠度（高到可以担保房屋交易）就会成为一个问题，

所以，现在，更多的区块链项目都想把这个黑盒子设计成，或者，至少，宣传成通用的。

然而通用的黑盒子，抛开一切设计和实现上的难点，假设代码从易用性，功能性和效率都完美，还是有一个重要的问题——

图灵完备和万能是有区别的。

图灵机只说了它能做（几乎）一切事情，但是没说它的效率。

家用电脑和银河超算可都是图灵机。

这就导致了一个问题——

如果这个黑盒子真的是通用图灵机，那么，不管我扔进去什么，只要符合规则，它都得执行才行。

极端点说，我扔进去一个死循环，整个系统就卡了。

你可以说，“那我们检测一下你的程序是不是死循环就行了”，但是这是做不到的——这就是著名的“停机问题”，一个程序是否会停机是无法检测的。

所以，从这个角度，在真正的实现上，这个黑盒子不可能是图灵完备的——否则就会面临“停机问题”。

以太坊采用了一个非常聪明的方法——给所有的运算加上了“运算费”，例如，做一个乘法，请付5块钱，做一个哈希，请付100块钱。

然而，这个钱是付给打包这个程序进区块的节点的，换句话说，需要整个系统承担的运算，收到奖励的只有一个人。

这在运算代价远小于之前我们提过的共识代价的情况下，问题不大——因为现在的情况是，1，算出结果不是问题，瓶颈是达成共识。2，由于前述的原因，目前没有需要执行特别复杂运算的智能合约。然而，如果区块链普及开来，智能合约功能越来越丰富，以太坊当前的运算奖励分配方式是不合理的。

例如，一台超算，也许会觉得添加某个需要运算很久的合约（程序）小菜一碟，因此，在他看来，将这笔合约写进链里赚取奖励是合算的；然而，当这个合约加入之后，每当有人执行这个合约，所有其他节点都会被迫去运行这个合约。这就会造成整个网络的运算负担，最终导致运算能力小的节点拒绝接受使用这个合约的交易，或者运算能力不足的节点退出。

总而言之，如果这个盒子是通用的，则设计者需要通过别的方式对于这个盒子的功能进行限制，以防停机，以及保证执行的合约都在大部分节点的能力范围之内。

这就导致了区块链发展过程中的分歧，也是类以太坊式的区块链的困境——

我们究竟是需要一个面对具体应用，实现具体功能，提供可量化的安全性，一蹴而就的专用区块链呢。

还是一个类图灵完备，但是需要对于写入的程序加以各种限制，同时还面临着各种程序bug可能导致的风险，需要边使用边修改边更新的通用区块链呢？

两条路都有人选，但是相比而已，后者更容易拿到钱。

前者，需要有真正懂得区块链作用并且有去中心化需求的企业的投资，而现在这种企业全世界都没有几家。

后者来钱更加容易的原因是，可以做成公有链自己发行代币。

以太坊选择了后者——

我并不认为以太坊是个完美的系统，然而，相比于比特币，它也从来没有标榜过自己是完美的。

因此，它不会受困于“去中心化”这种意识形态之争，vatalik buterin以及开发者们，从头到尾都牢牢控制着以太坊的决策权，完全不用担心硬分叉带来的阻力。

它也不会被矿工和POW绊住脚步，算力炸弹从一开始就说明了，矿工不会永远掌握以太坊。

它甚至可以完全不顾社区或者支持者的意见，它愿意承认自己的错误，修改自己的错误，并且不惧怕继续犯错误，例如DAO：没错，DAO犯了错，那么就硬分叉把错误回滚——我们不是一个，也并不想做一个“无法篡改的账本”，我们的野心更大，因此，在实现野心之前，一切的错误，都只不过是我们学习的过程而已。

拜占庭硬分叉升级在即，尽管，拜占庭升级离他们理想中的黑盒子还相去甚远，然而，至少，它们没有被高涨的以太币价格冲昏头脑，没有忘记一开始他们想要的是什么。

因此，即便以太坊现在几乎实现不了任何有意义的功能，尽管我认为Vitalik Buterin的文章不忍卒读，然而，我还是要说——

以太坊走在一条正确的道路上。

---

*Originally published on [dingyuanying](https://paragraph.com/@dingyuanying/B9izl7vZPBuW0tZb2tBX)*
