• <option id="cacee"><noscript id="cacee"></noscript></option>
  • <table id="cacee"><noscript id="cacee"></noscript></table>
  • <td id="cacee"></td>
  • <option id="cacee"></option>
  • <table id="cacee"></table>
  • <option id="cacee"><option id="cacee"></option></option>
  • <table id="cacee"><source id="cacee"></source></table><td id="cacee"><rt id="cacee"></rt></td>
    <option id="cacee"><option id="cacee"></option></option>
     找回密碼
     立即注冊

    掃一掃,登錄網站

    首頁 區塊鏈生態 查看內容
    • 9168
    • 0
    • 分享到

    區塊鏈程序開發者看智能合約和形式驗證

    2018-5-18 11:44

    來源: 架構文摘 作者: 當然我在扯淡

    智能合約是一個誤區


    實際上,我認為智能合約這整個概念就不靠譜,是一個比較大的誤區。比特幣以太坊的系統里面,根本就不應該,而且沒必要存在腳本語言。

    比特幣的解鎖腳本執行方式,一開頭就有個低級錯誤,導致 injection 安全漏洞。用戶可以寫出惡意代碼,導致腳本的運行系統出錯。比特幣最初的解鎖方式,是把兩段代碼(解鎖腳本+加鎖腳本)以文本方式拼接在一起,然后執行。以文本方式處理程序,是程序語言實現方法的大忌。稍微有點經驗的黑客都知道,這里很可能有可攻擊的點。

    以太坊的 Solidity 語言一開頭就有低級錯誤,導致價值五千萬美元的以太幣被盜。以太坊的智能合約系統消耗大量的計算資源,還導致了嚴重的性能問題。

    雖然比特幣和以太坊的作者大概在密碼學和分布式系統領域都是高手,然而我不得不坦言,他們都是 PL 外行 :p 然而如果是內行來做這些語言,難道就會更好嗎?我并不這么認為。

    首先的問題,是 PL 這個領域充滿了各種宗教,和許多的傳教士。一般的 PL 內行都會把問題復雜化,他們會試圖設計一個自己的“信仰”中完美的語言,而不顧其他人的死活。如果你運氣不好,就會遇到那種滿嘴“純函數”,monad,dependent type,linear logic 的極客…… 然后設計出來的語言就沒人會用了 :p

    有責任感的 PL 科學家,都是首先試圖避免制造新的語言。能不用新語言解決問題,就不要設計新的語言,而且盡量不在系統里采用嵌入式語言。所以,如果換做是我設計了比特幣,我根本不會為它設計一種語言。

    讓用戶可以編程是很危險的!極少有用戶能夠寫出正確而可靠的代碼,而且語言系統的開發過程中極少可以不出現 bug。語言系統的設計錯誤,會給黑客可乘之機,寫出惡意腳本來進行破壞。從來沒有任何語言和他們的編譯器,運行時系統是一開頭就正確的,都需要很多年才能穩定下來。另外你還要考慮性能問題,對于去中心的分布式系統,這種問題就更加棘手。這對于普通的語言問題不大,你不要用它來控制飛機就可以。然而數字貨幣系統的語言,幾乎不允許出現這方面的問題。

    所以與其提心吊膽的設計這些智能合約語言,還不如干脆不要這種功能。

    我們真的需要那些腳本的功能嗎?比特幣雖然有腳本語言,可是常用的腳本其實只有不超過 5 個,直接 hard code 進去就可以了。以太坊的白皮書雖然做了那么多的應用展望,EVM 上出現過什么有價值的應用嗎?我并不覺得我們需要這些智能合約。數字貨幣只要做好一件事,能被安全高效的當成錢用,就已經不錯了。

    美元,人民幣,黃金…… 它們有合約的功能嗎?沒有。為什么數字貨幣一定要捆綁這種功能呢?我覺得這違反了模塊化設計的原則:一個事物只做一點事,把它做到最好。數字貨幣就應該像貨幣一樣,能夠實現轉賬交換的簡單功能就可以了。合約應該是另外獨立的系統,不應該跟貨幣捆綁在一起。

    那合約怎么辦呢?交給律師和會計去辦,或者使用另外獨立的系統。你有沒有想過,為什么世界上的法律系統不是程序控制自動執行的呢?為什么我們需要律師和法官,而不只是機器人?為什么有些國家的法庭還需要有陪審團,而不光是按照法律條款判案?這不只是歷史遺留問題。你需要理解法律的本質屬性才會明白,完全不通過人來進行的機械化執法,是不可行的。智能合約就是要把人完全從這個系統里剔除出去,那是會出問題的。

    奢望過多的功能其實是一種過度工程(over-engineering)。花費精力去折騰智能合約系統,可能會大大的延緩數字貨幣真正被世界接受。實話說嘛,試用了多種數字貨幣,了解了它們所用的技術之后,我發現這些技術相當的有趣,然而這些數字貨幣其實仍然處于試驗階段,離真正作為貨幣使用還有一定的距離。集中精力改進它們作為貨幣的功能,將會加速它們別人接受。而耗費精力去研究智能合約,我覺得是誤入歧途。

    在這一點上,我覺得比特幣比它的后繼者們(比如以太坊)都要做的地道一些。比特幣雖然也有腳本語言,然而它并不過分強調這種腳本的作用。比特幣的腳本語言非常簡單,而且不是圖靈完備的。這迫使用戶只能寫出功能簡單,不傷害系統性能,容易驗證的腳本。相比之下,以太坊花了太多精力去折騰智能合約,弄得過度復雜,帶來各種問題,影響了大家接受最重要的貨幣功能。

    說到這里,很多人可能以為我對數字貨幣不屑一顧,然而實際上正好相反 :) 我打心眼里是對區塊鏈技術感興趣的,我只是覺得其中的智能合約是多余的麻煩。雖然被某些人吹捧得有些過頭了,用它來忽悠的人也很多,然而比特幣的技術確實是有相當大價值的。比特幣巧妙地解決了分布式計算領域里面幾個重要而有趣的難題(比如拜占庭將軍問題)。它們的解決方案給了我挺多的啟發,我感覺這些想法可以有很多應用場景。所以我感謝 Satoshi 發明了這個東西 :)
    版權申明:本內容來自于互聯網,屬第三方匯集推薦平臺。本文的版權歸原作者所有,文章言論不代表鏈門戶的觀點,鏈門戶不承擔任何法律責任。如有侵權請聯系QQ:3341927519進行反饋。
    1234
    相關新聞
    發表評論

    請先 注冊/登錄 后參與評論

      回頂部
    • <option id="cacee"><noscript id="cacee"></noscript></option>
    • <table id="cacee"><noscript id="cacee"></noscript></table>
    • <td id="cacee"></td>
    • <option id="cacee"></option>
    • <table id="cacee"></table>
    • <option id="cacee"><option id="cacee"></option></option>
    • <table id="cacee"><source id="cacee"></source></table><td id="cacee"><rt id="cacee"></rt></td>
      <option id="cacee"><option id="cacee"></option></option>
      妖精视频