目錄
一、智能合約的反思
????????1.Is smart?contract really smart?
????????2. Irrevocability is a double edged sword.
????????3. Nothing is irrevocable.
二、語言設(shè)計上的反思
????????1.Is solidity the right programming language?
????????2.編寫智能合約的語言應(yīng)該有什么樣的表達力?
三、去中心化
????????1.What does decentralized mean?
????????2.分叉
????????3.Decentralized ≠ Distributed
????????回顧以太坊的The DAO盜幣事件,引起的反思。
一、智能合約的反思
1.Is smart?contract really smart?
? ? ? ? 智能合約真的智能嗎?首先智能合約沒有用到任何人工智能的技術(shù),所以有人認(rèn)為應(yīng)該將其稱為自動合約:按照寫好的代碼,自動執(zhí)行某些操作,ATM取款機可以看作是物理世界中的自動合約。Smart contract is anything but smart.智能合約實際上就是一段寫死的自動執(zhí)行的合約代碼,并不智能,而且寫好之后就不能修改。
2. Irrevocability is a double edged sword.
? ? ? ? 一般我們認(rèn)為不可篡改性是區(qū)塊鏈的一個優(yōu)點,有很多區(qū)塊鏈的應(yīng)用都利用了不可篡改性,如用它進行防偽、溯源等操作,但是通過The DAO的盜幣事件其實已經(jīng)能夠意識到:不可篡改性實際上是一把雙刃劍。
(1)優(yōu)點:不可篡改性增加了合約的公信力,所有人都只能按照合約中的規(guī)則來,沒有人能夠篡改這個規(guī)則。
(2)缺點:不可篡改性意味著如果規(guī)則有漏洞,想要修補漏洞或者軟件升級都是很困難的。
? ? ? ? 有傳聞?wù)f在發(fā)生盜幣事件之前,The DAO的開發(fā)團隊就已經(jīng)收到消息說智能合約存在漏洞,但是沒有來的及發(fā)布更新后的軟件。硬分叉是非常麻煩的,和傳統(tǒng)的中心化系統(tǒng)相比,沒有辦法及時發(fā)布補丁patch修復(fù),必須征得絕大多數(shù)礦工的同意才行。硬分叉的時候又需要說明理由,一旦說明理由又會泄露系統(tǒng)的安全漏洞,有惡意的攻擊者會在還沒來得及升級前搶先發(fā)動攻擊。
(3)缺點:已經(jīng)發(fā)現(xiàn)了系統(tǒng)漏洞,有人進行惡意攻擊了,想要凍結(jié)賬戶終止交易也是很困難的。
????????個人的私鑰泄露,想要凍結(jié)賬戶需要軟分叉(發(fā)行一個軟件的更新并設(shè)置凡是跟這個賬戶相關(guān)的交易都是不合法的),但是對于個人賬戶沒有辦法進行軟分叉,只能盡快把賬戶剩下的錢轉(zhuǎn)到安全的賬戶。
????????智能合約一旦發(fā)布到區(qū)塊鏈上,沒有辦法阻止對它的調(diào)用。比如The DAO的盜幣事件,1/3的錢被黑客盜走了,剩下的2/3的錢也非常危險,但是區(qū)塊鏈上沒有辦法阻止別人調(diào)用智能合約,要阻止的話就要軟分叉,唯一的辦法是用黑客的方法把錢轉(zhuǎn)到另一個安全的合約,再用安全的智能合約將來把錢退還給大家。
3. Nothing is irrevocable.
? ? ? ? 沒有什么是真的不可篡改的。分叉攻擊中,如果有人從本來已經(jīng)寫入?yún)^(qū)塊鏈的內(nèi)容的前面開始分叉,可能會導(dǎo)致后面的交易被回滾。The DAO的盜幣事件中,開發(fā)團隊強行修改數(shù)據(jù)使得交易恢復(fù)被攻擊之前的賬戶狀態(tài),所以沒有什么是絕對不可篡改的。篡改是很難,但是遇到特殊情況也是可以篡改的。
二、語言設(shè)計上的反思
1.Is solidity the right programming language?
????????Solidity語言設(shè)計上有什么問題?為什么會有重入攻擊?Solidity的語言特性是反自然的,一般的理解,我給你轉(zhuǎn)賬,你是一個被動的接受者,你不可能反過來調(diào)用我,但是Solidity的語言特性是說我給你轉(zhuǎn)賬的操作等于隱性地調(diào)用了你的fallback函數(shù),結(jié)果你就可以再來調(diào)用我。這個和生活常識不同所以安全漏洞容易被忽略。
????????有人提出應(yīng)該用函數(shù)式的編程語言,函數(shù)式語言(如:Ocaml,圖靈完備的編程語言)比較安全不容易出現(xiàn)這種漏洞,而且從長遠(yuǎn)看要實現(xiàn)的是對智能合約功能的理論上要證明他的正確性。formal verification:理想化能夠證明這一段智能合約語言的編寫只能實現(xiàn)我們想讓他實現(xiàn)的功能,現(xiàn)實中是不存在的。
2.編寫智能合約的語言應(yīng)該有什么樣的表達力?
????????Solidity 語言是圖靈完備的(凡是計算機能完成的任務(wù),圖靈完備的語言都能實現(xiàn)),但是會有漏洞;比特幣腳本語言比較簡單,目前沒有發(fā)現(xiàn)任何漏洞。能不能找到一個比比特幣的腳本語言復(fù)雜又比Solidity簡單的語言?符合這樣要求的編程語言很難找到。
????????未來發(fā)展:可以向常用的智能合約提供一些模板,也有可能有專門編寫智能合約的機構(gòu)(就像律師事務(wù)所一樣)。
代碼開源的雙刃劍
????????去中心化的系統(tǒng)像如區(qū)塊鏈一般都是開源的,也就是透明的,因為必須要讓所有的節(jié)點都執(zhí)行同樣的內(nèi)容才能達成共識。開源的一個好處就是增加合約的公信力,接受群眾的監(jiān)督。
????????有些人認(rèn)為開源的另外一個好處是安全,因為全世界的人都在看著這些代碼,但是已經(jīng)看到智能合約代碼出現(xiàn)漏洞,全世界這么多雙眼睛看著開源代碼,怎么會出現(xiàn)錯誤呢?這種現(xiàn)象叫做many eyeball fallacy,錯誤認(rèn)知,相當(dāng)于misbelief。理論上,代碼開源,任何人想看都可以去看,好像更安全,但實際上是真正有時間看代碼的人少之又少,看的人不是很多,也不一定能看得懂。所以并不能認(rèn)為開源軟件比不開源軟件安全,也不能認(rèn)為開源軟件就沒有安全漏洞,歷史上有很多開源軟件的安全漏洞是很多年之后才被發(fā)現(xiàn)的。
三、去中心化
1.What does decentralized mean?
????????區(qū)塊鏈的追隨者一般都是去中心化理念的追隨者。以太坊的硬分叉是以太坊的開發(fā)團隊說了算的嗎?不是,以太坊的團隊升級軟件之后,也是90%絕大多數(shù)的礦工用行動支持了硬分叉,而剩下的一小部分雖然沒有支持,但是也依然在舊鏈上繼續(xù)挖礦,以太坊團隊也沒有辦法強制所有人都升級軟件。去中心化并不是全自動化,不是說不能修改已經(jīng)制定的規(guī)則,而是修改規(guī)則要用去中心化的方式進行。硬分叉的成功是因為90%的礦工認(rèn)為以太坊團隊的措施是符合公眾利益的。
2.分叉
????????分叉正好是去中心化系統(tǒng)的體現(xiàn),因為只有去中心化系統(tǒng),用戶才可以選擇分叉,中心化系統(tǒng)只能選擇繼續(xù)或者放棄。存在分叉的現(xiàn)象恰恰是民主的體現(xiàn),比如系統(tǒng)私自增多以太幣供給量,使得以太幣貶值,礦工就可以選擇分叉繼續(xù)維護原來的以太幣。
3.Decentralized ≠ Distributed
????????一個去中心化的系統(tǒng)一定是分布式的,如果這個系統(tǒng)只運行在一臺計算機上,顯然不能叫去中心化;但是分布式系統(tǒng)不一定是去中心化的,即使這個系統(tǒng)運行在成千上萬的計算機上,如果計算機都是由同一個組織管轄的,也不是去中心化的,比如谷歌的search engine;在一個分布式的平臺上可以運行一個中心化的應(yīng)用,也可以運行一個去中心化的應(yīng)用。
????????比特幣和以太坊都是交易驅(qū)動的狀態(tài)機,State Machine,特點是讓系統(tǒng)中幾千臺機器重復(fù)做同一組操作,付出很大的代價來維護狀態(tài)的一致性,這個并不是分布式系統(tǒng)常用的工作模式,大多數(shù)的分布式系統(tǒng)是讓每臺機器做不同的事情,然后再把各臺機器的工作結(jié)果匯總起來,目的是比單機速度快。
????????狀態(tài)機的目的是為了比一臺計算機的處理速度快,而是為了容錯。狀態(tài)機最早的應(yīng)用場景:mission critical application。應(yīng)用程序必須無間斷的對外提供服務(wù),哪怕宕機一分鐘都會造成很大的損失,所以他才有好幾組計算機重復(fù)同一組操作,這樣即使有一臺計算機故障,剩下的計算機也可以對外提供服務(wù),如: airtraffic control; stock exchange; space shuttle。這樣付出的代價是效率很低,幾臺機器合在一起比一臺機器慢,因為需要同步狀態(tài),而且集群里的數(shù)目越多速度越慢,所以傳統(tǒng)利用狀態(tài)機的應(yīng)用,機器的數(shù)目都是比較少的,可能就是個位數(shù)字。像比特幣和以太坊這樣上千個機器重復(fù)同一組操作,以前是沒有出現(xiàn)過的。文章來源:http://www.zghlxwxcb.cn/news/detail-809542.html
????????智能合約是編寫控制邏輯的,只有那些互不信任的實體之間建立共識的操作才需要寫在智能合約里。大規(guī)模存儲和計算不適用,又慢又貴,因為要耗汽油費,云服務(wù)更好。如果需要大規(guī)模計算服務(wù),可以使用亞馬遜的云服務(wù)平臺。文章來源地址http://www.zghlxwxcb.cn/news/detail-809542.html
到了這里,關(guān)于北大肖臻老師《區(qū)塊鏈技術(shù)與應(yīng)用》系列課程學(xué)習(xí)筆記[27]以太坊-反思的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!