1. 程式人生 > >什麼是圖靈完備智慧合約

什麼是圖靈完備智慧合約

圖靈,不用多介紹,是計算機領域的大神級人物,他在科學、特別在數理邏輯和電腦科學方面,取得了舉世矚目的成就,他的一些科學成果,構成了現代計算機技術的基礎。

因此,很多計算機領域的模型或者理論都是以“圖靈”來命名的,最經典的一個概念是“圖靈機”:

所謂的圖靈機就是指一個抽象的機器,它有一條無限長的紙帶,紙帶分成了一個一個的小方格,每個方格有不同的顏色。有一個機器頭在紙帶上移來移去。機器頭有一組內部狀態,還有一些固定的程式。在每個時刻,機器頭都要從當前紙帶上讀入一個方格資訊,然後結合自己的內部狀態查詢程式表,根據程式輸出資訊到紙帶方格上,並轉換自己的內部狀態,然後進行移動。

圖靈機

說白了,圖靈機模型描述的是一個計算程式,它可以像物理的電腦一樣運作,完成一個電腦所能做的所有事情。而所謂圖靈完備的程式語言,即是能夠實現所有計算機可以實現的功能的程式語言。

一般來講,我們平常使用的計算機程式語言,比如C,GO,Java都是圖靈完備的,因為它們都可以最大限度發揮計算機的能力。這些都是單機的情況,而在分散式下的情況如何呢,比如下面這個圖(圖片來自前期“”的千聊課程):

分散式架構下的程式設計

很顯然,在單機的情況下,實現所需要的功能是主要目的,而在分散式情況下如何解決上圖中的不一致的問題才是最關鍵的考量。

我們知道,比特幣誕生之後,大家逐漸發現了其底層的區塊鏈技術的巨大價值,同時認為區塊鏈技術才是分散式環境下解決這種一致性問題、可信的技術體系。

這種分散式環境下實現一致性的語言現在都被統稱為“智慧合約”。比特幣指令碼語言就是這樣一種語言,它實現了非常安全的數字貨幣計算模型,保證了在不需要第三方機構的情況下,兩方之間可以進行價值的轉移。

但是,現實世界的需求是極其龐雜的,為了滿足未來將區塊鏈技術應用於更多場景的可能需要,比特幣指令碼語言是遠遠不夠的。這也是為什麼以以太坊為代表的區塊鏈技術,都宣稱自己所採用的“智慧合約”語言是圖靈完備的主要原因。

所以以太坊朝著這個目標在前進,也正是由於這個平臺的強大,目前基於以太坊開發的區塊鏈應用越來越多。為什麼呢?通過上面的介紹就知道,以太坊的“智慧合約”語言是圖靈完備的,而圖靈完備的程式語言可以實現所有以前一個程式語言在單機上實現的功能,也即能盡最大限度滿足現實應用場景的開發。

而圖靈完備語言最顯著的一個特點是支援迴圈,所謂迴圈,就是程式能不斷執行下去。那麼在區塊鏈支撐的分散式環境下,礦工如何判斷一個程式何時結束呢?而圖靈計算理論,也有人證明過,要證明一個程式能不能終止是不可能的(圖靈停機問題

),所以這種“智慧合約”語言需要保證所寫出的程式不能存在死迴圈。

這也是為什麼以太坊語言會加入gas(汽油)的原因,通過加入gas,程式每個運算過程都會消耗一定成本,從而不會無限制地執行下去。

或許你還有不少疑問,比如什麼是圖靈停機問題?以太坊的智慧合約怎麼實現的?以太坊的gas機制到底是什麼?