ubuntu16.04搭建以太坊私有鏈並在私有鏈中進行挖礦及轉賬
1.前言
以太坊作為區塊鏈技術應用的龍頭,需要對該專案深入的學習,才好在工作中更好的使用區塊鏈來解決實際的問題。
不管是以太坊,還是CAM區塊鏈,在學習的時候都習慣的要先了解這些系統的執行流程以及系統功能,那麼搭建私有鏈是一個很好的方式,可以在私有鏈上進行任意的操作,轉賬、挖礦、部署合約,比如給自己發個幾億的以太坊。
2.搭建私有鏈所需的依賴環境
作業系統:ubuntu16.04,開虛擬機器的話要至少4G,否則會影響測試挖礦時的速度
軟體:geth客戶端 版本:1.8.1-stable-1e67410e
3.安裝geth客戶端
【Ctrl+Alt+T】開啟終端,依次輸入以下命令
sudo apt-get update
sudo apt-get install software-properties-common
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo add-apt-repository -y ppa:ethereum/ethereum-dev
sudo apt-get update
sudo apt-get install ethereum
安裝完成後,輸入geth -h,如果有列出資訊則說明安裝成功,可檢視列出資訊,方便後續的操作
4.建立創世塊
作為區塊鏈, 鏈子總要有個頭,所以需要建立一個創世塊作為頭部,才好往下新增,創世檔名稱命名為genesis.json,內容如下,為json格式
{
"config": {
"chainId": 20,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"alloc": {
"bc9a3ece02d7cb31cf63dfdfc48db0b82770d014": {
"balance": "1000000000000000000000000000000"
},
"457e7d69fd3ac576aa744228e6b3319cde768473": {
"balance": "2000000000000000000000000000000"
},
"926ef6011f7c852d30a01c7a4aaa5cbc460588fc": {
"balance": "3000000000000000000000000000000"
}
},
"nonce": "0x0000000000000056",
"difficulty": "0x020000",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x0000000000000000000000000000000000000000",
"timestamp": "0x00",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa",
"gasLimit": "0x4c4b40"
}
檔案內容欄位說明如下
其中gasLimit應填的比較大,否則在接下去測試轉賬時會提示錯誤,提示超出gasLimit
alloc為為預置賬號充值以太幣,這些一般是在ico階段參與的使用者,可以在創世塊中為這些初期支援使用者分發以太幣
開啟終端,cd到搭建一個資料夾中,我的是/home/wjl/eth,在其中建立一個data資料夾,作為第一個私鏈節點儲存資料的資料夾。
拷貝genesis.json到/home/wjl/eth 資料夾下,方便命令列操作
在終端輸入【geth --datadir data --networkid 20140628 --rpc --rpccorsdomain "*" init ./genesis.json】
需要說明的是,
--networkid 20140628,為私鏈id,可以任意修改為自己的id,以太坊主網id為1,後續要搭建私鏈下的其他節點,networkid必須相同
--datadir data 中data是資料夾的名稱,私鏈資料會儲存在這個資料夾內,當要在同一計算機中建立其他私鏈節點時,可建立另外的資料夾,例如data2,然後通過--datadir data2區分不同的私鏈節點,如果未設定--datadir,則會讀取以太坊主網的資料,預設位置在/root/.ethereum中。
出現如上圖資訊,說明創世塊建立完成。
5.開啟geth私鏈客戶端
開啟終端,輸入【geth --datadir data --networkid 20140628 --rpc --rpccorsdomain "*" --nodiscover --port 16333 --rpcport 8546 console】
即可開啟geth客戶端,需要說明的是,需設定埠
--port 16333 系統預設是30303
--rpcport 8546 系統預設是8545
如果啟用第二個測試節點,port以及rpcport應與第一個節點不同
進入控制檯,開啟節點成功。
6.建立賬戶
在控制檯中輸入personal.newAccount("123") ,注意“123”就是密碼了,請自行更改為其他的字串。
為什麼要建立賬戶?
因為接下去要挖礦,沒有賬戶是挖不了礦的,因為挖礦成功後,系統會獎勵5個ETH,需要有賬戶接受獎勵。
7.挖礦
終端中輸入eth.coinbase
檢視礦工的賬戶,其實就是上一步建立的賬戶。
7.1開始挖礦
終端輸入miner.start(1)
第一次挖礦的時候需要初始化挖礦執行緒,需要等待挺長時間的。
說明挖礦成功。
7.2停止挖礦
在控制檯輸入命令miner.stop(),停止挖礦。
8.檢視區塊高度及區塊內容
輸入,eth.blockNumber查詢區塊數量,eth.getBlock(47)查詢對應區塊的內容。
9.轉賬
9.1建立第二個賬戶
在控制檯中輸入personal.newAccount("123") ,注意“123”就是密碼了,請自行更改為其他的字串。
9.2查詢賬戶餘額
以太坊挖礦預設是第一個賬戶,因此只有第一個賬戶有餘額,輸入
web3.fromWei(web3.eth.getBalance(web3.eth.accounts[0]),"ether")//查詢第一個賬戶餘額
web3.fromWei(web3.eth.getBalance(web3.eth.accounts[1]),"ether")//查詢第二個賬戶餘額
可以看到第一個賬戶餘額是240eth,這是挖礦所得,第二個賬戶餘額為0eth。
備註eth單位解釋:
kwei (1000 Wei)
mwei (1000 KWei)
gwei (1000 mwei)
szabo (1000 gwei)
finney (1000 szabo)
ether (1000 finney)
也就是說ether =wei * 10^18,也就是說精度可以達到18位。
wei轉ether
> web3.fromWei(10000000000000000,"ether")
"0.01"
ether轉wei
> web3.toWei(1)
"1000000000000000000"
9.3第一個賬戶轉賬給第二個賬戶
在geth的console中輸入web3.eth.sendTransaction({from:web3.eth.accounts[0] , to: web3.eth.accounts[1],value: web3.toWei(1, "ether")})
會提示需要密碼或者解鎖,那麼我們需要解鎖第一個賬戶,因為是用一個賬戶轉出ether的,輸入personal.unlockAccount(web3.eth.accounts[0])
說明解鎖成功,我們再進行轉賬web3.eth.sendTransaction({from:web3.eth.accounts[0] , to: web3.eth.accounts[1],value: web3.toWei(1, "ether")})
說明轉賬已經提交成功,但是交易並未完成,還需要礦工挖礦提交新的區塊,在區塊中加入這次轉賬交易,提交新的區塊全網的節點(按百分比算,具體還沒細看原始碼)確認完成後,交易才正式生效。
輸入miner.start(1) 開始挖礦
等待挖礦完成
然後輸入miner.stop()停止挖礦,只是為了不讓螢幕一直重新整理,方便截圖
輸入
web3.fromWei(web3.eth.getBalance(web3.eth.accounts[0]),"ether")//查詢第一個賬戶餘額
web3.fromWei(web3.eth.getBalance(web3.eth.accounts[1]),"ether")//查詢第二個賬戶餘額
說明轉賬成功
附錄
---------------------
作者:戰爭迷霧
來源:CSDN
原文:https://blog.csdn.net/w88193363/article/details/79402074
版權宣告:本文為博主原創文章,轉載請附上博文連結!