連載序言:
以太坊(Ethereum)是世界上第一個(gè)也是迄今為止最大的基于區(qū)塊鏈技術(shù)的智能合約平臺(tái)。這份手冊(cè)是其第一個(gè)生產(chǎn)版本Homestead的技術(shù)手冊(cè),主要目的是幫助初中級(jí)用戶和開(kāi)發(fā)者了解以太坊的方方面面和相關(guān)客戶端、開(kāi)發(fā)工具的使用。它是由以太坊社區(qū)在Github上共同維護(hù)的。Github地址:https://github.com/ethereum/homestead-guide.git
我個(gè)人從今年4月中旬開(kāi)始,用業(yè)余時(shí)間對(duì)這份手冊(cè)進(jìn)行了翻譯,期間因?yàn)楣ぷ髟驎r(shí)有中斷,到現(xiàn)在才基本完成。我計(jì)劃在最后一個(gè)月的校對(duì)和語(yǔ)言潤(rùn)色過(guò)程中,節(jié)選部分與技術(shù)細(xì)節(jié)、客戶端或開(kāi)發(fā)工具無(wú)關(guān)的,關(guān)于以太坊所涉及的一些相關(guān)概念的介紹章節(jié),作為獨(dú)立的文章在我個(gè)人的簡(jiǎn)書(shū)上進(jìn)行連載。節(jié)選的時(shí)候,我會(huì)在不影響閱讀的前提下,去掉外部網(wǎng)站資源鏈接或這份在線文檔內(nèi)的引用。有興趣的讀者可以訪問(wèn)我個(gè)人的Github取得完整的翻譯稿源代碼自行編譯為html文檔。Github地址:https://github.com/riversyang/homestead-guide-cn.git
此外,相信很多朋友都會(huì)對(duì)今年上半年國(guó)內(nèi)的區(qū)塊鏈(虛擬貨幣ICO)熱潮以及9月初央行聯(lián)合各金融管理機(jī)構(gòu)聯(lián)合發(fā)布的ICO非法的公告造成的影響有些許了解,但I(xiàn)CO和以以太坊為代表的智能合約平臺(tái)并沒(méi)有關(guān)系,ICO也不是區(qū)塊鏈應(yīng)用的唯一出路。(關(guān)于區(qū)塊鏈的基本概念及其應(yīng)用的話題,我也會(huì)擇機(jī)另行撰文探討。)我個(gè)人依然很看好區(qū)塊鏈技術(shù)在個(gè)人業(yè)務(wù)領(lǐng)域結(jié)合智能合約,以及在企業(yè)業(yè)務(wù)領(lǐng)域作為基礎(chǔ)數(shù)據(jù)存儲(chǔ)革新的市場(chǎng)前景,因?yàn)檫@代表著“未來(lái)”的去中心化自由經(jīng)濟(jì)趨勢(shì)和更高的安全性、技術(shù)級(jí)別的可信性。所以我決定開(kāi)始這個(gè)連載,幫助可能的用戶和開(kāi)發(fā)者了解以太坊及智能合約的概念。而這也是我在開(kāi)博隨筆中提到的今年做的另一件真正有意義的事情。同時(shí)我也希望各層次的讀者都能在這個(gè)連載中有所收獲。
對(duì)文章內(nèi)容或者相關(guān)概念有任何疑問(wèn)、意見(jiàn)或者建議,都可以在簡(jiǎn)書(shū)中給我留言,我會(huì)酌情回復(fù);當(dāng)然,也可以通過(guò)Github與我聯(lián)系。期待與大家的更多互動(dòng)。
2017年11月
以太坊是什么?
以太坊(Ethereum)是一個(gè)開(kāi)放的區(qū)塊鏈平臺(tái),可以讓任何人都能夠創(chuàng)建和使用基于區(qū)塊鏈技術(shù)的去中心化應(yīng)用程序。與比特幣一樣,沒(méi)有人控制或擁有以太坊,它是一個(gè)由全世界的許多人所共通創(chuàng)建的開(kāi)源項(xiàng)目。 不同于比特幣的是,以太坊被設(shè)計(jì)成靈活的、可根據(jù)需求修改的模式。在以太坊平臺(tái)上創(chuàng)建應(yīng)用是很容易的,在Homestead這個(gè)版本中,所有人使用這些應(yīng)用程序都已經(jīng)很安全了。
下一代的區(qū)塊鏈
區(qū)塊鏈技術(shù)是比特幣的基礎(chǔ)技術(shù),在神秘的作者中本聰(Satoshi Nakamoto)于2008年發(fā)表的的白皮書(shū)"Bitcoin: A Peer-to-Peer Electronic Cash System"中被首次描述。盡管在這篇最初的論文中已經(jīng)提及了區(qū)塊鏈技術(shù)的泛用性,但區(qū)塊鏈作為通用術(shù)語(yǔ)出現(xiàn),還是在幾年之后的事。區(qū)塊鏈?zhǔn)且粋€(gè)分布式的計(jì)算架構(gòu),每個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)都執(zhí)行和記錄同樣的交易流水,這些流水?dāng)?shù)據(jù)被組織到所謂區(qū)塊之中。在同一時(shí)間,只有一個(gè)區(qū)塊可以被添加到區(qū)塊鏈中;每個(gè)區(qū)塊都包含一個(gè)數(shù)學(xué)證明,來(lái)證實(shí)它是在它之前的所有區(qū)塊之后產(chǎn)生的。用這種方法,使區(qū)塊鏈的“分布式數(shù)據(jù)庫(kù)”在整個(gè)網(wǎng)絡(luò)中達(dá)到共識(shí)。用戶與賬本(交易流水)的交互通過(guò)強(qiáng)大的加密方式保證其安全性。負(fù)責(zé)維持和校驗(yàn)整個(gè)網(wǎng)絡(luò)狀態(tài)的節(jié)點(diǎn),將獲得基于編碼到協(xié)議中的經(jīng)濟(jì)學(xué)獎(jiǎng)勵(lì)算法計(jì)算得出的獎(jiǎng)勵(lì)。
對(duì)于比特幣而言,分布式數(shù)據(jù)庫(kù)被設(shè)想成通過(guò)比特幣代幣在賬戶間的轉(zhuǎn)移來(lái)使個(gè)人用戶間的去信任金融變?yōu)榭赡艿囊环N賬戶結(jié)算表、賬本和交易流水的集合。但隨著比特幣吸引了越來(lái)越多的開(kāi)發(fā)者和技術(shù)專家,一些新奇的項(xiàng)目開(kāi)始用比特幣網(wǎng)絡(luò)來(lái)做一些代幣價(jià)值轉(zhuǎn)移以外的工作。其中一些項(xiàng)目采用了"alt coins"的模式,通過(guò)改進(jìn)原始的比特幣協(xié)議形成自己的加密貨幣,從而將區(qū)塊鏈分離以增加新的特性和功能。在2013年底,以太坊(Ethereum)的發(fā)明人Vitalik Buterin正式提出了一個(gè)設(shè)想,這是一個(gè)具有再編程能力的、用來(lái)執(zhí)行任意復(fù)雜計(jì)算的單一區(qū)塊鏈,可以將很多其他的項(xiàng)目納入其內(nèi)。
在2014年,以太坊(Ethereum)的創(chuàng)始人Vitalik Buterin, Gavin Wood和Jeffrey Wilcke就開(kāi)始致力于構(gòu)建下一代的區(qū)塊鏈技術(shù)的工作,以實(shí)現(xiàn)一個(gè)通用的、完全去信任的智能合約平臺(tái)(smart contract platform)。
以太坊虛擬機(jī)
以太坊是一個(gè)可編程的區(qū)塊鏈。以太坊允許用戶根據(jù)自己的設(shè)想創(chuàng)建任意復(fù)雜的操作,而不是只給用戶一些預(yù)設(shè)好的操作(例如比特幣的交易操作)。用這種方法,它成為了一個(gè)支撐許多不同類型的去中心化區(qū)塊鏈應(yīng)用的平臺(tái),包含但不僅限于加密貨幣。
狹義上說(shuō),以太坊是定義了去中心化應(yīng)用平臺(tái)的一套協(xié)議。其核心就是可以運(yùn)行任意的復(fù)雜計(jì)算代碼的以太坊虛擬機(jī)(Ethereum Virtual Machine,即EVM,后續(xù)連載中會(huì)有更詳盡的介紹,譯者注) 。用計(jì)算機(jī)科學(xué)術(shù)語(yǔ)來(lái)講,以太坊是“圖靈完備”的。開(kāi)發(fā)者可以使用友好的編程語(yǔ)言在EVM上創(chuàng)建應(yīng)用程序,比如使用JavaScript或Python。
與其他任何區(qū)塊鏈一樣,以太坊也包含一個(gè)P2P(peer-to-peer)網(wǎng)絡(luò)協(xié)議。以太坊區(qū)塊鏈數(shù)據(jù)庫(kù),由眾多的連接到此網(wǎng)絡(luò)的節(jié)點(diǎn)維護(hù)和更新。每個(gè)節(jié)點(diǎn)都會(huì)運(yùn)行EVM并執(zhí)行相同的操作序列。因此,以太坊有時(shí)也被形象的描述為“全球計(jì)算機(jī)”(“world computer”)。
這種跨越整個(gè)以太坊網(wǎng)絡(luò)的超大規(guī)模并行計(jì)算,并不會(huì)使計(jì)算更加高效。事實(shí)上,這樣的過(guò)程,使在以太坊上進(jìn)行的普通的計(jì)算遠(yuǎn)比使用傳統(tǒng)的“計(jì)算機(jī)”來(lái)的更慢、更昂貴。但是,由于每個(gè)以太坊節(jié)點(diǎn)都會(huì)運(yùn)行EVM來(lái)在區(qū)塊鏈上達(dá)成共識(shí),這種去中心化的共識(shí),也給了以太坊極致的容錯(cuò)性(fault tolerance)、零宕機(jī)時(shí)間(zero downtime)、使存儲(chǔ)在區(qū)塊鏈上的數(shù)據(jù)永遠(yuǎn)無(wú)法更改(forever unchangeable)和抗審查(censorship-resistant,即不怕審查,因?yàn)閿?shù)據(jù)一直是真實(shí)的,無(wú)法篡改的,譯者注)。
以太坊平臺(tái)本身是無(wú)特性(featureless)或價(jià)值未知(value-agnostic)的。與編程語(yǔ)言一樣,是企業(yè)家和開(kāi)發(fā)者決定它應(yīng)該用來(lái)做什么。然而根據(jù)以太坊本身的能力,某些特定的應(yīng)用顯然要比其他類型更能受益。具體來(lái)講,以太坊 適合于那些旨在解決點(diǎn)到點(diǎn)之間直接交互,或者跨網(wǎng)絡(luò)的團(tuán)體協(xié)作問(wèn)題的應(yīng)用程序。 例如特定的點(diǎn)到點(diǎn)(peer-to-peer)交易市場(chǎng)應(yīng)用,或者自動(dòng)化的復(fù)雜金融合約應(yīng)用等等。 比特幣,允許個(gè)人在不引入任何中介,像金融機(jī)構(gòu)、銀行或政府的情況下進(jìn)行貨幣交易。而以太坊的影響會(huì)更加深遠(yuǎn)。從理論上講,任意復(fù)雜度的金融交互或交易(financial interactions or exchanges)都可以使用以太坊上的代碼來(lái)自動(dòng)化的、可靠的實(shí)現(xiàn)。而除金融應(yīng)用以外,任何注重信任、安全、持久性的場(chǎng)合,比如資產(chǎn)注冊(cè)、投票、管轄和物聯(lián)網(wǎng),都可以大范圍的嵌入以太坊平臺(tái)。
以太坊是如何運(yùn)作的?
以太坊中包含了很多比特幣用戶很熟悉的特性和技術(shù),同時(shí)它也引入了很多的修改和創(chuàng)新。
與比特幣區(qū)塊鏈中單純的交易流水不同,以太坊區(qū)塊鏈中的基礎(chǔ)單元是賬戶(account,在后續(xù)連載中會(huì)有更詳盡的介紹,譯者注)。以太坊區(qū)塊鏈跟蹤每個(gè)賬戶的狀態(tài);以太坊區(qū)塊鏈上的所有狀態(tài)轉(zhuǎn)換,都是賬戶間的價(jià)值或者信息的轉(zhuǎn)移。以太坊中的賬戶有兩種類型:
- 由私鑰控制的外部賬戶(Externally Owned Account,即EOA)
- 由自身的合約代碼控制的合約賬戶,這種賬戶只能由EOA“激活”(Activate)
對(duì)大多數(shù)用戶來(lái)講,它們最基礎(chǔ)的區(qū)別就是人控制EOA,因?yàn)槿四芡ㄟ^(guò)私鑰控制EOA上的行為;而合約賬戶則由它們內(nèi)部的代碼來(lái)管理。對(duì)于合約賬戶,我們也可以說(shuō)他們是有人“控制”的,因?yàn)樗麄?被編制為由一個(gè)有特定地址的EOA所控制,而這個(gè)EOA則由掌握其私鑰的“人”所控制。當(dāng)一個(gè)交易發(fā)送到合約賬戶上時(shí),合約賬戶中的特定代碼會(huì)被觸發(fā)并執(zhí)行,這些代碼即是通常意義上的“智能合約”。用戶可以在區(qū)塊鏈上發(fā)布代碼來(lái)創(chuàng)建新的合約。
僅當(dāng)合約賬戶接到一個(gè)EOA的指示的時(shí)候,它才會(huì)去執(zhí)行一個(gè)操作。所以合約賬戶不可能去做一些自發(fā)的操作,比如生成隨機(jī)數(shù)或調(diào)用API,除非被EOA指定去做。這是因?yàn)橐蕴恢械墓?jié)點(diǎn)需要一個(gè)嚴(yán)格確定的執(zhí)行確認(rèn),來(lái)認(rèn)證外來(lái)的計(jì)算要求。
與比特幣一樣,用戶為了完成一個(gè)交易,需要向網(wǎng)絡(luò)支付小額的交易費(fèi)。這個(gè)機(jī)制是用來(lái)保護(hù)以太坊網(wǎng)絡(luò)不被一些無(wú)價(jià)值或惡意的計(jì)算任務(wù)所影響,比如DDoS攻擊或者無(wú)限循環(huán)。交易的發(fā)送者必須為他們所激活的每一步“程序”支付相應(yīng)的費(fèi)用,包括計(jì)算和存儲(chǔ)。這些費(fèi)用是用一定量的以太坊原生代幣——以太幣來(lái)體現(xiàn)的。
這些交易費(fèi)用,是由驗(yàn)證整個(gè)網(wǎng)絡(luò)的節(jié)點(diǎn)們所收取的。這些以太坊網(wǎng)絡(luò)中接受、傳播、驗(yàn)證和執(zhí)行交易的節(jié)點(diǎn),即是所謂的“礦工”。包含了以太坊區(qū)塊鏈中賬戶“狀態(tài)”變動(dòng)的所有交易信息,由礦工們歸集到“區(qū)塊”中,然后開(kāi)始互相競(jìng)爭(zhēng),以使 他們自己產(chǎn)生的區(qū)塊成為區(qū)塊鏈中的下一個(gè)區(qū)塊。礦工每成功挖到一個(gè)礦(即把自己生成的區(qū)塊添加到區(qū)塊鏈上,譯者注),都將獲得獎(jiǎng)勵(lì)。這就是對(duì)那些為以太坊網(wǎng)絡(luò)貢獻(xiàn)硬件和算力的人的經(jīng)濟(jì)上的激勵(lì)。
與比特幣網(wǎng)絡(luò)一樣,礦工們想要成功“挖到”一個(gè)區(qū)塊也需要解決一個(gè)復(fù)雜的數(shù)學(xué)問(wèn)題。這就是被熟知的“工作量證明”("Proof of Work")。任何一個(gè)通過(guò)算法解決問(wèn)題所消耗的資源大于驗(yàn)證結(jié)果所消耗的資源的計(jì)算問(wèn)題,都是工作量證明的良好選擇。為了弱化比特幣網(wǎng)絡(luò)中使用特定硬件(比如 ASICs,一種專門用于計(jì)算的集成電路硬件,譯者注)所帶來(lái)的中心化趨勢(shì),以太坊選擇了一個(gè)強(qiáng)內(nèi)存需求(memory-hard)的計(jì)算問(wèn)題。如果解決一個(gè)問(wèn)題就像需求CPU一樣需求內(nèi)存,那可以支撐的硬件會(huì)更趨近于通常的計(jì)算機(jī)。這使以太坊的工作量證明“抗ASIC”;并且與比特幣的可能受制于特定硬件的挖礦過(guò)程相比,這種工作量證明更加有利于去中心化分布的安全性(即在一定程度上避免由于過(guò)多的區(qū)塊都由一小部分計(jì)算能力非常強(qiáng)的節(jié)點(diǎn)所產(chǎn)生而導(dǎo)致的中心化趨勢(shì),譯者注)。
待續(xù)。