图灵完备:它的含义、以太坊为何需要它以及比特币为何选择避免它
一位在传统金融行业工作的朋友曾经问我,为什么以太坊可以在其区块链上运行完整的金融应用程序,而比特币基本上只能在两个地址之间转账。“它们都是区块链,”他说,“那到底有什么区别呢?”
我试着解释图灵完备性,却看到他眼神呆滞。于是我又用一个比喻。比特币就像一台自动售货机。你投币,按下按钮,就能拿到指定的商品。它只做它被设计用来做的事情,别的什么也做不了。以太坊就像一个厨房,里面有个厨师。给厨师任何食谱和足够的食材,他们就能做出任何东西。循环(“搅拌至浓稠”)、决策(“如果太咸,就加水”)、创造力(“用剩下的食材即兴创作一道甜点”)。厨师可以执行任何指令。自动售货机却不行。
这个比喻并不完美。计算机科学家会指出我过于简化的一些地方。但这确实让我的朋友问出了一个关键问题:“那么,为什么会有人选择成为自动售货机呢?”
这个问题正是加密货币领域图灵完备性争论的焦点:安全性与灵活性、可预测性与强大功能、比特币与以太坊的对立。而令人恼火的是,答案是双方都有道理。
这个想法源自何处?为什么一篇1936年的数学论文至今仍具有重要意义?
艾伦·图灵于1936年发表了一篇题为《论可计算数》的论文,当时他23岁。在论文中,他描述了一台极其简单的机器,简单到就像玩具一样。它由一条分割成单元格的磁带、一个读写符号的磁头以及一些根据读取到的内容指示磁头执行相应操作的规则组成。磁带、磁头、规则,这就是整台机器。
这段话至今仍让我不寒而栗。图灵证明,这台极其简单的机器可以计算任何计算机能够计算的任何内容。不是某些内容,而是任何内容。你的手机现在就在进行磁带和磁头运算。运行 ChatGPT 的服务器也是如此。你汽车里的芯片也是如此。他在 1936 年就证明了这一切,那时地球上还没有一台电子计算机。这篇论文已经发表近 90 年了,但全球所有计算机科学系仍然在第一学期教授它。
当有人说一个系统“图灵完备”时,他们的意思是它可以模拟图灵的磁带机。它可以运行循环、根据数据做出决策、将数据存储在内存中,并执行任何算法。你的笔记本电脑是图灵完备的,而袖珍计算器则不是。还有一个我很喜欢跟人分享的趣闻:Minecraft 的红石电路从技术上讲也是图灵完备的。人们已经在游戏中构建出了可以运行的计算机。虽然不是那种真正有用的计算机,但确实可以运行。

这在比特币中是如何体现的:为什么中本聪选择了限制
中本聪使用一种名为比特币脚本(Bitcoin Script)的编程语言创建了比特币,这种语言刻意设计得非常简单。它只负责验证签名、处理多重签名钱包、根据时间条件锁定资金,仅此而已。没有循环,没有复杂的分支,也没有会在交易之间传递的状态。
我第一次真正理解这其中的重要性,是在阅读以太坊 DAO 黑客事件(稍后我会详细介绍)时。一个递归函数调用导致智能合约损失了 1.5 亿美元,因为代码可以无限循环地调用自身,而开发者对此毫无预料。在比特币中,这种黑客攻击是不可能发生的。不是可能性很小,而是绝对不可能。比特币脚本无法调用自身,无法循环,也无法递归。它的语言功能有限,无法表达导致以太坊损失 1.5 亿美元的那种漏洞。
这种限制恰恰是它的特性。每个比特币脚本的终止方式都是可预测的。你可以阅读脚本,准确地知道它将执行什么操作。不会有任何意外,也不会出现任何异常行为。当你在保护一个价值超过万亿美元的网络时,“枯燥乏味且可预测”并非弱点,而是一种设计选择。
维塔利克打造了什么,以及它为何改变了一切
2013 年,19 岁的 Vitalik Buterin 发表了以太坊白皮书。他提出的问题既简单又激进:如果区块链本身可以运行任何程序会怎样?不仅仅是“将币从 A 发送到 B”,而是计算机可以做的任何事情?
以太坊白皮书发布时我还在上大学。我是在一个比特币论坛上看到别人分享的PDF版本后读到的。一半的回复说Vitalik是个天才,另一半则说他建的系统肯定会被黑客攻击。事实证明,双方都说对了。
以太坊于 2015 年发布,它自带两个组件,使其具备图灵完备性。Solidity 是用于编写智能合约的编程语言,它拥有循环、条件语句、状态存储和函数调用等所有必要的功能。以太坊虚拟机 (EVM) 则负责在网络中的每个节点上同时运行这些合约。两者结合,使得开发者能够部署他们编写的任何代码。
正是这个决定,使得DeFi、NFT和DAO得以存在。也正是这个决定,使得数十亿美元的资金能够流经那些不受任何单一公司控制的项目。从Uniswap到Aave再到OpenSea,加密货币领域所有有趣的应用程序,都离不开以太坊能够运行任意代码这一事实。
但维塔利克做了一个赌注。他赌的是,灵活性带来的力量将超过复杂性带来的风险。2016 年的 DAO 黑客事件狠狠地考验了他的赌注。每年造成数十亿美元损失的 DeFi 漏洞也在不断考验着它。而比特币社区则不断地指出这些损失,并表示“这就是我们坚持简单的原因”。双方都有道理。
停机问题以及燃气费存在的原因
我第一次理解这段话的时候,它让我夜不能寐。
图灵在1936年的同一篇论文中证明了一个令人不安的事实:没有任何算法能够可靠地判断任意程序是会结束运行还是会无限循环。这不是一个我们尚未解决的技术难题,而是一个数学上的不可能。已被证明。无论计算机多么先进,都无法解决所有程序的停机问题。
在我的笔记本电脑上,无限循环只是烦人而已。我按下Ctrl+C,一切照常。但在区块链上,无限循环却是灾难性的。每个节点都运行着所有的智能合约。如果一个合约一直运行不完,那么运行该区块链的全球所有节点都会崩溃。网络彻底瘫痪。
以太坊的解决方案简单粗暴却行之有效:gas。每次计算都需要消耗gas。你需要将gas附加到你的交易中。当gas耗尽时,代码就会停止执行。无论交易是否已经完成,也无论它是否正在转账过程中,gas都会归零。这就是以太坊gas费用差异的原因。一笔简单的转账:21,000 gas;一次复杂的DeFi交易:200,000 gas;一个带有链上艺术的NFT铸造:50万 gas。你支付的费用取决于每个节点需要执行的计算量。
比特币审视了这个问题,然后说“不行”。它无法编写循环,也不会陷入循环中。每个脚本都会终止。不需要 gas 机制。这种语言的局限性使其无法表达“永远”。
2016年6月:理论变为现实,价值1.5亿美元
任何关于密码学中图灵完备性的讨论最终都会到达这一步。
这个 DAO 是一个规模达 1.5 亿美元的投资基金,运行在以太坊上。它采用智能合约和社区治理模式,资金流入,投票决定资金流向。代码非常复杂,包含循环、条件语句、跨合约调用,以及执行过程中状态的改变——完全符合图灵完备性。
有人发现了一个漏洞。提现函数先发送了 ETH,然后才更新余额。攻击者调用了提现函数,收到了款项,但在余额更新之前,该函数又一次调用了自身。如此反复。这就是重入攻击。这是一个开发者从未预料到的循环,每次循环都会造成资金流失。
这种情况会发生在比特币上吗?不会。比特币脚本不能调用自身,也不能调用其他脚本,更不能循环执行。正是比特币的“无趣”之处,也使得这种特定攻击不可能发生。
以太坊社区投票决定对区块链进行硬分叉,以撤销盗窃事件。这次分叉催生了以太坊经典。开发者们从中吸取了教训。重入保护机制成为标准。“检查-影响-交互”模式也成为圭臬。但一个基本事实并未改变:图灵完备的代码总是可能包含其创建者未预料到的漏洞。这并非以太坊的缺陷,而是数学原理的必然结果。

比特币的限制越来越少:Taproot 和 BitVM
对于比特币而言,图灵完备和图灵不完备之间的界限已经不像以前那么泾渭分明了。
Taproot 于 2021 年 11 月发布,扩展了 Bitcoin Script 的功能。它支持更复杂的条件支出,通过 Schnorr 签名提升了隐私性,并引入了 Merkelized 抽象语法树,在交易执行前隐藏交易条件。虽然仍未达到图灵完备水平,但比以往更具表达力。
BitVM(比特币虚拟机)于 2023 年提出,更进一步。它描述了一个在链下进行任意计算,然后在比特币上验证结果的系统。可以这样理解:实际的计算在其他地方进行,只有当有人对结果提出异议时,比特币才会介入。理论上,这使得比特币在特定用例中几乎是图灵完备的,而无需改变其脚本语言本身。
我曾与一些比特币开发者讨论过BitVM,他们的反应很有意思。他们对BitVM的功能感到兴奋,但同时也对风险感到担忧。其中一位告诉我:“我们不会操之过急。人们在这个系统里投入了数万亿美元。如果我们为了让它看起来更花哨而搞砸了,没人会原谅我们。” 如果你希望明天就能看到比特币DeFi,这种谨慎的态度会让你感到沮丧。但如果你是系统中持有数万亿美元资产的人,这种谨慎会让你感到安心。
无论如何,发展方向都是朝着更具表现力的方向。Taproot 已经拓展了可能性,BitVM 将进一步拓展它。但不要指望比特币会变成以太坊,它们的文化差异太大了。
为什么每个新的区块链都选择图灵完备性呢?
实践证明了这一点:现在没有人再构建图灵不完备的区块链了。Solana、Cardano、Polkadot、Avalanche、BNB Chain,它们都是图灵完备的,都能运行任意程序。市场已经证明可编程性才是王道,现在唯一的问题是如何让图灵完备的系统更快、更便宜、更安全。
每条区块链都做出了不同的权衡。以太坊选择了EVM和Solidity(生态系统规模最大,L1挂单手续费最高)。Solana使用Rust构建了Sealevel用于并行执行(速度快,但开发难度更高)。Cardano选择了Haskell和形式化验证(数学上严谨,但普及速度较慢)。但它们都满足了图灵完备性要求,因为它们都希望运行智能合约、DeFi、NFT、DAO以及其他所有需要自定义逻辑的应用。
安全问题确实存在。DeFi漏洞每年造成数十亿美元的损失。DAO被黑事件仅仅是个开始。但业界最终认为,可编程性的益处远大于风险。即使是最初有意限制功能的比特币,也正借助Taproot和BitVM等技术,朝着更具表现力的方向发展。
我在加密货币领域摸爬滚打了很久,对这两种区块链都有过深入的使用经验。我发送的比特币交易每次都如期确认。我也部署过以太坊智能合约,它们的表现往往出乎我的意料,因为Solidity编程语言允许你编写足够复杂的代码,甚至能让你自己都感到惊讶。这两种经历都塑造了我对加密货币的看法。
这场争论的焦点与其说是图灵完备性是好是坏,不如说是需求的问题。如果你想要一个安全性和可预测性都达到极致的数字支付系统,比特币的设计就很合适。但如果你想构建金融应用、游戏、身份系统,或者任何需要自定义逻辑的东西,你就需要图灵完备性。如今加密货币之所以如此吸引人,很大程度上要归功于一位19岁的年轻人认为这种风险值得承担。
每次使用 Uniswap、Aave 或任何 DeFi 协议时,我都会想到这一点。我做的每一次交易都是在图灵完备的虚拟机上执行的代码。每一笔交易都存在理论上的风险,即某个无人预料到的漏洞可能导致整个合约崩溃。尽管如此,我仍然使用这些协议,因为对我来说,它们的效用值得承担这种风险。但我始终牢记风险的存在。我也始终牢记比特币选择了一条不同的道路,而这条道路自有其智慧。自动售货机永远不会偷走你的钱,但厨师却有可能把厨房烧毁。