在了解區(qū)塊鏈的過程中,我們經(jīng)常會聽到介紹說以太坊是圖靈完備的區(qū)塊鏈平臺。圖靈完備一般作為一個特點用來形容一個系統(tǒng)或者一套語言,這么說吧,我們“人”本身也可以說是圖靈完備的,我們每一個會決策、會思考的人,都可以抽象地看成一個圖靈機(jī),就像李笑來曾經(jīng)說的,“每個人都有自己的操作系統(tǒng),因為有元認(rèn)知能力,還可以自己升級操作系統(tǒng)。”
但是,這么簡單粗暴地理解當(dāng)然是不夠的,下面給大家詳細(xì)講解到底什么是圖靈機(jī)和圖靈完備。
什么是圖靈完備?
說到圖靈完備一般得先提到圖靈機(jī)的概念,圖靈機(jī)是英國數(shù)學(xué)家阿蘭·麥席森·圖靈在1963年提出的、為了研究可計算問題而構(gòu)思的抽象計算模型——將人們傳統(tǒng)的使用紙筆進(jìn)行數(shù)學(xué)運(yùn)算的過程,進(jìn)行抽象,由一個虛擬的機(jī)器替代人們進(jìn)行無數(shù)次的數(shù)學(xué)運(yùn)算。這個虛擬的機(jī)器就是圖靈機(jī),也就是現(xiàn)在計算機(jī)的雛形。
如下圖,虛構(gòu)的圖靈機(jī)長這個樣子。形象地來說,它就像是老式的電傳機(jī):一個讀寫頭,一根紙帶(可能任意長),讀寫頭不斷讀取紙帶上的符號,并根據(jù)內(nèi)在的狀態(tài)轉(zhuǎn)換規(guī)則轉(zhuǎn)換當(dāng)前狀態(tài),同時進(jìn)行一些動作,比如擦除或改寫當(dāng)前字符,向前/向后移動讀寫頭或保持不動等。
所以圖靈完備(Turing Complete)原本是來自計算機(jī)的概念,是程序員編寫的各種代碼語言,再加上一種能在圖靈機(jī)這種虛擬機(jī)中完美地運(yùn)算的運(yùn)算規(guī)則,因此滿足這樣要求的邏輯系統(tǒng)、裝置或者編程語言就叫圖靈完備。
簡而概之,圖靈完備的意思就是可以做到圖靈機(jī)所能做到的所有事情,解決所有的可計算問題的邏輯系統(tǒng)、裝置或者編程語言就叫做圖靈完備。
根據(jù)圖靈機(jī)與圖靈完備的定義,圖靈完備的語言有循環(huán)執(zhí)行語句、判斷分支語句等,理論上能解決任何算法。那么它的一個顯著特點就是支持程序循環(huán)不斷地運(yùn)行下去。缺點就是其有可能進(jìn)入死循環(huán)而導(dǎo)致程序崩潰。
那么相反,圖靈不完備就是不允許或限制循環(huán),可以保證每段程序都不會死循環(huán),都有運(yùn)行完的時候。
那么在區(qū)塊鏈支撐的分布式環(huán)境中,圖靈完備是如何應(yīng)用在區(qū)塊鏈中的?它解決了區(qū)塊鏈的什么問題?
為什么區(qū)塊鏈行業(yè)需要圖靈完備?
說到區(qū)塊鏈,第一個肯定想到比特幣網(wǎng)絡(luò)。我們都知道,一直到目前為止比特幣系統(tǒng)上是幾乎不支持開發(fā)程序應(yīng)用的,這是因為當(dāng)初中本聰出于安全問題的顧慮,在設(shè)計比特幣時只采用了一種堆棧語言,不能做到圖靈機(jī)所能做到的所有事情,所以我們說比特幣系統(tǒng)是圖靈不完備的。
不過比特幣這樣的非圖靈完備的區(qū)塊鏈代碼協(xié)議的優(yōu)點是很安全,從2009年誕生至今近10年的時間里,區(qū)塊鏈中發(fā)生過無數(shù)起黑客攻擊事件,但比特幣幾乎從未因本身腳本原因出現(xiàn)過資金損失。
那么問題來了,比特幣雖然安全,但是在其系統(tǒng)上不能開發(fā)復(fù)雜的邏輯程序,這就使得早些年區(qū)塊鏈的落地場景和應(yīng)用十分少。而隨著區(qū)塊鏈的發(fā)展,這些需求不斷提上議事日程,人們開始逐漸需要能夠支持區(qū)塊鏈應(yīng)用開發(fā)運(yùn)行的系統(tǒng)出現(xiàn),于是區(qū)塊鏈就引入了圖靈完備的概念。
在比特幣之后,為了能實現(xiàn)更豐富的功能和使用場景,一些圖靈完備的區(qū)塊鏈系統(tǒng)應(yīng)運(yùn)而生。
其中眾所周知的且最具代表性的就是以太坊。以太坊采用的是智能合約語言,它是一個圖靈完備的區(qū)塊鏈系統(tǒng),其虛擬機(jī)可運(yùn)行智能合約,理論上能夠解決所有的可計算問題,從而盡最大限度滿足各種現(xiàn)實應(yīng)用場景的開發(fā)。程序員既可以利用以太坊的智能合約來編寫數(shù)字資產(chǎn)的代碼,創(chuàng)建新的數(shù)字資產(chǎn);也可以通過編寫智能合約的代碼,創(chuàng)造非數(shù)字資產(chǎn)的功能,例如目前市場上的各種DApps。
總的來說,假如我們把比特幣的區(qū)塊鏈當(dāng)做是一種數(shù)字資產(chǎn)的協(xié)議技術(shù),那么以太坊的區(qū)塊鏈則可以說是這個數(shù)字資產(chǎn)協(xié)議的協(xié)議。
圖靈完備這一技術(shù)的特性使得以太坊上從一開始就涌現(xiàn)了大批商業(yè)應(yīng)用,區(qū)塊鏈落地場景也逐漸增多。目前已有遠(yuǎn)超200個基于以太坊的應(yīng)用誕生,而隨著摩根大通、微軟、英特爾、三星、豐田等眾多企業(yè)巨頭的加盟,以太坊已逐漸從一開始的虛擬代碼技術(shù),成為了虛擬世界最大的一條“高速公路”,被賦予了巨大的創(chuàng)新商業(yè)價值,所以以太坊一般也被稱為區(qū)塊鏈2.0。
但是,與此同時,圖靈完備有陷入死循環(huán)的風(fēng)險。所以以太坊為了保證所寫出的程序不存在死循環(huán),就在“智能合約”語言中加入了gas的概念,通過加入gas費用,程序每個運(yùn)算過程都會消耗一定成本,就不會無限制地執(zhí)行下去。
總結(jié)
以太坊雖說可以搭載很多應(yīng)用,但是復(fù)雜的協(xié)議在設(shè)計和編碼過程中難以避免人工失誤,因此常常被黑客找到漏洞發(fā)起攻擊,損失巨大。比如著名的The DAO事件,The DAO資金池中價值6000多萬美元的以太幣在6個小時里被洗劫一空。
不管怎樣,技術(shù)是提供便利的,但無論什么技術(shù)都多少有雙面性,不論是圖靈完備還是區(qū)塊鏈。圖靈完備的開發(fā)語言將仍然是未來的主流,因為大多數(shù)項目都希望實現(xiàn)多樣的功能,有豐富的使用場景。但是不管做什么項目,安全性一定是不容忽視的考慮因素。