Skip to main content
  1. Web3s/

比特币、以太坊与图灵完备

·671 words·2 mins·

图灵完备 #

图灵完备(Turing complete)是指一种计算模型具备与图灵机等价的计算能力。图灵完备的计算模型能够执行任何可计算的任务,即能够模拟图灵机能够执行的所有计算。

我们所常用的高级语言,如Java、Python、Go,都是图灵完备的——因为我们需要这些语言执行复杂的计算任务。

那么我们在什么时候要避免图灵完备呢?

比特币中的脚本 #

比特币中的脚本是基于栈执行的语言。

放置在UTXO上的锁定脚本和解锁脚本都使用这种脚本语言编写的,当一笔交易被验证时,每一个输入中的解锁脚本将与其对应的锁定脚本一起执行,以确定这笔交易是否满足支付条件。

这些交易脚本没有循环和复杂的流程控制能力,这意味着脚本只有有限的复杂性以及执行次数。通过这种限制来避免被恶意攻击——如果能无限循环或者有复杂的流程控制,就能够制造“逻辑炸弹”,从而形成对比特币网络的DDOS攻击。

这种简单性的代价就是在交易脚本中只能做简单的功能。

以太坊中的solidity #

以太坊中支持了智能合约,其编写语言(之一)就是solidity。

solidity是一个“近乎”图灵完备的语言——它能够执行复杂的计算任务——前提是有足够的gas。

智能合约的产生使得以太坊成为了世界级的计算机,而gas就是在其上计算所需要支付的费用。

开发者可以制造具有无限循环的“逻辑炸弹”,但每执行一次计算,都需要消耗开发者提供的gas——因此也无法形成事实上的无限循环。

尽管不能通过无限循环的脚本对以太坊网络进行DDOS攻击,但是语言的复杂性导致了很多智能合约存在bug从而被攻击,其中最著名的要属TheDAO。