從0開始學區塊鏈:「危險」的智能合約?

專員在之前的《學區塊鏈》的系列文章中,已經比較詳細的介紹了一些共識算法,密碼學以及其他的區塊鏈的一些基本概念,相信大家已經對區塊鏈技術的基本有了大致的瞭解,雖然專員在某些概念上有所偏差,但是專員覺得在大致的方向上專員是不會錯的,大家要是有什麼其他的意見也可以盡情的提出來,專員也一定會積極採納。

在上一篇《學區塊鏈》的文章中,其實我提了一個概念叫做DApp的概念,但是在講這個的時候,一定會有一個繞不開的話題叫做“智能合約”,現在我們所知的DApp基本都是建立在智能合約的基礎之上的,排序一些類似於基於IPFS的分佈式開發應用。

大家也知道,前段時間很多的代幣都出現了問題,比如說BEC等等,其實這些代幣都是基於以太坊智能合約發放的ERC20的代幣,至於ERC20是什麼?

大家可以先行到網上可以搜索一下,專員不多介紹,其實就是一個以太坊自己制定的一個標準,你的代幣合約要有哪些變量哪些方法等等,算是一種十分特殊的智能合約。

而大家都知道,比特幣與以太坊的最大區別,除了一個是UTXO模型和賬戶模型的區別以外,另外一個重要的區別就是智能合約,這也是為什麼以太坊會被稱為區塊鏈2.0的原因之一吧,當然專員覺得比特幣本身是支持一些簡單腳本的執行,在某種程度上也算一種及其簡單並且受限的“智能合約”。

從0開始學區塊鏈:“危險”的智能合約?

言歸正傳,講了這麼多智能合約的重要性之後,專員跟大家來聊一下智能合約到底是什麼。專員在跟其他非區塊鏈工程師的聊天過程中,他們經常會問我一個問題?區塊鏈中的智能合約,與我們現在傳統的數據庫中的存儲過程有什麼區別?

其實從技術的角度來講,在某種程度上存儲過程跟只能合約的作用的確有點相同,都是一段代碼的執行邏輯,只要滿足一定觸發條件便會執行並且能夠改變某些數據存儲的狀態等等。

但是專員覺得,智能合約跟存儲過程還是有比較大的區別的,智能合約不僅僅是一個開源自動執行的計算機程序,我覺得只能合約更像是一個區塊鏈系統的參與者,他能夠對他接收到的事件以及信息作出及時的回應,根據接收的信息存儲相應的價值,同時他也可以通過事件訂閱向外推送相關的信息和價值。

從0開始學區塊鏈:“危險”的智能合約?

另外,我們都知道現在的以太坊也好,還是其他公鏈也好,一旦部署上的合約是不允許篡改以及升級等等操作的,這樣的話,專員覺得智能合約其實也像一個被大家所認可的電子合同,我們也可以稱他為一個可以被信任的人,他可以幫我保存部分的資源,並且總是按照事前既定好的規則進行的,並且這個規則也無法修改。

但是換個角度來看,專員覺得,這樣也容易出現一種情況,我們都知道作為一個程序員我們沒辦法百分百肯定的說我們寫的這段代碼沒有bug。

智能合約由於區塊鏈的公開透明以及不可修改的特性,我們可以從鏈上查詢某個合約的完整代碼,假如我們沒有實現對這個進行十分完善的測試就上鍊,其實一旦某些黑客進行代碼review找出問題進行攻擊,其實就容易造成無法挽救的後果,我們也知道BEC等合約也正是因為這種情況下出現的問題,最後的處理結果也只能通過映射重新寫一個合約進行部署。

因此專員其實覺得,智能合約確實是一個好東西,也改變了顛覆了整個區塊鏈世界,但是這個的確是一個雙刃劍,相對於比特幣那種十分簡單的轉賬功能以及嚴重受限的腳本來說,我覺得智能合約也是較為複雜的一個東西,但是往往都是越開放的東西越容易出現問題,專員覺得這麼多智能合約的開發者,需要對自己寫的智能合約進行十分完善的測試,避免出現類似BEC等情況的出現。

專員也相應,會有更多的智能合約的安全檢測工具出現,比如形式化驗證等等,技術一直在發展,我們也不用過分擔心,需要保持一個敬畏之心,幫助他更好的發展而已。

歡迎感興趣的朋友在下方評論區與專員互動


分享到:


相關文章: