區塊鏈開發(一)Windows平臺搭建基於以太坊的區塊鏈開發環境
引言
Ethereum(以太坊)是一個使開發人員能夠建立和釋出下一代分散式應用的公共區塊鏈平臺。 通過其專用加密貨幣以太幣(Ether)提供去中心化的虛擬機器(稱為“以太虛擬機器”Ethereum Virtual Machine)來處理點對點合約。具體可以訪問
來了解更多相關資訊!
環境搭建
下載可執行檔案
訪問 https://geth.ethereum.org/downloads/. 出現如圖所示
點選基於Windows平臺,可下載檔案 geth-windows-amd64-1.7.3-4bb3c89d.exe
然後雙擊後會生成目錄
點選圖中的geth.exe即可!
配置語言環境
由於原始碼是基於go語言開發,需要配置go語言的環境,這裡可以通過choco 進行安裝,如果沒有choco的環境可以通過 訪問連結 進行安裝choco. 然後重新開啟一個dos視窗執行如下命令
C:\Windows\system32> choco install git
C:\Windows\system32> choco install golang
C:\Windows\system32> choco install mingw
安裝完畢後,設定環境變數。
下載go-ethereum
在F盤建立一個目錄ethereum ,然後通過進入此目錄執行
git clone https://github.com/ethereum/go-ethereum
cd go-ethereum
go get -u -v golang.org/x/net/context
go install -v ./cmd/… #編譯geth
至此環境已經安裝完畢,但是需要測試是否可以用!
初步探索
準備創世區塊配置檔案
以太坊支援自定義創世區塊,要執行私有鏈,我們就需要定義自己的創世區塊,創世區塊資訊寫在一個json格式的配置檔案中。首先將下面的內容儲存到一個json檔案中,例如genesis.json。
{
"config ": {
"chainId": 15,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x40000",
"extraData" : "",
"gasLimit" : "0xffffffff",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00",
"alloc": { }
}
cmd進入上面建立的目錄,然後執行指令
geth –datadir data init genesis.json
上面的命令的主體是geth init,表示初始化區塊鏈,命令可以帶有選項和引數,其中–datadir選項後面跟一個目錄名,這裡為data,表示指定資料存放目錄為data,genesis.json是init命令的引數。執行上面的命令,會讀取genesis.json檔案,根據其中的內容,將創世區塊寫入到區塊鏈中。
啟動私有鏈節點
geth –datadir “./” –nodiscover console 2>>geth.log
如圖所示
然後執行如下可以挖坑、交易等操作!
> eth.accounts
[]
> personal.newAccount("123456")
"0xacc9150f4d8c5664bd98a51c3aca63f5b5938fd5"
> eth.accounts
["0xacc9150f4d8c5664bd98a51c3aca63f5b5938fd5"]
> miner.start()
null
> miner.stop()
true
> eth.accounts
["0xacc9150f4d8c5664bd98a51c3aca63f5b5938fd5"]
> eth.blockNumber
0
> personal.newAccount("12345")
"0xa6b519c11b19fd73d08262a8e964ccda3509c015"
> user1=eth.accounts[0]
"0xacc9150f4d8c5664bd98a51c3aca63f5b5938fd5"
> user2=eth.accounts[1]
"0xa6b519c11b19fd73d08262a8e964ccda3509c015"
> eth.getBalance(user1)
0
> eth.getBalance(user2)
0
> miner.start()
null
> miner.stop()
true
> eth.coinbase
"0xacc9150f4d8c5664bd98a51c3aca63f5b5938fd5"
> miner.setEtherbase(user1)
true
> eth.coinbase
"0xacc9150f4d8c5664bd98a51c3aca63f5b5938fd5"
> eth.getBalance(user1)