我以爲了解一個新事物最快的手段是上手實踐,在實踐中不斷地發現問題解決問題。今天咱們來試圖近距離接觸一下以太坊(ethereum
)這個新事物。php
幾乎每個接觸以太坊的開發者,不可能不碰到geth
,geth
是用go
語言編寫的以太坊客戶端,因此叫geth
。安裝方法很簡單:服務器
brew tap ethereum/ethereum brew install ethereum
安裝好geth
以後,先不要像普通程序同樣直接運行geth
,這是由於geth
缺省會鏈接到以太坊官方的正式網絡上去,這個正式網絡裏的區塊目前已經有多達500
多萬塊,並且裏面跑的都是要花真金白銀的交易,爲了練習起見,咱們先鏈接到以太坊的測試網絡上試一下。網絡
除正式網絡外,以太坊還有4
個測試網絡,geth
能用的有3
個。由於正式網絡的編號是1
,因此這3
個測試網絡的編號分別是2
, 3
, 4
。編號爲2
的測試網絡叫作Morden
,目前已經廢棄不用了;編號爲3
的叫作Ropsten
,編號爲4
的叫作Rinkeby
,這些名字的來源都是倫敦或者瑞典斯德哥爾摩的地鐵站的名字,由於它們的主要維護者住在這幾個地鐵站旁邊,也許哪一天會出現『五道口』這樣的測試網絡呢。測試
目前在用的測試網絡主要就是Ropsten
和Rinkeby
,區別在於Ropsten
用的共識機制是PoW
,而Rinkeby
用的共識機制是PoA
,先不要被這些可怕的名詞嚇暈,咱們只要知道它在用法上的區別就是PoW
的話,你若是想得到以太幣的話是須要本身挖礦的,而PoA
則不須要也不能夠挖礦,你須要跟網絡管理員討要幾塊以太幣來作實驗。這幾個網絡的具體區別能夠看這篇文章。網站
指定網絡的方法很簡單,假設咱們要使用rinkeby
這個網絡,那咱們就這樣寫:google
geth --rinkeby
spa
雖然指定了網絡,但咱們還不能立刻啓動geth
,這是由於geth
缺省的數據文件的路徑是~/Library/Ethereum
,若是咱們直接啓動的話,數據文件被放在這個目錄下,而這個目錄原本是爲編號爲1
的正式網絡預留的,若是咱們把數據文件放在這裏的話,若是之後咱們想再啓動正式網絡,這些數據就會被覆蓋,因此咱們須要先在這個目錄下創建一個子文件夾rinkeby
,而後告訴geth
咱們的數據文件要存放在這個子文件夾裏:code
geth --rinkeby --datadir=$HOME/Library/Ethereum/rinkeby
blog
在啓動geth
以前,咱們還須要告訴geth
咱們想以哪一種方式同步數據,geth
有3
種同步數據的方式,分別是full
, fast
和light
。這三種方式中,full
全同步是最慢的一種,它要把從創世區塊往下的全部區塊所有同步並校驗一遍,fast
快速同步模式相對於full
來講要快一些,它只校驗最近的1024
個區塊,而light
模式是最快的,由於它只校驗最近的一個狀態,geth
的缺省同步方式是fast
,在rinkeby
上目前有180
多萬個區塊的狀況下,同步的時間大約須要半個小時到2
個小時,因此這裏仍是須要有一點耐心的。指定同步模式的命令以下:ip
geth --rinkeby --datadir=$HOME/Library/Ethereum/rinkeby --syncmode=fast
爲了能讓咱們的應用軟件可以鏈接上geth
,還須要在啓動geth
的同時啓動rpc
服務器,這個命令很簡單:
geth --rinkeby --datadir=$HOME/Library/Ethereum/rinkeby --syncmode=fast --rpc
咱們費了這麼大力氣創建起來的geth
環境,到底有沒有被人承認呢?咱們把它鏈接到rinkeby
官方的狀態服務器上看一下吧:
geth --rinkeby --datadir=$HOME/Library/Ethereum/rinkeby --syncmode=fast --rpc --ethstats='fengerzh:Respect my authoritah!@stats.rinkeby.io'
注意:這裏的fengerzh
是我給個人機器起的名字,你須要改變成一個不會和別人重複的名字,不然會出錯誤,然後面的這個Respect my authoritah!
是密碼,但這個密碼必須是這樣,不然也會通不過。
好了,咱們終於鏈接好了,運行一下命令看看效果吧:
咱們剛剛設置好的結點已經出如今了官方的網站上,說明咱們的設置已經成功了!
上面這一串命令太長了,記不住怎麼辦?咱們能夠把這些配置信息導出到一個配置文件中:
geth --rinkeby --datadir=$HOME/Library/Ethereum/rinkeby --syncmode=fast --rpc --ethstats='fengerzh:Respect my authoritah!@stats.rinkeby.io' dumpconfig > ~/rinkeby.toml
這樣之後咱們再執行的時候,就直接執行
geth --config ~/rinkeby.toml console
就行了。
如今咱們的geth
環境能運行了,下一步咱們就須要在裏面創建一個帳號,最好再能有幾個以太幣能夠玩一玩,咱們能夠用一個簡單的命令創建一個帳號:
geth account new --datadir=~/Library/Ethereum/rinkeby/
這裏必定不要忘記添加datadir
,不然你的帳號就建到正式網絡上去,而不是rinkey
測試網絡了。
正如咱們上面所說,因爲rinkeby
這個網絡是基於PoA
的,因此你在這裏獲取以太幣的惟一方式是索取,而不是挖礦,因此你須要到這個網站來,點擊下面的3個連接之一,把你剛纔建好的帳號的信息放在twitter
裏發佈出去,而後再把twitter
的網址粘回剛纔那個網站,過不了一會你就會收到管理者寄給你的3
個以太幣。
3
個以太幣太少了嗎?你能夠到這個網站換算一下3
個以太幣等於多少wei
:
一般狀況下,一份智能合約的部署費用大約須要1,400,000
個gas
,具體數字要看你合約的複雜程度而定,舉例來講,一次加法操做要花掉你3
個gas
,而一次乘法操做要花掉5
個gas
,建立一個新帳號要花32000
個gas
,具體數據能夠查這裏。而gas
還要經過單價換算成以太幣,就像汽油同樣,部署一份智能合約要花掉140
萬升油,而一升油的價格不固定,能夠由你本身決定,你給的油價高,算的就快,你給的油價低,算的就慢,若是過低的話就沒有人算了,正式網絡的油價能夠在這裏查到,而測試網絡rinkeby
的油價在官網上有顯示,目前價格大約是20.687gwei
,這樣算下來,一份智能合約的費用大約是1400000*20.687=28961800gwei
,摺合0.0289618
個以太幣,那咱們的3
個以太幣大約能夠部署100
份合約。而若是是正式網絡的話,汽油單價沒那麼貴,大約是2
或者3gwei
,折爲0.003
以太幣,而目前以太幣的價格大約爲5000
元人民幣,因此一份智能合約的價格是15
元人民幣。
若是你以爲這個價格過高的話,能夠考慮創建本身的私有網絡,我會在另外一篇文章裏詳談。