第一篇,寫給不熟悉以太坊的你

最近ETH價格強勢,以太坊社區又迎來了不少新朋友。我們想花幾天時間就大家最關心的問題發佈一系列科普文章。

...

前言

以太坊建立在區塊鏈和加密貨幣的概念之上,如果你對此不熟悉,很值得花時間先去讀一下《比特幣基礎介紹》和《區塊鏈技術基礎介紹》。以下這篇文章會假設讀者對比特幣的工作原理有已經有基本認識。

以太坊是什麼?

以太坊是運行在一個計算機網絡中的軟件,它確保數據以及稱為智能合約的小程序可以在沒有中心協調者的情況下被所有網絡中的計算機複製和處理。以太坊的願景是創建一個無法停止,抗屏蔽(審查)和自我維持的去中心化世界計算機。官方網址是https://www.ethereum.org。

它延伸了比特幣的區塊鏈概念:在全球範圍的多個計算機上驗證,存儲,和複製交易數據(因此術語叫「分佈式帳本」)。以太坊(Ethereum)在這個概念上更進一步,使在全球範圍的多個計算機上運行代碼成為現實。

比特幣用來分佈式儲存數據的,以太坊用來分佈式儲存數據並且計算。這些小型的電腦運行程序叫做智能合約,合約由參與者在他們自己的機器上通過一種稱為 」以太坊虛擬機「的作業系統運行。

如何運行以太坊?

要運行以太坊,你可以下載(或者自己編寫如果有耐心的話)一些稱為以太坊客戶端的軟件。類似BitTorrent或Bitcoin,以太坊客戶端將通過網絡連接其它運行了類似客戶端軟件的計算機並且通過他們開始下載以太坊區塊鏈從而趕上進度。它也將獨立的驗證每個區塊是否符合以太坊的規則。

以太坊客戶端軟件可以做什麼?

你可以用來:

連接到以太坊網絡

探索以太坊的區塊鏈

創建新的交易和智能合約

運行智能合約

挖礦新的區塊

通過運行以太坊虛擬機,你的計算機就變成了網絡中的一個「節點」,並與其它節點一樣具有同等地位的處理事務。記住在一個點對點的網絡里,沒有「核心」伺服器並且任何一個計算機都擁有等同的權利和地位。

以太坊和比特幣有哪些相似之處?

我認為理解以太坊最簡單的方式就是探索它與相對簡單的系統-比特幣之間的相似和不同之處。那麼它們有哪些相似之處呢?

  • 以太坊有一條區塊鏈

和比特幣一樣,以太坊有一條區塊鏈,這裏面包含有數據塊(交易和智能合約)。這些區塊由一些參與者創建或者說挖出,而其它參與者來驗證它們。

你可以在這裏查看以太坊區塊鏈:https://etherscan.io

區塊通過前一個區塊的哈希或指紋形成一條鏈狀結構。具體可以參見a gentle introduction to blockchain technology

  • 以太坊是公開並且無需許可的

和比特幣一樣,以太坊的主網是一個公有的、無許可的網絡,也就是說任何人都可以下載或編寫軟件來連接網絡,可以開始創建交易以及智能合約並且驗證它們,還可以進行挖礦等,這些操作都不需要在任何其它機構里註冊或登錄。

總的來講,人們討論以太坊時指的是公有的無許可的版本,即公有鏈。不過,與比特幣一樣,你可以通過稍微修改以太坊文件創建沒有連接到公網上的私有網絡。目前私有網絡中的代幣以及智能合約與公有網絡不兼容。更多有關公開無許可公有鏈和私有許可鏈之間異同的問題,請參考 confused by blockchains? Revolution vs Evolution

  • 以太坊是工作量證明(POW)挖礦

同比特幣一樣,礦工通過花費電力解開數學難題創建有效區塊。以太坊的工作量證明算法稱為Ethash,它與比特幣的工作量證明稍微有些不同,這使得用普通硬件挖礦成為可能。以太坊的這種工作量證明算法降低了普遍用於比特幣挖礦的特定硬件ASICs的效率。

關於更多挖礦的知識詳見 a gentle introduction to bitcoin mining.

在以太坊的發展計劃中,準備在未來稱為Serenity的以太坊軟件版本中,用一種叫做Casper的更節能的股權證明(POS)協議來取代當前大量耗費電能的工作量證明(POW)挖礦。

  • 以太坊有一種內置的數字貨幣

以太坊里的代幣叫做Ether,簡稱ETH。與BTC類似,這種加密貨幣可以用來與其它加密貨幣或其它法幣進行交易。目前一個ETH的價格大概在13美元左右(2016年10月)。與BTC擁有者被記錄在比特幣區塊鏈中一樣,以太幣ETH擁有者也被記錄在以太坊區塊鏈中,儘管在技術實現的方式上它們有些許不同。

想要更多的了解加密貨幣以及代幣可以參考《一個數字代幣的基礎介紹》

以太坊與比特幣有哪些不同點?

這一段討論會包含更多的技術性,在許多方面會更加複雜。

  • 以太坊的區塊時間更短

與比特幣區塊的10分鐘相比,以太坊區塊間時間大約在14秒左右。這意味著,當你在比特幣和以太坊中發起一筆交易,以太坊中的交易被記錄入區塊鏈中的速度快於比特幣中交易被記錄區塊鏈中。你可以認為比特幣寫入數據庫的時間平均為10分鐘,而以太坊寫入數據庫的時間平均為14秒。

  • 以太坊有更小的區塊

在比特幣中,目前最大區塊的大小被限定為1M,而以太坊區塊大小根據在上面運行的智能合約的複雜性決定-這叫做Gas限制,每個區塊的最大值會根據情況稍微有所不同。目前以太坊中最大區塊大小大約為1500000Gas。從一個帳戶到另一個帳戶的ETH基礎交易或支付(並非智能合約)大約消耗21000Gas。故每個區塊中大概可以放進70(1500000/21000)筆交易。在比特中目前每個區塊中大概可以包含1500到2000筆交易。

目前大多數以太坊區塊大小在2KB以下。

  • 以太坊虛擬機上可以運行智能合約

相比比特幣原始的腳本語言,在以太坊中用來部署代碼以及運行智能合約的語言更高級,因此開發者們更熟悉。智能合約代碼在一種被稱為以太坊虛擬機的東西上運行,以太坊虛擬機分佈在網絡中所有參與者的計算機上運行著。如果你對微軟Excel宏命令(Excel上運行的代碼塊)熟悉的話,類似地,智能合約可以認為是在以太坊虛擬機上運行的代碼塊。

在很多描述中,以太坊智能合約被稱為是「圖靈完備」的。這意味著它們是功能完備的,而且在任何其它程序語言中能夠完成的計算都可以在這上面完成。

➜ 以太代幣的發行

以太代幣是如何被發行或創造的?以太幣與比特幣之間最大的不同是,比特幣的產量每4年減半,而以太幣每年的產量則是固定的。(可能持續到serenity階段)

...

以太幣比比特幣更複雜。概要地說,以太幣的數量以這種形式存在:

Pre-mine(礦前) + Block rewards(區塊獎勵) + Uncle rewards(叔塊獎勵) + Uncle referencing rewards(叔塊引用獎勵)

  • 礦前

2014年7月/8月間,為眾籌大約發行了7200萬以太幣。這些幣有的時候被稱之為「礦前」。眾籌階段之後,以太幣每年的產量被限制在7200萬以太幣的25%(每年以太幣的礦產量,不高於1800萬,除了一次性為crowdsale而發行的7200萬以太幣)

  • 區塊獎勵

目前,每產生一個新區塊就會產生5個新以太幣。計算一下,如果每14秒挖出一個區塊,一年有3150萬秒(365x24x60x60),這意味著每年有225萬個區塊被挖出來。225萬個區塊,每個區塊5個以太幣,也就是每年會產出1130萬個以太幣。這個數字與低於1800萬以太幣產量的數字,吻合。

  • 叔塊獎勵

事實上,數量可能會比上述數字稍多一些。有些區塊被挖得稍晚一些,因此不能稱為主區塊鏈的組成部分。比特幣稱這類區塊為「孤塊」,並且完全捨棄它們。但是,以太幣稱它們為「 uncles」,並且在之後的區塊中,可以引用它們。如果uncles在之後的區塊鏈中作為叔塊被引用,每個叔塊會為挖礦者產出大約4.375個以太幣(5個以太幣獎勵的8分之7).這被稱之為叔塊獎勵。目前每天有大約500個叔塊被創建,為以太幣的日產量鏈,額外加入2000個以太幣(以這種速度,每年產量為70萬以太幣)

  • 叔塊引用獎勵

還有更多:礦工每引用一個叔塊,就得到了大約0.15個以太幣(最多引用兩個叔塊)

這種定義有效區塊,獎勵礦工的模式稱為「幽靈協議」(Greedy Heaviest-Observed Sub-Tree )(GHOST是貪婪最被觀察子樹的字首)。

➜ 以太幣產量未來的變化

以太坊出塊機制從工作量證明(PoW)(包括幽靈發行規則)轉換為股權證明(PoS)後,以太幣的發行會有什麼變化尚未有定論。股權證明機制將使用一個稱為Casper的協議(是的,作為友好的幽靈。誰說cryptonerds沒有幽默感來著?)在Casper協議下,以太幣的發行率將大大低於幽靈協議下的發行率。

挖礦獎勵

那麼,礦工挖礦時會得到什麼?

比特幣中,礦工將得到:

• 12.5個新比特幣(目前實際情況請參考「a gentle introduction to bitcoin mining」)

加上

• 打包在區塊中的交易所產生的交易費

以太坊中,礦工將得到:

• 新的區塊獎勵的5個以太幣(或者4.375個新的叔塊獎勵以太幣),

加上

• 引用2個最近叔塊的一丟丟獎勵(1/32的區塊獎勵,也就是,每個叔塊 1/32×5=0.15625個新以太幣)

加上

• 在區塊中運行合約的Gas

目前,每個區塊平均的gas限量是1500000,區塊網絡中每個gas的平均價格是0.000000022個以太幣,也就是說,一個礦工可能從一個「滿的」區塊中得到的gas獎勵是0.033個以太幣。注意合約中的gas是用現存的以太幣支付的,而非新創造的以太幣。

➜ 以太坊的其他部分:Swarm 和 Whisper

計算機需要有計算、儲存數據、以及溝通交流的功能。如果以太坊想要實現它勢不可擋,抗屏蔽(審查)、自我維持、去中心化的「世界」計算機的景願,它需要以一種穩健,有效地方式做到上述三件事。以太坊虛擬機只是一個整體的一部分。

以太坊虛擬機是有運行合約邏輯的計算元件

這是不依賴於一個中心伺服器的計算。

swarm是點對點文件共享,它與BitTorrent相似,但用以太幣為微報酬作為激勵。文件被分解成塊,分配並被參與的志願者們儲存。那些為存儲並為塊提供服務的節點,從那些需要儲存和檢索數據服務的節點得到以太幣作為補償。

這是不依賴於中心伺服器的文件存儲。

whisper是一種信息檢索協議,它允許節點間直接以一種安全的形式互發信息,並對第三方組織窺探者隱藏發送者和接收者的信息。

這是不依賴於一個中心伺服器的通訊管理。

➜ 以太坊中的一些概念

  • 智能合約

智能合約是一段存儲在以太坊區塊鏈上的簡短電腦程式。用以太幣可以激活或者運行這些代碼。想對智能合約了解更多,請參考 a gentle introduction to smart contracts.

下面是一段摘自Wikipedia的智能合約實例:

...

出處: https://en.wikipedia.org/wiki/Solidity

在以太坊你可以新建一個包含一些代碼的帳戶,在一次交易中把它上傳到以太坊區塊鏈上,這樣你就創建了一個智能合約。一旦合約被上傳,它會像自動唱機一樣運轉–當你想要運行它的時候你應該創建一個交易,向合約支付ETH,如果合約需要,你可能還要提供一些其他信息。

每個挖礦計算機會通過以太坊虛擬機在它們的計算機上運行智能合約,作為他們參與挖礦進程的一部分,然後得出一個輸出的結論。理論上,如果沒有人惡意操作,每個計算機在以太坊網絡上會得出相同的結論因為它們運行著提供了相同信息的相同合約代碼。

當一個區塊產出,礦工會把這個區塊公佈到其餘的網絡中,其他的計算機會驗證它們得到的結果相同,然後添加該區塊到它們自己的區塊鏈上。這就是以太坊區塊鏈更新狀態的方式。

  • 帳戶

在比特幣中,有一個概念叫做地址,比特幣存儲在這裏–就像是一串比特幣的銀行帳戶數字。這個在以太坊中一般被稱作帳戶,帳戶有兩種類型:

只存儲ETH的帳戶–這些帳戶和比特幣地址類似有時被稱作Externally Owned Accounts (EOAs)。你可以用私鑰為交易簽名來向這些帳戶支付ETH。

這裏有一個存儲ETH的帳戶實例:

https://etherscan.io/address/0x2d7c76202834a11a99576acf2ca95a7e66928ba0

不僅存儲 ETH,同時也有可以運行的代碼(智能合約)–這些智能合約可以通過一個交易發送ETH的到帳戶里。一旦智能合約被上傳,它就在那裏等待被激活。

這裏有一個有智能合約的帳戶實例:

https://etherscan.io/address/0xcbe1060ee68bc0fed3c00f13d6f110b7eb6434f6#code

  • 叔塊和孤塊:不太需要的區塊

以太坊區塊出塊速度比比特幣高得多(以太坊每小時250個區塊vs比特幣每小時6個區塊)。區塊出塊速度越快,「區塊衝突」發生的幾率就越大-ie多個有效區塊可以幾乎同時被創建,但是它們中只有一個能加入主鏈。另外一個「損失」是,這些塊裏面的數據不會被認為是總帳的一部分,即使這些交易理論上是有效的。在比特幣里這些非主鏈區塊被叫做孤塊或孤兒區塊,它們無論如何不會成為主鏈的一部分,也不會被後來的區塊引用。

在以太坊它們被叫做叔塊。叔塊會被隨後的一些區塊參考(參考ETH發佈的部分)儘管它們裏面的數據不會用到,挖出它們的稍少的獎勵仍然是有效的。

這達成了兩個重要目的:

礦工仍然受到激勵挖礦即使有很大可能挖到一個非主鏈區塊(高速出塊會導致更多的孤塊或者叔塊)。

通過認可花費在叔塊上的能量增加了區塊鏈的安全性。

➜ Gas和Gas價格

當你激活一個智能合約的時候,你在要求整個網絡內的每個礦工個體分別執行裏面的運算。這會花費他們的時間和精力,Gas是你為這項服務向礦工們支付的機制。

報酬是小額的以太幣,想要運行智能合約的人的需要支付報酬來使合約工作。類似於投放一個硬幣到自動唱機里。

付款款項(單位以太幣)= Gas數量(單位Gas) x Gas價格(單位以太幣/Gas)

  • Gas數量

智能合約越複雜(計算步驟的數量和類型,佔用的內存等),用來完成運行就需要越多Gas。類比自動唱機,歌曲的時間越長,音量越大,讓它工作你需要支付的則越多。

  • Gas價格

任何特定的合約所需的運行合約的Gas數量是固定的,由合約的複雜度決定,而Gas價格由想運行合約的人規定,在他們提交運行合約請求的時候(有點類似於比特幣的交易費)。每個礦工會根據Gas的價格的高低來決定他們是否想作為區塊的一部分去運行此合約。如果你希望礦工運行你的合約,你最好提供高一點的Gas價格。在某種程度是這是一場基於合約運行有多願意付費驅動下的競價。

  • 為什麼需要Gas?

讓智能合約花費Gas/以太幣/錢可以防止人們隨意激活合約, 解決了垃圾交易以及相關問題,如果運行智能合約免費,此類問題會發生。

以太幣單位

就像1美元可以分成100美分,1BTC可以被分成100,000,000 聰(中本聰的聰),以太坊也有它自己的轉換單位。

最小的單位是wei ,每個ETH有1,000,000,000,000,000,000wei 。還有一些中間單位:Finney, Szabo, Shannon, Babbage, Ada–全部以對加密貨幣或網絡相關領域作出傑出貢獻者命名。

Wei和Ether是兩個最常用的單位。

...

➜ 智能合約語言:Solidity/Serpent,LLL

有三種常見的智能合約語言,這些語言可以被編譯成智能合約運行在以太坊虛擬礦機上。它們是:

Solidity – 和Javascript語言類似,這是目前最受歡迎的和功能豐富的智能合約腳本語言。

Serpent – 和Python語言類似,在以太坊歷史的早期受歡迎。

LLL (Lisp Like Language) – 和Lisp類似,只有在早期使用。它大概是最難用的。

➜以太坊軟件: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是頂層優美的屏幕。

歷史:以太坊時間軸

Vitalik Buterin在2013年末的白皮書中提出了以太坊的概念。這個概念最終由Dr. Gavin Wood完善並在2014年4月發表了技術性的黃皮書。從此,以太坊的發展就由一群開發者組成的社區管理。

在2014年7月和8月,社區發起了一個為了項目開發募資的眾籌,2015年7月30日以太坊區塊鏈正式啟動。

以太坊眾籌

開發團隊通過在2014年的7月至8月期間線上銷售ETH代幣而籌得資金,人們可以通過支付比特幣來兌換以太幣,最初的固定兌換率為1個BTC等於2000個ETH。(現在2016年10月,1個BTC可以買到50個ETH。)

眾籌參與者發送比特幣到一個比特幣地址並且收到一個以太坊錢包包含相對應購買到ETH的數量。技術細節可以在以太坊博客中找到https://blog.ethereum.org/2014/07/22/launching-the-ether-sale/

通過這種方式,超過60百萬的以太幣被買走,相當於大約31500個BTC,當時價值約為1800萬美金。同時額外發行了20%的以太幣(120萬ETH)用以促進開發以及設立以太坊基金會。

軟件發佈代號:Frontier/Homestead/Metropolis / Serenity

These are friendly names for versions of the core Ethereum software, a little like Apple’s OS X version names such as Mavericks, El Capitan, Sierra.

這是為不同版本的以太坊軟件取的暱稱,就像蘋果的OS X系列名稱Mavericks, El Capitan, Sierra。

Olympic (testnet):2015年5月發佈的測試版本,使用的代幣不與真實的以太幣兼容。測試網與核心線上網絡平行運行,這裏開發者可以測試他們的代碼。

Frontier::2015年7月30日發佈,初始的上線版本讓人們可以挖礦獲取以太幣並且建立和運行合約。

Homestead:2016年3月14日發佈,改變了一些協議使之更穩定。

Metropolis:將在未來發佈,從命令行到圖形界面。

Serenity:將在未來發佈,從PoW轉變到PoS(Casper)。

總結

以太坊開發團隊的願景是創建一個無法停止,抗屏蔽(審查)和自我維持的去中心化世界計算機,可以進行計算,儲存數據,和通訊。

它有一個公開無許可的開源版本,源碼的分叉以及複製版本經過調整已經被用於私有網絡。公開和私有的版本分別試圖解決不同的問題。

這個技術現階段還不成熟,但當越多的人使用,測試,開發並建立,它將會進步並且變的更強壯。

以太坊是區塊鏈領域裏最激動人心的技術之一,值得你保持關注它的進展。

以太坊愛好者

開源項目的發展離不開社區的土壤。以太坊愛好者以優質的內容為媒介來聚集社區。我們通過收集、整理、翻譯最新最前沿的以太坊技術資訊和文章以及生產優質的原創內容,持續推廣和普及以太坊的技術,幫助以太坊釋放區塊鏈和智能合約的潛力,並為開發者提供更好的平台和機會。

社區成立一年多已經把上千名中文世界的以太坊愛好者、開發者、以及投資者與全球社區的優質資源連接了起來。未來,以太坊愛好者會著眼於生產高質量的原創教育內容為培養中國自己的優質開發人才做貢獻。

感謝譯者:Shan,Nov,PatrickJ,SoloWolf

授權翻譯於:https://bitsonblocks.net/2016/10/02/a-gentle-introduction-to-ethereum/

Posted onOctober 2, 2016 by antonylewis2015