能夠直接下載程序進行安裝,也能夠下載源碼本身進行編譯安裝,本文介紹源碼編譯方式。node
go get github.com/ethereum/go-ethereum
cd go-ethereum make geth 或者 make all
$GOPATH$/src ├── github.com │ └── ethereum │ └── go-ethereum └── golang.org └── x └── net
go install -v github.com/ethereum/go-ethereum/cmd/geth go install -v github.com/ethereum/go-ethereum/cmd/evm
編譯成功,在$GOPATH$/bin下會出現:geth.exe和evm.exegit
將 geth 添加到環境變量中 github
# ubuntu下 vi ~/.bashrc # mac下 vi ~/.bash_profile # 打開配置文件後,把如下內容添加到文件中 export GETH="$GOPATH/src/github.com/ethereum/go-ethereum/build" export PATH="$PATH:$GETH/bin"
而後執行,使配置生效。golang
source ~/.bashrc
windows下,直接將bin路徑添加到Path環境變量中web
檢查是否安裝成功json
geth --help
若是輸出一些幫助提示命令,則說明安裝成功。ubuntu
# ubuntu和mac mkdir ~/privatechain mkdir ~/privatechain/data # data用於存放帳戶和區塊數據 # windows,在D盤創建文件夾privatechain,並在其下創建data文件夾
geth --datadir data --nodiscover console
則進入geth控制檯(交互式的 Javascript 執行環境),默認端口爲8545和30303端口windows
personal.newAccount("123456") # 123456爲密碼 # 出現的如下一串字符,則爲建立的帳戶 "0x3bfd5f0306ffe7b93e56989fd11d5678ce32cfe6"
eth.getBalance(eth.accounts[0]) # 此時會顯示爲 0
exit
{ "alloc": { "0x3bfd5f0306ffe7b93e56989fd11d5678ce32cfe6": { "balance": "100000000000000000000000000" } }, "config":{ "chainId":10, "homesteadBlock":0, "eip155Block":0, "eip158Block":0 }, "nonce":"0x0000000000000042", "mixhash":"0x0000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x2000", "alloc": {}, "coinbase":"0x0000000000000000000000000000000000000000", "timestamp": "0x00", "parentHash":"0x0000000000000000000000000000000000000000000000000000000000000000", "extraData": "", "gasLimit":"0xffffffff" }
創世區塊信息寫在一個 JSON 格式的配置文件中bash
此處個人配置,在"0x3bfd5f0306ffe7b93e56989fd11d5678ce32cfe6"中預置了1億的幣網絡
各個參數的含義以下:
geth --datadir data init genesis.json
若是出現錯誤提示,能夠先刪除原來的創世塊
geth removedb --datadir data
再次執行
geth --datadir data init genesis.json
初始化成功後,會在數據目錄 data 中生成 geth 和 keystore 兩個文件夾,此時目錄結構以下:
privatechain ├── data │ ├── geth │ │ ├── chaindata │ │ │ ├── 000001.log │ │ │ ├── CURRENT │ │ │ ├── LOCK │ │ │ ├── LOG │ │ │ └── MANIFEST-000000 │ │ └── lightchaindata │ │ ├── 000001.log │ │ ├── CURRENT │ │ ├── LOCK │ │ ├── LOG │ │ └── MANIFEST-000000 │ └── keystore └── genesis.json
其中 geth/chaindata
中存放的是區塊數據,keystore
中存放的是帳戶數據。
進入geth控制檯
geth --datadir data --networkid 10 console
指定網絡id(networkid)爲上面設置的10
# 123456爲密碼 personal.unlockAccount(eth.accounts[0],"123456")
amount = web3.toWei(10,'ether') eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:amount})
此時查詢帳戶餘額沒發生變化,須要進行挖礦確認打包交易
經過 miner.start()
啓動挖礦
> miner.start(3)
其中 start 的參數表示挖礦使用的線程數。第一次啓動挖礦會先生成挖礦所需的 DAG 文件,這個過程有點慢,等進度達到 100% 後,就會開始挖礦,此時屏幕會被挖礦信息刷屏。
中止挖礦,在 console 中輸入:
miner.stop()
挖到一個區塊會獎勵5個以太幣,挖礦所得的獎勵會進入礦工的帳戶,這個帳戶叫作coinbase,默認狀況下coinbase是本地帳戶中的第一個帳戶:
> eth.coinbase "0xfb9cc019fc650a1699d05b7fb564b83c3a72b64d"
能夠經過 miner.setEtherbase()
將其餘帳戶設置成 coinbase
便可
> miner.setEtherbase(eth.accounts[1]) true > eth.coinbase "0xc6b5702b15a3794374e28f41f36e1e8dbdd564df"
從新啓動挖礦,查看 eth.accounts[1]
是否能夠得到以太幣
> miner.start(3) //等待幾秒後 > miner.stop()
查詢帳戶餘額:
> eth.getBalance(eth.accounts[0]) 280000000000000000000 # wei > eth.getBalance(eth.accounts[1]) 210000000000000000000 > web3.fromWei(eth.getBalance(eth.accounts[1]),'ether') # wei換算成ether 210
發現帳戶0 和 帳號1 都有以太幣,說明 miner.setEtherbase()
設置成功。
getBalance()
返回值的單位是wei,wei是以太幣的最小單位,1個以太幣=10的18次方個wei。要查看有多少個以太幣,能夠用web3.fromWei()將返回值換算成以太幣:
> web3.fromWei(eth.getBalance(eth.accounts[0]),'ether') 280 > web3.fromWei(eth.getBalance(eth.accounts[1]),'ether') 210
查看當前區塊總數:
eth.blockNumber
經過區塊號查看區塊:
eth.getBlock(6)
經過交易hash(hash 值包含在上面交易返回值中)查看交易:
eth.getTransaction("0x493e8aa2bcb6b2a362bdbd86b2c454279e14beea43b444aeb45c7f667bf572e2")
控制檯內置了一些用來操做以太坊的 Javascript 對象,能夠直接使用這些對象。這些對象主要包括:
經常使用命令有:
獲取第一個節點的enode信息
admin.nodeInfo.enode
結果以下:
"enode://fe6dd2e69ceea3eb8daddc4cb1453a00d7094df6486c214062a5d0ec5b020b9d832508b80594a323cbbd6ddb4ddd06257103a2f08173ef7e31e19f302f4e5f9e@[::]:30303?discport=0"
在第二個節點中執行添加第一個節點的操做
admin.addPeer("enode://fe6dd2e69ceea3eb8daddc4cb1453a00d7094df6486c214062a5d0ec5b020b9d832508b80594a323cbbd6ddb4ddd06257103a2f08173ef7e31e19f302f4e5f9e@192.168.137.1:30303")
注意:enode信息中的[::]替換成第一個節點的ip,問號及後面部分不須要
// 查看鏈接的節點數量,此處爲1 net.peerCount // 查看鏈接的節點信息 admin.peers
結果以下:
[{ caps: ["eth/63"], id: "352c2a755ea629dba803dda4e8e2708fca746838b2c91ea329713fd2c2ccbc0d1dd34fe905c1157fafb775383cf6f4f21e94a4b2533a8282806dd4fda81a5bd7", name: "Geth/v1.8.10-unstable-998f6564/darwin-amd64/go1.10.2", network: { inbound: true, localAddress: "192.168.137.1:30303", remoteAddress: "192.168.137.16:53022", static: false, trusted: false }, protocols: { eth: { difficulty: 131072, head: "0x5e1fc79cb4ffa4739177b5408045cd5d51c6cf766133f23f7cd72ee1f8d790e0", version: 63 } } }]
此時,節點1和節點2均可以進行挖礦,而且只要有一個節點在進行挖礦,其餘節點的交易也都能正常進行。在節點1能夠查詢節點2中帳戶的餘額,也能夠在不一樣節點之間進行轉帳。