Unita一鍵發鏈教程

買賣虛擬貨幣
下載下載最新的安裝包,安裝至任意目錄。註冊登入1. 執行unitad或者unita-qt,啟動Unita主鏈。2. 開啟QT錢包的 Help - Debug window - Console 或是透過unita-cli執行rpc命令。
3. 執行getnewaddress命令,生成一個新的地址作為賬戶,記錄下來。4. 執行dumpprivkey命令,獲得新地址的私鑰,記錄下來。5. 開啟Unita,點選LOGIN,進入登入頁。6. 執行signmessage命令,使用剛才生成的地址對登陸頁中的message進行簽名,將簽名結果填進登陸頁。

7. 點選LOGIN完成登入。 

搭建私鏈

為了便於理解,我們先介紹如何建立自己的私鏈。

生成配置

點選LAUNCH A NEW CHAIN,進入發鏈頁。填寫好所有新鏈的資訊後,點選SUBMIT釋出新鏈。各欄位的含義如下。

1. Chain id:鏈名,只支援小寫字母和數字,唯一。例如mychain123。
2. Token name:幣名,只支援大寫字母和數字,唯一。例如BTC、QTX。
3. Description:鏈的描述,用來介紹該鏈,也用於生成創世區塊。例如:my first blockchain。
4. Message Header:網路包頭,用於在網路傳輸的時候區分不同的鏈。4位元組長度,十六進位制表示,即8個0-9a-f的字元,例如:1234fedc。
5. Algorithm:共識演算法。目前僅支援PoA&SCAR共識,後續會提供更多選擇。
6. Miner list: PoA的礦工列表,一個或多個address,逗號分隔。我們第一步建立私鏈,則使用預設填入的賬戶地址。
7. Block interval、Timeout:區塊間隔和預設跳過時間,在共識演算法中有相關介紹,可直接使用預設值。
8. Default port:預設的埠地址。
9. Dns seed、Ip seed:新的節點在加入的時候,預設連線的網路中的種子節點。由於是私鏈,此處留空。
10. Init Reward:初始每個塊的獎勵。
11. Halving interval:獎勵在多少個塊後折半。
12. Halving times:最多折半幾次。

啟動私鏈

我們生成了一個名為xunita的鏈(),按以下步驟啟動該鏈。

1. 使用 unitad -chain=xunita 或是 在unita-qt中如下圖配置重啟後,啟動名為xunita的鏈。 

2. 執行getpoaminerlist,檢視礦工列表。
3. 執行importprivkey命令,匯入礦工的私鑰。
4. 執行setpoaminer命令,開始使用礦工賬戶挖礦。每次節點重啟後需要執行該命令開啟挖礦。setpoaminer命令支援選擇共識機制:

setpoaminer "address" "greedy"or null  // 採用PoA共識演算法
setpoaminer "address" "scar" // 採用SCAR共識演算法

1. 可以從QT錢包或是執行getblockchaininfo命令,看到block數在不斷增加。 

2. 新鏈啟動成功,試著發交易或是智慧合約吧!

連線私鏈

假設我們已經在機器A上啟動了私鏈xunita並進行挖礦,這時我們需要在機器B上啟動節點並接入該私鏈。

1. 在機器B上使用 unitad -chain=xunita 或是 在unita-qt配置後啟動鏈xunita的節點。
2. 執行 addnode "ip_A" add 命令,連線機器A上的節點。
3. 連線之後,可以透過getpeerinfo命令檢視節點情況。
4. 試著在兩個節點之間互發交易吧! 

種子節點

區塊鏈新節點在啟動的時候可以透過連線種子節點(seed)快速地找到網路,省去了上文中addnode的步驟。種子節點可以是一個ip或是一個域名,對應的伺服器上保持有節點執行。以下講解配置種子節點的流程。

1. 新建一條名為xxxxx的鏈(連結),Dns seed中填寫自己的域名,或是Ip seed中填寫一臺自己的伺服器地址。如果使用域名的話,請將域名解析到自己的伺服器上。

Dns seed:  beta.unita.network
Ip seed:   47.88.61.227

2. 登入伺服器(47.88.61.227),使用 ./unitad -chain=xxxxx 的方式啟動節點

admin@chaindaily:./unitad -chain=xxxxx -daemon

3. 配置完成,這時候使用任何機器啟動xxxxx鏈,都會連線到種子節點獲取資料。可以透過getpeerinfo看到連線上的節點。 

搭建聯盟鏈

聯盟鏈與私鏈的不同之處在於,聯盟鏈是由多位礦工共同維護的。EOS就是一個典型的聯盟鏈:先透過競選得到多個超級節點,然後由這些超級節點負責生產區塊,並獲得區塊獎勵。

配置

新建一個名為unitax的聯盟鏈(連結)。相比私鏈,其主要的改動是miner list欄位設定了3個礦工地址,地址之間以逗號分隔。

Miner list
UgW1vTs3bA9pb73EeJ8N9M712w6Z7Evbru,Um8w24duUhf1XE8NVcbzn91tCeiuRWU188,UjBnjZ39N7U3vRkKoknntkkfiKzFbphZRR

啟動

在種子伺服器上依次啟動3個節點,並且透過importprivkey和setpoaminer開啟3個節點的挖礦。用getblockchaininfo可以看到區塊鏈高度開始不斷增長,系統正常執行。用getblock命令可以檢視每個block的礦工。 

線上治理

關於DGP

DGP(Decentralized Governance Protocol)是Qtum中應用的一項技術。它允許使用區塊鏈上的智慧合約去線上修改區塊鏈的引數,這樣就不會造成軟分叉或是硬分叉。

DGP工作的方式非常直接了當。首先,由DGP的一名管理員發起提議去改變某一個系統引數。隨後,所有的DGP管理員可以對這個提議進行投票。如果提議收到了足夠多的贊同票,則該提議中的引數修改生效。然後,提議的內容會被儲存在區塊鏈上,方便區塊鏈的軟體去獲取。

很明顯,DGP非常適合用來儲存和更新PoA中的授權礦工列表。授權的礦工可以看做是一個公鑰的列表,這個列表可以透過配置檔案初始化,然後再透過DGP進行更新。但這裡我們需要對DGP做一些修改從而讓礦工的更新過程更加安全。

由DGP更新的礦工列表需要至少延遲n/2+1個塊之後真正生效。

這裡,n是更新前列表的長度,n/2是整數除法。這一機制保證了礦工列表的更新操作會在其成為區塊鏈上的永久記錄之後才真正生效。否則,如果更新操作可以被另一個分叉否定掉,則列表更新前的礦工很有可能在這個分叉下繼續挖礦甚至產生硬分叉。

修改礦工列表

礦工列表的DGP部署在了地址"0000000000000000000000000000000000000085"上,其原始碼在Github上可以找到:dgp-template.sol.js。礦工列表的儲存合約 minerList-dgp.sol 如下:

pragma solidity ^0.4.8;
contract minerList{
address[] _minerList=[
    0x47210a1bacc15175bb24c3384e5d3650991a7bc4,
    0xfe6e43ffb52ef746a0db8cc51cb95921c34ca0a3,
    0x6cadd7aefdb363ae680fc234dcfe4c40919781d3
];
function getMinerList() constant returns(address[] vals){
    return _minerList;
}
}

更新礦工的過程可以簡述如下:

1. 確定每位礦工的address,然後用gethexaddress命令得到對應的hexaddress。 

2. 將所有礦工的hexaddress填入minerList-dgp.sol中的minerList引數中,得到新的礦工列表。 

3. 編譯生成minerList-dgp.sol的二進位制程式碼,複製二進位制程式碼,將二進位制程式碼填入 Unita 錢包中的下圖位置。 

4. 得到部署後的合約地址minerListAddress,然後呼叫dgp-template.sol中的setInitialAdmin()和addAddressProposal(minerListAddress, 2)函式,對新的minerListAddress進行投票。 

5. 收到足夠多的投票後,新的minerListAddress透過,記入進paramsHistory引數中,延遲若干個block(當前為500)後生效,執行getpoaminerlist顯示如下。 

修改系統引數

首先透過listcontracts命令檢視目前鏈上有哪些合約。 

其中,80-85為DGP合約,分別用於 gas_schedule、block_size、gas_price、預留、block_gas_limit、miner_list 引數的線上管理。具體方法可以參照上節更新礦工的方法。

注意:在修改引數前,務必先呼叫DGP合約中的setInitialAdmin()函式

可以使用createcontract命令建立新的合約,callcontract去呼叫合約中的函式檢視返回結果,sendtocontract去向合約傳送token和資料。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;