萬事開頭來,無論是開發(fā)什么。首先就是搭建開發(fā)環(huán)境,今天嘗試把自己搭建ethereum區(qū)塊鏈開發(fā)環(huán)境的經(jīng)驗(yàn)寫出來,希望能對(duì)你有幫助。
說明
以太坊是一個(gè)開源的,能夠部署和運(yùn)行智能合約的提供去中心化的虛擬機(jī),你可以把它理解為運(yùn)行各種去中心化app的操作系統(tǒng),最著名的應(yīng)用就是比特幣了。以太坊網(wǎng)絡(luò)是由一個(gè)個(gè)節(jié)點(diǎn)組成的。然后,我們把自己寫的智能合約部署到以太坊網(wǎng)絡(luò)上去,以太坊的應(yīng)用就是一個(gè)部署,操作,智能合約的程序。由于以太坊的公鏈對(duì)于我們開發(fā)程序來說太慢,所以首先需要先搭建一個(gè)以太坊的私有鏈。這過程中主要需要geth。
1.geth
首先需要安裝geth,我們使用geth來創(chuàng)建私有鏈。
Mac平臺(tái)
1.1 使用 Homebrew安裝
brew tap ethereum/ethereum
brew install ethereum
1.2 從源碼安裝
git clone https://github.com/ethereum/go-ethereum
brew install go
cd go-ethereum
make geth
1.3 從網(wǎng)站下載命令行工具
https://ethereum.github.io/go-ethereum/downloads/
Windows平臺(tái)
從下面網(wǎng)站下載windows平臺(tái)
https://ethereum.github.io/go-ethereum/downloads/
Ubuntu平臺(tái)
sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
安裝好geth之后,使用命令行
geth version
如果輸出類似
Geth
Version: 1.7.3-stable
Architecture: amd64
Protocol Versions: [63 62]
Network Id: 1
Go Version: go1.9
Operating System: darwin
GOPATH=
GOROOT=/usr/local/Cellar/go/1.9/libexec
表示安裝成功
2.使用geth創(chuàng)建私有鏈
運(yùn)行命令
mkdir enode1
mkdir enode2
分別創(chuàng)建兩個(gè)文件夾,作為兩個(gè)私有鏈節(jié)點(diǎn)的datadir
兩個(gè)節(jié)點(diǎn)要能鏈接,必須是由同一個(gè)創(chuàng)始文件創(chuàng)建的鏈。
geth --datadir "enode1" init genesis.json
enode1是上文創(chuàng)建的文件之一, genesis.json是創(chuàng)世的配置文件
genesis.json如下
{
"coinbase" : "0x0000000000000000000000000000000000000001",
"difficulty" : "0x400",
"extraData" : "",
"gasLimit" : "4712388",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00",
"alloc": {},
"config": {
"chainId": 15,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
}
}
創(chuàng)建完成之后
使用命令
geth --identity "newEth" --rpc --rpccorsdomain "*" --datadir "enode1" --port 30303 --rpcapi "personal,db,net,eth,web3" --networkid 999 --rpcport 8080 console
我們可以看到這些信息
來啟動(dòng)另外一個(gè)節(jié)點(diǎn)
使用命令啟動(dòng)另外一個(gè)節(jié)點(diǎn)
geth --datadir "enode2" init genesis.json
geth --identity "newEth" --rpc --rpccorsdomain "*" --datadir "enode2" --port 30304 --rpcapi "personal,db,net,eth,web3" --networkid 999 --rpcport 8081 console
注意,兩個(gè)節(jié)點(diǎn)不同的地點(diǎn)在datadir,port,rpcport。因?yàn)槲覀兪窃谕粋€(gè)計(jì)算機(jī)上運(yùn)行兩個(gè)節(jié)點(diǎn),所以datadir,port,rpcport必須不同,如果不是在同一個(gè)計(jì)算機(jī)上則無所謂。
運(yùn)行admin.peers
可以看到該節(jié)點(diǎn)并沒有和任何節(jié)點(diǎn)鏈接
運(yùn)行admin.addPeer('')添加另外一個(gè)節(jié)點(diǎn),節(jié)點(diǎn)的地址enode://6b944fdc0a3460977e67682428b29cec7b28a400a2a5c3ef6b56673eb9f4abc8fe7316018c2073e43569ec63e6542eb7dc8b23cc93f397bc41a1f077b8cec6e4@[::]:30304就是上圖我們enode2的節(jié)點(diǎn)地址。
我們?cè)龠\(yùn)行admin.peers看看
可以看到,兩個(gè)節(jié)點(diǎn)已經(jīng)運(yùn)行在同一個(gè)鏈上。
好了,最重要的運(yùn)行環(huán)境已經(jīng)搭建完了,下一章我們?cè)噲D部署一個(gè)智能合約。下一章地址