[閒聊] 15分鐘建立私人區塊鏈

看板DigiCurrency (數位貨幣)作者 (LeeBug)時間6年前 (2018/08/24 17:02), 6年前編輯推噓13(1303)
留言16則, 14人參與, 6年前最新討論串1/1
圖文版: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
本版也歡迎優文放BTC,ETH等加密貨幣打賞地址
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
進階模擬如何高gas引誘礦工優先處理進行ddos
08/25 03:53, 16F
文章代碼(AID): #1RVycOZE (DigiCurrency)
文章代碼(AID): #1RVycOZE (DigiCurrency)