Wanchain釋出PoS星系共識Alpha測試

買賣虛擬貨幣
5月18日杭州西子湖畔,Wanchain攜公鏈聯盟舉辦了一場以Staking Economy為主題的線下活動。Wanchain創始人兼CEO呂旭軍在會上宣佈了Wanchain PoS星系共識(Galaxy Consensus)Alpha版正式開放測試。星系共識是Wanchain理論與工程團隊長期研究探索的智慧成果,此次Alpha版的釋出,標誌著Wanchain的PoS星系共識從理論攻關向工程實踐邁出了關鍵性的一步。Alpha測試開放時間自5月18日起至Beta測試上線時止(六月上旬)。Alpha測試提供基於命令列的執行方式,Wanchain誠邀廣大區塊鏈公司和開發愛好者參與到測試中來。Wanchain基金會設立了50,000WAN的獎勵池,對積極參加驗證節點測試並上報缺陷的參與者,我們將根據上報的缺陷嚴重程度(嚴重、一般、輕微)給予測試者相應的WAN代幣獎勵。我們將在Beta版釋出的時候,推出精心設計的Explorer和輕錢包等視覺化工具,使驗證節點查詢、委託人參與更加便捷友好,讓更多人有機會參與到星系共識的測試中,共同推動星系共識技術的進步。一、什麼是星系共識?星系共識是Wanchain的PoS共識機制。星系共識借鑑了已有的優秀PoS共識Ouroboros方案,並對多個關鍵密碼學元件進行創新設計,包括隨機數生成和出塊者選擇等。星系共識中,參與質押的權益持有者(WAN Stakeholder)共同組成了社羣(Community),社羣中的每一名成員都有機會參與共識並獲得獎勵,獲得獎勵的機率隨WAN幣的質押數量和鎖定時間的提升而提高,而對加入社羣成為普通驗證節點的條件,我們設定了WAN幣最低質押數量的門檻為10,000 WAN。同時,對可以接受委託的參與者即受託驗證節點,我們設定的WAN幣最低質押數量門檻為50,000 WAN。
二、如何申請加入Alpha測試,如何申請WAN測試幣?有意向參與Alpha測試的參與者請訪問此連結填寫Alpha測試申請表:http://wanchain.mikecrm.com/1O3vnbb郵件收悉透過後,我們將向申請者的Wan地址隨機分配50,000WAN 至150,000WAN 不等的代幣。在Beta版測試階段,我們將提供Faucet測試幣申請網站。屆時,測試者將可自由申請WAN測試幣。三、軟硬體環境要求有哪些?
1. 硬體環境此次為Alpha測試,考慮到測試者的伺服器成本等原因,我們不對硬體環境做過多要求。請保證使用正常硬體配置或者較高配置的伺服器或個人電腦。中國境內的驗證節點,請確保其網路能正常訪問境外網路。

下圖展示的是星系共識正式上線後,驗證節點所需要的硬體要求的最低配置和推薦配置,供此次參與Alpha的測試者參考。

2. 軟體環境

· 建議使用Linux或MacOS作業系統。
· 使用Docker執行需要安裝Docker服務。
· 使用原始碼編譯執行需要安裝和配置golang執行環境:https://golang.org/

 配置環境變數 $GOPATH 和$GOROOT

從github獲取最新程式碼:

$ mkdir -p $GOPATH/src/github.com/wanchain/
$ cd $GOPATH/src/github.com/wanchain/
$ git clone https://github.com/wanchain/go-wanchain.git
$ cd go-wanchain
$ git checkout posalpha
$ git pull
$ make

編譯得到的gwan在此目錄下:build/bin/gwan

四、如何查詢驗證節點執行狀態及相關資料?

在Alpha測試階段,我們同時釋出了PoS瀏覽器Alpha版。透過該瀏覽器,測試者可監測星系共識的整體資料和每個驗證節點的具體引數。

PoS瀏覽器地址:http://52.13.64.66/

五、如何建立成為驗證節點和委託人?

1. 建立成為驗證節點

1)安裝 docker(Ubuntu):

$ sudo wget -qO- https://get.docker.com/ | sh
$ sudo usermod -aG docker YourUserName
$ exit

2)使用docker中的gwan建立keystore賬號:

$ docker pull wanchain/wanpos
$ docker run -d -v /home/YourUserName/.wanchain:/root/.wanchain wanchain/wanpos /bin/gwan --pluto
YourContainerID
$ docker exec -it YourContainerID /bin/bash
root> gwan attach .wanchain/pluto/gwan.ipc
> personal.newAccount('YourPassword')
"YourAccountAddress"
> personal.showPublicKey("YourAccountAddress", 'YourPassword')
["YourPK1", "YourPK2"]
> exit
root> echo "YourPassword" > /root/.wanchain/pw.txt
root> exit

3)確保您的測試賬戶地址擁有足額的WAN測試幣(執行普通驗證節點至少大於10,000WAN,執行受託驗證節點至少大於50,000WAN)

4)建立一個驗證節點註冊指令碼檔案

/home/YourUserName/.wanchain/minerRegister.js

注:程式碼中涉及的miner即為驗證節點

//minerRegister.js
// If you want to register as a miner you can modify and use this script.

//-------INPUT PARAMS SHOULD BE REPLACED WITH YOURS--------------------
// tranValue is the value you want to stake - minValue is 100000 
var tranValue = "100000"
// secpub is the miner node's secpub value
var secpub    = "YourPK1"
// g1pub is the miner node's g1pub value
var g1pub     = "YourPK2"
// feeRate is the percent of the reward kept by the node in delegation - 100 indicates the node does not accept delegation.
var feeRate   = 100
// lockTime is the length of stake locking time measured in epochs - minimum required locking time of 5 epochs
var lockTime  = 30
// baseAddr is the stake funding source account
var baseAddr  = "YourAccountAddress"
// passwd is the stake funding source account password
var passwd    = "YourPassword"
//-------INPUT PARAMS SHOULD BE REPLACED WITH YOURS--------------------

//------------------RUN CODE DO NOT MODIFY------------------
personal.unlockAccount(baseAddr, passwd)
var cscDefinition = [{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"lockEpochs","type":"uint256"}],"name":"stakeUpdate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"stakeAppend","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"secPk","type":"bytes"},{"name":"bn256Pk","type":"bytes"},{"name":"lockEpochs","type":"uint256"},{"name":"feeRate","type":"uint256"}],"name":"stakeIn","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"delegateAddress","type":"address"}],"name":"delegateIn","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"delegateAddress","type":"address"}],"name":"delegateOut","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}];

var contractDef = eth.contract(cscDefinition);
var cscContractAddr = "0x00000000000000000000000000000000000000d2";
var coinContract = contractDef.at(cscContractAddr);
var payload = coinContract.stakeIn.getData(secpub, g1pub, lockTime, feeRate)
var tx = eth.sendTransaction({from:baseAddr, to:cscContractAddr, value:web3.toWin(tranValue), data:payload, gas: 200000, gasprice:'0x' + (200000000000).toString(16)});
console.log("tx=" + tx)
//------------------RUN CODE DO NOT MODIFY------------------

指令碼中的FeeRate欄位為受託驗證節點的委託費率,其值為0-100。如果FeeRate欄位設為100,則表示受託節點不接受委託。如果FeeRate欄位設為10,則表示受託節點收取委託人10%的收益後,再與委託人按共識系統設計的演算法進行收益分配。如果FeeRate欄位設為0,則表示受託節點不收取委託費率,即與委託人按共識系統的演算法將全部收益進行分配。

5)在gwan中執行指令碼

如果2)中的docker沒有關閉,可以直接按下述程式碼進入執行,如果已關閉,請重新啟動:
$ docker exec -it YourContainerID /bin/gwan attach .wanchain/pluto/gwan.ipc

> loadScript("/root/.wanchain/minerRegister.js")
> exit
$ docker stop YourContainerID
$ docker run -d -p 17717:17717 -p 17717:17717/udp -v /home/YourUserName/.wanchain:/root/.wanchain wanchain/wanpos /bin/gwan --pluto --etherbase "YourAccountAddress" --unlock "YourAccountAddress" --password /root/.wanchain/pw.txt --mine --minerthreads=1 

執行完上述指令碼,即可完成開啟驗證節點的權益挖礦(Staking)執行。測試者可透過 docker logs -f `docker ps -q` 命令檢視工作日誌。

注:權益挖礦工作,將在所有塊同步完成後正式開始。

2. 實現委託人的WAN代幣委託投注

在Beta版本釋出後,可透過輕錢包視覺化介面方便的完成委託投注。

在Beta版本之前,可按照如下命令執行投注。

1)安裝 docker(Ubuntu):

$ sudo wget -qO- https://get.docker.com/ | sh
$ sudo usermod -aG docker YourUserName
$ exit

2)建立賬號,查詢驗證節點資訊。請注意,在使用pos.getStakerInfo獲取驗證節點資訊前,請確認當前已經同步到最新塊。可透過eth.blockNumber來檢視。

驗證節點資訊可以透過命令列查詢,也可以透過瀏覽器查詢。

$ docker run -d -v /home/YourUserName/.wanchain:/root/.wanchain wanchain/wanpos /bin/gwan --pluto
YourContainerID
$ docker exec -it YourContainerID /bin/bash
root> gwan attach .wanchain/pluto/gwan.ipc
> personal.newAccount('YourPassword')
"YourAccountAddress"
> pos.getStakerInfo(eth.blockNumber)
[
  {...},
  {...},
  {  Address: "DelegateAddress",
    Amount: 2e+23,
    Clients: [],
    FeeRate: 10,
    From: "...",
    LockEpochs: 30,
    PubBn256: "...",
    PubSec256: "...",
    StakingEpoch: 117
  }
]

透過上述執行,得到本地賬號 YourAccountAddress 和想要投注的具備理想委託費率FeeRate的驗證節點地址 DelegateAddress。

3)確保您的測試賬戶地址擁有足額的WAN測試幣(委託人至少大於100枚)

4)建立投注指令碼 /home/YourUserName/.wanchain/sendDelegate.js

//sendDelegate.js
// If you want to send to a delegate you can modify and use this script.

//-------INPUT PARAMS YOU SHOULD MODIFY TO YOURS--------------------
// tranValue is the value you want to stake in minValue is 100
var tranValue = "100000"
// delegateAddr is the validator address copied from the list of validators generated in Step 4
var delegateAddr = "DelegateAddress"
// baseAddr is the fund source account.
var baseAddr  = "YourAccountAddress"
// passwd is the fund source account password.
var passwd    = "YourPassword"
//-------INPUT PARAMS SHOULD BE REPLACED WITH YOURS--------------------

//------------------RUN CODE DO NOT MODIFY------------------
personal.unlockAccount(baseAddr, passwd)
var cscDefinition = [{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"lockEpochs","type":"uint256"}],"name":"stakeUpdate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"stakeAppend","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"secPk","type":"bytes"},{"name":"bn256Pk","type":"bytes"},{"name":"lockEpochs","type":"uint256"},{"name":"feeRate","type":"uint256"}],"name":"stakeIn","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"delegateAddress","type":"address"}],"name":"delegateIn","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"delegateAddress","type":"address"}],"name":"delegateOut","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}];

var contractDef = eth.contract(cscDefinition);
var cscContractAddr = "0x00000000000000000000000000000000000000d2";
var coinContract = contractDef.at(cscContractAddr);

var payloadDelegate = coinContract.delegateIn.getData(delegateAddr)
var tx2 = eth.sendTransaction({from:baseAddr, to:cscContractAddr, value:web3.toWin(tranValue), data:payloadDelegate, gas: 200000, gasprice:'0x' + (200000000000).toString(16)});
console.log("tx2=" + tx2)
//------------------RUN CODE DO NOT MODIFY------------------

5)在gwan中執行投注指令碼,完成委託人投注。

$ docker exec -it YourContainerID /bin/bash
root> gwan attach .wanchain/pluto/gwan.ipc
> loadScript("/root/.wanchain/sendDelegate.js")

六、常用操作

1. 賬號建立
$ gwan --pluto account new

執行上述命令後,keystore檔案會儲存在預設目錄 ~/.wanchain/pluto/keystore/ in Ubuntu 或者 ~/Library/Wanchain/pluto/keystore/ in Mac OS.

使用如下命令獲取星系共識需要用到的兩個公鑰。
$ gwan --pluto account pubkeys 'YourAddress' 'Your Password'
星系共識需要使用key1和key3,作為SecPk和G1PK。

2. 查詢餘額
// In ubuntu
$ gwan attach ~/.wanchain/pluto/gwan.ipc

// In MacOS
$ gwan attach~/Library/Wanchain/pluto/gwan.ipc

在鏈同步完成後,可透過下面指令查詢餘額。
$ eth.getBalance("Your Address FillHere")

// Such as address example shown above.
$eth.getBalance("0x8c35B69AC00EC3dA29a84C40842dfdD594Bf5d27")

3. 獲取測試幣

請掃描上文的二維碼或登入http://wanchain.mikecrm.com/1O3vnbb進行填表申請。Beta版之後會推出faucet網頁,屆時可自動發放測試幣。

4. 如何執行兩大節點
非驗證節點(全節點)
$ gwan --pluto --rpc --syncmode "full"

驗證節點
在下面命令中請替換地址為您的個人地址 0x8d8e7c0813a51d3bd1d08246af2a8a7a57d8922e ,並替換 /tmp/pw.txt 為您地址的密碼文字檔案。
$ gwan --pluto --rpc --etherbase "0x8d8e7c0813a51d3bd1d08246af2a8a7a57d8922e" --unlock "0x8d8e7c0813a51d3bd1d08246af2a8a7a57d8922e" --password /tmp/pw.txt--rpc  --mine --minerthreads=1 --syncmode "full"

5. Stake註冊和委託投注
使用者註冊一個節點伺服器為星系共識驗證節點的步驟如下圖所示:

使用者透過Stake register註冊成為驗證節點。

Wanchain提供了基於智慧合約的註冊和登出功能,合約引數如下:

var cscDefinition =[{"constant":false,"inputs":[{"name":"addr","type":"address"},{"name":"lockEpochs","type":"uint256"}],"name":"stakeUpdate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addr","type":"address"}],"name":"stakeAppend","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"secPk","type":"bytes"},{"name":"bn256Pk","type":"bytes"},{"name":"lockEpochs","type":"uint256"},{"name":"feeRate","type":"uint256"}],"name":"stakeIn","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"delegateAddress","type":"address"}],"name":"delegateIn","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"name":"delegateAddress","type":"address"}],"name":"delegateOut","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

在智慧合約的引數中, feeRate 是委託費率,透過設定合理費率吸引更多的委託人投注。

測試者可以直接修改程式碼目錄下的指令碼檔案來完成驗證節點的註冊 loadScript/minerRegister.js,委託人投注指令碼loadScript/sendDelegate.js

指令碼可在IPC連結到節點後執行。

// This path is a relative path for yourrun.
$ loadScript('loadScript/register.js')

測試者可在瀏覽器中查詢收益資訊、收益率預測等。

七、團隊內測資料展示

下文展示了Wanchain工程團隊使用不同的鎖定金額,不同的鎖定時間的收益實測資料。

鎖定時間單位是epoch。測試時,epoch時間為20分鐘,每個epoch有120個slot。6個epoch為120分鐘。總stake量約為6000000 ~ 8000000 萬幣。 如果收益為 0, 則意味著概率較低,沒有被選中。

下圖展示了這四個驗證節點在5個連續Epoch時間段內的收益率。

免責聲明:

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

推荐阅读

;