以太坊簡介(2019 精校精注版)
編者注:本文原文寫作於 2016 年,是許多人瞭解以太坊的入門材料。我們重譯這篇文章,並加上一些註解,務求使入門材料也能跟上最新進展。舊譯本見《一個基礎的以太坊介紹》。
引言
以太坊的概念建立區塊鏈和密碼學貨幣之上,不熟悉區塊鏈和比特幣的讀者可以先去看看《比特幣的簡介》和《區塊鏈技術的簡介》。本文假定讀者對比特幣的執行已有一定了解。
以太坊是什麼喲?
以太坊是執行在計算機網路上的軟體,使資料和一些叫智慧合約程式,在沒有中央協調者的情況下,也可以在網路中複製與處理。以太坊的願景是創造一種不會停機的、抗審查的、能自我維持的去中心化世界計算機。
相關資訊請看以太坊基金會的為以太坊設立的公開網站:https://www.ethereum.org
比特幣在世界範圍內無數計算機上實現了交易資料的驗證,複製和儲存(因此也有人稱之為 “分散式賬本”)。而以太坊則把比特幣中區塊鏈的概念加以擴充套件,更進一步,希望在世界各地的無數計算機上同等無偏地執行計算機程式碼。
比特幣實現了分散式的資料儲存,以太坊則用同樣的方式實現了分散式的資料儲存和計算。(從整體來看),以太坊就像一臺計算機,而上面執行的計算機程式我們叫做 “智慧合約”。(從實際上來說),一個網路參與者乃是在他的電腦上用一種叫 “以太坊虛擬機器”(EVM) 的作業系統執行這些程式(“智慧合約”)。
編者注:這樣說更順一點:有無數人在自己的計算機上執行以太坊客戶端軟體,這些電腦之間會相互通訊、傳遞資料。只要這些資料符合一定的規則(“以太坊共識規則”),客戶端軟體就會按照一些規則來使用這些資料,具體來說,就是用這些資料在 EVM(“以太坊虛擬機器”)(相當於 Windows 或者 Android)中執行一些程式(“智慧合約”),然後得出結果。有趣的是,只要大家都遵守同樣的規則並相互通訊,無數節點得到的結果都是一樣的(“共識”)(但達成共識一般需要時間,不是瞬時達成的)。
可以參照下圖來理解:
(最下面一層是相互通訊,中間一層是對這些資料達成共識,最上面一層是用這些資料驅動應用程式的執行)
此外,這個過程還跟一個非常有意思的概念有關:“可信任計算”,指的是計算過程的可信任性。感興趣的可以看《可信任計算的黎明》。
怎麼 “執行” 以太坊呢?
你可以下載以太坊客戶端軟體。當然咯,如果你有足夠的耐心,也可以自己寫一個。類似於 BitTorrent 和 Bitcoin 這類軟體,以太坊客戶端會在網際網路中把你和其他使用相同客戶端軟體的人連線起來,這樣一來,你就可以從他們那下載以太坊的區塊鏈了。以太坊客戶端軟體還將獨立地驗證收到的每個區塊是否符合以太坊的規則。
以太坊客戶端軟體可以用於:
- 連線以太坊的網路
- 探索以太坊的區塊鏈
- 建立新的交易和智慧合約
- 執行智慧合約
- 挖掘新區塊
編者注:所謂的 “區塊鏈” 即是一系列的交易資料,這些交易是網路中所有計算機都確認過符合(當時的)規則並且執行過的(“交易” 主要是指密碼學貨幣的轉賬)。而 “挖掘新區塊” 的意思就是試圖把一些資料傳播出去讓其它計算機也來執行,之所以叫 “區塊” 是因為這時候這些交易是打包成一個資料塊來傳播的(別的時候,交易資料也可以獨立傳播)。
而平時我們說的 “區塊鏈”,指的是一套讓上述系統(所有計算機都儲存並且執行了同樣的交易資料)得以實現的技術(計算機互動協議)。
如此,你的計算機就化身為網路中的一個節點,運作著 “以太坊虛擬機器” ,並且與所有其他節點行為一致。在點對點的網路上,不存在主伺服器,任何電腦都有平等的權力和地位。
編者注:截至 2019 年 5 月,儲存了完整以太坊區塊鏈的節點(也稱為 “全節點”),即上文所說的 “無數”,約為 6000 個。因為網路是開放的,節點的數量也會不斷變化。
以太坊和比特幣的相似之處
認為理解以太坊最簡單的方法是對比以太坊和比特幣(一個更簡潔的系統)的相同點與不同點。事不宜遲,我們先說相同點。
以太坊也會形成一條區塊鏈
像比特幣一樣,以太坊也會形成一條區塊鏈,區塊鏈包含著資料塊(交易資料和智慧合約程式碼)。某些參與者建立和挖出區塊後,就分發給其他參與者去驗證(這個區塊的合規則性)。
要了解以太坊區塊鏈都記錄了什麼資訊,請看這個 “區塊瀏覽器”:https://etherscan.io
每個區塊都要引用前一個區塊的雜湊(或者說 “數字指紋”),這樣區塊就會前後相接形成一條鏈。想了解更多區塊鏈技術的詳細介紹,請參閱:《區塊鏈技術的簡介》
編者注:如上所述,參與者可以把一些資料組織成一個 “區塊” 來傳播,其它節點收到區塊後會先驗證這個區塊符不符合我們預先確定的規則,符合就執行區塊中的交易,不符合就會拒絕該區塊:不執行其中的交易,也不再傳播該區塊。
關於 “雜湊值”,簡單理解就是一個函式的結果,相同的資料輸進函式得到的結果一定相同,不同的資料輸進函式得到的結果幾乎可以說一定不同(相同的概率極低。這種指紋相同的情況稱之為“碰撞”,現在已經做到了可以做到可以製造出兩個一樣的 SHA-1 雜湊的資料了,而另外一種雜湊演算法 MD-5 的碰撞更是早已由劉小云團隊實現),因此可以用雜湊值來標示。請看《Emoji 表情帶你秒懂雜湊函式》
以太坊是無需許可的開放式網路
像比特幣一樣,以太坊主網是開放且無需許可的。任何人都可以通過下載的或者自己寫的軟體來連線網路,無需登入某個網站、無需向任何人報備,即可開始建立交易和智慧合約、驗證交易乃至挖礦(挖掘區塊)。
一般而言,人們但凡談到以太坊,指的都是這個無需許可的開放式版本。但是,和比特幣一樣,有了以太坊客戶端軟體後,你只需稍微追加一些設定,就可以建立與公共網路相互獨立的私有網路。不過,目前私有網路中的代幣和智慧合約還不能與公共代幣相容。
想了解更多關於無需許可的開放式網路和私有許可權網路之間的差別,請閱讀:《不同型別的 “區塊鏈”》
以太坊用工作量證明(PoW)挖礦
和比特幣一樣,以太坊礦工在建立有效區塊時需要求出一類數學難題的一個解,求解過程無章法可言,因此必須投入大量電力用計算機不斷運算。
以太坊的工作量證明數學難題被稱為 “Ethash”,它和比特幣的 PoW 演算法稍有不同。人們使用常見的硬體也可以參與 Ethash 挖礦。在比特幣挖礦活動中,專用硬體(ASIC)十分常見,而以太坊的 Ethash 則在設計上削減了專用硬體的效率優勢。
關於挖礦的更多資訊,請參見:《比特幣挖礦的簡介》
編者注:具體而言,在 PoW 系統中,當挖礦者把交易打包之後會形成一個結構化資料(“區塊頭”)(交易不同則這部分結構化資料自然不同),區塊頭中還有一些別的資料,比如建立區塊時的時間戳、父區塊的雜湊值,等等。而區塊符合規則性的要求就是區塊頭的雜湊值(作為一個數值)符合一定的要求(“難度要求”)(比如比特幣協議的難度要求是雜湊值開頭的 “0” 達到一定數量)。但是,如上所言,確定資料的雜湊值是確定的,沒有什麼能保證僅憑上述資料可以產生一個符合要求的雜湊值,因此出塊者要不斷改動其中一個沒有特殊意義的資料(“區塊 現時數”),直至區塊頭的雜湊值符合難度要求(否則即使傳播出去了,其它節點也不會接受這個區塊)。
前文多次出現的 “打包交易”,意思等同於 “選擇一組交易作為區塊的內容”,因為在同一時間可能有很多人希望發起交易,但區塊鏈系統為了安全,對區塊大小作了限制(比如限制了區塊的資料量大小或計算量總上限,見下文),因此挖礦者必須在自己接收到的待上鍊交易池(“pending tx” 或 “memory pool”)中選擇部分交易組成一個區塊,然後如上文所說形成結構化資料並開始挖礦。
在以太坊的路線圖上,有一個叫 Casper 的協議計劃,它一改耗電的工作量證明,搖身變為更節能的權益證明,會在以太坊未來的 “寧靜” 版本中釋出。
編者注:所謂權益證明(PoS),即是用參與者在一個資金池中的資金比重來確定 TA 的出塊概率,參與者之間不再比拼誰先算出符合難度的雜湊值,自然也就不需要投入大量電力來計算了。
自 2014 年來,以太坊核心開發團隊就一直在研究權益證明共識機制。截至此時(2019 年 5 月),在以太坊主網上實現的權益證明方案 Casper 已基本敲定,有望於 2019 年末完成部署,翻開以太坊的全新篇章。
以太坊有一種內建的密碼學貨幣
以太坊的代幣叫 Ether,英文縮寫為 ETH。現在的市場已經接受拿 ETH 與其它密碼學貨幣和主權貨幣相交換,就像接受 BTC 一樣。ETH 當前價值約為 13 美元/ETH(2016 年 10 月)。與比特幣類似,以太坊代幣的所有權也記錄在以太坊區塊鏈上,雖然技術層面上嚴格來說,記錄的方式稍有不同。
編者注:這裡的重點是,內建的密碼學貨幣是隨著區塊的挖出而發放的:每出一個塊,就把(預先確定好)一定數量的密碼學貨幣發放給挖出區塊的人(“礦工”)。
上文提到很多次的 “交易”,在比特幣區塊鏈上主要是指比特幣的轉賬交易,而在以太坊上則更為多樣,主要包括 ETH 的轉賬、使用者與智慧合約的互動、以及智慧合約所發行代幣的轉移。
自原文成章以來,ETH 的價格已經從 13 美元(約 87 元)開始一路上漲,最高曾到達 1347 美元的高位(約 9000 元)(2018 年 1 月)然後逐漸下跌至 100 美元左右(2018 年 10 月),現又開始逐漸回升至 250 美元(2019 年 5 月)。此外,密碼學貨幣對法定貨幣的價格幾乎每天都在大幅波動。
以太坊和比特幣的不同之處
準備好小板凳,我們要開啟更技術也更復雜的話題了。
以太坊的出塊時間更短
在以太坊網路中,每個區塊之間的時間間隔大概是 14 秒,而比特幣的區塊間隔時間約為 10 分鐘。這個時間差意味著,如果你同時發了比特幣交易和以太坊交易,一般而言,把以太坊交易記錄到以太坊區塊鏈的速度要比比特幣交易記錄到比特幣區塊鏈的速度要快。我們也可以將這一點理解為,比特幣網路每 10 分鐘寫一次資料庫,而以太坊網路每 14 秒寫一次資料庫。
編者注:雖然在比特幣和以太坊在這一點上有所不同,但具備這種屬性的原理都是一樣的:它們是 PoW 系統。如上所述,無數計算機處在一個開放式的網路中,所有計算機都隨時可以退出,也可以隨時加入,那麼這就帶來一個嚴肅的問題:如果所有計算機各自為政,自己接收到資料就處理,那麼這些計算機就不能形成 “共識”,整個系統也無法實現基本的功能(比如貨幣轉賬,因為各有各記載的交易歷史,誰也無法確定某個賬戶到底有多少錢)。因此,PoW 的意義等於是說:如果你要在這個賬本上記一筆,請先證明你花費了很多計算資源。輔之以 “難度要求” 的變化,我們可以實現對出塊所需工作量的調整,進而調整個網路的出塊間隔。為什麼要實現這種穩定的出塊間隔可能有很多理由,這裡不詳細展開了。
以太坊的區塊更小
比特幣中,區塊大小的上限以位元組為單位衡量,目前為 1MB,而以太坊則用衡量智慧合約計算複雜度的單位來標示區塊的大小,這個大小被稱為 “區塊燃料上限”,而且區塊燃料上限可以逐塊變化(比特幣的區塊大小上限是一定的)。
目前,以太坊的區塊大小上限約為 1,500,000 Gas。在使用者之間(即不與智慧合約互動),通過 ETH 達成的基礎交易或支付有 21,000 Gas 的複雜度,因此,你可以把 70 單交易放進一個區塊中(1,500,000 除以 21,000)。在今天的比特幣網路中,一個區塊可以包含 1500-2000 單交易。
就資料而言,目前大多數以太坊的區塊都在 2KB 以下。
編者注:截至 2019 年 5 月 17 日,以太坊區塊的燃料上限已達到 800 萬 Gas。單塊資料量大小是幾百 KB。
以太坊使用 EVM 來執行智慧合約
相比於比特幣原始的指令碼語言,以太坊上可以部署部署的程式碼(“智慧合約”)對開發者而言更先進也更友好。智慧合約程式碼執行在以太坊虛擬機器環境中,而網路中所有的計算機都執行著 EVM。如果你熟悉 Microsoft Excel 巨集(由 Excel 執行的程式碼段),你應該很容易理解,智慧合約就是由以太坊虛擬機器執行的程式碼段。
在很多資料中,人們通常把以太坊智慧合約被稱為 “圖靈完備”的。這意味著智慧合約功能完整,可以執行其他程式語言中能夠執行的所有計算。
以太幣的發行
ETH 是怎麼產生的呢?ETH 和 BTC 發幣最大的不同在於—— BTC 大約每 4 年發行量減半一次,而 ETH 的發行量則保持不變(也許只是在寧靜版本以前)。
編者注:並不是保持不變。如上所述,在區塊鏈上,原生密碼學貨幣是每出塊便增發一次,這個增發數量我們稱為 “區塊獎勵”。以太坊的區塊獎勵也已經過多次削減,在 2017 年 10 月,區塊獎勵由 5 個削減到 3 個 ETH,2019 年 2 月,以太坊區塊獎勵削減為 2 個。因此,我在這裡用 ETH 供應量的實際變化圖來替代作者的原圖。
這比 Bitcoin 要複雜得多。概言之,現存的 ETH 幣計算公式如下:
預挖礦+ 區塊獎勵 + 叔塊獎勵 + 叔塊引用獎勵
預挖礦
在 2014 年 7 月和 8 月的眾籌中,發行的 ETH 數量約為 7200 萬。眾籌中產生的 ETH 被稱為 “預挖礦”。人們決定,眾籌之後 ETH 的發行量將被限制在每年不超過眾籌總量的 25% (也就是說,除了眾籌一次性產生的約 7200 萬 ETH 外,每年的 ETH 發行量不超過 1800 萬)。
區塊獎勵
目前,挖出一個區塊可以獲得 5 個新的 ETH 。如果每 14 秒開採一個區塊,一年有 3150 萬秒(365x24x60x60),這意味著每年可挖出 225 萬個區塊。225 萬 個區塊,每區塊 5 ETH = 1130 萬 ETH /年。這符合每年產生不到 1800 萬個 ETH 的承諾。
叔塊獎勵
實際上 ETH 的發行量會稍大於1800 萬。由於一些區塊挖得比較晚,因而沒有成為主鏈的一部分。在比特幣網路中,我們把這些挖得稍晚的區塊叫 “孤塊”,是完全拋棄掉的,但是在以太坊中,這些區塊被稱為 “叔塊”,而且後續區塊可以引用這些 “叔塊”。如果有人引用某個 “叔塊”,就會給挖出 “叔塊” 的礦工帶來 4.375 ETH 的 “叔塊獎勵”(相當於八分之七的正常區塊獎勵)。目前,以太坊每天約產生 500 個叔塊,即每天有額外的 2,000 ETH 進入流通(按這個速度,每年會額外發行約 700 萬 ETH )。
引用叔塊的獎勵
在一個叔塊後出塊的礦工,也可以得到 0.15ETH (最多引用 2 個叔塊)。
上面描述的這個模型被稱為 Ghost 協議,(Ghost 即 “貪婪的最大權重觀察子樹” 縮寫)。在 Ghost 協議當中,有效的塊是確定的,礦工也可以得到獎勵。
編者注:叔塊獎勵是很多朋友理解中的難點,確實需要不少背景知識。簡單來說就是:在網路中,傳播區塊是需要時間的,因此某個塊挖出之後,在一定時間內可能只有一部分節點收到了這個區塊,而另一些節點在這期間收到了另一個區塊並把它當成了最新區塊,PoW 系統所用的共識演算法是沒法當下就判斷清楚哪個是主鏈的。以太坊的出塊速度比較快,這種情況可能經常發生,因此在共識演算法上安排了這種經濟激勵來緩解這種情形——即使出現了叔塊,主鏈還是基本確定的。詳情請看《以太坊設計原理》
未來以太幣的產量變化
在以太坊從工作量證明(包括叔塊獎勵規則)變為的權益證明機制時,機制的變化對發行的影響暫時還無定論。權益證明機制將使用一個名為 Casper 的協議(是的,就是那個鬼馬小精靈,誰還敢說 cryptonerds 沒有幽默感?)。在 Casper 協議下的 ETH 發行率很可能地遠低於 Ghost 協議下的發行率。
挖礦獎勵
那麼,礦工可以在挖礦中得到什麼?
在比特幣中,每挖到一個新的區塊,礦工會得到 12.5 個比特幣(這是當前的情形);另外,還有打包在區塊中的交易的發起人附帶給礦工的手續費。
在以太坊,礦工可以得到:
- 挖到一個新的區塊會獎勵 5 個以太幣(或者一個叔塊會獎勵 4.375 個以太幣);
- 另外,用於引用至多兩個叔塊的另外一個小獎勵, (1/32 個區塊獎勵,即:每個叔塊獎勵 1/32×5 ETH = 0.15625 個以太幣);
- 交易發起者為合約執行和轉賬而支付的燃料費用
目前,每個區塊平均的燃料上限為 1,500,000,區塊網路中每個燃料的平均價格是 0.000000022 個以太幣,也就是說,一個礦工可能從一個整個區塊中得到的燃料獎勵是 0.033 個以太幣。需要注意的是,合約中的燃料是用流通中的以太幣支付的,而非用新創造的以太幣支付的。
編者注:發起交易者需要自己為交易設定燃料價格(即願意為每單位燃料支付多少費用),這個燃料價格會成為礦工選擇是否打包該交易的依據之一。因為人們對交易的需求不是時時都一樣的,燃料價格也會隨當前人們對交易上鍊需求的改變而波動。
以太坊的其他部分:Swarm 和 Whisper
計算機需要 計算、儲存資料 和 互動。以太坊需要有效且穩健的方式,才能實現不停機、抗審查且自我維持的去中心世界計算機這一願景。以太坊虛擬機器器僅僅是整體中的一個元件。
- 以太坊虛擬機器是能執行合約邏輯的計算元件。
- 這種 計算 不依賴中央伺服器
- 和 BitTorrent 一樣,Swarm 協議是點對點的檔案共享協議,不同的是它以小額以太幣支付來激勵檔案儲存和分享。檔案被分成塊,在網路參與者之間分發和儲存。儲存和傳播資料塊的節點可以從請求儲存和檢索服務者處得到 ETH 作為報酬。
- Swarm 協議的 檔案儲存 不依賴於中央處理器
- Whisper 是一種加密通訊協議,允許節點間安全地直接傳送資訊,還能幫助資訊傳送者和資訊接受者遮蔽掉多餘的第三方
- Whisper 協議的 通訊 也無需依賴於中央伺服器
以太坊諸概念
智慧合約
智慧合約是儲存在以太坊區塊鏈上的小程式。用適量的以太幣即可啟用並執行這些程式(編者注:也可能需要其它特殊的 Token 才能啟用)。更多關於智慧合約的資訊,詳情請看:《智慧合約簡介》
這裡有一個引自維基百科,關於智慧合約的例項:
圖片來源:https://en.wikipedia.org/wiki/Solidity
在以太坊中,你可以建立一個包含程式碼的新帳戶,並在交易中將其上傳到以太坊的區塊鏈上,從而建立一個智慧合約。
只要合約上傳成功,就會像自動點唱機一樣:想要執行合約時,只需要給它傳送一個包含以太幣支付的交易,當然可能還需要額外提供另一些資訊。
每一臺挖礦電腦會用以太坊虛擬機器來執行智慧合約(這是它們挖礦過程的一部分),並得出最終的輸出值。理論上,如果沒有人使壞,以太坊網路上的每臺電腦都會輸出一樣的結果,因為使用者都執行著包含相同資訊的智慧合約程式碼。
挖出區塊後,獲勝的礦工會向網路的其他使用者公佈挖到的塊,其他礦工紛紛驗證並在得到相同的結果後,把該區塊塊放到他們的區塊鏈中。這就是更新以太坊的區塊鏈狀態的方式。
賬戶
在比特幣中,人們把儲存比特幣的地方稱為 “地址”,它就像銀行賬戶,只不過存的是比特幣。在以太坊中,用於儲存以太幣的叫 “賬戶”,賬戶有兩種:
- 只儲存著以太幣的賬戶,這和比特幣的地址差不多。它有時也會被稱作 “外部賬戶”(EOA)。這種賬戶都會有相應的私鑰,私鑰持有者可以用私鑰來簽發該賬戶的交易。
- 存有程式碼(並可能儲存著 ETH 或其它 Token)的賬戶。只要存適量的以太幣進去,這些智慧合約就會生效。智慧合約上傳後,其程式碼就一直儲存在以太坊區塊鏈上,等待著被啟用使用。
叔塊和孤塊:差一點就上主鏈的塊
以太坊的區塊生成率遠高於比特幣的區塊生成率(以太坊種每小時可生成 250 個區塊 vs 比特幣中每小時可生成 6 個區塊)。區塊生成得越快,“區塊衝突” 的概率就會上升,即:許多有效的區塊幾乎同時生成,但是它們之中,僅有一塊可以放在主鏈中。從技術上來說,儘管這些未上主鏈的區塊包含的交易都是真實的,但是這些資料不能被認定為主鏈的一部分。
在比特幣協議中,這類未上主鏈的區塊被稱為 “孤塊”,孤塊不是主鏈的組成部分,而且也不會被主鏈上的區塊引用。
而在以太坊中,這些區塊被稱為 “叔塊”,後續一段距離內的區塊可以引用叔塊(詳見上文 “以太幣的發行” 部分)。雖然叔塊中的資料最終也不會派上用場(即叔塊上的交易不會得到執行),挖出叔塊的礦工還是可以獲得稍小一些的區塊獎勵。
這促成了兩個重要結果:
- 這會激勵礦工保持挖礦動力,即使挖出的區塊不能上主鏈(因為高速的區塊生成率生成了更多的孤塊/叔塊)
- 承認建立叔塊所花費的能源還可以提高區塊鏈的安全性
編者注:總而言之,Ghost 是快速出塊過程中的一種保護措施,讓沒有挖到主鏈塊的礦工也不至於承受大量損失,有動力去維護主鏈。
燃料和燃料價格
啟用一個智慧合約時,你等於是請求整個網路中的所有礦工都來執行合約中的計算工作。這會花費礦工的時間和能源,使用者理所當然得給他們報酬。燃料就是支付服務費的機制。
手續費一般是一筆小額的以太幣,想要執行合約,就需要給礦工支付來讓他們工作。這類似於給自動點唱機投幣。
付款項(單位:以太幣)= 實際使用的燃料數量(單位:Gas)* 燃料價格(單位:以太幣/Gas)
燃料數量
智慧合約越複雜(計算步驟的數量和型別、儲存量的大小等),完成合約執行所需的燃料就越多。還用投幣點唱機來類比的話,就好比點的歌越久,唱得越大聲,需要支付的費用就越多。
燃料價格
雖然合約的複雜程度各有差別,但執行具體一個合約所需的燃料數量是固定的,(手續費大小差異主要來源於燃料價格),而燃料價格是由希望執行合約的人在請求執行合約時所指定的(有點像比特幣的交易費用)。礦工會看開出的燃料價格高低來決定他們願不願意執行合約。如果想讓礦工執行合約,開出高價就好。可以說,燃料市場是一個競爭激烈的拍賣場,就看使用者願意為執行智慧合約付出多大成本了。
為什麼需要燃料機制?
執行智慧合約需要花費燃料/以太幣/金錢,有效防止了人們隨意啟用合約,從而避免了在免費執行的情況下可能出現的類似垃圾交易擁堵網路的問題。
編者注:這裡沒有言明的一點是,其實交易的(最大)燃料數量和燃料價格都是可以由使用者自由調整的。如果沒有給夠(最大)燃料數量,無法完成合約中的計算,那麼系統會完全回退,就當這筆交易沒有發生過,雖然燃料費用還是會全部交給礦工;如果給的燃料數量太多,那麼完成相關計算後,剩餘的燃料費用會自動退還給發起交易的賬戶。
以太幣的單位
好比於一美元可以分成 100 美分,一比特幣可以分成 100,000,000 聰,以太幣也有專有的單位命名規則。
以太幣最小的單位是 wei (戴偉),每一以太幣等於 1000,000,000,000,000,000 wei,還有其他單位,如:Finney、Szabo、Shannon、Babbage 和 Ada。這些命名都來源於為密碼學貨幣和網路作出卓越貢獻的科學家。
Wei 和 Ether 是兩種最常見的貨幣面額。
智慧合約的語言:Solidity / Serpent、LLL
智慧合約有三種通用語言,都可編譯成智慧合約並在以太坊虛擬機器上執行。這三種語言分別是:
- Solidity ——類似 JavaScript 的語言,是目前最流行的、具有強大功能的智慧合約的指令碼語言。
- Serpent ——類似 Python 的語言,在以太坊發展早期比較常用。
- LLL——類似於 Lisp,僅用於較為早期的語言編寫中。LLL 或許是最難編寫的語言。
編者注:截至今日(2019 年 5 月 17 日),Solidity 已經成為以太坊生態中最常用的合約程式語言。而其餘兩種語言很少有人使用,甚至已經被棄用。此外,以太坊正在研究將以太坊虛擬機器 EVM 升級為 eWASM,而 WebAssembly 支援很多高階計算機語言的開發,有望進一步加強以太坊合約編寫的友好性和安全性。
另,有人指出不應該先入為主地認為 Solidity 與 Javascript 很相似,這樣在學習過程中會陷入很多誤區。
以太坊軟體:geth、eth、pyethapp
以太坊的官方客戶端都是開源的,因此你可以看到背後的程式碼,還可以拿來調整一下建立自己的客戶端。最流行的客戶端如下:
- geth(用 Go 編寫)https://github.com/ethereum/go-ethereum
- eth(用 C++ 編寫)https://github.com/ethereum/cpp-ethereum
- pyethapp(用 Python 編寫)https://github.com/ethereum/pyethapp
以上都是基於命令列的程式(就是那種在黑色背景上的綠色文字),因此要想使用圖形介面就需要使用別的軟體。目前官方最流行的圖形介面軟體是 Mist(https://github.com/ethereum/mist)。Mist 以 geth 和 eth 為核心。
也就是說,geth 和 eth 是底層難看的程式碼,而 Mist 就是執行其上的漂亮介面。
編者注:2019 年 3 月,Mist 專案停止運營,團隊拆分並轉向不同領域。而以太坊生態中最常見的兩款客戶端 Geth 和 Parity·Ethereum 也已發展得相當不錯,都已有了完備的圖形介面。
足跡:以太坊之大事年表
2013 年底,Vitalik Buterin 在白皮書中論述了 “以太坊” 這一概念。2014 年 4 月,Gavin Wood 博士在黃皮書中進一步地闡發了這個概念。自此,以太坊的開發就由一個開發者社群來管理了。
同年的 7 月和 8 月,以太坊為開發眾籌,其開放式主網於 2015 年 7 月 30 日上線。
以太坊的眾籌
2014 年 7 月至 8 月期間,開發團隊通過線上銷售 ETH 代幣獲得資金——人們可以用比特幣來購買 ETH ,當時的兌換比率為 2000 ETH : 1 BTC(到 2016 年 1 月,在開放市場中1 BTC 可以兌換 50 ETH)。
參與眾籌的人可以用比特幣賬戶支付,然後收到一個包含相應數量以太幣的錢包。更多關於技術方面的資訊,請參看以太坊部落格:https://blog.ethereum.org/2014/07/22/launching-the-ether-sale/
在此期間,以太坊團隊售出了 6000 多萬以太幣,收到了 31500 多的比特幣,當時價值約 1800 萬美元。團隊又挖出了 20%(1200 萬 ETH)用於支援開發和以太坊基金會。
軟體釋出代號:Frontier / Homestead / Metropolis / Serenity
以太坊軟體的命名很有意思哦,是不是有點像蘋果的 OS X 版本名稱 Mavericks、El Capitan、Sierra 吶?
- Olympic(測試網路):在 2015 年 2 月釋出,測試釋出時,其代幣並不是真的以太幣。如今,測試網仍然與主活動網路並行,以便開發人員測試程式碼。
- Frontier:在 2015 年 7 月 30 日釋出,Frontier 是首個可以挖礦、開發、執行合約的線上版本。
- Homestead:於 2016 年 3月 14 日釋出,有一些協議的更改,更加穩定。
- Metropolis:未釋出——從命令列介面升級到圖形介面。
- Serenity:未釋出——從工作量證明升級到權益證明(Casper)。
編者注:上述代號也被認為是以太坊的路線圖和發展的不同階段。在原文成章的時候(2016 年 10 月),Metropolis階段還未釋出。2017 年 10 月,Metropolis 的第一階段 Byzantine釋出;2019 年 2 月,Metropolis 第二階段Constantinople釋出,並且,有望於 2019 年末進入 Serenity 的第一階段。
總結
以太坊開發團隊致力於建立一個不會停機、抗審查和去中心的世界計算機,能執行計算、儲存資料並允許互動。
以太坊有一個 公開、無需許可的開源版本,其程式碼副本已被採用並改編為私人網路。公有版本和私人網路要解決的是不同的問題。
儘管目前的技術尚未成熟,但是,我們相信經過越來越多人使用、測試、發展並在以太坊上開發軟體,它會發展得越來越穩健。
在區塊鏈世界裡,以太坊是最振奮人心的的技術之一,未來的發展值得我們去期待。
10 月 3 日 更新
有人評論說我沒有介紹關於 The DAO(一個 “去中心化自治組織” )的內容。The DAO 類似於基於大眾風險投資基金的智慧合約。有黑客鑽了智慧合約中編碼漏洞的空子,轉走了智慧合約中的資金。
我也沒有談到 “以太坊經典”。2016 年 7 月 20 日,黑客入侵 The DAO,出於對以太坊核心開發者應對策略的反對,Ethereum Classic 從主鏈中獨立了出來,成為另一條公鏈。以太經典有名為 ETC 的獨立貨幣,ETC 和 ETH 在第 1920 塊之前共享同一段區塊鏈。
本文意在簡介以太坊,而 DAO 和以太經典都是進階話題,感興趣的讀者可以閱讀拙著《比特幣和區塊鏈的基礎》作進一步的瞭解。
訂閱“Linux 中國”官方小程式來檢視
相關文章
- 以太坊簡介
- 迅雷精簡版 for Mac!附精簡教程!Mac
- 以太坊原始碼分析(4)accounts包簡介原始碼
- 以太坊原始碼分析(17)Internal包簡介原始碼
- 區塊鏈——以太坊、智慧合約簡介區塊鏈
- Xposed原理簡介及其精簡化
- Geth簡介及如何執行以太坊節點
- 以太坊擴充套件解決方案Nahmii簡介套件
- 精簡版 koa 簡單實現
- 極速精簡 Go 版 LogstashGo
- Java面試整理(精簡版)Java面試
- 精準化測試原理簡介
- 以太坊Solidity程式語言開發框架————1、Truffle簡介Solid框架
- 圖片下載 (hqm精簡版)
- Premiere Elements(Pr2023精簡版)REM
- 以太坊虛擬機器介紹虛擬機
- 以太坊的擴容方案介紹
- 簡介 以太坊 2.0 核心 之 共識機制的改變
- 以太坊原始碼分析(53)以太坊測試網路Clique_PoA介紹原始碼
- 以太坊學習筆記————6、以太坊客戶端選擇與介紹筆記客戶端
- js 陣列所有的方法精簡版JS陣列
- 以太坊Solidity型別介紹+實戰Solid型別
- 函式極限與連續精簡版函式
- swift4.0語法雜記(精簡版)Swift
- 以太坊學習筆記————10、錢包、以太幣、Gas介紹筆記
- Python 精靈模組簡介_python sprites module introducePython
- 以太坊連載(一):以太坊是什麼?
- 以太坊是什麼?以太坊交易可靠嗎?
- xScope for mac精確度量校準工具Mac
- 迅雷精簡版 for Mac 去除多餘無用功能Mac
- UniRx精講(一):UniRx簡介&定時功能實現
- 如何實現一個簡單的以太坊?
- 以太坊釋出Casper首個升級版
- win10裝不了迅雷精簡版怎麼解決_win10無法安裝迅雷精簡版如何處理Win10
- 以太坊:Dapp及相關開發工具介紹APP
- 以太坊開發框架Truffle基礎使用介紹框架
- 以太坊原始碼分析(37)eth以太坊協議分析原始碼協議
- 以太坊原始碼分析(18)以太坊交易執行分析原始碼