0
雷鋒網(wǎng)按:本文譯自fintechranking,原文出自LTP,作者Milos Dunjic,fintech技術顧問,擁有25年支付、電子交易軟件系統(tǒng)開發(fā)經(jīng)驗,曾就職于加密算法RSA實驗室等。
智能合約是安裝在區(qū)塊鏈網(wǎng)絡節(jié)點中離散的計算機程序組件,從本質(zhì)上講,這些自動合約的工作原理類似于其它計算機程序的if-then語句。當智能合約準備好被部署的時候,代碼的哈希值會被計算出來并打上數(shù)字簽名。單向哈希值,數(shù)字簽名和代碼本身會被同時復制到由參加區(qū)塊鏈的節(jié)點所組成的網(wǎng)絡之中。作為部署流程的一部分,每一個節(jié)點第一件要做的事情是要驗證哈希值。如果驗證通過,節(jié)點會在本地部署代碼。接下來,這個節(jié)點會等待智能合約的調(diào)用。
因為智能合約代碼的完整性是被它的單向哈希值和作者的數(shù)字簽名所保護起來的,沒有人能在部署之后改變它。從某種方面來講,它非常像配置在智能芯片卡中的密碼的防篡改保護特性。事實上,在安裝之后,智能合約的代碼與全部交易記錄和內(nèi)部數(shù)據(jù)一起,成為了不可篡改的區(qū)塊鏈的一部分。
當條件被觸發(fā)時,在每一個代碼有被安裝、并且有挖礦和驗證功能的節(jié)點上,智能合約代碼都會被執(zhí)行。這些節(jié)點會嘗試就他們各自的智能合約代碼執(zhí)行的結(jié)果達成共識。作為尋找共識過程的一部分,區(qū)塊鏈網(wǎng)絡協(xié)議會保證將最新更新過的智能合約內(nèi)部數(shù)據(jù)可靠地復制到每一個節(jié)點。內(nèi)部數(shù)據(jù)結(jié)構(gòu)是不可改變的,這意味除了智能合約代碼自己之外,沒有東西可以改變它的內(nèi)容。
在區(qū)塊鏈節(jié)點全都平行地、完全獨立地執(zhí)行同一段代碼的狀態(tài)下,要保證執(zhí)行的穩(wěn)健和可靠,就要求智能合約的代碼本身必須有非常高的確定性。這要求智能合約的代碼在每一個執(zhí)行的節(jié)點上,必須產(chǎn)出完全相同的結(jié)果。這樣的要求就極大的限制了智能合約什么可以做、什么不可以做。
關于智能合約的最大問題在于,人們并不完全理解它們是如何運作的;對于智能合約基礎特性的錯誤理解,也引致了一些無法被實現(xiàn)的想法。
雖然聽起來十分簡單,同時又被許多人相信是可行的,但是智能合約不應該調(diào)用外部的web服務或者數(shù)據(jù)庫。這樣的設計極大地提高了同一段智能合約代碼在被重復獨立地執(zhí)行時產(chǎn)生不同結(jié)果的概率。因為這樣會導致區(qū)塊鏈節(jié)點無法得出可靠地共識,這樣的設計會導致系統(tǒng)的混亂。
另外一個智能合約設計的反面例子是試圖從智能合約調(diào)用另一個簡單的API,比如說銀行資金轉(zhuǎn)賬。因為每一個區(qū)塊鏈中的節(jié)點都會獨立地執(zhí)行相同的智能合約代碼,讓每一個節(jié)點上的每一次代碼執(zhí)行都調(diào)用“資金轉(zhuǎn)賬”的API真的是一個好的想法嗎?這明顯感覺像是一個自己造成的對可憐API的一次DDOS攻擊。這樣的設計要求API本身的設計足夠復雜,能夠偵測并正確地處理數(shù)以百計的重復調(diào)用。同時這也一定會造成計算機資源的無謂浪費。
接下來,因為智能合約需要可靠地知道API調(diào)用的狀態(tài)并以此為依據(jù)來做出內(nèi)部決定,我們能夠保證每一次智能合約對API的調(diào)用都會收到API一模一樣的反饋嗎?總之這一切看起來十分混亂。
許多人滿腔熱情地相信智能合約會是對區(qū)塊鏈天生的數(shù)據(jù)隱私問題的優(yōu)雅解答。既然智能合約可以很容易地封裝它的內(nèi)部數(shù)據(jù)庫并控制對它的訪問(基本上它表現(xiàn)得像是分布式對象),這不就能夠保證將數(shù)據(jù)保護起來了嗎?不幸的是,相同的智能合約數(shù)據(jù)總是被復制和儲存在每一個區(qū)塊鏈參與者有安裝智能合約代碼的電腦中。因此,沒有東西可以阻止一些參與者機器上的聰明的本地代碼得到訪問一切存儲在本地系統(tǒng)上信息的權限。
雖然存在著一些(不是很優(yōu)雅的)針對以上提到的智能合約設計局限的變通措施,智能合約仍應該只被用來管理它內(nèi)部數(shù)據(jù)狀態(tài)的更新。換一種說法就是,智能合約提供了比普通比特幣區(qū)塊鏈技術在去中心化數(shù)字資產(chǎn)轉(zhuǎn)移的技術實現(xiàn)上多那么一點點的靈活性,但是除此之外,智能合約并沒有更多其他的優(yōu)點了。
總結(jié)起來,目前的智能合約很難在內(nèi)部數(shù)據(jù)狀態(tài)管理作用之外有別的應用。更加復雜的應用就會要求智能合約與外部環(huán)境和服務產(chǎn)生互動,這會導致不可想象的測試復雜性,這樣的復雜性天生就存在于分布式及去中心化的系統(tǒng)結(jié)構(gòu)中。它很容易就變成一個噩夢般的測試和支援情景。問問the DAO程序員吧。雷鋒網(wǎng)雷鋒網(wǎng)
【招聘】雷鋒網(wǎng)堅持在人工智能、無人駕駛、VR/AR、Fintech、未來醫(yī)療等領域第一時間提供海外科技動態(tài)與資訊。我們需要若干關注國際新聞、具有一定的科技新聞選題能力,翻譯及寫作能力優(yōu)良的外翻編輯加入。
簡歷投遞至 wudexin@leiphone.com,工作地 北京。
雷峰網(wǎng)版權文章,未經(jīng)授權禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。