美文网首页区块链研习社
Cosmos-- 二.Gaia -- 4.在测试网中运行一个验证

Cosmos-- 二.Gaia -- 4.在测试网中运行一个验证

作者: 糙米薏仁汤 | 来源:发表于2019-02-26 15:10 被阅读0次

    cosmos主网即将上线,对文档做了大量更新。特地翻译了一下,方便小伙伴们阅览, 之后会持续更新

    第二章Gaia:

    1. Gaia是什么
    2. 安装Gaia
    3. 加入公共测试网
    4. 在测试网中运行一个验证人
    5. 验证人概览
    6. 验证人安全
    7. 验证人相关问题
    8. 委托人指南(命令行操作)
    9. Ledger Nano支持
    10. Gaia客户端
    11. 部署你自己的测试网

    在公共测试网中运行一个验证人

    提示

    你要加入当前测试网的详细信息(genesis.json和种子节点)在testnet repo中可以找到。请检查你是否加入我们最新的测试网。

    注意 : 该文章只适用于公共测试网的验证人

    在启动你验证人节点前,确定你已经完成了全节点启动教程。

    什么是验证人?

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

    警告

    如果你想要成为Cosmos Hub主网的验证人,你应该研究安全性

    如果你已经启动了一个全节点,可以跳过下一节的内容。

    创建你的验证人

    你的cosmosvalconspub可以用于通过抵押token来创建一个新的验证人。你可以通过运行下面的命令来查看你的验证人公钥:

    gaiad tendermint show-validator
    

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

    注意

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

    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参数时,commission-max-change-rate用于度量commission-rate的百分比点数的变化。比如,1%到2%增长了100%,但反映到commission-rate上只有1个百分点。

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

    以初始验证人的形式加入到genesis文件

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

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

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

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

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

    情形 1 : 来自你的验证人地址的初始股权

    在这种情形下,你需要创建一个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,用以在创世阶段执行。

    提示

    使用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=<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
    

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

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

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

    gaiacli tx sign signedValTx.json --from=<delegator_key_name> > 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=<chain_id> \
      --from=<key_name> \
      --commission-rate="0.10"
    

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

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

    查看验证人的说明信息

    通过该命令查看验证人的说明信息:

    gaiacli query staking validator <account_cosmos>
    

    跟踪验证人的签名信息

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

    gaiacli query slashing signing-info <validator-pubkey>\
      --chain-id=<chain_id>
    

    unjail验证人

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

    gaiacli tx slashing unjail \
        --from=<key_name> \
        --chain-id=<chain_id>
    

    确认你的验证人节点正在运行

    如果下面的命令返回有内容就证明你的验证人正处于活跃状态:

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

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

    注意

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

    常见问题

    问题 #1 : 我的验证人voting_power: 0

    你的验证人已经自动解除抵押。在gaia-8000测试网中,我们会自动将那些在最近100个区块有超过50个区块没有进行表决的验证人解除抵押。因为区块大概每2秒钟提议一次,所以一个验证人节点100秒没有响应的话就会被解除抵押。这通常发生在你的gaiad程序崩溃的情况下。

    以下是如何将投票权返还给验证人的方法。首先,如果gaiad没有运行,请再次启动它:

    gaiad start
    

    等待你的全节点追赶上最新的区块。接下来,运行以下命令。请注意,<cosmos>是你的验证人帐户的地址,<name>是验人帐户的名称。你可以通过运行gaiacli keys list找到此信息。

    gaiacli tx slashing unjail <cosmos> --chain-id=<chain_id> --from=<from>
    

    警告

    如果你在运行unjail之前没有等待gaiad同步完成,你将收到一条错误消息,告知你的验证人仍然是jailed状态。

    最后,检查你的验证人看看你的投票表决权是否恢复:

    gaiacli status
    

    你可能会注意到你的投票权比之前要少。这是因为你的下线受到的削减处罚!

    问题 #2 : 我的gaiad由于too many open files崩溃

    Linux可以打开的默认文件数(每个进程)是1024。已知gaiad可以打开超过1024个文件。这会导致进程崩溃。快速修复运行ulimit -n 4096(增加允许的打开文件数)来快速修复,然后使用gaiad start重新启动进程。如果你使用systemd或其他进程管理器来启动gaiad,则可能需要在该级别进行一些配置。解决此问题的示例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
    

    相关文章

      网友评论

        本文标题:Cosmos-- 二.Gaia -- 4.在测试网中运行一个验证

        本文链接:https://www.haomeiwen.com/subject/xpbayqtx.html