外匯天眼 APP 訊 : 智能合約
創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供城中網(wǎng)站建設(shè)、城中做網(wǎng)站、城中網(wǎng)站設(shè)計(jì)、城中網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、城中企業(yè)網(wǎng)站模板建站服務(wù),10多年城中做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。一提到智能合約,大家有可能首先想到的是以太坊,以太坊創(chuàng)新性的在區(qū)塊鏈技術(shù)上加上智能合約,豐富了鏈上功能。然而,智能合約的概念卻由來已久,并不是以太坊的 專利 。
早在 1995 年,跨領(lǐng)域?qū)W者 Nick Szabo 就提出了智能合約的概念,他對(duì)智能合約的定義為: 一個(gè)智能合約是一套以數(shù)字形式定義的承諾,包括合約參與方可以在上面執(zhí)行這些承諾的協(xié)議。 簡(jiǎn)單來說,智能合約是一種在滿足一定條件時(shí),就自動(dòng)執(zhí)行的計(jì)算機(jī)程序。
例如自動(dòng)售貨機(jī),就可以視為一個(gè)智能合約系統(tǒng)??蛻粜枰x擇商品,并完成支付,這兩個(gè)條件都滿足后售貨機(jī)就會(huì)自動(dòng)吐出貨物。合約在生活中處處可見:租賃合同、借條等。傳統(tǒng)合約依靠法律進(jìn)行背書,當(dāng)產(chǎn)生違約及糾紛時(shí),往往需要借助法院等政府機(jī)構(gòu)的力量進(jìn)行裁決。智能合約,不僅僅是將傳統(tǒng)的合約電子化,它的真正意義在革命性地將傳統(tǒng)合約的背書執(zhí)行由法律替換成了代碼。俗話說, 規(guī)則是死的,人是活的 ,程序作為一種運(yùn)行在計(jì)算機(jī)上的規(guī)則,同樣是 死的 。但是 死的 也不總是貶義詞,因?yàn)樗馕吨鴷?huì)嚴(yán)格執(zhí)行。
盡管智能合約這個(gè)如此前衛(wèi)的理念早在 1995 年就被提出,但是一直沒有引起廣泛的關(guān)注。雖然這個(gè)理念很美好,但是缺少一個(gè)良好的運(yùn)行智能合約的平臺(tái),確保智能合約一定會(huì)被執(zhí)行,執(zhí)行的邏輯沒有被中途修改。
區(qū)塊鏈這種去中心化、防篡改的平臺(tái),完美地解決了這些問題。智能合約一旦在區(qū)塊鏈上部署,所有參與節(jié)點(diǎn)都會(huì)嚴(yán)格按照既定邏輯執(zhí)行?;趨^(qū)塊鏈上大部分節(jié)點(diǎn)都是誠(chéng)實(shí)的基本原則,如果某個(gè)節(jié)點(diǎn)修改了智能合約邏輯,那么執(zhí)行結(jié)果就無法通過其他節(jié)點(diǎn)的校驗(yàn)而不會(huì)被承認(rèn),即修改無效。這樣智能合約就可以按照既定指令運(yùn)營(yíng)下去。區(qū)塊鏈成為了智能合約可執(zhí)行的 拍檔 。
那么智能合約的原理是怎樣的呢?一個(gè)基于區(qū)塊鏈的智能合約需要包括事務(wù)處理機(jī)制、數(shù)據(jù)存儲(chǔ)機(jī)制以及完備的狀態(tài)機(jī),用于接收和處理各種條件。并且事務(wù)的觸發(fā)、處理及數(shù)據(jù)保存都必須在鏈上進(jìn)行。當(dāng)滿足觸發(fā)條件后,智能合約即會(huì)根據(jù)預(yù)設(shè)邏輯,讀取相應(yīng)數(shù)據(jù)并進(jìn)行計(jì)算,最后將計(jì)算結(jié)果永久保存在鏈?zhǔn)浇Y(jié)構(gòu)中。
因?yàn)楹霞s是嚴(yán)肅的事情,傳統(tǒng)的合約往往需要專業(yè)的律師團(tuán)隊(duì)來撰寫。古語(yǔ)有云: 術(shù)業(yè)有專攻。 當(dāng)前智能合約的開發(fā)工作主要由軟件從業(yè)者來完成,其所編寫的智能合約在完備性上可能有所欠缺,因此相比傳統(tǒng)合約,更容易產(chǎn)生邏輯上的漏洞。
另外,由于現(xiàn)有的部分支持智能合約的區(qū)塊鏈平臺(tái)提供了利用如 Go 語(yǔ)言、Java 語(yǔ)言等高級(jí)語(yǔ)言編寫智能合約的功能,而這類高級(jí)語(yǔ)言不乏一些具有 不確定性 的指令,可能會(huì)造成執(zhí)行智能合約節(jié)點(diǎn)的某些內(nèi)部狀態(tài)發(fā)生分歧,從而影響整體系統(tǒng)的一致性。
2016 年著名的 The DAO 事件,就是因?yàn)橹悄芎霞s漏洞導(dǎo)致大約幾千萬美元的直接損失。The DAO 是當(dāng)時(shí)以太坊平臺(tái)的眾籌項(xiàng)目,上線不到一個(gè)月就籌集了超過 1000 萬個(gè)以太幣,當(dāng)時(shí)價(jià)值一億多美元。但是該智能合約的轉(zhuǎn)賬函數(shù)存在漏洞,攻擊者利用該漏洞,盜取了 360 萬個(gè)以太幣。由于此事件影響過大,以太坊最后選擇進(jìn)行回滾硬分叉挽回?fù)p失。
區(qū)塊鏈科普之 The DAO 事件
2016 年 6 月 17 日,心情焦躁的以太坊創(chuàng)始人 V 神在 Reddit 上發(fā)了一篇帖子 DAO 遭到攻擊,請(qǐng)交易平臺(tái)暫停 ETH/DAO 的交易,充值以及提現(xiàn),等待進(jìn)一步的通知。新消息會(huì)盡快更新。 著名的 The DAO 事件拉開序幕。
DAO (Decentralized Autonomous Organization)是分布式自治組織。The DAO 是一個(gè)基于以太坊區(qū)塊鏈平臺(tái)的迄今為止世界上的眾籌項(xiàng)目。其目的是讓持有 The DAO 的參與者通過投票的方式共同決定被投資項(xiàng)目, 整個(gè)社區(qū)完全自制,并且通過代碼編寫的智能合約來實(shí)現(xiàn)。于 2016 年 5 月 28 日完成眾籌,共募集 1150 萬 ETH,在當(dāng)時(shí)的價(jià)值達(dá)到 1.49 億美元。
不久,The DAO 就受到黑客攻擊,原因是 The DAO 編寫的智能合約中有一個(gè) splitDAO 函數(shù),攻擊者利用此函數(shù)的漏洞,不斷從 The DAO 項(xiàng) ? 的資產(chǎn)池中分離出 The DAO 資產(chǎn)并轉(zhuǎn)到黑客自己建立的子 DAO。3 個(gè)小時(shí) 300 多萬枚 ETH,六千萬美元資產(chǎn)被黑客轉(zhuǎn)移,血流成河。以太坊智能合約受到了最嚴(yán)重的質(zhì)疑,究竟該如何防止此類事件再次發(fā)生?
讓我們看看安全預(yù)防策略。
充分測(cè)試
測(cè)試用例設(shè)計(jì):對(duì)業(yè)務(wù)進(jìn)行全方位分析,通過等價(jià)類劃分法、邊界值分析法、正交實(shí)驗(yàn)法等方法設(shè)計(jì)出盡可能全面的測(cè)試用例,編寫成測(cè)試代碼,做自動(dòng)化回歸測(cè)試。
多人交叉測(cè)試:一個(gè)人的思維是局限的,我們需要通過多人的跳躍性思維,將盡可能多的情況覆蓋在內(nèi)。
回歸測(cè)試:每一次修改都必須做整套回歸測(cè)試。
工具監(jiān)控
以太坊的所有交易都是公開透明可查的。我們可以通過工具將某一個(gè)智能合約交易數(shù)據(jù)實(shí)時(shí)爬取出來,并對(duì)可能的異常交易做短信和郵件告警。這樣我們能第一時(shí)間發(fā)現(xiàn)問題,并采取措施。
第三方審計(jì)
可以找一些專業(yè)的智能合約開發(fā)工程師做審計(jì)。審計(jì)可以從另一個(gè)角度去發(fā)現(xiàn)智能合約可能存在的潛在問題 . 可能做審計(jì)的人的專業(yè)能力沒有開發(fā)者的專業(yè)能力強(qiáng)大。