下圖展示的是星系共識正式上線後,驗證節點所需要的硬體要求的最低配置和推薦配置,供此次參與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時間段內的收益率。