這篇適合給對於區塊鏈有基本認識的朋友閱讀 ...
本系列為「徹底瞭解區塊鏈 從私有鏈出發 @夢森林」的會後心得。
章節分為三大部分:
- BlockChain - 私有鏈建立 ( Geth & Node.js ) [本篇]
- BlockChain - 私有鏈系統監控
- BlockChain - 私有鏈的智能合約(Solidity & Node.js)- 未完工
本篇不再贅述於知識部分,主要講解建立的技術,
因此對於下列相關知識,建議讀者有初步的了解:
目錄:
一、環境安裝
不過不用擔心,我們不會碰到 Go。
支援多數平台,到下載頁面點選 「適用於Windows的Geth 1.8.12」。
親,記住,下一步到底。
強迫同意授權。
預設安裝。
預設路徑。
平安喜樂,安裝完成。
輸入指令幫助,測試是否安裝成功。
geth -h
二、創世區塊
建立鏈
首先我們隨意命名建立一個資料夾「blockchain」,並進入該資料夾,作為本次區塊鏈的所屬專案,
建立創世區塊 (Genesis Block) 需要一些設定參數,我們將參數寫成 JSON 格式的檔案。
建立參數用檔案 genesis.json,也可從筆者範例專案所下載:
[genesis.json]
{
"config": {
"chainId": 123456,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"nonce": "0x0000000000000042",
"difficulty": "0x020",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"coinbase": "0x0000000000000000000000000000000000000000",
"timestamp": "0x00",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"extraData": "0x0000000000000000000000000000000000000000000000000000000000000000",
"gasLimit": "0xffffff",
"alloc": {}
}
- chaindId:區塊鏈的識別 ID。
- difiiculty:難度參數。
- coinbase:預設將會是你第一個建立帳號的礦工。
- gasLimit:交易所使用到的 gas 限制,建議先預設(歸零),避免後續於測試交易發生資金不足。
- alloc:初始帳號與金額。
- 更多參數的說明請參考 go-ethereum,或是了解原理 Genesis block。
如果要初始帳號與金額,可參考以下範例:
"alloc": {
"0x0000000000000000000000000000000000000001": {"balance": "111111111"},
"0x0000000000000000000000000000000000000002": {"balance": "222222222"}
}
接著我們輸入指令,建立我們偉大的創始區塊:
geth --datadir data init genesis.json
- --datadir:區塊會儲存在 data 資料夾中。
- init:初始參數所使用的配置檔案 genesis.json
目錄結構如下:
啟動鏈
完成初始後,接著啟動私有鏈。
geth --datadir data --networkid 123456 --rpc --rpccorsdomain "*" --nodiscover --rpcapi="db,eth,net,web3,personal" console
- --networkid:設定鏈的 ID。
- --rpc:啟動 rpc 通訊協定功能,如果要佈署「智慧合約」,請務必加入。
- --rpccorsdomain:允許跨網域的存取調用,「"*"」 代表來自任何網段。
- --nodiscover:不搜尋其他網段上的節點。
- --rpcapi:在 rpc 通訊中,提供合約 API 的服務項目。
- console:將會啟動命令模式,以便後續下達命令。
- 更多參數說明請翻閱 Management-APIs
三、私鏈管理
成功啟動後會進入 console 模式,我們可以輸入一些指令來管理我們的鏈,
在 go-ethereum 的 Wiki 中可以查詢到一些相關指令說明。
指令很多記不起來沒關係,其實可以使用 tab,快速按兩下,就會跳出所有相關指令。
例如想使用 admin 的指令:
實際 Demo。
3.1 查看節點資訊
更多說明可查看 Management-APIs#list-of-management-apis
admin.nodeInfo
3.2 建立新帳號
在 personal 指令中,使用 newAccount 可以建立使用者,
完整的指令說明可到 Managing-your-accounts#creating-accounts 查看。
personal.newAccount()
然後接著輸入密碼,以及確認密碼,完成建置後會顯示帳號位址。
你也可以在建立時直接預設密碼:
personal.newAccount("654321")
3.3 查詢所有帳號
eth.accounts
由於 accounts 是個陣列集合,其實也可以查詢第 N 個索引用戶:
eth.accounts[0]
3.4 查詢帳號錢包
eth.getBalance(eth.accounts[0])
getBalance() 是個 function,裡面填入帳號地址,
當然地址取得方式可以直接使用 eth.account 獲取。
你也可以使用 web3 的 CLI 命令,去查詢帳號地址的錢:
web3.fromWei(eth.getBalance(eth.accounts[0]), "ether")
3.5 查詢與設定當前礦工帳號
系統預設礦工帳號會是第一個帳號。
eth.coinbase
你也可以修改預設礦工帳號,讓你在挖礦時,錢直接轉到對應帳號。
3.6 解鎖帳號
在每一次交易的時候,例如匯款等,都需要解鎖帳號。
personal.unlockAccount(eth.accounts[0])
unlockAccount() 也是個 function,裡面放入帳號地址。
解除時會要求輸入用戶密碼。
3.7 查詢區塊資訊
查詢區塊數量:
eth.blockNumber
利用索引值,查詢指定的區塊資訊:
eth.getBlock(0)
利用交易地址查詢區塊(本範例為假地址):
eth.getTransaction("0x0c59f431068937cbe9e230483bc79f59bd7146edc8ff5ec37fea6710adcab825")
3.8 轉帳交易
這部分算是很重要的指令,我們使用 sendTranscation 指令進行交易:
eth.sendTransaction({from:eth.accounts[0],to:"0x1222ca94a9064039ac2e892d2ee7ecf955019c0b",value:web3.toWei(3,"ether")})
- from:來源帳號地址,你可以使用 eth.accounts 指令查詢,或是直接帶入帳號地址。
- to:交易對象,即為你的目的地址。
- value:交易內容,其中 3 為交易金額,ether 為貨幣單位。
以下範例為全使用 eth.accounts 的帳號方式進行交易:
eth.sendTransaction({from:eth.accounts[0],to:eth.accounts[1],value:web3.toWei(3,"ether")})
當發送交易後,可以使用 txpool 查看所有交易狀況:
txpool.status
3.9 挖礦
這是最重要的環節了,本挖礦為使用 CPU。
3.9.1 開始挖礦
輸入以下指令即可開始挖礦人生:
miner.start(1)
- 參數為 CPU 使用數
3.9.2 停止挖礦
miner.stop()
...... 別管這麼多,直接輸入 miner.stop() 就好。
當挖了不少後,重新查詢區塊,數量也會確實增加!
eth.blockNumber
四、交易與驗證
終於讀到第四章,爬到這層了,卻遇到了一個大魔王......
因為帳號沒錢,無法完成轉帳的實作啊啊啊啊啊啊!!!!!
因此從現在開始,放置 Play 三分鐘,開始挖礦,以便後續能練習實際交易。
miner.start(4)
- 不久之後。
4.1 查看錢包
看一下錢包,錢錢多多。
4.2 轉帳交易
我們將轉帳 3 ether,從「帳號1」到「帳號0」
eth.sendTransaction({from:eth.accounts[1],to:eth.accounts[0],value:web3.toWei(3,"ether")})
4.3 開始挖礦
完成轉帳後,當然就是要由礦工去計算驗證,
因此繼續我們的挖礦之旅。
miner.start(4)
4.4 驗證交易
很快的,我們暫停一下挖礦來查看交易是否成功。
miner.stop()
txpool.status
所有的準備工作與佇列都為 0,代表完成工作了~
接著查看「帳號0」的錢包:
eth.getBalance(eth.accounts[0])
哦哦哦!是錢錢!
※、結語
本篇到目前為止,分享了從建立、挖礦,以及交易的整個流程,
相信大家都熟悉了!
本篇相關指令以及綱要皆放置於 Github 上:
而以上流程都是在終端機下完成,實在是沒什麼感覺,
下一篇將會簡單分享一下使用工具去呈現 GUI 私鏈的整個運作狀況。
有勘誤之處,不吝指教。ob'_'ov