引言
如果你點(diǎn)開(kāi)了這篇文章,我們就假設(shè)你是一個(gè)對(duì)區(qū)塊鏈感興趣的開(kāi)發(fā)者/黑客。你確信你能理解它的工作原理,現(xiàn)在你想要搞清楚區(qū)塊鏈對(duì)你和你的開(kāi)發(fā)者技能意味著什么。
如果你需要學(xué)習(xí)更多的入門(mén)知識(shí),我們建議你從比特幣白皮書(shū)和以太坊白皮書(shū)開(kāi)始。
這篇文章的主要目標(biāo)是:
解釋區(qū)塊鏈開(kāi)發(fā)與現(xiàn)有開(kāi)發(fā)范例的不同之處。
為這個(gè)領(lǐng)域的機(jī)遇和挑戰(zhàn)提供背景信息。
給你指出一些資源, 這些資源將幫你在這個(gè)新范式開(kāi)始發(fā)展中奠定基礎(chǔ)。
開(kāi)發(fā)者的范式轉(zhuǎn)換
互聯(lián)網(wǎng)應(yīng)用程序受益于網(wǎng)絡(luò)效應(yīng),因?yàn)樗鼈儼研畔⒐聧u集中了起來(lái)?;诠蚕淼拈_(kāi)放協(xié)議(如TCP/IP協(xié)議、HTTP協(xié)議),Yelp、Facebook和亞馬遜等公司都能在一個(gè)地方擁有大量的用戶和用戶的數(shù)據(jù),這樣一來(lái),他們不僅比那些數(shù)據(jù)更少的競(jìng)爭(zhēng)對(duì)手有更大的優(yōu)勢(shì),而且還能完全控制數(shù)據(jù)變現(xiàn)的方式。
用加密貨幣投資者喬伊·錢(qián)格羅(Joel Monegro)的話來(lái)說(shuō),當(dāng)前的互聯(lián)網(wǎng)范式是在應(yīng)用層獲取了大部分的價(jià)值,而從底層通信協(xié)議層獲得的價(jià)值卻非常低。
或者,區(qū)塊鏈范式的價(jià)值分布可以用協(xié)議層(比較多)和應(yīng)用層(比較少)來(lái)描述。這種模式的轉(zhuǎn)變是有可能的,因?yàn)榧用艽鷰诺陌l(fā)明,正如USV的阿爾伯特·瓦格納(Albert Wagner )所描述的那樣:
“從歷史上看,從協(xié)議中賺錢(qián)的唯一途徑是創(chuàng)建軟件來(lái)實(shí)現(xiàn)它,然后嘗試出售這個(gè)軟件(或者托管它)……然而,使用加密代幣,協(xié)議的創(chuàng)建者可以直接將協(xié)議貨幣化。事實(shí)上,當(dāng)其他人在協(xié)議之上建立業(yè)務(wù)時(shí),協(xié)議的創(chuàng)建者實(shí)際上會(huì)受益更多。”
在此之前,互聯(lián)網(wǎng)開(kāi)放通信協(xié)議的開(kāi)發(fā)者,主要是DARPA的研究人員和非營(yíng)利貢獻(xiàn)者,從而沒(méi)有將財(cái)務(wù)激勵(lì)與協(xié)議開(kāi)發(fā)結(jié)合起來(lái)。相比之下,如今的協(xié)議開(kāi)發(fā)者可以發(fā)布“代幣”,比如比特幣和以太坊,這些“代幣”代表了它們?nèi)ブ行幕瘏f(xié)議的價(jià)值。
喬爾(Joel Monegro)認(rèn)為,這種范式的轉(zhuǎn)變會(huì)影響開(kāi)發(fā)者對(duì)應(yīng)用程序的思考方式:“共享開(kāi)放數(shù)據(jù)與激勵(lì)機(jī)制的結(jié)合,會(huì)顛覆‘贏者通吃’的應(yīng)用層市場(chǎng),從而改變應(yīng)用層的游戲規(guī)則,并在協(xié)議層創(chuàng)建一個(gè)全新類別的公司,這些公司與當(dāng)前挖掘應(yīng)用層價(jià)值的公司的商業(yè)模式有著根本的不同。”
以太坊
我們已經(jīng)認(rèn)識(shí)到,在區(qū)塊鏈范式中,開(kāi)發(fā)者可以通過(guò)協(xié)議創(chuàng)新來(lái)獲取價(jià)值。為了繼續(xù)我們的討論,我們回顧一下區(qū)塊鏈技術(shù)是如何演變,最終迎合開(kāi)發(fā)者的。8年前,比特幣被認(rèn)為是一種虛擬貨幣,消除了人們對(duì)集中式金融體系的需要。最初,開(kāi)發(fā)者實(shí)際上是在比特幣區(qū)塊鏈上嘗試構(gòu)建應(yīng)用,方法是將數(shù)據(jù)存儲(chǔ)在區(qū)塊鏈中,但結(jié)果是效率非常低下。其中一名開(kāi)發(fā)者維塔利克·布特林(Vitalik Buterin)對(duì)比特幣的不動(dòng)員和風(fēng)險(xiǎn)規(guī)避文化化感到失望。因?yàn)樗胍蛟鞂?duì)開(kāi)發(fā)者友好的新功能。因此,他建立了自己的平臺(tái)——以太坊。
雖然比特幣最初的目的是成為一種新的金融價(jià)值儲(chǔ)存媒介,但以太坊被的出現(xiàn)是作為一個(gè)完整的開(kāi)發(fā)者環(huán)境。在以太坊中,開(kāi)發(fā)者們會(huì)在Solidity編程語(yǔ)言中編寫(xiě)智能的合同,而那些智能的合同都是在以太坊虛擬機(jī)(EVM)中運(yùn)行的,在這里,我們看到開(kāi)發(fā)者有機(jī)會(huì)分叉或使用他們自己的區(qū)塊鏈來(lái)實(shí)現(xiàn)不同的目的。然而,要做到這一點(diǎn),就需要開(kāi)發(fā)者的支持,以及激發(fā)現(xiàn)有區(qū)塊鏈技術(shù)此前實(shí)現(xiàn)的網(wǎng)絡(luò)效應(yīng)。今天,在以太坊這樣的現(xiàn)有網(wǎng)絡(luò)基礎(chǔ)之上,開(kāi)發(fā)者不僅可以成為他們自己的應(yīng)用程序的利益相關(guān)者,而且還可以成為底層協(xié)議的利益相關(guān)者。
去中心化應(yīng)用程序(Dapps)、加密貨幣和智能合同
如今的區(qū)塊鏈開(kāi)發(fā)者通常做法是,在現(xiàn)有協(xié)議的基礎(chǔ)上開(kāi)發(fā)去中心化的應(yīng)用程序,以解決特定市場(chǎng)和終端用戶所需要的問(wèn)題。這樣一來(lái),開(kāi)發(fā)者就可以發(fā)布代幣,用于執(zhí)行去中心化應(yīng)用程序本身的某些“功能”。這些“功能”是一種“智能合同”,它們承諾為去中心化應(yīng)用程序提供服務(wù),以換取數(shù)字資產(chǎn),從而消除中間人來(lái)?yè)?dān)保交易的需要。
隨著去中心化應(yīng)用程序的功能越來(lái)越受到人們的追捧,固定數(shù)量的加密貨幣的價(jià)值隨著供不應(yīng)求而增加。換句話說(shuō),如果事實(shí)證明,去中心化應(yīng)用程序的體驗(yàn)真的是非常引人注目和高度需求的,那么固定的代幣供應(yīng)就會(huì)變得更有價(jià)值。這是所有ICO的基本原則,去中心化應(yīng)用程序開(kāi)發(fā)者通過(guò)提供一種用于應(yīng)用中的加密貨幣來(lái)吸引投資,來(lái)資助他們的項(xiàng)目。
但是,等等,你可能會(huì)問(wèn):“為什么不使用現(xiàn)有的代幣,而是在一開(kāi)始就發(fā)行自己的、特定于去中心化應(yīng)用程序的代幣呢?”
特定于去中心化應(yīng)用程序的代幣可以幫助小規(guī)模經(jīng)濟(jì)體實(shí)現(xiàn)應(yīng)用的目的。這些代幣是一種稀缺資源,可以對(duì)其進(jìn)行管理,使其與去中心化應(yīng)用程序的功能更加緊密地結(jié)合在一起。
這就是以太坊的出發(fā)點(diǎn)——在以太坊中,開(kāi)發(fā)者可以很容易地為他們自己的去中心化應(yīng)用程序的指定用途發(fā)布自己的代幣。
早期機(jī)會(huì)
了解了去中心化應(yīng)用程序的底層機(jī)制后,很重要的一點(diǎn)是要仔細(xì)思考去中心化最終能夠?qū)τ脩魩?lái)什么樣的好處。我們并不是要跳到一份附帶項(xiàng)目的列表中,而是將關(guān)系數(shù)據(jù)庫(kù)交給區(qū)塊鏈來(lái)實(shí)現(xiàn),我們敦促你考慮去中心化的好處。例如,奧格爾(Augur)通過(guò)分散的參與者做出正確的預(yù)測(cè)來(lái)預(yù)測(cè)市場(chǎng),因?yàn)樗麄儠?huì)分享財(cái)務(wù)激勵(lì)。
在一個(gè)元級(jí)別上,開(kāi)發(fā)者堆棧中也有創(chuàng)新的機(jī)會(huì)。許多區(qū)塊鏈開(kāi)發(fā)者將區(qū)塊鏈工具和框架的成熟度比作互聯(lián)網(wǎng)早期的網(wǎng)絡(luò)。我們采訪了Stream的Ben Yu,他稱這對(duì)開(kāi)發(fā)者來(lái)說(shuō)是一個(gè)新的機(jī)遇:“在讓這個(gè)領(lǐng)域變得更容易獲取的過(guò)程中,存在著唾手可得的成果,需要建立大量的技術(shù)基礎(chǔ)設(shè)施來(lái)將區(qū)塊鏈的發(fā)展水平,從1994年互聯(lián)網(wǎng)水平,帶到2017年。”
隨著區(qū)塊鏈的創(chuàng)新,許多人發(fā)現(xiàn)了建立一個(gè)新的、去中心化的網(wǎng)絡(luò)棧的機(jī)會(huì),這種網(wǎng)絡(luò)棧,不依賴于集中式的政府或企業(yè)實(shí)體。傳統(tǒng)的網(wǎng)絡(luò)棧由諸如TCP/IP、DNS、數(shù)據(jù)庫(kù)、Web服務(wù)器、身份驗(yàn)證系統(tǒng)和CDN等構(gòu)建模塊組成,我們正在使用以太坊作為基礎(chǔ)層來(lái)復(fù)制這些組件。
不可變性的挑戰(zhàn)
不幸的是, 一種類似于JavaScript早期迭代的技術(shù)幾乎肯定會(huì)帶來(lái)挑戰(zhàn),其中最明顯的是與新協(xié)議的不可變性有關(guān)。開(kāi)發(fā)者無(wú)法改變基礎(chǔ)區(qū)塊鏈或更高級(jí)別的智能合約。合約不能輕易地被版本化。最近的奇偶校驗(yàn)bug,凍結(jié)了1.5億美元的資金,以及許多其他類似的事件,提醒我們有必要建立“基于未來(lái)”的架構(gòu)。
0x工程師布蘭登·米爾曼(Brandon Millman)描述了區(qū)塊鏈的不變性如何影響他對(duì)安全問(wèn)題的看法:“身處這個(gè)領(lǐng)域意味著要謹(jǐn)慎得多,特別是因?yàn)檫@會(huì)給人們的錢(qián)帶來(lái)風(fēng)險(xiǎn)。”區(qū)塊鏈范式的好處之一是,如果你持有私鑰,人們很難從你那里把錢(qián)取走,但很多騙局會(huì)讓你心甘情愿地把錢(qián)投到錯(cuò)誤的地方,而不是從你的錢(qián)包里偷錢(qián)。”
開(kāi)發(fā)者們,尤其是那些習(xí)慣了快節(jié)奏的創(chuàng)業(yè)公司的開(kāi)發(fā)者,不得不在速度和安全性之間權(quán)衡取舍。
正如Stream的Ben Yu所描述的,“你必須非??斓匾苿?dòng),因?yàn)榭臻g正在飛速發(fā)展,但你不能快速移動(dòng),打破常規(guī)。如果你把事情搞砸了,你就會(huì)損失數(shù)億美元。”
在區(qū)塊鏈上進(jìn)行開(kāi)發(fā)需要不同程度的規(guī)劃。開(kāi)發(fā)者不能再使用熱補(bǔ)丁或過(guò)夜補(bǔ)丁,因?yàn)樗麄儾辉賹?duì)整個(gè)系統(tǒng)進(jìn)行集中控制。相反,引入系統(tǒng)變更通常需要對(duì)整個(gè)協(xié)議進(jìn)行嚴(yán)格的處理,或者在某些情況下,為不直接綁定到區(qū)塊鏈的協(xié)議參數(shù)提供單獨(dú)的源代碼。
以太坊的局限性
除了一般的不可變性的挑戰(zhàn)外,以太坊還包含了一些區(qū)塊鏈開(kāi)發(fā)者可能會(huì)遇到的限制。
首先,以太坊無(wú)法從區(qū)塊鏈外部獲取實(shí)時(shí)數(shù)據(jù)。開(kāi)發(fā)人員需要依賴可信的第三方數(shù)據(jù)提供商,來(lái)為智能合同提供與外部信息如天氣、隨機(jī)數(shù)字或貨幣價(jià)值等等。
此外,以太坊的規(guī)范還阻止了實(shí)時(shí)計(jì)算。區(qū)塊交易的處理時(shí)間超過(guò)15秒(與比特幣的10分鐘相比,這是閃電般的速度)。因此,開(kāi)發(fā)人員需要編寫(xiě)帶有前端框架的異步代碼,這些框架可以相應(yīng)地更新?tīng)顟B(tài)(如 React)。
在以太坊中,你還要為你的交易支付交易費(fèi)用,使用當(dāng)前版本的Solidity, 如果你打算執(zhí)行的計(jì)算過(guò)于昂貴,那么你很有可能會(huì)發(fā)現(xiàn)自己遇到了一個(gè)交易限制。因此,在區(qū)塊鏈中的計(jì)算成本在金錢(qián)和網(wǎng)絡(luò)帶寬上變得昂貴。有一些有趣的替代方法,比如Truebit,可以在非鏈中執(zhí)行更密集的計(jì)算。
開(kāi)始行動(dòng)
總的來(lái)說(shuō), 進(jìn)入這個(gè)領(lǐng)域肯定會(huì)讓人感到無(wú)法抗拒。這是一個(gè)跨學(xué)科領(lǐng)域,涵蓋了經(jīng)濟(jì)學(xué)、博弈論、金融學(xué)、計(jì)算機(jī)科學(xué)、數(shù)學(xué)、密碼學(xué)等領(lǐng)域。然而,這也意味著有很多的領(lǐng)域可供新入行者選擇。
0x的布蘭登建議,你應(yīng)該去那些你感興趣或有經(jīng)驗(yàn)的領(lǐng)域,而不是一次性地學(xué)習(xí)所有東西:“如果你之前已經(jīng)做過(guò)JS開(kāi)發(fā),你可以做很多的JS庫(kù)。雖然你肯定需要知道所有東西最終都是如何組合在一起的,但你不需要一開(kāi)始就學(xué)習(xí)整個(gè)課程。”
本著去中心化的精神,區(qū)塊鏈項(xiàng)目的大部分代碼也可以通過(guò)開(kāi)源獲得。有很多好的資源可以讓你使用:
官方的Solidity文件是一個(gè)很好的起點(diǎn)。
Truffle框架是最堅(jiān)固的框架之一。
看看如何在zeppelinOS repo中開(kāi)發(fā)出代幣和銷(xiāo)售代幣的方式,這是開(kāi)發(fā)去中心化應(yīng)用程序最受信任的庫(kù)之一。
Blockgeek還提供了一份帶有代碼樣本和高級(jí)概念的深度以太坊代幣指南。
你甚至可以從Crypto Kitties中學(xué)習(xí),在區(qū)塊鏈上創(chuàng)建自己的數(shù)字游戲。
如果你主要通過(guò)編寫(xiě)自己的項(xiàng)目來(lái)學(xué)習(xí),這里有一些想法可以開(kāi)始:
打造自己的錢(qián)包。它可以是一個(gè)網(wǎng)頁(yè)、移動(dòng)應(yīng)用或桌面應(yīng)用。
創(chuàng)建您自己的ERC-20令牌,并將其部署到測(cè)試網(wǎng)絡(luò)中。
把Crypto Kitties做成狗、坦克、僵尸…并將它部署到測(cè)試網(wǎng)絡(luò)中。
展望未來(lái)
在當(dāng)前的狀態(tài)下,區(qū)塊鏈的開(kāi)發(fā)是混亂的。沒(méi)有類似于現(xiàn)代Web開(kāi)發(fā)那樣的框架和工具。但為什么不把區(qū)塊鏈的新生狀態(tài)看作是影響一種范式轉(zhuǎn)換技術(shù)的機(jī)會(huì)呢?
在區(qū)塊鏈上,你不需要部署任何集中式的服務(wù)器,這意味著沒(méi)有單點(diǎn)故障。如果你的整個(gè)堆棧是去中心化的,那么就沒(méi)有可信的第三方參與到它的審查中去,你的數(shù)據(jù)庫(kù)是可以公開(kāi)驗(yàn)證的。隨著新范式為公開(kāi)分享數(shù)據(jù)提供了機(jī)會(huì), 我們認(rèn)為將數(shù)據(jù)庫(kù)去中心化是一個(gè)最大的優(yōu)勢(shì)。這就是我們?cè)趨^(qū)塊鏈上正在打造的未來(lái)——消除中間人,讓信息和權(quán)力被系統(tǒng)地分配。