面向區塊鏈開發

譯註:本文譯自 Y Combinator 官方博客中的 Building for the Blockchain 一文,譯作版權所有,轉載請私信聯繫。

簡介

正在看這篇文章的你,應該是一名被區塊鏈技術所吸引的開發者或者極客。我相信你已經理解了區塊鏈的技術原理,並急切地想要搞清楚這項技術將為你和你的開發技術棧帶來怎樣的影響。

如果你需要更基礎的區塊鏈技術介紹,可以閱讀比特幣和以太坊的白皮書。

這篇文章的目標是:

  1. 解釋區塊鏈項目的開發和現有軟體開發模式的區別。
  2. 提供上下文,幫助你更好地思考該領域的機遇和挑戰。
  3. 提供區塊鏈領域的基礎資源和資料,便於開發區塊鏈項目。

開發模式的轉變

互聯網的網路效應產生了大量的中心化的數據,這些數據促進了互聯網應用的發展。受惠於共享開放的網路協議(比如 TCP/IP,HTTP),諸如 Yelp,Facebook 和 Amazon 這樣的公司得以把自己的用戶——當然也包括用戶產生的數據——集中存儲在自己的伺服器上。這樣一來,這些互聯網巨頭們除了比用戶量小的企業更有優勢之外,他們還對自己所擁有的海量用戶數據如何變現有著 100% 的控制權。用數字貨幣投資者 Joel Monegro 的話說就是,現有的互聯網模式使得絕大部分的價值被應用層所攫取,而應用層的基礎,也就是底層的協議層則獲利很少(即,「胖」應用層,「瘦」協議層模式)。

相反,區塊鏈技術帶來的價值分布模式,可以被理解為是一種「胖」協議層,「瘦」應用層的模式。正是密碼學貨幣的創新,使得這種模式成為可能。正如 USV 的 Albert Wagner 所說:

「一直以來,靠協議賺錢的方式只有一種,那就是基於該協議開發軟體並出售(當然最近都轉為出租了)… 然而密碼學貨幣則提供了一種直接在協議層變現的可能,並且隨著基於該協議的應用越來越豐富,底層協議的變現能力也會隨之越來越強,反映在數字貨幣上就是價格越來越高。」

從前那些互聯網開放協議的開發者們,也就是 DARPA 網的研究員們或者那些無償的貢獻者們,並不會因為開放協議的發展或基於其上的應用越來越多,而獲得直接的經濟回報。不同的是,現在的協議開發者們可以直接發行數字貨幣了,比如比特幣或以太幣,而這些數字貨幣則直接代表了去中心化協議的價值。

Joel Monegro 相信,區塊鏈技術所帶來的這種模式上的轉變,將促使開發者重新審視自己的應用。「數據的開放共享和內生激勵機制的結合,最終會終結「贏者通吃」的市場現象。這將改變應用層的遊戲規則,並且催生一批有著全新業務模型的公司。而這些公司業務模型的不同將主要集中在協議層。」

以太坊

前面的討論帶給我們的結論是:區塊鏈技術帶來的創新讓開發者們可以直接在協議層獲得價值。接下來我們將繼續討論,區塊鏈技術是如何朝著開發者友好的方向演進的。8 年前,一種無需中心化金融機構背書的數字貨幣出現了,它就是現在人們耳熟能詳的比特幣。一開始,開發者們試圖將數據直接存儲在比特幣的區塊鏈上來開發應用,結果表明,這種方式非常低效(Joel 的這篇文章是個很好的例子)。其中一位開發者 Vitalik Buterin 實在是受夠了比特幣對於新特性極端謹慎和保守的態度,於是他開發了一個新的區塊鏈平台以太坊(Ethereum)。

比特幣的初衷是創造一種新的價值存儲的媒介。以太坊則是為了實現一個圖靈完備的區塊鏈開發平台。在以太坊網路中,開發者們可以使用 Solidity 這門編程語言編寫智能合約,這些合約則由以太坊虛擬機(EVM)來運行。從 Vitalik Buterin 的例子中我們不難看出,開發者們完全可以開發一個全新的區塊鏈網路,以此來滿足自己多樣的需求。當然,從頭開發新的區塊鏈網路也有缺點,比如你要從頭開始構建開發者社區。但直接在類似以太坊這類成熟的網路上開發,則沒有這樣的問題。而且一個顯著的不同是,開發基於區塊鏈網路的應用,開發者不僅會是這個應用的所有者,也會成為因此而繁榮的底層協議的直接受益人。

去中心化應用(Dapps),代幣和智能合約

現在的開發者們基於現有的區塊鏈協議(比如以太坊)開發出了滿足不同用戶需求的去中心化應用(dapp)。開發者一般會在 dapp 中發行自己的代幣(token),用戶可以通過消耗代幣來讓 dapp 「執行」相應的操作來實現某個「功能」。代幣其實並不神秘,你可以把它想像成人們在商場的電玩世界裡買的遊戲幣。這些通過「智能合約」實現的「功能」通過收取一定的費用(代幣),使得 dapp 可以在不依賴第三方的情況下對外提供可靠的服務。用遊戲幣來類比就是,只要有足夠的遊戲幣,你隨時都可以把遊戲幣塞到籃球機里玩一局!

一般情況下,代幣的總量是固定的,因此隨著某個 dapp 提供的服務越來越流行,基於簡單的供需原理,代幣的價格肯定會水漲船高。基於這個邏輯,dapp 的開發者們往往通過發售代幣的方式來募集開發資金(而不是通過傳統的融資渠道),這一過程的另一個眾所周知的名字就是 ICO(初始代幣銷售)。

看到這裡你可能會問,「為什麼每個 dapp 都要發行專用的代幣,而不是用現成的,比如以太幣(eth)呢?」。這個不難解釋,因為專用的代幣利於特定應用生態里的小微經濟。換句話說,專用的代幣可以針對應用的特定功能和需求作出靈活的調整,如此一來,這個代幣就能更好地服務於這款 dapp。說到這裡,我們不得不提到以太坊(Ethereum)。以太坊正是這麼一個讓 dapp 開發者們可以方便地發行代幣的平台。

早期機會

有了上述這些對於 dapp 底層機制的理解,接下來你應該思考這麼一個問題了:去中心化到底會給你的用戶帶來什麼價值?我們希望你可以先想清楚上面這個問題,而不是一上來就開始急著「去中心化」現有的產品。舉個例子,Augur 這款產品依靠區塊鏈技術實現了一個預測市場。為什麼要用區塊鏈技術實現?正是因為這項技術帶來的鼓勵誠實的經濟激勵機制,使得散布在世界各地的參與者因此而能夠作出更準確的預測。

在開發者層面,區塊鏈技術也帶來了一次技術棧的創新機會。現有區塊鏈的開發者們很喜歡把現在的情形跟互聯網早期做類比,那個時候各種開發工具和框架都還不夠完善,而現在的區塊鏈開發領域正是如此。來自 Stream 的 Ben Yu 認為這是開發者的新機會:「很多看起來是舉手之勞的基礎工作亟待完成,如果說區塊鏈技術社區的現狀很像 1994 年的互聯網的話,那麼,為了將其演進到 2017 年的互聯網,還要完成很多基礎架構工作」。

由於區塊鏈技術的創新,很多人已經看到了創建全新的、去中心化的網路棧的機會。這種全新的網路棧將不再依賴中心化的政府或公司。傳統的網路棧由 TCP/IP,DNS,資料庫,網路伺服器,鑒權系統和 CDN 這些基礎組件構成,而現在,我們有機會通過類似於以太坊這樣的平台,用去中心化的方式,重新實現傳統網路棧中的各個組件。

「不可篡改」帶來的挑戰

就像早期的 Javascript 技術一樣,區塊鏈技術演進的過程必然伴隨著各式各樣的挑戰。其中最大的挑戰之一,也是區塊鏈技術最突出的特性,那就是「不可篡改」。由於這個特性,開發者們無法更改底層的區塊鏈,也無法更改頂層的智能合約,對基礎庫和合約進行版本控制也非常困難。最近 Parity 的一個 bug 直接導致了價值 1.5 億美金的以太幣被鎖。諸如此類的事故不斷地提醒我們,構建經得住未來考驗的架構是非常重要的。

關於這種不可篡改性對業務安全所帶來的影響,來自 0x 項目的開發者 Brandon Millman 跟我們分享了他的看法:「跟傳統項目相比,在這個領域做開發意味著你要加倍小心,因為任何問題都將直接影響用戶數字資產的安全。一直以來,區塊鏈技術對於私有財產的有力保護廣為人知,也就是說,只要你安全地控制著私鑰,理論上沒有人可以偷走你的資產。但這個領域更多的偷竊行為並不是通過直接盜取用戶的私鑰來實施的。騙子們更多地是通過誘騙的方式,讓用戶將數字資產轉移到他們的錢包,最終達成行竊的目的。」

開發者們,尤其是那些來自創業公司習慣了快節奏開發的開發者們,不得不停下來思考如何在速度和安全性之間找到平衡。就像來自 Stream 的 Ben Yu 說的那樣:「開發者們普遍推崇的一個原則是:move fast and break things. 這句話在區塊鏈領域只有前半句成立。這個領域的發展日新月異,所以你必須 move fast 才不至於被競爭對手超越,但 break things 則意味著成千上萬的金錢損失。」

區塊鏈領域的開發需要更加周密的計劃。由於開發者對於整個系統缺少中心化的控制,因此 dapp 是很難像傳統應用那樣做快速熱修復的。相反的,在區塊鏈世界要想做系統級別的變更,則往往意味著整個協議的硬分叉。

以太坊的局限性

除了上面講到的「不可篡改」帶來的挑戰,開發者在以太坊網路上還可能碰到一些其他限制。比如,以太坊網路不支持通過外部調用的方式獲取自身區塊鏈以外的數據。開發者們需要依賴第三方數據提供商來向智能合約注入外部數據,這類數據提供商也常常被稱作預言機(Oracle)。

除此之外,以太坊的性能不足以支持實時計算。以太坊網路中區塊的處理時間長達 15 秒(跟比特幣網路的 10 分鐘比起來已經很快了)。因此,開發者們需要寫一些非同步代碼來進行狀態的更新(這一點跟 React 很像)。

同時,在以太坊網路中,合約執行的每一步都需要消耗 gas,而 gas 最終會以以太幣(eth)進行結算。因此,開發者們可能經常會碰到由於 gas 設置過低,導致計算無法完成的情況(比如這款象棋遊戲)。也就是說,以太坊的「鏈上計算」是非常昂貴的,同時也非常消耗帶寬。因此,市面上也產生了一些像 Truebit 這類旨在降低計算成本的「鏈下計算」服務。

如何開始

簡單來說,這是一個令人嘆為觀止的領域。區塊鏈技術是交叉學科的典型代表,這一技術涉及了經濟學、博弈論、金融學、計算機科學、數學、密碼學等眾多學科領域。而交叉學科往往也意味著,有很多基礎工作需要完成。

對於區塊鏈領域的新人,來自 0x 項目團隊的 Brandon 給的建議是,選擇自己感興趣或跟自身經歷相關的領域為切入點,而不是一上來就想吃成大胖子:「如果你之前做的是 JS 開發工作,那麼這個領域有非常多的 JS 庫需要你這樣的人來完善。假以時日,在開發過程中,你就會逐漸理解並熟悉這一領域。你無須有完成一門課程才能入門的負擔。」

正如區塊鏈技術所宣揚的「去中心化」思想那樣,這一領域的絕大多數項目的代碼都是開源的。下面就列出了一些可以讓你快速上手的資源:

? Solidity 官方文檔 是學習這門語言的很好的開始。

? Truffle 框架 是 solidity 最好的開發框架之一。

? 在 zeppelinOS 代碼庫 里可以看到很多知名的開源庫。

? Blockgeeks 提供了一個詳細的 以太坊代幣開發指引,並附有一些代碼示例和抽象概念。

? 你也可以從火爆全網的 Crypto Kitties 那裡學習 如何在區塊鏈上創建自己的遊戲。

除此之外,下面是一些高質量的開發者社區:

? /r/ethereum

? /r/ethdev

? blockgeeks.com/

如果你想做一些項目練手,也許下面這些主意不錯:

? 創建自己的錢包應用。可以是網頁版,移動版或桌面版

? 發行自己的 ERC-20 代幣,並部署在測試網路上。

? 改一改 crypto kitties 的代碼(比如改成狗,坦克,殭屍)並部署在測試網路上。

展望未來

目前看來,我們必須承認,圍繞區塊鏈的開發一團亂麻。跟現有成熟的網路開發相比,區塊鏈領域還沒有好用的框架和工具。但換個角度想,這種早期的混亂,正是一個機會,更重要的是,這是一個極有可能帶來開發模式巨變的機會。

在區塊鏈上,你不需要部署任何中心化的伺服器,這就意味著單點失敗的風險為零。如果你的整個技術棧都是去中心化的,那麼就不需要引入「可信」的第三方,而沒有第三方則意味著可以 100% 對抗審查。區塊鏈技術帶來了數據開放的新機會,基於區塊鏈的去中心化資料庫未來可期。

有了區塊鏈技術,我們可以預見這樣一個未來世界:一個沒有中間人,並且信息和權利被系統性地分散開來的世界。


推薦閱讀:

6. 羅素——一架自由的無人機
比特幣,萊特幣,以太坊,以太經典,BCH,Dash, XRP價格分析(77)--1/17/2018
imToken iOS 1.0.6 正式上線!
3月第二周產品進度

TAG:比特币Bitcoin | 区块链Blockchain | 以太坊 |