cosmos主網(wǎng)即將上線,對文檔做了大量更新。特地翻譯了一下,方便小伙伴們閱覽, 之后會持續(xù)更新
第二章Gaia:
在公共測試網(wǎng)中運(yùn)行一個驗(yàn)證人
提示
你要加入當(dāng)前測試網(wǎng)的詳細(xì)信息(
genesis.json和種子節(jié)點(diǎn))在testnet repo中可以找到。請檢查你是否加入我們最新的測試網(wǎng)。
注意 : 該文章只適用于公共測試網(wǎng)的驗(yàn)證人
在啟動你驗(yàn)證人節(jié)點(diǎn)前,確定你已經(jīng)完成了全節(jié)點(diǎn)啟動教程。
什么是驗(yàn)證人?
驗(yàn)證人負(fù)責(zé)通過投票來向區(qū)塊鏈提交新區(qū)塊。如果驗(yàn)證人不可訪問或者對多個相同高度的區(qū)塊簽名,將會遭受到削減處罰。如果變得不可用或者在同一高度上簽名,則會被削減。請閱讀有關(guān)Sentry節(jié)點(diǎn)架構(gòu)的信息,以保護(hù)您的節(jié)點(diǎn)免受DDOS攻擊并確保高可用性。請閱讀哨兵節(jié)點(diǎn)網(wǎng)絡(luò)架構(gòu)來保護(hù)你的節(jié)點(diǎn)免于DDOS攻擊并保證高的可訪問性。
警告
如果你想要成為Cosmos Hub主網(wǎng)的驗(yàn)證人,你應(yīng)該研究安全性。
如果你已經(jīng)啟動了一個全節(jié)點(diǎn),可以跳過下一節(jié)的內(nèi)容。
創(chuàng)建你的驗(yàn)證人
你的cosmosvalconspub可以用于通過抵押token來創(chuàng)建一個新的驗(yàn)證人。你可以通過運(yùn)行下面的命令來查看你的驗(yàn)證人公鑰:
gaiad tendermint show-validator
接下來,制定你的gaiad gentx命令:
注意
不要使用多于你所有的
STAKE(STAKE是最新公共測試網(wǎng)絡(luò)的權(quán)益代幣名稱)!你可以通過水龍頭領(lǐng)取更多!
gaiacli tx staking create-validator \
--amount=5STAKE \
--pubkey=$(gaiad tendermint show-validator) \
--moniker="choose a moniker" \
--chain-id=<chain_id> \
--from=<key_name> \
--commission-rate="0.10" \
--commission-max-rate="0.20" \
--commission-max-change-rate="0.01"
注意 : 在指定commission參數(shù)時,commission-max-change-rate用于度量commission-rate的百分比點(diǎn)數(shù)的變化。比如,1%到2%增長了100%,但反映到commission-rate上只有1個百分點(diǎn)。
注意 : 如果沒有指定,consensus_pubkey將默認(rèn)為gaiad tendermint show-validator命令的輸出。key_name是將用于對交易進(jìn)行簽名的私鑰的名稱。
以初始驗(yàn)證人的形式加入到genesis文件
注意 : 這一節(jié)內(nèi)容只針對想要在網(wǎng)絡(luò)啟動前就作為初始驗(yàn)證人身份的節(jié)點(diǎn)。如果你想要成為驗(yàn)證人的網(wǎng)絡(luò)是已經(jīng)啟動了的,請?zhí)^這一節(jié)。
注意 : Gaia-9002和Game of stakes不會使用該步驟的方法。他們被Tendermint種子驗(yàn)證人包裹起來。如果要成為這兩個網(wǎng)絡(luò)上的驗(yàn)證人,你只需要使用create-validator命令。
如果你想作為初始驗(yàn)證人被寫入到genesis.json文件,你需要證明你(或者是委托人)在創(chuàng)世狀態(tài)中有一些權(quán)益代幣,創(chuàng)建一個(或多個)交易以將股權(quán)與你的驗(yàn)證人地址聯(lián)系起來,并將此交易包含在genesis文件中。
因此我們需要區(qū)分兩種情形:
- 情形 1 : 你想要從你的驗(yàn)證人地址上質(zhì)押初始股權(quán)
- 情形 2 : 你想要從一個委托人地址上質(zhì)押初始股權(quán)
情形 1 : 來自你的驗(yàn)證人地址的初始股權(quán)
在這種情形下,你需要創(chuàng)建一個gentx:
gaiad gentx \
--amount <amount_of_delegation> \
--commission-rate <commission_rate> \
--commission-max-rate <commission_max_rate> \
--commission-max-change-rate <commission_max_change_rate> \
--pubkey <consensus_pubkey> \
--name <key_name>
注意 : 這條命令自動在~/.gaiad/config/gentx文件夾下保存你的gentx,用以在創(chuàng)世階段執(zhí)行。
提示
使用
gaiad gentx --help來查看更多默認(rèn)的參數(shù)信息。
一個gentx是一個含有自身委托交易的JSON文件。所有創(chuàng)世交易都將由一個創(chuàng)世協(xié)調(diào)員收集起來,并根據(jù)初始的genesis.json進(jìn)行驗(yàn)證。這個初始的genesis.json文件只包含有所有賬戶及它們擁有coin的列表。一旦交易執(zhí)行完,它們會被合并至genesis.json文件的gentxs字段。
情形 2 : 來自一個委托人地址的初始股權(quán)
在這種情形下,你需要驗(yàn)證人和委托人的雙重簽名。先創(chuàng)建一筆未簽名的create-validator交易,將其保存在一個名為unsignedValTx文件中:
gaiacli tx staking create-validator \
--amount=5STAKE \
--pubkey=$(gaiad tendermint show-validator) \
--moniker="choose a moniker" \
--chain-id=<chain_id> \
--from=<key_name> \
--commission-rate="0.10" \
--commission-max-rate="0.20" \
--commission-max-change-rate="0.01" \
--address-delegator="address of the delegator" \
--generate-only \
> unsignedValTx.json
然后,使用你的驗(yàn)證人的私鑰對這個unsignedValTx簽名,然后保存輸出到一個名為signedValTx.json文件中:
gaiacli tx sign unsignedValTx.json --from=<validator_key_name> > signedValTx.json
接著,將這個文件交給委托人,委托人需要執(zhí)行如下命令:
gaiacli tx sign signedValTx.json --from=<delegator_key_name> > gentx.json
這個gentx.json文件需要包含在驗(yàn)證人機(jī)器的~/.gaiad/config/gentx目錄中用于在創(chuàng)世階段執(zhí)行,像情形1那樣(除了在這里它是需要被手動復(fù)制到文件夾中)。
復(fù)制初始genesis文件并執(zhí)行g(shù)enesis交易
將genesis.json文件放置在gaiad的配置文件夾下:
mkdir -p $HOME/.gaiad/config
curl https://raw.githubusercontent.com/cosmos/testnets/master/latest/genesis.json > $HOME/.gaiad/config/genesis.json
注意 : 我們使用了testnets repo中的latest文件夾,該文件夾包含了最新測試網(wǎng)絡(luò)的詳細(xì)信息。如果你連接到不一樣的測試網(wǎng)絡(luò),請確保你用的是正確的genesis.json文件。
你需要載入所有其他創(chuàng)世驗(yàn)證人的創(chuàng)世交易。目前還沒有可以供驗(yàn)證人提交創(chuàng)世紀(jì)交易的存儲庫,但是我們會盡快在testnet中嘗試。
一旦你已經(jīng)在~/.gaiad/config/gentx中收集到所有的創(chuàng)世交易,你可以執(zhí)行:
gaiad collect-gentxs
注意 : 你在gentx中委托的賬戶必須在genesis文件中擁有這些抵押代幣,否則,collect-gentx會失敗。
上一個命令將收集所有的創(chuàng)世交易并完成genesis.json。驗(yàn)證配置的正確性并啟動節(jié)點(diǎn):
gaiad start
編輯驗(yàn)證人的說明信息
你可以編輯驗(yàn)證人的公開說明。此信息用于標(biāo)識你的驗(yàn)證人節(jié)點(diǎn),委托人將根據(jù)此信息來決定要委托的驗(yàn)證人節(jié)點(diǎn)。確保為下面的每個標(biāo)識提供輸入,否則該字段將默認(rèn)為空( --moniker默認(rèn)為機(jī)器名稱)。
--identity可用于驗(yàn)證和Keybase或UPort這樣的系統(tǒng)一起驗(yàn)證身份。與Keybase一起使用時,--identity應(yīng)使用由一個keybase.io帳戶生成的16位字符串。它是一種加密安全的方法,可以跨多個在線網(wǎng)絡(luò)驗(yàn)證您的身份。 Keybase API允許我們檢索你的Keybase頭像。這是你可以在驗(yàn)證人配置文件中添加徽標(biāo)的方法。
gaiacli tx staking edit-validator
--moniker="choose a moniker" \
--website="https://cosmos.network" \
--identity=6A0D65E29A4CBC8E \
--details="To infinity and beyond!" \
--chain-id=<chain_id> \
--from=<key_name> \
--commission-rate="0.10"
注意 : commission-rate的值必須符合如下的不變量檢查:
- 必須在 0 和 驗(yàn)證人的
commission-max-rate之間 - 不得超過 驗(yàn)證人的
commission-max-change-rate, 該參數(shù)標(biāo)識每日最大的百分點(diǎn)變化數(shù)。也就是,一個驗(yàn)證人在commission-max-change-rate的界限內(nèi)每日一次可調(diào)整的最大傭金變化。
查看驗(yàn)證人的說明信息
通過該命令查看驗(yàn)證人的說明信息:
gaiacli query staking validator <account_cosmos>
跟蹤驗(yàn)證人的簽名信息
你可以通過signing-info命令跟蹤過往的驗(yàn)證人簽名:
gaiacli query slashing signing-info <validator-pubkey>\
--chain-id=<chain_id>
unjail驗(yàn)證人
當(dāng)驗(yàn)證人因停機(jī)而"jailed"(入獄)時,你必須用節(jié)點(diǎn)操作人帳戶提交一筆Unjail交易,使其再次能夠獲得區(qū)塊提交的獎勵(獎勵多少取決于分區(qū)的fee分配)。
gaiacli tx slashing unjail \
--from=<key_name> \
--chain-id=<chain_id>
確認(rèn)你的驗(yàn)證人節(jié)點(diǎn)正在運(yùn)行
如果下面的命令返回有內(nèi)容就證明你的驗(yàn)證人正處于活躍狀態(tài):
gaiacli query tendermint-validator-set | grep "$(gaiad tendermint show-validator)"
你必須要在區(qū)塊瀏覽器中看見你的驗(yàn)證人節(jié)點(diǎn)信息。你可以在~/.gaiad/config/priv_validator.json文件中找到bech32編碼格式的address。
注意
為了能進(jìn)入驗(yàn)證人集合,你的權(quán)重必須超過第100名的驗(yàn)證人。
常見問題
問題 #1 : 我的驗(yàn)證人voting_power: 0
你的驗(yàn)證人已經(jīng)自動解除抵押。在gaia-8000測試網(wǎng)中,我們會自動將那些在最近100個區(qū)塊有超過50個區(qū)塊沒有進(jìn)行表決的驗(yàn)證人解除抵押。因?yàn)閰^(qū)塊大概每2秒鐘提議一次,所以一個驗(yàn)證人節(jié)點(diǎn)100秒沒有響應(yīng)的話就會被解除抵押。這通常發(fā)生在你的gaiad程序崩潰的情況下。
以下是如何將投票權(quán)返還給驗(yàn)證人的方法。首先,如果gaiad沒有運(yùn)行,請?jiān)俅螁铀?/p>
gaiad start
等待你的全節(jié)點(diǎn)追趕上最新的區(qū)塊。接下來,運(yùn)行以下命令。請注意,<cosmos>是你的驗(yàn)證人帳戶的地址,<name>是驗(yàn)人帳戶的名稱。你可以通過運(yùn)行gaiacli keys list找到此信息。
gaiacli tx slashing unjail <cosmos> --chain-id=<chain_id> --from=<from>
警告
如果你在運(yùn)行
unjail之前沒有等待gaiad同步完成,你將收到一條錯誤消息,告知你的驗(yàn)證人仍然是jailed狀態(tài)。
最后,檢查你的驗(yàn)證人看看你的投票表決權(quán)是否恢復(fù):
gaiacli status
你可能會注意到你的投票權(quán)比之前要少。這是因?yàn)槟愕南戮€受到的削減處罰!
問題 #2 : 我的gaiad由于too many open files崩潰
Linux可以打開的默認(rèn)文件數(shù)(每個進(jìn)程)是1024。已知gaiad可以打開超過1024個文件。這會導(dǎo)致進(jìn)程崩潰??焖傩迯?fù)運(yùn)行ulimit -n 4096(增加允許的打開文件數(shù))來快速修復(fù),然后使用gaiad start重新啟動進(jìn)程。如果你使用systemd或其他進(jìn)程管理器來啟動gaiad,則可能需要在該級別進(jìn)行一些配置。解決此問題的示例systemd文件如下:
# /etc/systemd/system/gaiad.service
[Unit]
Description=Cosmos Gaia Node
After=network.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu
ExecStart=/home/ubuntu/go/bin/gaiad start
Restart=on-failure
RestartSec=3
LimitNOFILE=4096
[Install]
WantedBy=multi-user.target