BTC
ETH
HTX
SOL
BNB
查看行情
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

以太坊五週年:從涅槃中甦醒

Unitimes
特邀专栏作者
本文約8078字,閱讀全文需要約12分鐘
當區塊鏈再一次走進普羅大眾的視野,並得到科技巨頭們前所未有的重視時,以太坊已經成為區塊鏈領域無法被忽視的巨艦。
AI總結
當區塊鏈再一次走進普羅大眾的視野,並得到科技巨頭們前所未有的重視時,以太坊已經成為區塊鏈領域無法被忽視的巨艦。

編者按:本文來自Unitimes(ID:Uni-times),經授權發布。

編者按:本文來自

,經授權發布。

《以太坊協議的史前史》作者:Vitalik Buterin,翻譯:喏唄爾

二級標題

《以太坊5歲啦! 》作者:以太坊基金會,翻譯:Johnny

當區塊鏈再一次走進普羅大眾的視野,並得到科技巨頭們前所未有的重視時,以太坊已經成為區塊鏈領域無法被忽視的巨艦。在資本肆無忌憚野蠻增長的混沌時代,以太坊的開發者和社區始終小心翼翼地呵護著這艘小船,把穩方向,一路打怪升級成為一代巨艦。

二級標題

二級標題

二級標題

劫難

二級標題

分別

二級標題https://vitalik.ca二級標題

二級標題

寫了一篇回顧“以太坊是如何誕生”的文章。乘著以太坊五週年生日之際,我們不妨重新回顧一下這篇《以太坊協議的史前史》。

二級標題

本文摘自由Vitalik Buterin本人撰寫,靈鈦科技和獨角時代翻譯出版的《理·想:以太坊的區塊鏈創世錄》。同時誠摯感謝以太坊社區的每一位開發者、翻譯者和佈道者,只因有你,區塊鏈的世界不再單調。

(2017年9月14日)

二級標題

以太坊協議的史前史

https://web.archive.org/

(2017年9月14日)

編者按:本文是維塔利克對以太坊協議發展歷程的回憶,講述了以太坊協議從構思到初次發布、迭代的故事。

https://web.archive.org/

儘管當前以太坊協議背後的理念在這兩年已經大致穩定下來了,但以太坊當前的構想和完整形式並非一朝一夕形成的。在以太坊區塊鏈面世之後,其協議經歷了一系列重大的演變和決策。本文旨在回顧以太坊協議從開始到發布的演變過程。至於Geth、cppethereum、pyethereum以及EthereumJ在協議實現的過程中所做的大量工作,以及關於以太坊生態系統的應用和商業歷史,將不在本文討論的範圍內。

同樣不在討論範圍內的還有關於Casper以及分片研究的歷史。毫無疑問,我們可以寫更多的文章來討論弗拉德(Vlad)、加文(Gavin)、我自己以及其他人曾經提出過並且被捨棄的各種觀點,包括工作量證明的證明、輪輔式多鏈、超立方體、影子鏈(可以說是Plamsa的前身)、鏈纖維以及Casper的各種迭代版本,還有弗拉德提出的對在共識協議內參與者的激勵機制及其性質進行推理的快速演變思想。這些觀點背後的故事本身已經復雜到足以另寫一篇文章。因此,暫時不討論它們。

先從最早的版本說起。這個版本最終成了以太坊,但在當時它甚至還不叫以太坊。我在2013年10月訪問以色列的時候,花了很多時間與萬事達幣團隊在一起,甚至還建議他們添加某些功能。再三思考過他們所做的事情以後,我向團隊發送了一份提案,提議讓他們的協議變得更加通用,並且能夠在無需增加龐大而復雜的功能集的情況下支持更多類型的合約:

需要注意的是,這一版本與以太坊後期更廣闊的願景大相徑庭:它純粹只專注於萬事達幣當時正在嘗試突破的技術,即雙方合約。在該合約中,A方和B方共同投入資金,隨後雙方可以根據合約中指定的某些公式將資金提取出來(例如,賭注內容為“如果X發生了,則把所有的資金都給A;反之,則把所有的資金都給B”)。實現這個合約的腳本語言不是圖靈完備的。

萬事達幣團隊對此印象深刻,但是他們並沒有興趣放棄他們所做的一切事情去朝著這個方向發展,而我越發深信這是一個正確的選擇。因此,大約在12月,第二個版本面世了:

在這個版本中,你可以看到完成了大量重構的結果。這些結果很大一部分都是11月份我在舊金山的一次長途漫步時想到的。到那時,我意識到智能合約具有完全通用化的潛力。比起腳本語言只能簡單地描述雙方關係,合約本身就是完成成熟的賬戶,並且具有持有、發送和接收資產的能力,甚至可以維持永久存儲(在當時,永久存儲被稱為“內存”,並且唯一的臨時“內存”是256寄存器)。只不過語言從基於棧的虛擬機轉變為更符合我意願的基於寄存器的虛擬機。我對此幾乎沒有異議,除了它看起來似乎更加複雜。

“以太(ether)”的字面意思是醚(即燃料,等同於gas)。在每一個計算步驟完成之後,一筆交易所調用的合約的餘額將會減少一些。如果合約的資金耗盡,那麼執行過程將會停止。請注意,這個接收者支付機制意味著合約本身必須要求發送者向該合約支付一筆費用。如果這筆費用沒有到賬,則立即退出執行。這一版本的協議分配了16個免費執行步驟的限額,從而允許合約拒絕不支付費用的交易。

加文的早期貢獻由兩個方面。首先,你可能注意到在初始設計中的合約調用模型是異步的:儘管合約A可以創建一筆內部交易給合約B(“內部交易”是以太坊的行話:最初它們僅被稱作“交易” ,隨後又被稱為“消息調用”或者“調用”)。在第一筆交易的執行完全完成以前,內部交易的執行不會開始。這意味著交易不能使用內部交易作為從其他合約獲取信息的途徑;想從其他合約獲取信息,只能使用EXTRO操作碼(有點像你用來讀取其他合約存儲的SLOAD),但這個操作碼隨後在加文和其他人的支持下移除了。

圖1

圖片描述

圖2

圖片描述

圖2

https://github.com/

圖2

圖片描述

圖2

查爾斯·霍斯金森(Charles Hoskinson)建議我們從比特幣的SHA256轉換為更新的SHA3(或者更準確地說,是keccak256)。儘管有過一段時間爭議,但通過與加文、安德魯以及其他人進行討論,我們還是確立了棧中的值的大小應該被限制在32 Byte。而另一種替代方案——無限制整數——則仍在考慮當中,因為該方案存在一個問題,即我們很難計算出執行家加法、乘法以及其他操作到底需要多少燃料。

回到2014年1月,我們最初想到的挖礦算法是一個叫匕首(Dagger) 的東西:

匕首是根據有向無環圖(Directed Acyclic Graph, DAG) 命名的。 DAG是一種用在算法中的數學結構,其思想是每隔N個區塊,就會有一個新的DAG由種子偽隨機生成。並且,DAG的底層將會是一個需要用幾十億字節來存儲的節點的集合。然而,在DAG中,生成任意一個獨立的值只需要計算計算幾千個條目。一次匕首計算包含在這種底層的數據集中的任意位置獲得一定數量的值,然後將這些值一起進行哈希運算。這意味著存在一種快速的方式可以進行匕首計算——已經將數據存儲在內存中,然後以一種緩慢但不會導致內存緊張的方式——重新從DAG中生成你需要從頭開始獲取的每一個值。

這個算法的目的就是和當時流行的算法一樣擁有相同的內存受限屬性,就像Scrypt算法,但是仍然對輕客戶端友好。礦工會使用快速的方法,所以他們的挖礦將受限於內存帶寬(理論上,消費者級別內存的優化程度已經足夠高了,因此用ASIC對其進行進一步優化十分困難),但輕客戶端可以使用內存寬鬆且緩慢的方式進行驗證。快速方法可能只需幾微秒,而慢速且內存寬鬆的方法可能需要幾毫秒,所以這對輕客戶端依然是可行的。

從這裡開始,這個算法伴隨著以太坊的發展歷程發生了幾次變化。接下來的想法是自適應工作量證明。在這個方案中,工作量證明將會涉及執行被隨機選出的以太坊合約,並且這裡麵包含了一個很巧妙的做法去抵抗ASIC:如果ASIC被開發出來了,那麼競爭礦工就會有動機去創建並發布該ASIC不擅長執行的合約。沒有一種ASIC能夠用於通用計算,因為它僅僅是一個CPU。因此,我們可以利用這類對抗激勵機制來實現本質上在執行通用計算的工作量證明。

由於一個簡單的原因,這個想法後來破碎了。這個原因是長程攻擊。攻擊者可以從區塊1 開始構建一條鏈,並且只用簡單的合約對這條鏈進行填充。需要注意的是,攻擊者可以為這種簡單的合約設計出專門的硬件,從而使攻擊鏈迅速赶超主鏈。所以......又回到了原點。

下一個算法被稱為“隨機電路”,具體的描述可以查看其Google文件。這個算法是我和弗拉德·贊菲爾(Vlad Zamfir) 提出的,並由馬修·萬普勒·多蒂(Matthew Wampler-Doty) 和其他人進行分析。這個算法的思路是通過執行偽隨機生成電路來模擬挖礦算法中的通用計算。這一次,沒有任何確鑿的證據表明基於這些原則的東西是行不通的。但我們在2014年接觸的計算機硬件專家都對此表示非常悲觀。馬修·萬普勒·多蒂提出了一種基於SAT解決方案的工作量證明,但最終也被拒絕了。

最後,兜兜轉轉,我們還是提出了Dagger Hashimoto算法,有時簡稱為Dashimoto。這種算法借鑒了Hashimoto的很多想法。 Hashimoto是薩帝厄斯·追亞(Thaddeus Dryja) 提出的工作量證明機制,它開創了“I/O約束工作量證明”概念。在該機制中,挖礦速度的主要限制因素不是每秒鐘哈希運算的速度,而是RAM每秒可訪問的兆字節數。然而,Dagger Hashimoto將這種工作量證明機制與匕首算法中對輕客戶端友好的DAG所生成的數據集結合了起來。經過我、馬修、蒂姆和其他人多次調整以後,這些想法終於融入了我們現在稱為“Ethash”的算法中。

到2014年夏天,除了工作量證明大概需要到2015年初才能到達Ethash階段,這個協議已經相當穩定,並且其半正式規範已經以加文的黃皮書形式面世了。

2014年8月,我開發並引入了叔區塊機制。該機制可以使以太坊的區塊鏈具備更短的區塊時間以及更高的處理能力,同時減少了中心化的風險。關於叔區塊機制的介紹,可以參見PoC6。

在與比特股團隊討論之後,我們考慮使用堆作為頭等數據結構——儘管最後由於時間不夠沒有這樣做,並且後來的安全審計和DoS攻擊讓我們明白:在當時安全地實現這一功能遠比想像中更難。

9月,我和加文計劃對協議設計進行兩處重大的變更。首先,除了狀態樹和交易樹,每一個區塊還將包含一顆收據樹。收據樹將包含由每一筆交易創建的日誌的哈希以及中間的狀態根。日誌將會允許交易創建可以保存在區塊鏈中的輸出,並且可被輕客戶端訪問。然而,未來的狀態計算無法訪問這些日誌。這種方法使得去中心化應用能夠很容易地查詢時間,如代幣轉賬、購買、正在被創建和被撮合的交易所訂單,以及正在進行的拍賣等。

我們還考慮了其他想法,如把默克爾樹從一筆交易的完整執行軌跡中抽取出來,以允許任意內容得到證明。在對簡單性和完整性進行折中以後,我們選擇了使用日誌。

其次就是預編譯的想法。預編譯解決了允許複雜的加密計算在EVM中可用而不必處理EVM開銷的問題。我們還提出過許多關於本地合約的雄心勃勃的想法。在這些想法中,如果礦工擁有關於某些合於的更優的實施方法,那麼他們就會投票下調這些合約的燃料價格。如此一來,那些大多數礦工都能快速執行的合約自然就擁有更低的燃料價格了。然而,所有這些想法都被拒絕了,因為我們無法提出一種在加密經濟學角度足夠安全的方式來實現它。攻擊者總是可以創建一些合約來執行帶有活動門的加密操作,然後將活動門分發給自己和他們的朋友,從而能夠更快地執行這個合約。隨後,攻擊者投票下調燃料價格並利用這一點對網絡進行DoS攻擊。相反,我們選擇了一個不那麼雄心勃勃的方法,即在協議中簡單地指定較小的預編譯數量,用於哈希和簽名方案等常用操作。

加文也是最初支持開發協議抽像這一想法的關鍵人物。所謂協議抽象,就是將協議的眾多部分,如以太幣餘額、交易簽名算法、隨機數等,作為合約遷移到協議本身中。其理論上的最終目標是要達到整個以太坊協議能夠被描述為將函數調用加入到具有特定預初始化狀態的虛擬機中的目標。我們沒有足夠的時間把這些想法都加入到最初的前沿版本中,不過預計這些原則將通過“君士坦丁堡”的一些變化、Casper合約和分片規範慢慢開始被整合。

到2015年初,尤塔·斯坦納(Jutta Steiner) 和其他人組織了發布前的安全審計,包括軟件代碼審計和學術審計。軟件代碼審計主要是在分別由加文和傑夫瑞主導的C++和Go語言實現上。儘管我的Pyethereum實現也進行了一次簡單的審計。在這兩次學術審計中,一次由尤塔·埃雅爾(Ittay Eyal) (因提出“自私挖礦”而成名) 負責進行的,另一次由安德魯·米勒和Least Authority的其他成員進行。埃雅爾的審計導致了一個輕微的協議變更,即鏈的總難度值不會包含叔區塊。由Least Authority負責的審計更側重於智能合約、燃料經濟學以及帕特里夏樹。這次審計也導致了幾處的協議變更。其中,比較小的一處變更是使用sha3(addr) 和sha3(key) 作為樹的鍵值,而不是直接使用地址和鍵值。這將使得攻擊者更難對樹發起最壞攻擊。

我們討論的另一個重要的問題是燃料限制投票機制。那時候,我們已經對關於比特幣區塊大小的爭論缺乏進展感到擔憂,並希望在以太坊中擁有一個靈活的設計:該設計能夠根據需要隨時間調整。但面臨的挑戰是,最佳的限制是什麼?我最初的想法是製定一個動態的限制,該限制是實際燃料使用量的長期指數移動平均值的1.5倍。因此,從長遠來看,平均區塊都會被佔用2/3的容量。然而,安德魯證明了這種限制在某些方面是可以被利用的——具體來說就是,想要提高限制的礦工僅需要把消耗大量燃料卻只花費很少處理時間的交易都包含在他們自己的區塊中,從而創建出滿載區塊且不會虧損成本。因此,至少從最終的結果來看,這個機制的安全模型相當於只是讓礦工對燃料限制進行投票。

正文

正文

正文

正文

正文

正文

正文

正文

Vitalik
ETH
歡迎加入Odaily官方社群