1. 程式人生 > >基於NEO的私鏈(Private Blockchain)

基於NEO的私鏈(Private Blockchain)

1.準備工作

 

1.NEO-GUI

2.NEO-CLI

3..NET Core Runtime (不能是2.x版本,官方建議是1.12,實際上我用1.14也是沒有問題的)

4.四臺windows作業系統的虛擬機器(本文是基於AWS的,理論上本地跑虛擬機器也是沒問題的)

 

2.部署NEO節點

 

先給出官方文件的連結--NEO節點部署(官方文件),可以對照這個文件一起進行。

1.先準備好要充當節點的虛擬機器。這裡以AWS為例,開啟AWS首頁,註冊登入,登入成功後,選擇AWS管理控制檯,然後再點選左上角的服務,選擇EC2

 

 

2.新頁面中點啟動例項(PS:右上角有個節點選擇,可以自由切換,我選擇的是新加坡的),然後選擇 windows server 2016 Base>>> 選擇有符合條件的免費套餐 , 後面的預設配置就可以。關鍵是最後一步---核實例項啟動,這裡選擇建立一個新金鑰對,並儲存好。

 

 

3.建立成功後,回到控制檯,稍等幾分鐘,等虛擬機器準備好,然後選擇剛剛建立的虛擬機器,點連線,會出現一個彈框,點選下載選擇桌面檔案,密碼那裡按提示操作獲取密碼

 

 

4.開啟剛剛下載的遠端桌面檔案,按提示貼上上一步獲取到的密碼,成功連線後,等系統初始化完成就可以操作了。初始化完成後先把虛擬機器的IE安全設定關掉(不然無法下載檔案,而且每開啟一個網頁都要警告一次,賊煩),點選左下角的搜尋按鈕,輸入server manager,然後在Local server面板找到IE Enhanced SecurityConfiguration,點選ON,然後在彈出的面板裡選擇OFF,關閉掉IE安全設定

 

 

5.開啟NEO節點部署(官方文件),下載NEO-GUI,NEO-CLI,.NET Core Runtime。這裡說一下,為什麼要下載

NEO-GUI按照官方文件的說明,理論上我們只下載NEO-CLI就可以的了。但是官方文件沒有指明NEO-CLI執行需要的兩個庫檔案具體在哪裡可以下載。官方文件這裡的第一步的程式包應該指的就是NEO-GUI,然後再NEO-GUI目錄下的x64(或者x86,根據你的作業系統來選擇)檔案下可以找到這兩個庫檔案。將這兩個檔案複製到NEO-CLI檔案目錄下。

 

 

6.安裝.NET Core Runtime ,安裝完成後,開啟命令列,我這裡用的是PowerShell,用命令列切換到NEO-CLI目錄,輸入 dotnet neo-cli.dll ,不出意外的話,NEO節點就部署成功了,如圖所示。

 

 

3.搭建私鏈(或者聯盟鏈)

 

官方文件在這---NEO私鏈搭建(官方文件),可以對照著一起來做。

1.文件中有指出需要4臺虛擬機器,所以我們需要4臺虛擬機器,並且都是部署好NEO節點的。可以按照上一步教程,將另外3臺配置好。這裡的給虛擬機器命名的時候最好自己弄個簡單的標識排序,不然後面操作起來可能會亂,比如我這裡的4臺虛擬機器分別命名是neo-window,neo-window1,neo-window2,neo-window3。當然這些看個人習慣來。

 

NEO 私有鏈的部署至少需要 4 臺伺服器才能取得共識,每臺伺服器對應一個共識節點,每臺伺服器上有一個NEO 錢包檔案

 

2.另外3臺部署成功後,開啟其中一臺虛擬機器,我這裡開啟的是第一臺(neo-window),然後啟動NEO-CLI,用create wallet xxxx.db3新建4個錢包,我這裡分別建立的是wallet1.db3 ~wallet4.db3。新建好後將四個pubkey儲存到一個txt檔案裡,後面會用到。然後將其它3個錢包檔案分別複製貼上到相應的虛擬機器上。注意要放在跟neo-cli.dll同一個目錄下

 

 

 

3.後臺開啟AWS控制檯,將4臺虛擬機器的IP地址記錄下來。這一步後面修改節點配置檔案的時候會用到。如圖所示,要把IPv4 公有IP記錄下來。

 

 

4.如果你之前有啟動過neo-cli.dll,那麼要先刪除掉NEO-CLI目錄下的Chain目錄,不然做到最後面可能會出現有連線數,但是區塊高度為0的狀況同樣的,如果你因為好奇心開啟過NEO-GUI,你也需要刪除相應的Chain目錄。如果沒有,可以跳過刪除這一步。之後開啟NEO-CLI目錄,用txt方式開啟目錄下的 protocol.json 檔案,這個是節點的配置檔案。按照官方文件的格式進行修改

 

 

下面是我修改好的檔案,修改好後,儲存,並複製替換掉其它虛機上的客戶端的節點配置檔案

 

{

"ProtocolConfiguration":{

 

"Magic":66123456,

"AddressVersion":23,

 

"StandbyValidators":[

    "0264e5b51fa2af8392292fd13e0381d913288e0d197086d12aef195d6823a349fa",

    "034a879e08069f89cdbc34067ff0df614d36bef7a30b014509dfe3170c6a9d7974",

    "0332c8d77ca8e2a7847325af55457f2793d285e2a914e349bc329c94e301c01dd6",

    "020a02297371c867c845471dc0030277dc669c89ae80071424442787535295c7a4"

],

 

"SeedList":[

    "54.255.212.167:10333",

    "52.221.255.41:10333",

    "13.229.109.145:10333",

    "13.228.25.57:10333"

],

 

"SystemFee":{

    "EnrollmentTransaction":1000,

    "IssueTransaction":500,

    "PublishTransaction":500,

    "RegisterTransaction":10000

    }

}

}

 

 

5.修改虛擬機器的防火牆入站規則,這裡要注意的是不僅需要修改虛擬機器的入站規則,而且要去AWS控制檯修改安全組裡的入站規則,由於我4臺虛擬機器用的都是同一個安全組,所以只要修改一個就行了。虛擬機器裡windows作業系統的入站規則我就不具體寫了,在控制面板裡操作,這個比較簡單。其實,如果想簡單粗暴點,直接關掉windows的防火牆應該就可以了。

 

 

6.在四臺虛擬機器上分別用neo-cli開啟相對應的錢包,這裡以第一臺虛擬機器為例。執行 dotnet neo-cil.dll 命令,如果你想檢查當前的區塊狀態,可以使用show state,初始狀態應該是高度為0,節點為0。然後開啟本機對應的錢包檔案,這臺虛擬機器對應的wallet1.db3。

 

輸入命令 open wallet wallet1.db3開啟錢包

然後輸入 start consensus 開啟共識

 

其他虛擬機器一樣操作,分別開啟對應的錢包檔案,然後輸入命令開啟共識。不出意外的話就會出現如圖所示的介面。關掉其中一臺的話,其它三臺依然可以產生共識

 

 

7.利用NEO-GUI提取NEO和GAS。安裝好NEO-GUI後,將NEO-CLI目錄下的 protocol.json 檔案覆蓋掉NEO-GUI目錄下的protocol.json,然後執行neo-gui.exe。進行多方簽名的設定。

 

 

但是有一個問題,這裡有點比較坑的地方,文件裡也沒有明說。NEO-CLINEO-GUI是不能同時啟動的,也就是說用 dotnet neo-cli.dll 啟動了neo-cli的時候,不能執行neo-gui.exe,反之亦然。所以當產生共識之後,我們需要關閉其中一個節點的NEO-CLI,然後在這個節點上的NEO-GUI客戶端進行操作。依次開啟4個錢包,進行多方簽名的設定和重建錢包索引的操作,這個操作是在同一臺虛擬機器上完成的。這個一定要注意。

然後把 NEO 從合約地址轉到普通地址中,開啟 4 個錢包中的任意一個,點選交易  >>>  轉賬輸入標準地址和數額,將 1 億 NEO 轉到這個地址中。

 

 

然後系統會提示“交易構造完成,但沒有足夠的簽名”,然後將程式碼複製下來,開啟第二個錢包,點選交易簽名貼上剛才複製的程式碼,點選簽名,然後將程式碼複製下來,開啟第三個錢包,點選交易簽名貼上剛才複製的程式碼,點選簽名,這時你會發現視窗中出現了一個廣播按鈕,代表交易已經簽名完成(達到多方簽名合約要求的最少簽名數量)可以廣播,點選廣播後轉賬交易開始廣播,約 15 秒後轉賬成功。

 

上面的操作也是在同一個客戶端完成的。這裡多說一句,我第一次弄的時候沒有注意,我是在4個節點客戶端上分別操作的,也就是說多方簽名的設定和重建錢包索引操作,我是在4臺虛擬機器上分別完成的。這就造成了我沒有正在執行的節點了(因為neo-clineo-gui不能同時執行,而neo-gui沒有共識功能)。然後,到了提取NEOGAS這一步時,就造成了,我的交易簽名成功了,而且廣播了,但是並沒有轉帳成功。造成這樣的原因是因為我雖然廣播了,但是此時沒有節點幫我把這個交易打包上去。所以,我的交易轉賬當然不成功,在普通地址上也就沒看到那些相應的NEO。這點是因為自己對區塊鏈的概念不夠深,我這裡被困擾了很久。

 

 

8.GAS的提取教程基本上差不多,這裡的不多說廢話了,官方教程已經說得很詳細了。

 

作者:人稱盧哥哥

轉自NEL新經濟實驗室:基於NEO的私鏈(Private Blockchain)