Cosmos开发(二)Gaia 在测试网中运行一个验证人

这篇文章只适用于公共测试网的验证人,请大家参考。
谈到这里,我们会问,什么是验证人。
一、什么是验证人?

验证人负责通过投票来向区块链提交新区块。如果验证人不可访问或者对多个相同高度的区块签名,将会遭受到削减处罚。如果变得不可用或者在同一高度上签名,则会被削减。请阅读有关Sentry节点架构的信息,以保护您的节点免受DDOS攻击并确保高可用性。请阅读哨兵节点网络架构来保护你的节点免于DDOS攻击并保证高的可访问性。
二、创建你的验证人
你的cosmosvalconspub可以用于通过抵押token来创建一个新的验证人。
你可以通过运行下面的命令来查看你的验证人公钥:

gaiad tendermint show-validator

显示如下:

cuijb@cuijb-VirtualBox:~/gaiadata$ gaiad tendermint show-validator
cosmosvalconspub1zcjduepq5u3psn5xteucx8pp5xd4wnv4hcvqt6w29jupvpjkrz96slj2vy5syr66kl

接下来,制定你的gaiad gentx命令:
命令格式如下:

注意
不要使用多于你所有的STAKE(STAKE是最新公共测试网络的权益代币名称)!
你可以通过水龙头领取更多!

gaiacli tx staking create-validator \
  --amount=1000000uatom \
  --pubkey=$(gaiad tendermint show-validator) \
  --moniker="choose a moniker" \
  --chain-id= \
  --commission-rate="0.10" \
  --commission-max-rate="0.20" \
  --commission-max-change-rate="0.01" \
  --min-self-delegation="1" \
  --gas="auto" \
  --gas-prices="0.000025uatom" \
  --gas-adjustment="1.80"\
  --from=\
  --min-self-delegation="1"

注意 : 在指定commission参数时,commission-max-change-rate用于度量commission-rate的百分比点数的变化。比如,1%到2%增长了100%,但反映到commission-rate上只有1个百分点。

注意 : 如果没有指定,consensus_pubkey将默认为gaiad tendermint show-validator命令的输出。key_name是将用于对交易进行签名的私钥的名称(类似钱包的名称)。

注意:测试网络中币种名称,与正式网络中币种名称不一致,大家在整理命令的时候,注意核对币种名称:

测试网络:umon

正式网络:uatom

我们开始编写上面的语句。

gaiacli tx staking create-validator --amount=10000000muon --pubkey=cosmosvalconspub1zcjduepq5u3psn5xteucx8pp5xd4wnv4hcvqt6w29jupvpjkrz96slj2vy5syr66kl --moniker="jambeau" --chain-id=gaia-13006 --from=cjb  --commission-rate="0.10" --commission-max-rate="0.20"  --commission-max-change-rate="0.01"  --gas="auto" --min-self-delegation="1" --gas-prices="0.000025muon"  --gas-adjustment="1.80"

命令显示如下:

cuijb@cuijb-VirtualBox:~$ gaiacli tx staking create-validator --amount=10000000muon --pubkey=cosmosvalconspub1zcjduepq5u3psn5xteucx8pp5xd4wnv4hcvqt6w29jupvpjkrz96slj2vy5syr66kl --moniker="jambeau" --chain-id=gaia-13006 --from=cjb  --commission-rate="0.10" --commission-max-rate="0.20"  --commission-max-change-rate="0.01"  --gas="auto" --min-self-delegation="1" --gas-prices="0.000025muon"  --gas-adjustment="1.80"
gas estimate: 179904
{"chain_id":"gaia-13006","account_number":"45197","sequence":"1","fee":{"amount":[{"denom":"muon","amount":"5"}],"gas":"179904"},"msgs":[{"type":"cosmos-sdk/MsgCreateValidator","value":{"description":{"moniker":"jambeau","identity":"","website":"","details":""},"commission":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"min_self_delegation":"1","delegator_address":"cosmos1zdkfdqr7uj4cd3vrz2grg3ypy3adajvxsdu292","validator_address":"cosmosvaloper1zdkfdqr7uj4cd3vrz2grg3ypy3adajvx4eglfe","pubkey":"cosmosvalconspub1zcjduepq5u3psn5xteucx8pp5xd4wnv4hcvqt6w29jupvpjkrz96slj2vy5syr66kl","value":{"denom":"muon","amount":"10000000"}}}],"memo":""}

confirm transaction before signing and broadcasting [y/N]: y
Password to sign with 'cjb':
height: 0
txhash: 3B54E395F91A9BC15E40C3D17C2BFF17AB33D7F152632E9E5B9AEDE2263B38E6
code: 0
data: ""
rawlog: '[{"msg_index":0,"success":true,"log":""}]'
logs:
- msgindex: 0
  success: true
  log: ""
info: ""
gaswanted: 0
gasused: 0
events: []
codespace: ""
tx: null
timestamp: ""

这里有很多坑,显示success,不一定真正成功,我们需要核对交易hash确认等等。
现在我们查询一下,验证人是否成功。
验证人hash如下:
Cosmos开发(二)Gaia 在测试网中运行一个验证人_第1张图片
查看验证人的说明信息命名如下:

gaiacli query staking validator 

查询如下:

cuijb@cuijb-VirtualBox:~/gaiadata$ gaiacli q staking validator cosmosvaloper1zdkfdqr7uj4cd3vrz2grg3ypy3adajvx4eglfe --chain-id gaia-13006
|
  operatoraddress: cosmosvaloper1zdkfdqr7uj4cd3vrz2grg3ypy3adajvx4eglfe
  conspubkey: cosmosvalconspub1zcjduepq5u3psn5xteucx8pp5xd4wnv4hcvqt6w29jupvpjkrz96slj2vy5syr66kl
  jailed: false
  status: 2
  tokens: "10000000"
  delegatorshares: "10000000.000000000000000000"
  description:
    moniker: jambeau
    identity: ""
    website: ""
    details: ""
  unbondingheight: 0
  unbondingcompletiontime: 1970-01-01T00:00:00Z
  commission:
    commission_rates:
      rate: "0.100000000000000000"
      max_rate: "0.200000000000000000"
      max_change_rate: "0.010000000000000000"
    update_time: 2019-09-05T08:30:08.445979539Z
  minselfdelegation: "1"

跟踪验证人的签名信息

你可以通过signing-info命令跟踪过往的验证人签名:

gaiacli query slashing signing-info \
  --chain-id=

我们查询一下,我们刚才验证人的信息,如何获取validator-pubke,参考如下图片
Cosmos开发(二)Gaia 在测试网中运行一个验证人_第2张图片
查询如下:

cuijb@cuijb-VirtualBox:~/gaiadata$ gaiacli q slashing signing-info  cosmosvalconspub1zcjduepq5u3psn5xteucx8pp5xd4wnv4hcvqt6w29jupvpjkrz96slj2vy5syr66kl --chain-id gaia-13006
address: cosmosvalcons1y7s2eul2pa0zjyzzk5fq4lp7quvk6rpy6hz0hf
start_height: 232579
index_offset: 620
jailed_until: 1970-01-01T00:00:00Z
tombstoned: false
missed_blocks_counter: 0

unjail验证人
当验证人因停机而"jailed"(入狱)时,你必须用节点操作人帐户提交一笔Unjail交易,使其再次能够获得区块提交的奖励(奖励多少取决于分区的fee分配)。

gaiacli tx slashing unjail \
    --from= \
    --chain-id=

确认你的验证人节点正在运行
如果下面的命令返回有内容就证明你的验证人正处于活跃状态:

gaiacli query tendermint-validator-set | grep "$(gaiad tendermint show-validator)"

你必须要在区块浏览器中看见你的验证人节点信息。你可以在~/.gaiad/config/priv_validator.json文件中找到bech32编码格式的address。

注意
为了能进入验证人集合,你的权重必须超过第100名的验证人。

下面,我们整理一下
以初始验证人的形式加入到genesis文件

注意 : 这一节内容只针对想要在网络启动前就作为初始验证人身份的节点。如果你想要成为验证人的网络是已经启动了的,请跳过这一节。

注意 : Gaia-9002和Game of stakes不会使用该步骤的方法。他们被Tendermint种子验证人包裹起来。如果要成为这两个网络上的验证人,你只需要使用create-validator命令。

如果你想作为初始验证人被写入到genesis.json文件,你需要证明你(或者是委托人)在创世状态中有一些权益代币,创建一个(或多个)交易以将股权与你的验证人地址联系起来,并将此交易包含在genesis文件中。

因此我们需要区分两种情形:

  • 情形 1 : 你想要从你的验证人地址上质押初始股权 情形
  • 情形 2 : 你想要从一个委托人地址上质押初始股权

情形 1 : 来自你的验证人地址的初始股权
在这种情形下,你需要创建一个gentx:

gaiad gentx \
  --amount  \
  --commission-rate  \
  --commission-max-rate  \
  --commission-max-change-rate  \
  --pubkey  \
  --name 

注意 : 这条命令自动在~/.gaiad/config/gentx文件夹下保存你的gentx,用以在创世阶段执行。

提示
使用gaiad gentx --help来查看更多默认的参数信息。

一个gentx是一个含有自身委托交易的JSON文件。所有创世交易都将由一个创世协调员收集起来,并根据初始的genesis.json进行验证。这个初始的genesis.json文件只包含有所有账户及它们拥有coin的列表。一旦交易执行完,它们会被合并至genesis.json文件的gentxs字段。

情形 2 : 来自一个委托人地址的初始股权
在这种情形下,你需要验证人和委托人的双重签名。先创建一笔未签名的create-validator交易,将其保存在一个名为unsignedValTx文件中:

gaiacli tx staking create-validator \
  --amount=5STAKE \
  --pubkey=$(gaiad tendermint show-validator) \
  --moniker="choose a moniker" \
  --chain-id= \
  --from= \
  --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

然后,使用你的验证人的私钥对这个unsignedValTx签名,然后保存输出到一个名为signedValTx.json文件中:

gaiacli tx sign unsignedValTx.json --from= > signedValTx.json

接着,将这个文件交给委托人,委托人需要执行如下命令:

gaiacli tx sign signedValTx.json --from= > gentx.json

这个gentx.json文件需要包含在验证人机器的~/.gaiad/config/gentx目录中用于在创世阶段执行,像情形1那样(除了在这里它是需要被手动复制到文件夹中)。
复制初始genesis文件并执行genesis交易
将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文件夹,该文件夹包含了最新测试网络的详细信息。如果你连接到不一样的测试网络,请确保你用的是正确的genesis.json文件。

你需要载入所有其他创世验证人的创世交易。目前还没有可以供验证人提交创世纪交易的存储库,但是我们会尽快在testnet中尝试。

一旦你已经在~/.gaiad/config/gentx中收集到所有的创世交易,你可以执行:

gaiad collect-gentxs

注意 : 你在gentx中委托的账户必须在genesis文件中拥有这些抵押代币,否则,collect-gentx会失败。

上一个命令将收集所有的创世交易并完成genesis.json。验证配置的正确性并启动节点:

gaiad start

编辑验证人的说明信息
你可以编辑验证人的公开说明。此信息用于标识你的验证人节点,委托人将根据此信息来决定要委托的验证人节点。确保为下面的每个标识提供输入,否则该字段将默认为空( --moniker默认为机器名称)。

–identity可用于验证和Keybase或UPort这样的系统一起验证身份。与Keybase一起使用时,–identity应使用由一个keybase.io帐户生成的16位字符串。它是一种加密安全的方法,可以跨多个在线网络验证您的身份。 Keybase API允许我们检索你的Keybase头像。这是你可以在验证人配置文件中添加徽标的方法。

gaiacli tx staking edit-validator
  --moniker="choose a moniker" \
  --website="https://cosmos.network" \
  --identity=6A0D65E29A4CBC8E \
  --details="To infinity and beyond!" \
  --chain-id= \
  --from= \
  --commission-rate="0.10"

注意 : commission-rate的值必须符合如下的不变量检查:

  • 必须在 0 和 验证人的commission-max-rate 之间
  • 不得超过验证人的commission-max-change-rate,该参数标识每日最大的百分点变化数。也就是,一个验证人在commission-max-change-rate的界限内每日一次可调整的最大佣金变化。

通过这章的整理。

2019年9月5日 整理于深圳。

你可能感兴趣的:(区块链开发,技术篇,区块链)