[閒聊] 15分鐘建立私人區塊鏈
圖文版:http://bit.ly/2MwWY7G
Line@:https://line.me/R/ti/p/%40mibinews
*非常建議各位閱讀圖文版,純文字很難懂...
大家也許還對節點如何挖礦運作、如何執行交易…等等,感到難以理解。身體力行也許是可以讓人最快理解的方式,就讓我們來試著建立一個私人以太坊,更進一步了解這個生態圈的運作方式
看完這篇文章你可以了解到以下幾點:
1) 如何建立一個私人的以太坊(建立於AWS linux)
2) 如何用挖礦賺取回報
3) 帳號之間如何進行匯款交易
*了解以上項目只需要花你15分鐘的時間*
第一步:登入 AWS 帳號,並啟動一台EC2 主機
重點1:選擇Ubuntu OS 作為安裝的 linux 版本
重點2:Instance Type 選擇至少 t2.medium 以上規格(相關文章指出此規格以上比較能讓以太坊正常運作,在這裡先不討論主機規格會對節點造成的影響)
重點3:設置正確的TCP port (節點之間預設互相Peering 的Port 是 30303,故要設定一port range 或單一port 皆可)
重點4:儲存好 key pair 並 launch instance
第二步:安裝以太坊節點
重點1:開啟你電腦裡的Terminal 軟體(中文是"終端機")並使用上一步驟產生的key pair 登入aws 主機(本登入步驟只適用Mac 使用者,如果你是Windows 使用者,建議使用PuTTY 軟體)
使用Terminal 進入存放key pair 的指令可用: cd
以我自己為例:cd /Users/ryanhu/Documents/Ethereum
重點2:安裝節點所需的相關軟體
輸入以下 4個指令
*此處安裝的是PPA(Personal Package Archive) 版本以太坊節點。有開發測試所需要的軟體,且預設不會與整個以太坊同步,可大大降低安裝時間*
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository -y ppa:ethereum/ethereum
$ sudo apt-get update
$ sudo apt-get install ethereum
輸入以下指令以產生一 Genesis.json 檔案(此檔案用於初始化節點)
$ sudo vim Genesis.json
複製貼上下方json 文字於 Genesis.json 裡並存檔(相關設定參數暫不討論,會再另起文章詳細說明,此時只需先記住此節點 chainId 設定是 885(你可變更為任意數字))
*複製好json 文字後可用 :i 指令(分號+i+enter)讓vim 模式變成編輯模式,此時再用ctrl + v 即可貼上*
*貼上後再用:wq 指令(分號+w+q+enter)存檔並離開vim 編輯模式*
{
"config": {
"chainId": 885,
"homesteadBlock": 0,
"eip155Block": 0,
"eip158Block": 0
},
"nonce": "0x0000000000000042",
"mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"difficulty": "0x200",
"alloc": {},
"coinbase": "0x0000000000000000000000000000000000000000",
"timestamp": "0x00",
"parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
"gasLimit": "0xffffffff",
"alloc": {
}
}
使用geth 指令及 Genesis.json 檔案,開始初始化節點
$ sudo geth init Genesis.json
第三步:開始測試節點
重點1:進入geth console 模式
如果此時你不是管理者身份,無法使用指令,會出現permission denied 的錯誤訊息,所以請先用以下指令切換成管理者身份
$ sudo -s
用geth console 指令進入節點的指令模式。nodiscover 表示不搜尋其它節點與不與其它節點溝通
$ geth --nodiscover console
重點2:替此節點新增第一個帳號
> personal.newAccount()
輸入此指令後,會被要求替此帳號設定密碼。密碼設定完成後,即會產生第一組的public address,也就是所謂的創始帳號
用此指令查看一下第一組address 裡有多少ether
> web3.fromWei(eth.getBalance(eth.accounts[0]), "ether")
雖然一開始創始帳號裡是沒有錢的,但是我們仍然還是有2種方式可以讓此帳號裡有ether:
在設定Genesis.json 時,指定一筆金額給創始帳號(之後的文章會詳細解說)
自己挖礦(本教學的其中一個目的,故我們一開始先不給創始帳號任何ether)
重點3:開始挖礦啦!
為了讓挖礦過程中的每個步驟都一目了然,我們先用以下指令離開指令模式
> exit
然後使用以下指令重新進入指令模式。此指令的用意在於讓geth 的每一步驟都輸出到 process.log 這個檔案裡
$ geth --nodiscover console 2>> process.log
這時侯再請打開另一個Terminal 視窗,然後同樣登入此aws instance,並輸入以下指令。此指令可讓你隨時查看最新的log
$ tail -f process.log
於指令視窗輸入以下指令,開始挖礦!
> miner.start()
此時可於log 視窗看出正在為創世區塊產生DAG(Directed Acyclic Graph 演算法,也就是以太坊目前所使用的按術)
等待幾分鐘後,節點就會開始進行挖礦
經過幾分鐘的挖礦,一但有區塊被挖取完畢,此時用指令再次查看帳號餘額會發現已經有ether 在內
挖礦測試完畢。此時可用以下指令讓節點停止挖礦
> miner.stop()
第四步:新增另一個節點,用於測試帳號之間的交易
重點1:重覆以上的第一步(登入 AWS 帳號,並啟動一台EC2 主機)及第二步(安裝以太坊節點)
*於第二步安裝節點時,Genesis.json 裡的 chain id 仍需指定為885。故於此教學,直接複製第一個節點的Genesis.json 的內容即可*
重點2:也在第2個節點裡創立一個新的帳號
重點3:讓此2節點互相關聯 (Peering)
可以分別在兩個節點視窗輸入以下指令,查看目前有哪些節點與自己Peering
> admin.peers
可以看得出來2個節點的結果均顯示為空,沒有任何的節點與之相關聯
開始關聯2個節點
用以下指令在 “第1個節點” 取得節點資料
> admin.nodeInfo.enode
*enode 指的就是 Ethereum node*
以我的例子來說,第1個節點的資料長這樣
“enode://ddbae8da7bbcc5002341e919d05a88707dc15ea13ed5638c1297d8c6f744bb2232f7e0900833f0f2646ee7a97db011af83e8df3203fadec550779813dcb3a102@[::]:30303?discport=0”
此時請打開 “第2個節點” 的視窗,並依照你自己的節點資料,輸入如下指令
> admin.addPeer("enode://ddbae8da7bbcc5002341e919d05a88707dc15ea13ed5638c1297d8c6f744bb2232f7e0900833f0f2646ee7a97db011af83e8df3203fadec550779813dcb3a102@123.456.789.888:30303?discport=0")
*把[::] 換成第1個節點的IP,port 用 30303。此處範例我的IP是123.456.789.888*
*此指令的用意,是要告訴第2個節點讓它去Peering 第1個節點*
*可以在aws instance 的頁面找到第1個節點的IP*
此時再分別去2個節點視窗輸入以下指令,可以看出目前2個節點已互相關聯(只需要作1次,讓Node 2 peering Node 1 即可)
> admin.peers
重點4:開始讓2個節點互相轉帳吧
目前只有第1個節點有ether 所以我們先打開節點1 的視窗,然後再次輸入以下指令確認一下ether 金額
> web3.fromWei(eth.getBalance(eth.coinbase), "ether")
輸入以下指令解鎖創始帳號 (需先輸入密碼解鎖帳號,否則無法轉帳)
> personal.unlockAccount(eth.coinbase)
輸入以下指令讓Node 1 的創始帳號轉帳400 ether 給Node 2 的創始帳號 (請更換成你自己Node 2的創始帳號)
> eth.sendTransaction({from: eth.coinbase, to: "0x504008e1d457B7DAa4F247F51e7Bcc1F209E017e", value: web3.toWei(400, "ether")})
忘了自己Node 2的創始帳號是什麼嗎?進到節點2 後,可以輸入以下指令查詢
> eth.coinbase
還記得我們剛才有開了個可以監看所有步驟的log 視窗嗎?打開它,你可以看到轉帳的指令有確實送出
但此時仍然尚未轉帳成功,可以到節點2 去查看ether 餘額,仍然是為0
為什麼呢?因為目前2個節點都沒有啟動礦工挖礦,所以交易轉帳不會被確認,節點2 自然也就收不到應該有的ether
再次用以下指令讓節點開始挖礦吧(此時不論用節點1 或節點2 啟動挖礦都能夠確認完成交易,但為了證明ether 是由節點1 轉帳過去,故我們仍然是由節點1 來進行挖礦)
> miner.start()
過一點時間後 (我大概等不到30秒) 再去查看節點2 的餘額
有!錢!了!
以上就是本次的教學文章,有任何問題歡迎提出批評指教,也請持續支持關注密幣電報 :)
Line@:https://line.me/R/ti/p/%40mibinews
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.160.20.181
※ 文章網址: https://www.ptt.cc/bbs/DigiCurrency/M.1535101336.A.8CE.html
※ 編輯: dodoshan (1.160.20.181), 08/24/2018 17:05:18
推
08/24 17:06,
6年前
, 1F
08/24 17:06, 1F
推
08/24 17:06,
6年前
, 2F
08/24 17:06, 2F
→
08/24 17:06,
6年前
, 3F
08/24 17:06, 3F
※ 編輯: dodoshan (1.160.20.181), 08/24/2018 17:07:31
※ 編輯: dodoshan (1.160.20.181), 08/24/2018 17:11:16
→
08/24 17:12,
6年前
, 4F
08/24 17:12, 4F
→
08/24 17:13,
6年前
, 5F
08/24 17:13, 5F
推
08/24 18:49,
6年前
, 6F
08/24 18:49, 6F
推
08/24 19:10,
6年前
, 7F
08/24 19:10, 7F
推
08/24 19:20,
6年前
, 8F
08/24 19:20, 8F
推
08/24 19:20,
6年前
, 9F
08/24 19:20, 9F
推
08/24 19:58,
6年前
, 10F
08/24 19:58, 10F
推
08/24 20:33,
6年前
, 11F
08/24 20:33, 11F
推
08/24 20:47,
6年前
, 12F
08/24 20:47, 12F
推
08/24 21:28,
6年前
, 13F
08/24 21:28, 13F
推
08/24 21:44,
6年前
, 14F
08/24 21:44, 14F
推
08/24 23:27,
6年前
, 15F
08/24 23:27, 15F
推
08/25 03:53,
6年前
, 16F
08/25 03:53, 16F
DigiCurrency 近期熱門文章
PTT數位生活區 即時熱門文章