搭建私鏈關(guān)鍵是 編寫創(chuàng)始區(qū)塊配置文件贴唇,主要包含以下幾個步驟搀绣。
為了保持目錄結(jié)構(gòu)清晰,搭建過程中新建了工作目錄以及存放區(qū)塊數(shù)據(jù)和賬戶數(shù)據(jù)的目錄戳气。
1链患、創(chuàng)建工作目錄
mkdir geth
cd geth
touch gensis.json
2、配置創(chuàng)世區(qū)塊配置文件
{
"config": {
"chainId": 123123,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"coinbase" : "0x0000000000000000000000000000000000000000",
"difficulty" : "0x40000",
"extraData" : "",
"gasLimit" : "0xffffffff",
"nonce" : "0x0000000000000042",
"mixhash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"parentHash" : "0x0000000000000000000000000000000000000000000000000000000000000000",
"timestamp" : "0x00",
"alloc": {
}
}
注:chainid 為區(qū)塊鏈網(wǎng)絡(luò)id瓶您,對應(yīng)啟動時的networkid
3麻捻、創(chuàng)建存儲目錄及初始化創(chuàng)世區(qū)塊
創(chuàng)建目錄用于存放區(qū)塊鏈數(shù)據(jù)
cd geth
mkdir blockdb
執(zhí)行初始化命令
geth --datadir "./blockdb" init gensis.json
==error:==
Fatal: invalid genesis file: json: cannot unmarshal hex string without 0x prefix into Go struct field Genesis.extraData of type hexutil.Bytes
若執(zhí)行過程中出現(xiàn)以上錯誤提示纲仍,請檢查==gensis.json==文件。
其中 chaindata 中存放的時 區(qū)塊數(shù)據(jù)贸毕,keystore 中存放的是 賬戶數(shù)據(jù)巷折。
4、啟動私鏈初始節(jié)點(diǎn)
執(zhí)行以下命令啟動私鏈
geth --datadir "./blockdb" --rpc --rpcport 8545 --rpccorsdomain "*" --rpcapi "eth,net,web3,personal,admin,shh,txpool,debug,miner" --nodiscover --maxpeers 30 --networkid 123123 --port 30303 --verbosity 4 console
- rpccorsdomain 這里配置 “ * ”是允許通過任意域名訪問崖咨,也可以指定具體的域名。
- verbosity 日志等級:0=silent, 1=error, 2=warn, 3=info, 4=debug, 5=detail (default: 3)油吭。
==error==
Fatal: Failed to start mining: etherbase missing: etherbase must be explicitly specified
出現(xiàn)場景击蹲,gensis.json中節(jié)點(diǎn)alloc未配置賬號,而啟動私鏈時需指定一個礦工賬號婉宰,否則回出現(xiàn)該錯誤歌豺。
Error: etherbase missing: etherbase address must be explicitly specified
原因是當(dāng)前環(huán)境沒有賬戶,需要建立一個賬戶
5心包、常用命令
以太坊的JavaScript控制臺中內(nèi)置了一些對象类咧,通過這些對象我們可以很方便的和以太坊進(jìn)行交互,這些內(nèi)置對象包括:
- eth:提供了操作區(qū)塊鏈項目的方法*
- net:提供了查看p2p網(wǎng)絡(luò)狀態(tài)的相關(guān)方法
- admin:提供了管理節(jié)點(diǎn)相關(guān)方法
- miner:提供了啟動和停止挖礦的方法
- personal:提供了管理賬戶的方法
- txpool:提供了查看交易內(nèi)存池的方法
- web3:除了包含以上對象中有的方法外蟹腾,還包含一些單位換算的方法痕惋。
下面幾個步驟以一個完整的流程介紹一些常用命令,即創(chuàng)建用戶->查看用戶->挖礦->交易娃殖。
創(chuàng)建賬戶
personal.newAccount('123456')
查看賬戶
eth.accounts
eth.accounts[0]
查看余額
eth.getBalance(eth.accounts[0])
web3.fromWei(eth.getBalance(eth.accounts[0]),'ether')
此時賬戶數(shù)據(jù)為0
挖礦
先啟動(start)挖礦值戳,待出現(xiàn)小??的圖標(biāo)(開始挖礦),過一分鐘后炉爆,停止挖礦堕虹,然后查看余額,可以看到賬戶已存在數(shù)據(jù) (在沒有設(shè)置挖礦獎勵地址時芬首,系統(tǒng)默認(rèn)第一個賬戶的地址為獎勵地址)赴捞。
挖礦命令:
miner.start()
miner.stop()
交易
首先交易需2個賬戶,所以使用newAccount命令再創(chuàng)建一個賬戶郁稍;
其次交易之前需先解鎖赦政,否則會報錯。
解鎖命令:
personal.unlockAccount(eth.accounts[0],'123456')
轉(zhuǎn)賬命令:
eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:web3.toWei(1,"ether")})
此時查看另一個賬戶艺晴,可以看到已存在1eth昼钻。
若轉(zhuǎn)賬時若未開啟挖礦,此時交易處于待打包交易封寞,所以另一個賬戶查不到轉(zhuǎn)賬的數(shù)據(jù)然评,可以通過==txpool.status== 查看狀態(tài)。