geth 是以太坊的官方 golang 客戶端. 經過 geth 的使用能夠直觀的瞭解以太坊, 乃至區塊鏈的運做.javascript
下面, 經過 geth 來構造一次搭建私鏈, 建立帳戶, 挖礦, 交易的流程.java
作實驗, 搭建私鏈是第一步, 若是直接在 ETH 公鏈上實驗的話, 會消耗真實的以太幣, 並且在真實的公鏈上, 我的的電腦幾乎不可能挖到礦的.git
經過 geth 搭建私鏈很簡單, 首先須要定義創世區塊, 參考: https://github.com/ethereum/go-ethereum/wiki/Private-networkgithub
genesis.json:golang
{ "config": { "chainId": 100, "homesteadBlock":0, "eip155Block":0, "eip158Block":0 }, "nonce": "0x0000000000000042", "timestamp": "0x0", "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "gasLimit": "0x80000000", "difficulty": "0x1", "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000", "coinbase": "0x3333333333333333333333333333333333333333", "alloc": { } }
配置以後, 啓動web
mkdir geth-test cd geth-test geth --datadri ./data init genesis.json
建立帳戶很簡單, 登陸 geth 的 javascript consolejson
geth --datadir ./data --networkid 100 console
其中 networkid 就是 genesis.json 中配置的 chainIdbash
登陸以後:區塊鏈
> personal.newAccount() # 建立新的帳戶 > eth.accounts # 查看目前有哪些帳戶
開始挖礦很簡單, 接着在上面的 console 中操做測試
> miner.start()
等待幾分鐘以後, 再
> miner.stop()
個人測試機器 2CPU 8G 內存, 大概挖了 5 分鐘, 挖到的 eth 以下:
> acc0 = eth.accounts[0] # 這個私鏈上目前只有一個測試帳號 > eth.getBalance(acc0) # 這裏使用 wei 做爲單位 2.46e+21 > web3.fromWei(eth.getBalance(acc0), 'ether') # 至關於 2460 個以太幣 2460
注 私鏈上挖到的以太幣是不能在公鏈交易的, 這個是用來測試用的, 否則就發了 :)
挖礦很簡單, 交易也簡單, 爲了交易, 咱們還須要再建立一個帳戶
> personal.newAccount() > eth.accounts ["0xd4b42869954689395e502daa6dd9a02aa34dbaff", "0x500aaa5b196741a4c768fa972b5f16a7e0c9c1e5"] > acc0 = eth.accounts[0] > acc1 = eth.accounts[1] > web3.fromWei(eth.getBalance(acc0), 'ether') # acc0 的餘額 2460 > web3.fromWei(eth.getBalance(acc1), 'ether') # acc1 的餘額 0 > val = web3.toWei(1) # 準備轉帳的金額 1 eth "1000000000000000000" > eth.sendTransaction({from: acc0, to: acc1, value: val}) # 執行轉帳, 若是這裏出現錯誤, 提示帳戶被鎖定的話, 解鎖帳戶 > personal.unlockAccount(acc0) # 解鎖時, 輸入建立帳戶時的密碼 Unlock account 0xd4b42869954689395e502daa6dd9a02aa34dbaff Password: true > eth.sendTransaction({from: acc0, to: acc1, value: val}) # 再次轉帳, 此次應該可以成功, 若是第一次就成功的話, 不須要這步 # 再次查看餘額, 發現2個帳戶的餘額沒變 > web3.fromWei(eth.getBalance(acc0), 'ether') 2460 > web3.fromWei(eth.getBalance(acc1), 'ether') 0 # 餘額沒變, 是由於咱們前面已經中止挖礦(miner.stop()), 沒有礦工來確認這筆交易了 > miner.start() > miner.stop() # 啓動10來秒左右再 stop # 再次查看餘額, acc1 帳戶上多了 1 個以太幣, 可是 acc0的以太幣不減反增, 這是由於剛纔的挖礦產生的以太幣以及交易手續費都給了 acc0 # 這裏的挖礦時若是不指定帳號, 默認會把挖到的以太幣給 eth.accounts 中的第一個帳號 > web3.fromWei(eth.getBalance(acc0), 'ether') 2494 > web3.fromWei(eth.getBalance(acc1), 'ether') 1