區塊鏈基礎技術大剖析之智慧合約

買賣虛擬貨幣

一提到智慧合約,大家有可能首先想到的是以太坊,以太坊創新性的在區塊鏈技術上加上智慧合約,豐富了鏈上功能。然而,智慧合約的概念卻由來已久,並不是以太坊的“專利”。

早在1995年,跨領域學者 Nick Szabo 就提出了智慧合約的概念,他對智慧合約的定義為:“一個智慧合約是一套以數字形式定義的承諾,包括合約參與方可以在上面執行這些承諾的協議。”簡單來說,智慧合約是一種在滿足一定條件時,就自動執行的計算機程式。

例如自動售貨機,就可以視為一個智慧合約系統。客戶需要選擇商品,並完成支付,這兩個條件都滿足後售貨機就會自動吐出貨物。合約在生活中處處可見:租賃合同、借條等。傳統合約依靠法律進行背書,當產生違約及糾紛時,往往需要藉助法院等政府機構的力量進行裁決。智慧合約,不僅僅是將傳統的合約電子化,它的真正意義在革命性地將傳統合約的背書執行由法律替換成了程式碼。俗話說,“規則是死的,人是活的”,程式作為一種執行在計算機上的規則,同樣是“死的”。但是“死的”也不總是貶義詞,因為它意味著會嚴格執行。

儘管智慧合約這個如此前衛的理念早在1995年就被提出,但是一直沒有引起廣泛的關注。雖然這個理念很美好,但是缺少一個良好的執行智慧合約的平臺,確保智慧合約一定會被執行,執行的邏輯沒有被中途修改。

區塊鏈這種去中心化、防篡改的平臺,完美地解決了這些問題。智慧合約一旦在區塊鏈上部署,所有參與節點都會嚴格按照既定邏輯執行。基於區塊鏈上大部分節點都是誠實的基本原則,如果某個節點修改了智慧合約邏輯,那麼執行結果就無法透過其他節點的校驗而不會被承認,即修改無效。這樣智慧合約就可以按照既定指令運營下去。區塊鏈成為了智慧合約可執行的”最佳拍檔“。

那麼智慧合約的原理是怎樣的呢?一個基於區塊鏈的智慧合約需要包括事務處理機制、資料儲存機制以及完備的狀態機,用於接收和處理各種條件。並且事務的觸發、處理及資料儲存都必須在鏈上進行。當滿足觸發條件後,智慧合約即會根據預設邏輯,讀取相應資料並進行計算,最後將計算結果永久儲存在鏈式結構中。

因為合約是嚴肅的事情,傳統的合約往往需要專業的律師團隊來撰寫。古語有云:“術業有專攻。”當前智慧合約的開發工作主要由軟體從業者來完成,其所編寫的智慧合約在完備性上可能有所欠缺,因此相比傳統合約,更容易產生邏輯上的漏洞。

另外,由於現有的部分支援智慧合約的區塊鏈平臺提供了利用如Go語言、Java語言等高階語言編寫智慧合約的功能,而這類高階語言不乏一些具有“不確定性”的指令,可能會造成執行智慧合約節點的某些內部狀態發生分歧,從而影響整體系統的一致性。

2016年著名的The DAO事件,就是因為智慧合約漏洞導致大約幾千萬美元的直接損失。The DAO 是當時以太坊平臺最大的眾籌專案,上線不到一個月就籌集了超過1000萬個以太幣,當時價值一億多美元。但是該智慧合約的轉賬函式存在漏洞,攻擊者利用該漏洞,盜取了360萬個以太幣。由於此事件影響過大,以太坊最後選擇進行回滾硬分叉挽回損失。

區塊鏈科普之The DAO 事件

2016年6月17日,心情焦躁的以太坊創始人V神在Reddit上發了一篇帖子“DAO遭到攻擊,請交易平臺暫停ETH/DAO的交易,充值以及提現,等待進一步的通知。新訊息會盡快更新。”著名的The DAO事件拉開序幕。

DAO (Decentralized Autonomous Organization)是分散式自治組織。The DAO是一個基於以太坊區塊鏈平臺的迄今為止世界上最大的眾籌專案。其目的是讓持有The DAO的參與者透過投票的方式共同決定被投資專案, 整個社羣完全自制,並且透過程式碼編寫的智慧合約來實現。於2016年5月28日完成眾籌,共募集1150萬ETH,在當時的價值達到1.49億美元。

不久,The DAO就受到駭客攻擊,原因是The DAO編寫的智慧合約中有一個 splitDAO 函式,攻擊者利用此函式的漏洞,不斷從The DAO項⽬的資產池中分離出The DAO資產並轉到駭客自己建立的子DAO。3個小時300多萬枚ETH,六千萬美元資產被駭客轉移,血流成河。以太坊智慧合約受到了最嚴重的質疑,究竟該如何防止此類事件再次發生?

讓我們看看安全預防策略。

充分測試

測試用例設計:對業務進行全方位分析,透過等價類劃分法、邊界值分析法、正交實驗法等方法設計出儘可能全面的測試用例,編寫成測試程式碼,做自動化迴歸測試。

多人交叉測試:一個人的思維是侷限的,我們需要透過多人的跳躍性思維,將盡可能多的情況覆蓋在內。

迴歸測試:每一次修改都必須做整套迴歸測試。

工具監控

以太坊的所有交易都是公開透明可查的。我們可以透過工具將某一個智慧合約交易資料實時爬取出來,並對可能的異常交易做簡訊和郵件告警。這樣我們能第一時間發現問題,並採取措施。

第三方審計

可以找一些專業的智慧合約開發工程師做審計。審計可以從另一個角度去發現智慧合約可能存在的潛在問題.可能做審計的人的專業能力沒有開發者的專業能力強大。

這一期區塊鏈與密碼學全民課堂就到這裡啦,下一期我們將繼續區塊鏈基礎技術的學習,詳解P2P網路。敬請期待~

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;