玩轉以太坊(Ethereum)的測試網絡

創世區塊

衆所周知,區塊鏈是一個類似於鏈表的結構,每一個區塊都具有唯一的Hash值,後一個區塊通過記錄前一個區塊的Hash值,來表明父子關係。一條區塊鏈可以無限延伸,然而卻一定要有一個開端,一個讓這條區塊鏈從無到有的區塊,這個區塊的名字就叫創世區塊(Genesis Block)。創世區塊最顯著的特徵就是沒有父區塊,通常創世區塊不是由礦工挖掘出來的,而是預先生成好並將創世區塊的Hash寫進了錢包軟件的代碼中。

在以太坊錢包的官方實現Geth的代碼中,我們可以找到這個創世區塊的Hash。

源代碼:params/config.go

var (
	MainnetGenesisHash = common.HexToHash("0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3") // Mainnet genesis hash to enforce below configs on
	TestnetGenesisHash = common.HexToHash("0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d") // Testnet genesis hash to enforce below configs on
)

其中的0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3就是創世區塊的Hash了。到區塊鏈瀏覽器中看一下,果然如此,高度爲0的創世區塊。

等等,下面那個TestnetGenesisHash = 0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d是什麼鬼,爲什麼區塊鏈瀏覽器中查不到?


主網絡與測試網絡

前面說到一條區塊鏈由一個創世區塊開始,也就是說,一個創世區塊可以創造和代表一條區塊鏈。如果我們給錢包客戶端設定不同的創世區塊,它就將工作在不同的區塊鏈上。

工作在同一條區塊鏈上的全部節點,我們稱之爲一個網絡。

絕大多數人在使用的網絡被稱爲主網絡(Mainnet),用戶在其上交易、構建智能合約,礦工在其上挖礦。由於使用的人數衆多,主網絡的魯棒性很強,能夠對抗攻擊,區塊鏈也不易被篡改,因此主網絡是具有功能的,其上的以太幣是有價值的。

通常一種區塊鏈只有一個主網絡,比如比特幣,萊特幣,以太坊,都只有一個主網絡。主網絡之外可以有若干個測試網絡。

既然已經有了一個主網絡,爲什麼還要弄出測試網絡呢?

我們先來講一個故事。

(小王是一家軟件公司的程序員,每天起得比雞早,睡得比牛晚,可以說是兢兢業業。最近區塊鏈技術比較火,老闆想出了一個點子。)

老闆:小王啊,你去在以太坊上給我開發個智能合約,咱也來個ICO。 小王:好的,老大。

(小王滿口答應,然而他心裏卻在犯嘀咕,這活兒我沒幹過啊。沒關係,工程師嘛,什麼不能學呢?小王一個通宵,就把以太坊研究明白了,第二天找到老闆。)

小王:老闆,我需要一些以太幣來測試。

(老闆就是老闆,大筆一揮,給了小王1000個以太幣,拿去測試吧。小王滿懷信心的按下了回車,突然,他意識到,程序出了bug,這1000個以太幣將被永遠鎖定,無法再使用。小王垂頭喪氣的找到老闆,祈求老闆的原諒。)

老闆:什麼?1000個以太幣被永遠鎖定了?沒事兒,才值200w而已。

(小王滿心歡喜,正想感謝老闆的寬恕。老闆一個詭異的微笑,看了一眼身後的保安。)

老闆:拿他祭天吧。

(這天下午,在公司前面的廣場上,員工們盛裝華服,將小王綁在火刑架上,點燃柴堆。大家一起祈禱這次ICO可以成功,公司蒸蒸日上,程序再也沒有bug。數日後的ICO發佈會上,老闆告訴投資人,他們一定能賺錢,因爲我們“殺了個程序員祭天”。)

主網絡中的以太幣是有價值的,在主網絡上直接進行錢包軟件或者智能合約的開發將會是非常危險的,稍有不慎就會損失以太幣,甚至影響整個主網絡的運行。同時,因爲主網絡使用人數多,礦工更是不計其數,如果是在開發一個挖礦軟件,用一臺開發軟件的筆記本電腦幾乎不可能挖出一個區塊,這就導致測試幾乎不可行。

於是,出於測試和學習的目的,便會有一小部分節點,使用與主網絡不同的創世區塊,開啓一條全新的區塊鏈,並在上面挖礦和測試,這就是測試網絡(Testnet)


以太坊的測試網絡

以太坊可以搭建私有的測試網絡,不過由於以太坊是一個去中心化的平臺,需要較多節點共同運作才能得到理想的測試效果,因此並不推薦自行搭建測試網絡。

以太坊公開的測試網絡共有4個,目前仍在運行的有3個。每個網絡都有自己的創世區塊和名字,按開始運行時間的早晚,依次爲:

  • Morden(已退役)

Morden是以太坊官方提供的測試網絡,自2015年7月開始運行。到2016年11月時,由於難度炸彈已經嚴重影響出塊速度,不得不退役,重新開啓一條新的區塊鏈。Morden的共識機制爲PoW。

Ropsten也是以太坊官方提供的測試網絡,是爲了解決Morden難度炸彈問題而重新啓動的一條區塊鏈,目前仍在運行,共識機制爲PoW。測試網絡上的以太幣並無實際價值,因此Ropsten的挖礦難度很低,目前在755M左右,僅僅只有主網絡的0.07%。這樣低的難度一方面使一臺普通筆記本電腦的CPU也可以挖出區塊,獲得測試網絡上的以太幣,方便開發人員測試軟件,但是卻不能阻止攻擊。

PoW共識機制要求有足夠強大的算力保證沒有人可以隨意生成區塊,這種共識機制只有在具有實際價值的主網絡中纔會有效。測試網絡上的以太幣沒有價值,也就不會有強大的算力投入來維護測試網絡的安全,這就導致了測試網絡的挖礦難度很低,即使幾塊普通的顯卡,也足以進行一次51%攻擊,或者用垃圾交易阻塞區塊鏈,攻擊的成本及其低廉。

2017年2月,Ropsten便遭到了一次利用測試網絡的低難度進行的攻擊,攻擊者發送了千萬級的垃圾交易,並逐漸把區塊Gas上限從正常的4,700,000提高到了90,000,000,000,在一段時間內,影響了測試網絡的運行。攻擊者發動這些攻擊,並不能獲得利益,僅僅是爲了測試、炫耀、或者單純覺得好玩兒。

爲了解決測試網絡中PoW共識機制的問題,以太坊錢包Parity的開發團隊發起了一個新的測試網絡Kovan。Kovan使用了權威證明(Proof-of-Authority)的共識機制,簡稱PoA。

PoW是用工作量來獲得生成區塊的權利,必須完成一定次數的計算後,發現一個滿足條件的謎題答案,才能夠生成有效的區塊。

PoA是由若干個權威節點來生成區塊,其他節點無權生成,這樣也就不再需要挖礦。由於測試網絡上的以太幣無價值,權威節點僅僅是用來防止區塊被隨意生成,造成測試網絡擁堵,完全是義務勞動,不存在作惡的動機,因此這種機制在測試網絡上是可行的。

Kovan與主網絡使用不同的共識機制,影響的僅僅是誰有權來生成區塊,以及驗證區塊是否有效的方式,權威節點可以根據開發人員的申請生成以太幣,並不影響開發者測試智能合約和其他功能。

Kovan目前仍在運行,但僅有Parity錢包客戶端可以使用這個測試網絡。

Rinkeby也是以太坊官方提供的測試網絡,使用PoA共識機制。與Kovan不同,以太坊團隊提供了Rinkeby的PoA共識機制說明文檔,理論上任何以太坊錢包都可以根據這個說明文檔,支持Rinkeby測試網絡,目前Rinkeby已經開始運行。


連接測試網絡

目前開發人員最常用的測試網絡是Rinkeby,我將演示一種最簡單的連接和使用Rinkeby的方法。


下載以太坊錢包:ethereum/mist

根據使用的操作系統不同,在下圖紅框中選擇合適的版本,下載解壓。

MIST其實只是以太坊錢包的一個圖形界面,後端還是官方的Geth,只是可以使用圖形化的方式操作,減少了出錯的機率,降低使用門檻。MIST是使用Electron開發的,具有跨平臺的能力,所以在各個系統上的界面和操作應該是基本一致的。

第一次啓動時,記得選擇測試網絡。

在測試網絡上創建一個錢包地址,並給錢包加個密碼。

片刻之後,一個錢包地址就創建完成了,每個人的地址都不相同。由於是測試網絡,地址不需要保密,我就不打馬賽克了。

之後點擊下面的“LAUNCH APPLICATION!”就可以進入主界面了。

注意:一定要確保左下角有個紅色的Rinkeby字樣,這表明你正在Rinkeby測試網絡中。

點擊右側紅框,就可以看到你的錢包地址的餘額了,現在應該是0以太幣。

首次啓動時,需要同步區塊鏈,這需要一段時間,大約1小時左右。


獲取測試網絡上的以太幣

Rinkeby測試網絡使用的是PoA共識機制,我們不能通過挖礦來獲取以太幣。

想獲取Rinkeby測試網絡中的以太幣,需要去申請,這個申請Rinkeby以太幣的功能被稱爲水龍頭(Faucet)。還真是挺形象的,水龍頭會源源不斷的產生以太幣,並且受到權威節點控制,以確保不會被濫用。

進入這個水龍頭的網站:Rinkeby: GitHub Faucet

爲了確保不會出現有人濫用水龍頭,無限生成Rinkeby以太幣,水龍頭需要藉助github賬號來確定申請者的身份和配額。沒有Github賬號的小夥伴記得要去註冊一個,並且登陸。

進入gist.github.com/,把測試錢包賬戶的地址粘貼進去,並點擊“Create public gist”,就像下圖這樣。

點擊之後,把瀏覽器上方的地址複製下來,粘貼到水龍頭頁面的輸入框中。並點擊“Give me Ether”,有三種選項,前面是獲得的以太幣數量,後面是冷卻時間,在冷卻時間過後才能進行下一次以太幣申請。

如果一切順利,你會看到你的錢包地址已經多出了申請數量的以太幣,我申請了3個以太幣。

到Rinkeby的區塊鏈瀏覽器查看一下,也能查到我的錢包地址0xA54BF5C1059D24ac1943F332851a2F0779EDD026

如果申請的人數很多,需要排隊等待一會兒,我自己在使用過程中,最多等過半小時,申請的以太幣金額越大,一般需要等待越多的時間才能到賬。


爲什麼申請測試網絡的以太幣如此繁瑣呢?

以太幣在以太坊平臺中的設計功能是用來支付EVM中執行指令消耗的Gas,如果可以被無限制的產生,就會出現有惡意用戶出於各種目的,用無限制的以太幣換無限制的Gas,在EVM中執行超多的指令,並逐漸擡高區塊Gas上限。EVM中的指令要在每一個以太坊節點中執行,這種攻擊一旦出現,對網絡將會產生很大的影響,所以測試網絡中的以太幣必須針對每個開發者限量供應。不過這個限量對正常的開發測試來說,幾乎不會造成影響。


如果你看到了這裏,並且成功的在自己的電腦上運行了錢包、連接測試網絡、申請以太幣,那麼恭喜你,你已經做好了進一步學習和了解以太坊的準備。之後的文章中,將會介紹如何編寫一個智能合約,這是以太坊最重要的一項功能,敬請期待。




發佈了8 篇原創文章 · 獲贊 32 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章