在Ubuntu下成功搭建以太坊私有链挖矿并转账
前言
最近老師布置了一個任務,讓我學習區塊鏈的知識。剛開始乖乖的拿一本書看概念,有時候看書真的很無聊,我都睡過去好幾回了。前幾天老師說,你要是感覺看概念太無聊,就先嘗試著搭一個以太坊私有鏈試一試。哇,這可比看書有意思多了。立馬開始試,網上找了各種方法,看了好多博主的文章。但是自己上手后總是失敗。就在今天,終于弄成了,心情無比激動。
剛開始自己弄的時候,miner.start()后,INFO就一直停留在commit new mining work。然后就沒有反應了,一直都沒有Generating DAG in progress的信息產生。在網上查了很多資料,都沒有一個準確的答案。最后,我想會不會是版本和源的問題。于是又新建了一個虛擬機,安裝Ubuntu18.04。從頭開始搭,如果這都失敗的話,那就真的涼了。
?
1.使用剛安裝好的Ubuntu,第一件事就是設置下載源
進入Ubuntu系統的軟件與更新
點擊關閉后就可以了。
2.依次輸入以下命令
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
?
3.輸入geth -h檢查以下版本
?
4.接下來是創建創世塊
創世塊名稱命名為genesis.json(挖礦難度設置低一點),內容如下:
{"config": {"chainId": 10,"homesteadBlock": 0,"eip155Block": 0,"eip158Block": 0},"alloc": {"bc9a3ece02d7cb31cf63dfdfc48db0b82770d014": {"balance": "1000000000000000000000000000000"},"457e7d69fd3ac576aa744228e6b3319cde768473": {"balance": "2000000000000000000000000000000"},"926ef6011f7c852d30a01c7a4aaa5cbc460588fc": {"balance": "3000000000000000000000000000000"}},"nonce": "0x0000000000000056","difficulty": "0x0200","mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000","coinbase": "0x0000000000000000000000000000000000000000","timestamp": "0x00","parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000","extraData": "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa","gasLimit": "0x4c4b40" }參數說明:
mixhash:與nonce配合用于挖礦,由上一個區塊的一部分生成的hash。nonce:nonce就是一個64位隨機數,用于挖礦,注意他和mixhash的設置需要滿足以太坊的Yellow paper。difficulty:設置當前區塊的難度,如果難度過大,cpu挖礦就很難,這里設置較小難度。alloc:用來預置賬號以及賬號的以太幣數量,因為私有鏈挖礦比較容易,所以我們不需要預置有幣的賬號,需要的時候自己創建即可以。coinbase:礦工的賬號,隨便填。timestamp:設置創世塊的時間戳。parentHash:上一個區塊的hash值,因為是創世塊,所以這個值是0。extraData:附加信息,隨便填,可以填你的個性信息。gasLimit:該值設置對GAS的消耗總量限制,用來限制區塊能包含的交易信息總和,因為我們是私有鏈,所以填最大。將這個genesis.json文件放到一個新建文件夾中,例如:放到privateblock中。
然后在終端輸入:
geth --datadir data --networkid 20140628 --rpc --rpccorsdomain "*" init ./genesis.json--networkid 20140628,為私鏈id(沒有太多限制),以太坊主網id為1,如果還要要搭建私鏈下的其他節點,networkid必須相同。--datadir data 中data是文件夾的名稱,私鏈數據會存儲在這個文件夾內。若存在其他節點,文件名要不同。 可以通過"--datadir 文件名"來區分不同的私鏈節點。如果未設置--datadir,則會讀取以太坊主網的數據, 默認位置在/root/.ethereum中。出現以上信息,說明創世塊創建完成。
?
5.打開客戶端
在終端鍵入:
geth --datadir data --networkid 20140628 --rpc --rpccorsdomain "*" --nodiscover --port 16333 --rpcport 8546 console-port 16333 系統默認是30303 --rpcport 8546 系統默認是8545 如果啟用第二個測試節點,port以及rpcport應與第一個節點不同。成功打開,注意下版本就可以了。
?
6.創建賬戶
可以使用eth.accounts查看有多少個賬戶。
輸入personal.newAccount(“123”)創建賬戶,這個“123”是密碼,給你返回的是賬戶。此時你可以輸入eth.accounts[0]來查看第一個賬戶,這里和數組一樣,再創建賬戶就是eth.accounts[1]了。
eth.coinbase可以查看礦工賬戶,因為挖礦默認的是第一個賬戶,所以一次創建多個賬戶,返回的都是eth.accounts[0]
?
7.挖礦
終端鍵入:miner.start(1),括號里不填的話是默認全力挖礦,電腦可能受不了。產生的INFO如下:
進行到這里都很順利,速度也很快,但是接下來就要等很長時間了。這是因為第一次挖礦需要初始化挖礦線程。大家可以看到這中間經歷了快6個小時(我都等的快崩潰了)。到了下面這一步,等就完事了。
輸入miner.stop()就可以停止挖礦
?
8.接下來就可以輸入eth.blockNumber命令查看區塊的高度。
輸入eth.getBlock()可以查看區塊信息。
?
9.轉賬
web3.fromWei(web3.eth.getBalance(web3.eth.accounts[0]),"ether") web3.fromWei(web3.eth.getBalance(web3.eth.accounts[1]),"ether")用上面的方式也可以查詢到賬戶的余額,后面的ether是單位,ether=wei*10^18。
如果直接轉賬會報錯,提示需要密碼或解鎖。
此時需要輸入: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.star(1)進行挖礦,這時可以看到,等待時間已經縮短到了7分鐘。
其實挖到一個礦就可以了,輸入miner.stop()停止挖礦。
再次查詢賬戶余額顯式如下:
至此,以太坊搭建私有鏈挖礦和轉賬都完成了。
總結
以上是生活随笔為你收集整理的在Ubuntu下成功搭建以太坊私有链挖矿并转账的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++学习笔记:(六)public、pr
- 下一篇: C++学习笔记:(七)C语言实现面向对象