1. 程式人生 > >區塊鏈開發技術路線選擇的思考(之一)

區塊鏈開發技術路線選擇的思考(之一)

現在整個技術社群的注意力主要還是在 Web 和移動開發上面,相關人才供銷兩旺。不過個別有心人已經開始轉向大資料分析、深度學習、VR/AR 這些前景看好的技術。最近幾個月區塊鏈非常火,所以也有極少數開發者在關注區塊鏈的開發技術。

應該比較客觀的看待現在區塊鏈的這一把火。目前無論在中國還是在國外,討論區塊鏈最積極最熱鬧的主要是政府官員、金融政策研究者、技術未來學家和學院派學者,跟他們相比,真正在寫程式碼的人發出的聲音很小。官員們重視,說明這個技術的潛在影響力巨大,學者重視,說明還有很多技術問題有待解決,而開發者音量小,說明投身於其中的人還很少,也沒有大規模的出成果。禾苗還很嬌嫩,陽光雨露高濃度化肥農藥都來了,這對區塊鏈來說絕不是什麼福祉。這個情形有點類似 2009 年到 2010 年的物聯網,因為時任總理的力推,什麼國家戰略、產業政策、扶植資金過早的進入到了物聯網行業,產業園、基礎設施、重點專案搞了一大堆,估計也驗收了不少成果,但幾年下來在這塊並沒有出來什麼成功的企業。希望區塊鏈不要重蹈被揠苗助長的覆轍。

我覺得區塊鏈的發展,還是需要更多寫程式碼的人實際參與,才能實實在在的推動。概念炒作大師們,可以考慮休息一下,他好,你也好。

目前實際動手做區塊鏈開發,大致有兩條路。一是直接基於現成的區塊鏈開發平臺(主要是 Ethereum 和 HyperLedger)來開發,二是自己從基礎開始造區塊鏈。表面上看,從開發效率、投入成本、產業合作等方面毫無疑問應該走第一條路,但實際上情況要複雜得多。下面試對目前區塊鏈開發的主要幾個技術路線進行點評。第一部分先討論 Ethereum 和 Hyperledger,第二部分討論自開發鏈和程式語言的選擇。

先拿 Ethereum 來說,Ethereum 的理想非常巨集大,甚至可以說是晚上仰望星空,白天埋頭印錢。創始人 Vitalik Buterin 是我們這個時代的少年天才,為人極其聰明,對事物的洞悉能力非常強,無論 Ethereum 發展如何,他本人都非常有可能成為新一代的科技明星。Ethereum 是公共區塊鏈平臺,而且由於配備了強大的圖靈完備的智慧合約語言,因此可以成為一切區塊鏈專案的母平臺,馱住整個區塊鏈世界的大烏龜。在 Ethereum 上開發一個類似比特幣的加密貨幣,是一個不折不扣的小目標。因此 Ethereum 出現以來,相當引人矚目,相當令人興奮。前不久 Ethereum 的大批人馬殺到中國做了一場 DEVCON 會,其中的技術內容相當深入,可見 Ethereum 還是極客範十足的,這一點必須點贊。

然而瑜不掩瑕,Ethereum 目前實際上處於其發展過程中的一個低谷期。原因有二。

首先,最直接的原因還是今年六月份 TheDAO 事件的影響。關於這個事件,網上的記載和評論已經車載斗量,我就不贅述了。 但需要搞清楚的是,TheDAO 資金失竊實際上暴露出了 Ethereum 的一個本質困難,就是用圖靈完備的語言編寫的智慧合約難以進行安全驗證的問題。 Tony Hoare 曾經說過,你要麼把程式寫的簡單到極點,以至於明顯沒有錯誤,要麼就把它寫的非常複雜,從而沒有明顯的錯誤。 中本聰為比特幣選擇了前者,而 Vitalik Buterin 為 Ethereum 選擇了後者。 理論上你可以在智慧合約裡寫一個 3D 程式,要求玩家通關打怪團滅大 boss 之後才能執行合約。一個智慧合約語言,功能強悍至此,大家滿意了吧?但是智慧合約不比一般的程式,一旦出錯就可能帶來鉅額損失,所以安全性應該是遠遠放在功能性前面的。TheDAO 失竊的事件就是一次典型案例,一個小漏洞,失竊 6,000 萬美金。事後有些 Ethereum 的支持者說,這不是 Ethereum 的問題,是 TheDAO 自己的程式碼沒寫好。這就太不局氣了。今天你家 TheDAO 的程式碼沒寫好,日後我家 TheCAO 的程式碼就一定寫的好? 如果以後 Ethereum 上面的專案三天兩頭因為自己沒寫好就被偷得連內褲都輸掉,那 Ethereum 怎麼玩下去?Ethereum 現在採取的做法是跟傳統技術產品一樣懸賞捉拿安全漏洞,但大家想想也知道,如果一個安全漏洞有可能給發現者帶來幾百萬美元,你那點賞金怎麼會被放在眼裡呢? Ethereum 把功能性放在安全性前面,這個基本選擇是它得以在眾多區塊鏈中脫穎而出的原因,也會讓其社群付出相當長的時間和相當大的代價來尋找腳踏實地的道路。

第二個原因是 Ethereum 目前專案過多,各種點子層出不窮,經驗豐富的核心開發人員精力不足,導致專案質量參差不齊,文件過時,無疑為學習和使用製造了很多障礙。目前僅 Ethereum 官方客戶端(節點)就有 Go, C++, Java, JavaScript, Python, Ruby 等不同版,甚至還有 Haskell 和 Rust 版,你一眼就能看清這背後是一支何等鬆散、充滿個人主義和獵奇精神的團隊。此外,Ethereum 還在構建錢包、瀏覽器、IDE、Solidity 語言等一大堆專案,整個 Ethereum 社群點子橫飛,幾乎是一個人一個點子,一個點子一個專案,釋出一個接一個,連像樣的文件都沒有,別人想幫忙都幫不上,這給 Ethereum 生態體系的整體質量帶來了不良的影響。我們做個比較,Bitcoin 核心開發者幾十個人,主要程式碼貢獻者三百多,三百多人圍著一個專案轉,跟 Ethereum 幾十個人做十幾個專案,那質量能放到一塊比嗎? 更不要說文件這種 “外圍” 專案,Ethereum 的文件水平跟 Bitcoin 比連提鞋都不配。因此,Ethereum 目前無論是技術成熟度還是社群成熟度,都還差的遠。現在投入 Ethereum,要承擔較大的風險和變更成本。

當然,Ethereum 還是值得關注,因為它的志向遠大,如果能夠走過成長的煩惱,成功步入穩定階段,是可以成為區塊鏈時代全球性的基礎設施的。現階段如果你希望加入 Ethereum 社群,與其在上面直接開發你自己的區塊鏈或者 DAPP 專案,還不如幫助 Geth、Cpp-Ethereum 等核心專案儘快成熟。最近的 DEVCON 大會上,Ethereum 的高手們又紛紛登臺,秀出各種梅花間竹的新點子。但依我說,真為了 Ethereum 好,當務之急是回去把文件寫好,把幾個最核心的專案做紮實,或許能夠幫助 Ethereum 儘快走穩。

再看 Hyperledger。 從今年年初到現在,不要提技術內容發生了多少次變化,就是它的程式碼倉庫和文件平臺,都已經搬了三次家,最近一次是從 Github 搬到了自家的 Git 程式碼倉庫裡。我認為這不是一個隨意的變化,這實際上反映了 Hyperledger 的開源策略、商業模式等方面都還在探索和除錯中,背後的主導者對於很多原則性問題還在糾結。選擇它就必須做好心理準備,跟著它一起動。

從技術上說,Hyperledger 一開始就使用了 Go 語言開發全部基礎設施,並且使用 docker 容器釋出開發測試環境,這是非常明智的決策。 Hyperledger 支援圖靈完備的智慧合約編寫,因此具有與 Ethereum 相似的安全隱憂。但是它目前沒有配備類似 Solidity 的智慧合約程式語言,目前它的程式設計模型是用 Go 或其他語言通過 API 直接操作一個狀態,顯得比較笨拙,在 C 語言裡呼叫過 Lua 的人用起來會有穿越般的似曾相識感。 但也惟其如此,用 Hyperledger 恰好可以控制合約的複雜度,所以要爆出 TheDAO 那麼大的問題反而還不是太容易。

HyperLedger 最大的優勢是其定位,面向行業業務應用的聯盟鏈,這是未來區塊鏈應用的一個重要場景。傳統企業被預言家們嚇出一身冷汗之後,急匆匆來搞區塊鏈的時候,他們必然不願意接受一個完全開放對等的區塊鏈網路,那相當於是開門揖盜,讓毫無根基的顛覆者跟自己打擂臺,這是他們從內心裡排斥的。要搞區塊鏈,他們的必然選擇是集體抱團來做半封閉的行業級聯盟鏈,這樣既享受了區塊鏈的技術優勢,又維護了既得利益,還贏得了技術弄潮兒的美譽,可謂完美。 Hyperledger 就是給這些企業量身定做的,因此在一段時間之內必然會受到很大的支援。但其弱點也在於此,聯盟鏈註定不如全開放的公共區塊鏈更具顛覆性,所以如果假以時日,有強大的公共區塊鏈,挾巨量終端消費者之力,陳兵扣城,到那個時候聯盟鏈不但守不住,連轉型投胎的可能也沒有了。我們回想一下,電子商務發展早期,很多傳統企業都在自己的入口網站上添加了電商購物的功能,即享受了電子商務的技術優勢,又維護了既得利益,還贏得了技術弄潮兒的美譽,可謂完美。現在呢?

不管怎麼說,今天這個時候研究區塊鏈開發,Hyperledger 是可以用的,只是要承擔可能的變化成本。