geth 基本使用

概要

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
相關文章
相關標籤/搜索