《精通以太坊》-什么是以太坊?

原文:What is Ethereum?

以太坊是“世界計(jì)算機(jī)”冬念。這是以太坊平臺(tái)最常見的描述之一提前。但是支竹,這是什么意思旋廷?讓我們嘗試以計(jì)算機(jī)科學(xué)為重點(diǎn)的描述開始,然后嘗試通過對(duì)以太坊的功能和特性進(jìn)行更實(shí)際的分析來解讀礼搁,同時(shí)將其與比特幣和其他分布式分類帳本技術(shù)進(jìn)行比較(為簡(jiǎn)單起見饶碘,我們經(jīng)常會(huì)參考作為“區(qū)塊鏈”)。

從計(jì)算機(jī)科學(xué)的角度來看馒吴,以太坊是一個(gè)確定性但實(shí)際上無界的狀態(tài)機(jī)扎运,具有兩個(gè)基本功能; 第一個(gè)是全局可訪問的單例狀態(tài),第二個(gè)是將更改應(yīng)用于該狀態(tài)的虛擬機(jī)饮戳。

從更實(shí)際的角度來看豪治,以太坊是一個(gè)開源的、全球分布的計(jì)算基礎(chǔ)設(shè)施扯罐,執(zhí)行稱為智能合約的程序负拟。它使用區(qū)塊鏈來同步和存儲(chǔ)系統(tǒng)狀態(tài)以及名為ether的加密貨幣,以計(jì)量和約束執(zhí)行資源成本歹河。

以太坊平臺(tái)使開發(fā)人員能夠構(gòu)建具有內(nèi)置經(jīng)濟(jì)功能的強(qiáng)大去中心化應(yīng)用程序掩浙。在提供持續(xù)正常運(yùn)行時(shí)間的同時(shí),它還減少或消除了審查秸歧,第三方界面和交易對(duì)手風(fēng)險(xiǎn)厨姚。

與比特幣對(duì)比

很多人會(huì)帶著加密貨幣的先前經(jīng)驗(yàn)來到以太坊,特別是比特幣键菱。以太坊與其他開放區(qū)塊鏈共享許多共同元素:連接參與者的P2P網(wǎng)絡(luò)谬墙,狀態(tài)同步的共識(shí)算法(工作量證明),數(shù)字貨幣(ether)和全局分類賬本(區(qū)塊鏈)纱耻。

區(qū)塊鏈的組成部分

開放的公共區(qū)塊鏈的組成部分(通常)是:

  • 基于標(biāo)準(zhǔn)化的“gossip”協(xié)議芭梯,連接參與者和傳播交易以及驗(yàn)證交易區(qū)塊的P2P網(wǎng)絡(luò)。
  • 在狀態(tài)機(jī)中實(shí)現(xiàn)的一組共識(shí)規(guī)則弄喘。
  • 以交易形式表示狀態(tài)轉(zhuǎn)換的消息玖喘。
  • 根據(jù)共識(shí)規(guī)則處理交易的狀態(tài)機(jī)。
  • 分布式數(shù)據(jù)庫蘑志,即區(qū)塊鏈累奈,記錄所有狀態(tài)轉(zhuǎn)換的日志贬派。
  • 一種共識(shí)算法(例如,工作證明)澎媒,強(qiáng)制參與者通過共識(shí)規(guī)則進(jìn)行競(jìng)爭(zhēng)和約束來分散對(duì)區(qū)塊鏈的控制搞乏。
  • 上面的一個(gè)或多個(gè)開源軟件實(shí)現(xiàn)。

所有或大多數(shù)這些組件通常組合在一個(gè)軟件客戶端中戒努。例如请敦,在比特幣中,參考實(shí)現(xiàn)由Bitcoin core開源項(xiàng)目開發(fā)储玫,并作為比特幣客戶端實(shí)現(xiàn)侍筛。在以太坊中,不是參考實(shí)現(xiàn)撒穷,而是有一個(gè)參考規(guī)范匣椰,黃皮書中系統(tǒng)的數(shù)學(xué)描述。有許多客戶端是根據(jù)參考規(guī)范構(gòu)建的端礼。

在過去禽笑,我們使用術(shù)語“區(qū)塊鏈”來表示上述所有組件,作為包含上述所有特征的技術(shù)組合的簡(jiǎn)寫參考蛤奥。然而佳镜,今天,區(qū)塊鏈這個(gè)詞已被營(yíng)銷人員和奸商所稀釋凡桥,他們希望炒作他們的項(xiàng)目邀杏,并為他們的初創(chuàng)公司獲得不切實(shí)際的估值。它本身實(shí)際上毫無意義唬血。我們需要限定符來幫助我們理解所討論的區(qū)塊鏈的特征,例如開放唤崭、公共拷恨、全球、去中心化谢肾、中立和審查制度腕侄,以確定這些組件允許的“區(qū)塊鏈”系統(tǒng)的重要新興特征。

并非所有區(qū)塊鏈都生而平等芦疏。當(dāng)你被告知某些東西是區(qū)塊鏈時(shí)冕杠,你還沒有得到答案,而是你需要開始提出很多問題來澄清“區(qū)塊鏈”的含義酸茴。首先詢問上述組件的描述分预,然后詢問這個(gè)“區(qū)塊鏈”是否具有開放、公共等特征薪捍。

以太坊的發(fā)展

在許多方面笼痹,以太坊的目的和構(gòu)造都與之前的開放區(qū)塊鏈(包括比特幣)截然不同配喳。

以太坊的目的主要不是數(shù)字貨幣支付網(wǎng)絡(luò)。雖然數(shù)字貨幣ether對(duì)于以太坊的運(yùn)營(yíng)而言都是不可或缺的凳干,但ether是用作支付使用以太坊平臺(tái)的公用事業(yè)貨幣晴裹。

與具有非常有限的腳本語言的比特幣不同,以太坊被設(shè)計(jì)為通用可編程區(qū)塊鏈救赐,其運(yùn)行能夠執(zhí)行任意和無限復(fù)雜代碼的虛擬機(jī)涧团。比特幣的腳本語言被故意限制為對(duì)支出條件的簡(jiǎn)單真/假評(píng)估,以太坊的語言是圖靈完備经磅,這意味著它等同于可以運(yùn)行理論圖靈機(jī)可以運(yùn)行的任何計(jì)算的通用計(jì)算機(jī)泌绣。

以太坊的誕生

所有偉大的創(chuàng)新都解決了實(shí)際問題,以太坊也不例外馋贤。以太坊是在人們認(rèn)識(shí)到比特幣模型的力量赞别,并試圖超越加密貨幣應(yīng)用程序的應(yīng)用,進(jìn)入其他項(xiàng)目的時(shí)候構(gòu)思出來的配乓。但開發(fā)人員面臨一個(gè)難題:他們要么需要建立在比特幣之上仿滔,要么開始新的區(qū)塊鏈。以比特幣為基礎(chǔ)意味著生活在網(wǎng)絡(luò)的故意限制之內(nèi)并試圖找到變通方法犹芹。數(shù)據(jù)存儲(chǔ)的有限類型和大小似乎限制了可以作為第二層解決方案運(yùn)行的應(yīng)用程序類型崎页。程序員需要構(gòu)建僅使用有限變量集,交易類型和數(shù)據(jù)的系統(tǒng)腰埂。對(duì)于需要更多自由飒焦,更大靈活性的項(xiàng)目,啟動(dòng)新的區(qū)塊鏈?zhǔn)俏ㄒ坏倪x擇屿笼。

2013年底牺荠,年輕的程序員和比特幣愛好者Vitalik Buterin開始考慮進(jìn)一步擴(kuò)展比特幣和Mastercoin(一種將比特幣擴(kuò)展到提供基本智能合約的覆蓋協(xié)議)的功能。2013年10月驴一,Vitalik為Mastercoin團(tuán)隊(duì)提出了一種更為通用的方法休雌,即允許靈活且可編寫腳本(但不是圖靈完備)的合約取代Mastercoin的專業(yè)合約語言。雖然Mastercoin團(tuán)隊(duì)留下了深刻的印象肝断,但這個(gè)提議過于激進(jìn)杈曲,無法適應(yīng)他們的發(fā)展路線圖。

2013年12月胸懈,Vitalik開始分享一份白皮書担扑,概述了以太坊背后的理念:圖靈完備可編程和通用區(qū)塊鏈。幾十人看到了這個(gè)早期的草案趣钱,并向Vitalik提供了反饋涌献,幫助他逐步改進(jìn)提案。

本書的兩位作者都收到了白皮書的早期草稿并對(duì)其進(jìn)行了評(píng)論羔挡。Andreas M. Antonopoulos對(duì)這個(gè)想法很感興趣洁奈,并向Vitalik詢問了許多關(guān)于使用單獨(dú)的區(qū)塊鏈來強(qiáng)制執(zhí)行關(guān)于智能合約執(zhí)行的共識(shí)規(guī)則以及圖靈完備語言含義的問題间唉。Andreas繼續(xù)非常感興趣地關(guān)注以太坊的發(fā)展,但是在撰寫他的著作“精通比特幣”的早期階段利术,直到很久以后才直接參與以太坊呈野。然而,Gavin Wood博士是第一批接觸Vitalik并提供幫助他的C++編程技能的人之一印叁。Gavin成為以太坊的聯(lián)合創(chuàng)始人被冒,聯(lián)合設(shè)計(jì)師兼首席技術(shù)官。

正如Vitalik在他的"Ethereum Prehistory"中所述:

這是以太坊協(xié)議完全是我自己創(chuàng)造的時(shí)候轮蜕。然而昨悼,從現(xiàn)在開始,新的參與者開始加入這一行列跃洛。
到目前為止率触,協(xié)議方面最突出的是Gavin Wood。

...

通過將以太坊作為構(gòu)建可編程貨幣的平臺(tái)汇竭,以及基于區(qū)塊鏈的合約葱蝗,可以保存數(shù)字資產(chǎn)并根據(jù)預(yù)先
設(shè)定的規(guī)則將其轉(zhuǎn)移到通用計(jì)算平臺(tái),Gavin也可以在很大程度上歸功于視覺的細(xì)微變化细燎。
這開始于重點(diǎn)和術(shù)語的微妙變化两曼,隨后越來越強(qiáng)調(diào)“Web 3”集合,將以太坊視為
一組去中心化技術(shù)的一部分玻驻,另外兩個(gè)是Whisper和Swarm悼凑,這種影響變得更強(qiáng)。

從2013年12月開始璧瞬,Vitalik和Gavin一起完善和改進(jìn)了這個(gè)想法户辫,共同構(gòu)建了成為以太坊的協(xié)議層。

以太坊的創(chuàng)始人正在考慮不是針對(duì)特定目的的區(qū)塊鏈嗤锉,而是通過編程支持各種各樣的應(yīng)用程序寸莫。這個(gè)想法是通過使用像以太坊這樣的通用區(qū)塊鏈,開發(fā)人員可以編程他們的特定應(yīng)用程序档冬,而無需引導(dǎo)P2P網(wǎng)絡(luò),區(qū)塊鏈桃纯,共識(shí)算法等的底層機(jī)制酷誓。以太坊平臺(tái)旨在抽象這些詳細(xì)信息并為去中心化的區(qū)塊鏈應(yīng)用程序提供確定性和安全的編程環(huán)境。

就像Satoshi态坦,Vitalik和Gavin不僅僅發(fā)明了一項(xiàng)新技術(shù)一樣盐数,他們以一種新穎的方式將新發(fā)明與現(xiàn)有技術(shù)相結(jié)合,并提供源代碼以向世界證明他們的想法伞梯。

創(chuàng)始人工作多年玫氢,建立和完善愿景帚屉。2015年7月30日,第一個(gè)以太坊區(qū)塊被開采漾峡」サ“世界計(jì)算機(jī)”開始為世界服務(wù)......

Vitalik Buterin的文章“以太坊的前史”于2017年9月出版,為以太坊最早的時(shí)刻提供了一個(gè)迷人的第一人稱視角生逸。

你可以在https://vitalik.ca/general/2017/09/14/prehistory.html上閱讀牢屋。

以太坊的四個(gè)發(fā)展階段

以太坊的誕生是第一階段的發(fā)布,名為“Frontier”槽袄。以太坊的發(fā)展計(jì)劃分為四個(gè)不同的階段烙无,每個(gè)新階段都會(huì)發(fā)生重大變化。每個(gè)階段可能包括子版本遍尺,稱為“硬分叉”截酷,以不向后兼容的方式更改功能铐懊。

四個(gè)主要發(fā)展階段是代號(hào)為Frontier屹培,Homestead,Metropolis和Serenity畸悬。中間硬分叉代號(hào)為“Ice Age”歧蕉,“DAO”灾部,“Tangerine Whistle”,“Spurious Dragon”惯退,“Byzantium”和“Constantinople”赌髓。下面列出了硬分叉發(fā)生的區(qū)塊編號(hào):

Block #0

"Frontier" - 以太坊的初始階段,持續(xù)時(shí)間為2015年7月30日至2016年3月催跪。

Block #200,000

"Ice Age" - 引入指數(shù)難度增加的硬分叉锁蠕,促使向 Proof-of-Stake 過渡。

Block #1,150,000

"Homestead" - 以太坊的第二階段懊蒸,于2016年3月推出荣倾。

Block #1,192,000

"DAO" - 扭轉(zhuǎn)了被攻擊的DAO合約并導(dǎo)致以太坊和以太坊經(jīng)典分裂成兩個(gè)競(jìng)爭(zhēng)系統(tǒng)的硬分叉。

Block #2,463,000

"Tangerine Whistle" - 改變某些IO運(yùn)算的gas計(jì)算骑丸,并從拒絕服務(wù)攻擊中清除累積狀態(tài)舌仍,該攻擊利用了這些操作的低gas成本。

Block #2,675,000

"Spurious Dragon" - 一個(gè)解決更多拒絕服務(wù)攻擊媒介的硬分叉通危,以及另一種狀態(tài)清除铸豁。此外,還有重播攻擊保護(hù)機(jī)制菊碟。

現(xiàn)在的狀態(tài)

我們目前處于“Metropolis”階段节芥,計(jì)劃作為代號(hào)為Byzantium和Constantinople的兩個(gè)硬分叉。Byzantium于2017年10月生效,預(yù)計(jì)到2018年中期Constantinople头镊。

Block #4,370,000

"Metropolis Byzantium" - Metropolis是以太坊的第三個(gè)階段蚣驼,目前在撰寫本書時(shí),于2017年10月推出.Byzantium是Metropolis的兩個(gè)硬分叉中的第一個(gè)相艇。

未來的計(jì)劃

在Metropolis'Byzantium硬叉之后颖杏,還有一個(gè)為Metropolis計(jì)劃的硬叉。大都會(huì)之后是以太坊部署的最后階段厂捞,代號(hào)為Serenity输玷。

Constantinople

Metropolis階段的第二部分,計(jì)劃于2018年中期靡馁。預(yù)計(jì)將包括切換到混合POW/POS共識(shí)算法欲鹏,以及其他變更。

Serenity

以太坊的第四個(gè)也是最后一個(gè)階段臭墨。Serenity尚未有計(jì)劃的發(fā)布日期赔嚎。

以太坊:通用區(qū)塊鏈

原始區(qū)塊鏈(比特幣的區(qū)塊鏈)跟蹤比特幣的單位狀態(tài)及其所有權(quán)。你可以將比特幣視為分布式共識(shí)狀態(tài)機(jī)胧弛,其中交易導(dǎo)致全局狀態(tài)轉(zhuǎn)換尤误,從而改變硬幣的所有權(quán)。狀態(tài)轉(zhuǎn)換受到共識(shí)規(guī)則的約束结缚,允許所有參與者在挖掘幾個(gè)區(qū)塊之后(最終)收斂于系統(tǒng)的共同(共識(shí))狀態(tài)损晤。

以太坊也是一個(gè)分布式狀態(tài)機(jī)。但是红竭,以太坊不僅僅跟蹤貨幣所有權(quán)狀態(tài)尤勋,而是跟蹤通用數(shù)據(jù)存儲(chǔ)的狀態(tài)轉(zhuǎn)換。一般來說茵宪,我們指的是任何可以表示為鍵值元組的數(shù)據(jù)最冰。鍵值數(shù)據(jù)存儲(chǔ)只存儲(chǔ)由某個(gè)鍵引用的任意值。例如稀火,存儲(chǔ)值“Mastering Ethereum”暖哨,由“Book Title”鍵引用。在某些方面凰狞,這與通用計(jì)算機(jī)使用的隨機(jī)存取存儲(chǔ)器(RAM)的數(shù)據(jù)存儲(chǔ)模型具有相同的目的篇裁。以太坊有記憶它存儲(chǔ)代碼和數(shù)據(jù),并使用以太坊區(qū)塊鏈來跟蹤內(nèi)存隨時(shí)間的變化情況赡若。與通用存儲(chǔ)程序計(jì)算機(jī)一樣茴恰,以太坊可以將代碼加載到其狀態(tài)機(jī)中并運(yùn)行該代碼,將結(jié)果狀態(tài)更改存儲(chǔ)在其區(qū)塊鏈中斩熊。與通用計(jì)算機(jī)的兩個(gè)關(guān)鍵區(qū)別在于,以太坊狀態(tài)變化由共識(shí)規(guī)則控制伐庭,并且狀態(tài)全局分布在共享分類賬上粉渠。以太坊回答了這樣一個(gè)問題:“如果我們能夠跟蹤任意狀態(tài)并對(duì)狀態(tài)機(jī)進(jìn)行編程分冈,創(chuàng)建一個(gè)在共識(shí)下運(yùn)行的全球計(jì)算機(jī)怎么辦?”霸株。

以太坊的組成部分

在以太坊中雕沉,描述的區(qū)塊鏈系統(tǒng)中的組件更具體地說:

P2P網(wǎng)絡(luò)

以太坊在以太坊主網(wǎng)絡(luò)上運(yùn)行,該網(wǎng)絡(luò)可在TCP端口30303上尋址去件,并運(yùn)行一個(gè)名為DΞVp2p的協(xié)議坡椒。

共識(shí)規(guī)則

以太坊的共識(shí)規(guī)則,在參考規(guī)范中定義尤溜。

交易

以太坊交易是網(wǎng)絡(luò)消息倔叼,包括(其中包括)發(fā)送者,接收者宫莱,值和數(shù)據(jù)的有效載荷丈攒。

狀態(tài)機(jī)

以太坊狀態(tài)轉(zhuǎn)換由以太坊虛擬機(jī)(EVM)處理,這是一個(gè)執(zhí)行字節(jié)碼(機(jī)器語言指令)的基于堆棧的虛擬機(jī)授霸。稱為“智能合約”的EVM程序是用高級(jí)語言編寫的(例如Solidity)巡验,并編譯為字節(jié)碼以便在EVM上執(zhí)行。

Blockchain

以太坊的區(qū)塊鏈作為數(shù)據(jù)庫(通常是Google的LevelDB)本地存儲(chǔ)在每個(gè)節(jié)點(diǎn)上碘耳,該數(shù)據(jù)庫包含稱為Merkle Patricia Tree的序列化哈希數(shù)據(jù)結(jié)構(gòu)中的交易和系統(tǒng)狀態(tài)显设。

共識(shí)算法

以太坊目前使用名為Ethash的Proof-of-Work算法,但有計(jì)劃在不久的將來過渡到代號(hào)為Casper的Proof-of-Stake系統(tǒng)辛辨。

客戶端

以太坊有幾種可互操作的客戶端軟件實(shí)現(xiàn)捕捂,其中最突出的是Go-Ethereum(Geth)和Parity。

進(jìn)一步參考

以太坊黃皮書:https://ethereum.github.io/yellowpaper/paper.pdf
“Beige Paper”:用不太正式的語言為更廣泛的受眾重寫“黃皮書”:https://github.com/chronaeon/beigepaper
DΞVp2p網(wǎng)絡(luò)協(xié)議:https://github.com/ethereum/wiki/wiki/%C3%90%CE%9EVp2p-Wire-Protocol
以太坊虛擬機(jī)Awesome List:https://github.com/ethereum/wiki/wiki/Ethereum-Virtual-Machine-(EVM)-Awesome-List
LevelDB數(shù)據(jù)庫(最常用于存儲(chǔ)區(qū)塊鏈的本地副本):http://leveldb.org
Merkle Patricia Trees:https://github.com/ethereum/wiki/wiki/Patricia-Tree
Ethash工作證明共識(shí)算法:https://github.com/ethereum/wiki/wiki/Ethash
Casper Proof-of-Stake v1實(shí)施指南:https://github.com/ethereum/research/wiki/Casper-Version-1-Implementation-Guide
Go-Ethereum(Geth)客戶:https://geth.ethereum.org/
Parity以太坊客戶:https://parity.io/

以太坊和圖靈完備性

一旦你開始閱讀以太坊愉阎,你會(huì)立即聽到“圖靈完備”一詞绞蹦。他們說,以太坊與比特幣不同榜旦,是“圖靈完備”幽七。這到底是什么意思呢?

術(shù)語“圖靈完備”以英國(guó)數(shù)學(xué)家艾倫·圖靈(Alan Turing)的名字命名溅呢,他被認(rèn)為是計(jì)算機(jī)科學(xué)之父澡屡。1936年,他創(chuàng)建了一個(gè)計(jì)算機(jī)的數(shù)學(xué)模型咐旧,該計(jì)算機(jī)由一個(gè)操縱符號(hào)的狀態(tài)機(jī)組成驶鹉,通過在順序存儲(chǔ)器上讀取和寫入它們(類似于無限長(zhǎng)的磁帶)。通過這種結(jié)構(gòu)铣墨,Alan Turing繼續(xù)提供數(shù)學(xué)基礎(chǔ)來回答(否定的)關(guān)于通用可計(jì)算性的問題室埋,這意味著是否所有問題都是可解決的。他證明了存在一些無法計(jì)算的問題。具體來說姚淆,他證明了停機(jī)問題(試圖評(píng)估程序是否最終會(huì)停止運(yùn)行)是不可解決的孕蝉。

Alan Turing進(jìn)一步將系統(tǒng)定義為Turing Complete,如果它可用于模擬任何圖靈機(jī)腌逢。這種系統(tǒng)稱為通用圖靈機(jī)(UTM)降淮。

以太坊能夠在稱為以太坊虛擬機(jī)的狀態(tài)機(jī)中執(zhí)行存儲(chǔ)程序,同時(shí)向內(nèi)存讀取和寫入數(shù)據(jù)搏讶,使其成為圖靈完備系統(tǒng)佳鳖,因此成為通用圖靈機(jī)∶教瑁考慮到有限存儲(chǔ)器的限制系吩,以太坊可以計(jì)算任何可由任何圖靈機(jī)計(jì)算的算法。

以太坊的突破性創(chuàng)新是將存儲(chǔ)程序計(jì)算機(jī)的通用計(jì)算體系結(jié)構(gòu)與去中心化的區(qū)塊鏈相結(jié)合吓笙,從而創(chuàng)建分布式單狀態(tài)(單例)世界計(jì)算機(jī)淑玫。以太坊程序“無處不在”,但產(chǎn)生一個(gè)共識(shí)狀態(tài)面睛,由共識(shí)規(guī)則保證絮蒿。

圖靈完備性作為“特征”

聽說以太坊是圖靈完備,你可能會(huì)得出結(jié)論叁鉴,這是一個(gè)在圖靈不完整的系統(tǒng)中某種程度上缺乏的功能土涝。相反,它恰恰相反幌墓。需要非常集中精力來約束系統(tǒng)但壮,使其不是圖靈完備。即使是最簡(jiǎn)單的狀態(tài)機(jī)常侣,也會(huì)出現(xiàn)圖靈完備性蜡饵。實(shí)際上,已知的最簡(jiǎn)單的圖靈完備狀態(tài)機(jī)(Rogozhin胳施,1996)有4個(gè)狀態(tài)并使用6個(gè)符號(hào)溯祸,狀態(tài)定義只有22個(gè)指令長(zhǎng)。

圖靈完備性不僅可以在最簡(jiǎn)單的系統(tǒng)中實(shí)現(xiàn)舞肆,而且被設(shè)計(jì)為受限制的系統(tǒng)使得它們是圖靈不完備的焦辅,通常被發(fā)現(xiàn)是“意外圖靈完備”。圖靈不完備的約束系統(tǒng)設(shè)計(jì)起來比較困難椿胯,必須小心維護(hù)才能保持圖靈不完備筷登。

可以在此處找到“意外圖靈完備”系統(tǒng)的有趣參考:http://beza1e1.tuxen.de/articles/accidentally_turing_complete.html

以太坊是圖靈完備的事實(shí)意味著任何復(fù)雜程序都可以在以太坊中計(jì)算出來。但這種靈活性帶來了一些棘手的安全和資源管理問題哩盲。

圖靈完備性的含義

圖靈證明前方,你無法通過在計(jì)算機(jī)上模擬程序來預(yù)測(cè)程序是否會(huì)終止狈醉。簡(jiǎn)單來說,我們無法在不運(yùn)行程序的情況下預(yù)測(cè)程序的路徑惠险。圖靈完備系統(tǒng)可以在“無限循環(huán)”中運(yùn)行舔糖,這是一個(gè)術(shù)語(過度簡(jiǎn)化)用于描述不終止的程序。創(chuàng)建一個(gè)運(yùn)行永不結(jié)束的循環(huán)的程序是微不足道的莺匠。但是由于起始條件和代碼之間的復(fù)雜交互,無意中永無止境的循環(huán)可以在沒有警告的情況下出現(xiàn)十兢。在以太坊中趣竣,這提出了一個(gè)挑戰(zhàn):每個(gè)參與節(jié)點(diǎn)(客戶端)必須驗(yàn)證每個(gè)交易,運(yùn)行它調(diào)用的任何智能合約旱物。但正如圖靈所證明的那樣遥缕,以太坊無法預(yù)測(cè)智能合約是否將終止,或者它將運(yùn)行多長(zhǎng)時(shí)間而不實(shí)際運(yùn)行(可能永遠(yuǎn)運(yùn)行)宵呛。無論是偶然的单匣,或者有目的的,可以創(chuàng)建智能合約宝穗,使其在節(jié)點(diǎn)嘗試驗(yàn)證它時(shí)永遠(yuǎn)運(yùn)行户秤,實(shí)際上是拒絕服務(wù)攻擊。當(dāng)然逮矛,在需要一毫秒驗(yàn)證的程序和一個(gè)永遠(yuǎn)運(yùn)行的程序之間存在無限范圍的令人討厭的資源占用鸡号、內(nèi)存膨脹、CPU過熱程序须鼎,這些程序只會(huì)浪費(fèi)資源鲸伴。在世界計(jì)算機(jī)中,濫用資源的程序會(huì)濫用世界資源晋控。如果無法預(yù)先預(yù)測(cè)資源使用情況汞窗,以太坊如何限制智能合約使用的資源?

為了應(yīng)對(duì)這一挑戰(zhàn)赡译,以太坊引入了一種稱為gas的計(jì)量機(jī)制仲吏。當(dāng)EVM執(zhí)行智能合約時(shí),它會(huì)仔細(xì)考慮每條指令(計(jì)算捶朵,數(shù)據(jù)訪問等)蜘矢。每條指令都有一個(gè)以gas為單位的預(yù)定成本。當(dāng)交易觸發(fā)智能合約的執(zhí)行時(shí)综看,它必須包含一定量的gas品腹,用于設(shè)置運(yùn)行智能合約時(shí)可以消耗的計(jì)算上限。如果計(jì)算消耗的gas量超過交易中可用的gas红碑,則EVM將終止執(zhí)行舞吭。gas是以太坊用來允許圖靈完備計(jì)算同時(shí)限制任何程序可以消耗的資源的機(jī)制泡垃。

2015年,攻擊者開發(fā)了EVM指令羡鸥,其成本遠(yuǎn)遠(yuǎn)低于應(yīng)有的成本蔑穴。這允許攻擊者創(chuàng)建使用大量?jī)?nèi)存的交易并花費(fèi)幾分鐘來驗(yàn)證。為了解決這一攻擊惧浴,以太坊不得不改變其gas核算公式存和,以便在向后不兼容(硬分叉)變化中獲得某些指令。但是衷旅,即使進(jìn)行了這項(xiàng)更改捐腿,以太坊客戶也必須跳過驗(yàn)證這些交易或浪費(fèi)數(shù)周時(shí)間來驗(yàn)證這些交易。

從通用區(qū)塊鏈到去中心化應(yīng)用(DApps)

以太坊開始作為一種制作通用區(qū)塊鏈的方法柿顶,該區(qū)塊鏈可以被編程用于各種用途茄袖。但很快,以太坊的愿景擴(kuò)展到成為去中心化應(yīng)用程序(DApps)編程的平臺(tái)嘁锯。DApps代表了比“智能合約”更廣泛的視角宪祥。DApp至少是智能合約和Web用戶界面。更廣泛地說家乘,DApp是一個(gè)基于開放蝗羊、去中心化、p2p基礎(chǔ)設(shè)施服務(wù)構(gòu)建的Web應(yīng)用程序烤低。

DApp至少由以下組成:

  • 區(qū)塊鏈上的智能合約肘交。
  • Web前端用戶界面。

此外扑馁,許多DApps還包括其他去中心化的組件涯呻,例如:

  • 去中心化(P2P)存儲(chǔ)協(xié)議和平臺(tái)。
  • 去中心化(P2P)消息傳遞協(xié)議和平臺(tái)腻要。
Tip 你可能會(huì)看到DApp拼寫為DApps复罐。D字符是拉丁字符,稱為“ETH”雄家,暗指以太坊效诅。要顯示此字符,請(qǐng)?jiān)贖TML中使用十進(jìn)制實(shí)體#208趟济,并使用Unicode字符0xCE(UTF-8)或0x00D0(UTF-16)乱投。

發(fā)展萬維網(wǎng)

2004年,“Web 2.0”這個(gè)術(shù)語變得突出顷编,描述了Web向用戶生成內(nèi)容戚炫,響應(yīng)式界面和交互性的演變。Web 2.0不是技術(shù)規(guī)范媳纬,而是描述Web應(yīng)用程序新焦點(diǎn)的術(shù)語双肤。

DApps的概念旨在使萬維網(wǎng)進(jìn)入下一個(gè)自然發(fā)展階段施掏,將對(duì)等協(xié)議的去中心化引入Web應(yīng)用程序的各個(gè)方面。用于描述這種演變的術(shù)語是Web 3茅糜,意思是Web的第三個(gè)“版本”七芭。Web 3首先由Gavin Wood提出,代表了Web應(yīng)用程序的新愿景和重點(diǎn):從集中擁有和托管應(yīng)用程序到基于去中心化協(xié)議的應(yīng)用程序蔑赘。

在后面的章節(jié)中狸驳,我們將探索以太坊web3.js JavaScript庫,它將瀏覽器中運(yùn)行的JavaScript應(yīng)用程序與以太坊區(qū)塊鏈聯(lián)系起來缩赛。web3.js庫還包括一個(gè)名為Swarm的P2P存儲(chǔ)網(wǎng)絡(luò)接口和一個(gè)名為Whisper的P2P消息服務(wù)锌历。通過在Web瀏覽器中運(yùn)行的JavaScript庫中包含這三個(gè)組件,開發(fā)人員可以使用完整的應(yīng)用程序開發(fā)套件來構(gòu)建web3 DApp:

image

圖1. Web3:一套去中心化的應(yīng)用程序組件峦筒,用于Web的下一代發(fā)展

以太坊的發(fā)展文化

到目前為止,我們已經(jīng)討論過以太坊的目標(biāo)和技術(shù)與之前的其他區(qū)塊鏈有何不同窗慎,比如比特幣物喷。以太坊也有著截然不同的發(fā)展文化。

在比特幣中遮斥,開發(fā)遵循保守原則:所有變更都經(jīng)過仔細(xì)研究峦失,以確保沒有任何現(xiàn)有系統(tǒng)中斷。在大多數(shù)情況下术吗,只有在向后兼容時(shí)才會(huì)實(shí)施更改尉辑。允許現(xiàn)有客戶“選擇加入”,但如果他們決定不升級(jí)较屿,則會(huì)繼續(xù)運(yùn)營(yíng)隧魄。

相比之下,在以太坊隘蝎,發(fā)展文化的重點(diǎn)是速度和創(chuàng)新购啄。口頭禪是“快速行動(dòng)嘱么,破壞事物”狮含。如果需要進(jìn)行更改,則會(huì)實(shí)現(xiàn)更改曼振,即使這意味著使先前的假設(shè)無效几迄,破壞兼容性或強(qiáng)制客戶端更新。以太坊的發(fā)展文化的特點(diǎn)是快速創(chuàng)新冰评,快速發(fā)展和愿意參與實(shí)驗(yàn)映胁。

這對(duì)您作為開發(fā)人員意味著,您必須保持靈活性并準(zhǔn)備好重建您的基礎(chǔ)架構(gòu)集索,因?yàn)橐恍┗炯僭O(shè)會(huì)發(fā)生變化屿愚。不要假設(shè)任何東西是靜態(tài)的或永久的汇跨。以太坊開發(fā)人員面臨的一大挑戰(zhàn)是,將代碼部署到不可變的分類帳本與仍在快速發(fā)展的開發(fā)平臺(tái)之間存在固有的矛盾妆距。你不能簡(jiǎn)單地“升級(jí)”智能合約穷遂。您必須準(zhǔn)備好部署新的,遷移用戶娱据、應(yīng)用程序和資金蚪黑,然后重新開始。

具有諷刺意味的是中剩,這也意味著無法實(shí)現(xiàn)構(gòu)建具有更多自主權(quán)和更少集中控制的系統(tǒng)的目標(biāo)忌穿。在未來幾年內(nèi),自主權(quán)和去中心化需要在平臺(tái)上獲得比在以太坊中更多的穩(wěn)定性结啼。為了“發(fā)展”平臺(tái)掠剑,您必須準(zhǔn)備好廢棄并重新啟動(dòng)智能合約,這意味著您必須對(duì)它們保持一定程度的控制郊愧。

但是朴译,從積極的方面來看,以太坊正在快速前進(jìn)属铁∶呤伲“自行車掉鏈子”的機(jī)會(huì)很少 - 這種表達(dá)意味著爭(zhēng)論一些細(xì)節(jié),例如如何在建筑物后面建造自行車棚焦蘑。如果你開始自行車掉鏈子盯拱,你可能會(huì)突然發(fā)現(xiàn)開發(fā)團(tuán)隊(duì)的其他人改變了計(jì)劃,并放棄了自行車例嘱,轉(zhuǎn)向自主氣墊船狡逢。以太坊中的神圣原則,最終標(biāo)準(zhǔn)或固定界面非常少拼卵。

最終甚侣,以太坊核心協(xié)議開發(fā)將變慢并且其接口將變得固定。但與此同時(shí)间学,創(chuàng)新是驅(qū)動(dòng)原則殷费。你最好跟上,因?yàn)闆]有人會(huì)為你減速低葫。

為什么要學(xué)習(xí)以太坊详羡?

區(qū)塊鏈的學(xué)習(xí)曲線非常陡峭,因?yàn)樗鼈儗⒍鄠€(gè)學(xué)科組合成一個(gè)領(lǐng)域:編程嘿悬、信息安全实柠、密碼學(xué)、經(jīng)濟(jì)學(xué)善涨、分布式系統(tǒng)窒盐、p2p網(wǎng)絡(luò)等草则。以太坊使這一學(xué)習(xí)曲線不那么陡峭,所以你可以快點(diǎn)開始吧蟹漓。但是炕横,在一個(gè)看似簡(jiǎn)單的環(huán)境的表面之下,還有更多葡粒。當(dāng)你學(xué)習(xí)并開始更深入地思考時(shí)份殿,總會(huì)有另一層復(fù)雜性和奇跡。

以太坊是學(xué)習(xí)區(qū)塊鏈的絕佳平臺(tái)嗽交,它正在建立一個(gè)龐大的開發(fā)者社區(qū)卿嘲,比任何其他區(qū)塊鏈平臺(tái)都要快。除了任何其他區(qū)塊鏈夫壁,以太坊是為開發(fā)人員構(gòu)建的區(qū)塊鏈拾枣。熟悉JavaScript應(yīng)用程序的開發(fā)人員可以進(jìn)入以太坊并開始非常快速地生成工作代碼盒让。在以太坊的頭幾年放前,通常會(huì)看到T恤宣布你可以用五行代碼創(chuàng)建一個(gè)token。當(dāng)然糯彬,這是一把雙刃劍。編寫代碼很容易葱她,但編寫好的代碼和安全代碼非常困難撩扒。

這本書會(huì)教你什么?

這本書潛入以太坊并檢查每個(gè)組成部分吨些。你將從一個(gè)簡(jiǎn)單的交易開始搓谆,剖析它的工作原理,建立一個(gè)簡(jiǎn)單的合同豪墅,使其更好泉手,并通過以太坊系統(tǒng)跟隨它的旅程。

你將了解以太坊的工作原理偶器,以及它為何如此設(shè)計(jì)斩萌。你將能夠理解每個(gè)部分的工作原理,以及它們?nèi)绾谓M合在一起以及原因屏轰。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末颊郎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子霎苗,更是在濱河造成了極大的恐慌姆吭,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唁盏,死亡現(xiàn)場(chǎng)離奇詭異内狸,居然都是意外死亡检眯,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門昆淡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锰瘸,“玉大人,你說我怎么就攤上這事瘪撇』癫纾” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵倔既,是天一觀的道長(zhǎng)恕曲。 經(jīng)常有香客問我,道長(zhǎng)渤涌,這世上最難降的妖魔是什么佩谣? 我笑而不...
    開封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮实蓬,結(jié)果婚禮上茸俭,老公的妹妹穿的比我還像新娘。我一直安慰自己安皱,他們只是感情好调鬓,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著酌伊,像睡著了一般腾窝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上居砖,一...
    開封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天虹脯,我揣著相機(jī)與錄音,去河邊找鬼奏候。 笑死循集,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蔗草。 我是一名探鬼主播咒彤,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼咒精!你這毒婦竟也來了蔼紧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤狠轻,失蹤者是張志新(化名)和其女友劉穎奸例,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡查吊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年谐区,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逻卖。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宋列,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出评也,到底是詐尸還是另有隱情炼杖,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布盗迟,位于F島的核電站坤邪,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏罚缕。R本人自食惡果不足惜艇纺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望邮弹。 院中可真熱鬧黔衡,春花似錦、人聲如沸腌乡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽与纽。三九已至侣签,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間渣锦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工氢哮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留袋毙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓冗尤,卻偏偏與公主長(zhǎng)得像听盖,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子裂七,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容