官术网_书友最值得收藏!

1.2.1 以太坊的通俗介紹

1. 以太坊和比特幣的關系

比特幣開創(chuàng)了去中心化密碼貨幣的先河,十多年的時間已經(jīng)充分檢驗了區(qū)塊鏈技術的可行性和安全性。比特幣的區(qū)塊鏈事實上是一套分布式的數(shù)據(jù)庫,如果再在其中加入一個符號——比特幣,并規(guī)定一套協(xié)議使得這個符號可以在數(shù)據(jù)庫上安全地轉(zhuǎn)移,以及無須信任的第三方,這些特征的組合完美地構造了一個貨幣傳輸體系——比特幣網(wǎng)絡。

然而,比特幣系統(tǒng)并不完美,其中協(xié)議的擴展性存在不足,例如比特幣網(wǎng)絡里只有一種符號——比特幣,用戶無法自定義另外的符號,這些符號可以是代表公司的股票或者債務憑證等,這就損失了一些功能。另外,比特幣協(xié)議定義了一套基于堆棧的腳本語言(可用于實現(xiàn)多重簽名、外帶數(shù)據(jù)等),然而該腳本語言由于過分強調(diào)安全而不具備圖靈完備,因此并不足以構建更高級的應用,如去中心化交易所等。而以太坊從設計上就是為了解決這種擴展性不足的問題。

2. 圖靈機和以太坊的圖靈完備語言

圖靈機(turing machine)是圖靈在1936年發(fā)表的On Computable Numberswith an Application to the Entscheidungsproblem(《論可計算數(shù)及其在判定性問題上的應用》)中提出的數(shù)學模型。圖靈在文章中證明了只要圖靈機可以被實現(xiàn),那么就可以用來解決任何可計算問題。

圖靈機模型的結構如圖1-7所示。

● 一條無限長的紙帶被分成一個個相鄰的格子,每個格子都可以寫至多一個字符。

● 一個字符表,即字符的集合,它包含紙帶上可能出現(xiàn)的所有字符。其中包含一個特殊的空白字符,意思是此格子沒有任何字符。

● 一個讀寫頭,可理解為指向其中一個格子的指針。它可以讀取、擦除、寫入當前格子的內(nèi)容,此外也可以每次向左或右移動一個格子。

圖1-7 圖靈機模型的結構

● 一個狀態(tài)寄存器,它追蹤運算過程中整個機器的每一個狀態(tài)(運行或終止)。當這個狀態(tài)從運行變?yōu)榻K止,則運算結束,機器停機并交回控制權。簡單來說,它對應著有限狀態(tài)機里的“狀態(tài)”。

● 一個有限的指令集,它記錄著讀寫頭在特定情況下應該執(zhí)行的行為。可以想象讀寫頭隨身有一本操作指南,里面記錄著很多條類似于“當你身處編號53的格子并看到其內(nèi)容為0時,擦除,改寫為1,并向右移一格;此外,令下一狀態(tài)為運行”這樣的命令。其實在某種意義上,這個指令集就對應著程序員所寫的程序。

在計算開始前,紙帶可以是完全空白的,也可以在某些格子里預先寫上部分字符作為輸入。運算開始時,讀寫頭從某一位置開始,嚴格按照此刻的配置,即當前所處位置和當前格子內(nèi)容來一步步地對照指令集進行操作,直到狀態(tài)變?yōu)橥V梗\算結束。而后紙帶上留下的信息,即字符的序列(比如…011001…)便作為輸出,由人來解碼為自然語言。

圖靈機是一種抽象的計算模型,將人們使用紙筆進行數(shù)學運算的過程進行抽象,由虛擬的機器代替人類進行數(shù)學運算。圖靈機的本質(zhì)是人類思維在異度空間的映射,數(shù)據(jù)則是這種映射和其自運行的結果。

注意,以上只是圖靈機模型的內(nèi)容,而非具體的實現(xiàn)。所謂的紙帶和讀寫頭都只是圖靈提出的抽象概念。例如,算盤雖然不是圖靈機(因為它沒有無限長的紙帶,即無限的存儲空間),但它的行為與圖靈機一致:每一串算珠都是紙帶上的一格,一串算珠上展示的數(shù)字記錄著當前格中的字符(可以是空白,可以是1、2、3、4、5);人類的手即讀寫頭,可以更改每串算珠的狀態(tài);算盤的運行遵循人腦中的算法(選擇、循環(huán)、因果、條件等),當算法結束,算盤停機。

在計算機領域或者自動機領域,我們研究的一切問題都是計算問題,可泛指一切與計算相關的問題。

圖靈完備性是針對一套數(shù)據(jù)操作規(guī)則而言的概念,該數(shù)據(jù)操作規(guī)則可以是計算機里具體實現(xiàn)了的指令集,也可以是一種編程語言,當這套規(guī)則可以實現(xiàn)圖靈機模型里的全部功能時,就稱它具有圖靈完備性。編程語言圖靈不完備的常見原因有循環(huán)或遞歸受限(無法寫不終止的程序,如while(true){}; ),因為這會導致無法實現(xiàn)類似數(shù)組或列表這樣的數(shù)據(jù)結構(不能模擬紙帶),采用這樣的編程語言實現(xiàn)的程序在功能上就有局限性。因此,判定圖靈完備的簡單方法就是看該語言是否具備if…else控制流、while循環(huán)等功能。如今主流的編程語言(C++、Java、Python等)都是圖靈完備的語言。

當然圖靈不完備也不總是沒有意義的,有些場景需要限制語言本身,如限制循環(huán)和遞歸,可以保證該語言編寫的程序一定是終止的。例如,比特幣腳本語言就被特意設計為非圖靈完備的,具有一定的局限性,它基于堆棧,遵循從左向右處理的簡單原則(類似FORTH語言),沒有循環(huán)語句和復雜的條件控制語句。恰恰由于存在這種局限性,也就沒辦法執(zhí)行一些死循環(huán)或者一些能夠?qū)е翫OS攻擊的惡意代碼,從而也就避免了比特幣網(wǎng)絡受到DOS攻擊。

以太坊上運行的程序又稱為智能合約,可以理解為在區(qū)塊鏈上(以太坊基于區(qū)塊鏈技術架構)可以自動執(zhí)行的(由事件驅(qū)動的)、以代碼形式編寫的合同(特殊的交易)。其默認采用的編程語言是Solidity,它和JavaScript相似,是一種圖靈完備的編程語言(可以實現(xiàn)一切計算功能),用來開發(fā)合約并編譯成以太坊虛擬機字節(jié)代碼(源文件擴展名以.sol結尾)。這就使得以太坊比特幣系統(tǒng)更加具備擴展性,可以用來開發(fā)基于區(qū)塊鏈技術的各種去中心化應用(decentralized application,DApp)。

3. 區(qū)塊鏈、去中心化應用、比特幣、以太坊之間的關系

以太坊是一個建立在區(qū)塊鏈技術之上的去中心化應用平臺,它允許任何人在平臺中建立和運行基于區(qū)塊鏈技術的DApp。簡單來說,如果去中心化應用是App,那么以太坊是Android平臺。基于Android Framework可以開發(fā)Android App,那么基于以太坊可以開發(fā)出基于區(qū)塊鏈技術的DApp。

(1)區(qū)塊鏈是一種綜合技術,因比特幣的實現(xiàn)架構(數(shù)據(jù)區(qū)塊、鏈式迭代、共識算法)而得名。

(2)去中心化應用程序是一種新的數(shù)據(jù)記錄與傳播的方案,可以在大規(guī)模分布式網(wǎng)絡中實現(xiàn)數(shù)據(jù)記錄的實時性、一致性、合法性和可信性(深圳大學,張勝利)。

(3)在以太坊出現(xiàn)之前,實現(xiàn)區(qū)塊鏈去中心化應用的唯一方式是修改比特幣的源代碼,例如加密算法、共識機制、網(wǎng)絡協(xié)議等,這樣修改出來的應用通常應用于數(shù)字貨幣領域,如果需要應用于其他領域,則其工作量將是非常浩大的。

(4)以太坊平臺對底層區(qū)塊鏈技術進行了封裝,區(qū)塊鏈應用開發(fā)者可以直接基于以太坊平臺進行開發(fā),開發(fā)者只需要專注于應用本身的開發(fā),從而大大降低了難度。

目前已經(jīng)圍繞以太坊形成了一個較為完善的開發(fā)生態(tài)圈,有開源社區(qū)的支持,可以選擇多種開發(fā)框架和工具。借助以太坊,可以創(chuàng)建更加豐富的去中心化應用程序(不再局限于數(shù)字貨幣領域),可以實現(xiàn)去中心化自治組織、跨組織協(xié)同應用,是一種提高數(shù)據(jù)主權、改善生產(chǎn)關系、高效率建立信任的“社會編程”框架。

4. 區(qū)塊鏈應用的三大架構類型

隨著區(qū)塊鏈技術的不斷發(fā)展,區(qū)塊鏈應用程序(即基于區(qū)塊鏈技術的DApp)在宏觀上演化出了三種架構:公有鏈、私有鏈和聯(lián)盟鏈。這三種架構并沒有絕對的優(yōu)勢與劣勢,需要根據(jù)不同的應用場景來選擇合適的區(qū)塊鏈架構類型。

(1)公有鏈:公有的區(qū)塊鏈,讀寫權限對所有人開放。任何人都可以隨時進入公有鏈系統(tǒng)中讀取數(shù)據(jù)、發(fā)送可確認交易、競爭記錄存儲,因為沒有任何人或機構可以控制或者篡改其中數(shù)據(jù)的讀寫,公有鏈通常被認為是完全去中心化的。公有鏈一般會通過某種獎勵機制(通常是代幣)鼓勵參與者競爭記賬,來確保數(shù)據(jù)的安全性。比特幣、以太坊都是典型的公有鏈。主要特點:所有數(shù)據(jù)公開透明;是高度去中心化的分布式數(shù)據(jù)庫,數(shù)據(jù)幾乎無法篡改;吞吐量低,運作速度慢。

(2)私有鏈:私有的區(qū)塊鏈,讀寫權限由某個組織和機構控制,參與節(jié)點的資格會被嚴格限制。由于參與的節(jié)點是有限和可控的,因此私有鏈往往具有極快的交易速度、更好的隱私保護、更低的交易成本,不容易被惡意攻擊,并且能夠做到身份認證等特殊安全要求。主要特點:屬于中心化數(shù)據(jù)庫,能防止機構內(nèi)單節(jié)點篡改數(shù)據(jù);運作成本低(無須獎勵機制)、交易速度非常快。螞蟻金服的區(qū)塊鏈應用是典型的私有鏈應用。

(3)聯(lián)盟鏈:聯(lián)盟區(qū)塊鏈本質(zhì)上是私有鏈的一種,只是私有程度低(讀寫權限對通過授權并加入聯(lián)盟的所有節(jié)點開放,由聯(lián)盟內(nèi)成員節(jié)點共同維護),因此比純粹的私有鏈更具可信度,但其權限設計要求比私有鏈更復雜。主要特點:由若干個機構共同參與管理,具備一定的去中心化屬性,是公有鏈和私有鏈的結合版。1.3.3節(jié)介紹的Fabric超級賬本就是典型的聯(lián)盟鏈應用框架。

主站蜘蛛池模板: 万宁市| 上饶市| 新沂市| 沁源县| 沙雅县| 孙吴县| 嘉义县| 三原县| 高安市| 延边| 西昌市| 黔东| 台东县| 新河县| 同仁县| 乌什县| 敖汉旗| 枣庄市| 咸丰县| 阳山县| 怀柔区| 肥乡县| 台中县| 柯坪县| 湟源县| 渑池县| 河池市| 华宁县| 绿春县| 肇源县| 宁德市| 双桥区| 六盘水市| 锡林郭勒盟| 诸暨市| 玉龙| 永仁县| 许昌市| 桂东县| 青神县| 横峰县|