天天看點

【白話區塊鍊】面向區塊鍊開發

正在看這篇文章的你,應該是一名被區塊鍊技術所吸引的開發者或者極客或者是對區塊鍊技術十分感興趣。通過之前的白話區塊鍊系列文章,相信你對區塊鍊已經有了一個基本的概念,如果你有程式設計基礎,那麼讀這篇文章會很輕松,如果沒有,老胡也盡力用白話的方式解釋清楚。文章參考翻譯自Y Combinator 官方部落格中的 Building for the Blockchain 一文。

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

閱讀白皮書是投資區塊鍊或者是學習區塊鍊開發的一個重要技能,關于閱讀白皮書也會在以後的文章中提到。

這篇文章的目标是:

解釋區塊鍊項目的開發和現有軟體開發模式的差別。

提供上下文,幫助你更好地思考該領域的機遇和挑戰。

提供區塊鍊領域的基礎資源和資料,便于開發區塊鍊項目。

開發模式的轉變

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

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

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

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

Joel Monegro 相信,區塊鍊技術所帶來的這種模式上的轉變,将促使開發者重新審視自己的應用。“資料的開放共享和内生激勵機制的結合,最終會終結“赢者通吃”的市場現象。這将改變應用層的遊戲規則,并且催生一批有着全新業務模型的公司。而這些公司業務模型的不同将主要集中在協定層。”

以太坊

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

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

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

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

一般情況下,代币的總量是固定的,是以随着某個 dapp 提供的服務越來越流行,基于簡單的供需原理,代币的價格肯定會水漲船高。基于這個邏輯,dapp 的開發者們往往通過發售代币的方式來募集開發資金(而不是通過傳統的融資管道),這一過程的另一個衆所周知的名字就是 ICO(初始代币銷售,ICO也是區塊鍊投資一個經常聽到的詞語,後文也會提到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 那裡學習 如何在區塊鍊上建立自己的遊戲。

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

• https://www.reddit.com/r/ethereum/

• https://www.reddit.com/r/ethdev/

•https://blockgeeks.com/

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

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

• 發行自己的 ERC-20 代币,并部署在測試網絡上。

• 改一改 crypto kitties 的代碼(比如改成狗,坦克,僵屍)并部署在測試網絡上。

展望未來

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

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

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