美文网首页区块链研习社
Cosmos-- 二.Gaia -- 10.Gaia客户端

Cosmos-- 二.Gaia -- 10.Gaia客户端

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

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

    第二章Gaia:

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

    Gaia客户端

    Gaia CLI

    注意

    如果你收到了下面这条错误消息:

    Must specify these options: --chain-id  when --trust-node is false
    

    你必须选择是否要验证轻客户端的证明。如果你信任要查询的节点,则可以简单地传递--trust-node=true -- 否则你需要指定--chain-id

    gaiacli是管理Cosmos测试网上的帐户和交易的命令行操作界面。它的配置文件位于$HOME/.gaiacli/config/config.toml中,可以手动编辑或通过gaiacli config命令编辑:

    gaiacli config chain-id gaia-9004
    

    有关命令用法的更多信息,请参阅其帮助界面:gaiacli config --help

    以下是有用的gaiacli命令列表,包括用法示例。

    Key

    Key类型

    有如下类型的key:

    • cosmos :通过gaiacli keys add
      • 从通过gaiacli keys add生成的账户私钥中产生
      • 用于接收资金
      • 例如 cosmos15h6vd5f0wqps26zjlwrc6chah08ryu4hzzdwhc
    • cosmosvaloper
      • 用于关联一个验证人和其操作者
      • 用于发起staking操作命令
      • 例如 cosmosvaloper1carzvgq3e6y3z5kz5y6gxp3wpy3qdrv928vyah
    • cosmospub
      • 从通过gaiacli keys add生成的账户私钥中产生
      • 例如 cosmospub1zcjduc3q7fu03jnlu2xpl75s2nkt7krm6grh4cc5aqth73v0zwmea25wj2hsqhlqzm
    • cosmosvalconspub
      • 在使用gaiad init创建节点时生成
      • 使用gaiad tendermint show-validator获得该值
      • 例如 cosmosvalconspub1zcjduepq0ms2738680y72v44tfyqm3c9ppduku8fs6sr73fx7m666sjztznqzp2emf
    生成key

    你需要一个帐户的私钥公钥对(分别称作skpk)才能接收资金,发送交易,绑定交易等等。

    生成一个新的secp256k1密钥:

    gaiacli keys add <account_name>
    

    接下来,你必须创建一个密码来保护磁盘上的密钥。上述命令的输出将包含种子短语。建议将种子短语保存在安全的地方,以便在忘记密码的情况下,最终可以使用以下命令从种子短语重新生成密钥:

    gaiacli keys add --recover
    

    如果你检查你的私钥,你会看到<account_name> :

    gaiacli keys show <account_name>
    

    通过下面的命令查看验证人操作者的地址:

    gaiacli keys show <account_name> --bech=val
    

    你可以查看你所有的可以使用的密钥:

    gaiacli keys list
    

    查看你节点的验证人公钥:

    gaiad tendermint show-validator
    

    请注意,这是Tendermint的签名密钥,而不是你在委托交易中使用的操作员密钥。

    警告

    我们强烈建议不要对多个密钥使用相同的密码。Tendermint团队和Interchain Foundation将不承担资金损失的责任。

    生成多签公钥

    你可以生成一个多签公钥并将其打印:

    gaiacli keys add --multisig=name1,name2,name3[...] --multisig-threshold=K new_key_name
    

    K是将要对多签公钥发起的交易进行签名的最小私钥数。

    --multisig标识必须包含要将组合成一个公钥的那些子公钥的名称,该公钥将在本地数据库中生成并存储为new_key_name。通过--multisig提供的所有名称必须已存在于本地数据库中。除非设置了--nosort标识,否则在命令行上提供密钥的顺序无关紧要,即以下命令生成两个相同的密钥:

    gaiacli keys add --multisig=foo,bar,baz --multisig-threshold=2 multisig_address
    gaiacli keys add --multisig=baz,foo,bar --multisig-threshold=2 multisig_address
    

    多签地址也可以在运行中生成并通过以下命令打印:

    gaiacli keys show --multisig-threshold K name1 name2 name3 [...]
    

    有关如何生成多签帐户,使用其签名和广播多签交易的详细信息,请参阅多签交易

    fee和gas

    每笔交易可能会提供fee或gas price,但不能同时提供。大多数用户通常会提供fee,因为这是你将为最终被记入帐本中的交易提供的费用。

    验证人可以配置最低gas price(多币种的),并且在决定它们是否能被包含在区块中的CheckTx期间使用改值,其中 gasPrices >= minGasPrices。请注意,你的交易必须提供大于或等于验证人要求的任何接受币种的费用。

    注意:有了这样的机制,验证人可能会开始在mempool中通过gasPrice来优先处理某些txs,因此提供更高fee或gas price可能会产生更高的tx优先级。

    比如:

    gaiacli tx send ... --fees=100photino
    

    或:

    gaiacli tx send ... --gas-prices=0.000001stake
    

    账户

    获取token

    获取token的最佳方式是通过Cosmos测试网水龙头。如果水龙头对你不生效,尝试在#cosmos-validator上向人索要。水龙头需要你打算用于抵押股权的cosmos开头的地址。

    查询账户余额

    在你的地址收到token后,你可以通过以下命令查看账户的余额:

    gaiacli query account <account_cosmos>
    

    注意

    当你查询余额为零的帐户时,你将收到以下错误:No account with address <account_cosmos> was found in the state. 如果你在节点与区块链完全同步之前就查询,也会发生这种情况。这些都很正常。

    发送token

    你可以通过如下命令从一个账户发送资金到另一个账户:

    gaiacli tx send <destination_cosmos> 10faucetToken \
      --chain-id=<chain_id> \
      --from=<key_name> \
    

    注意

    --amount标识接收格式:--amount=<value|coin_name>

    注意

    你可能希望通过--gas标识限制交易可以消耗的最大燃料。如果你通过--gas=auto,将在执行交易前自动估gas。gas估算可能是不准确的,因为状态变化可能发生在模拟结束和交易的实际执行之间,因此在原始估计之上应用调整以确保能够成功地广播交易。可以通过--gas-adjustment标识控制调整,其默认值为1.0。

    现在,查看源账户和目标账户的更新后的余额:

    gaiacli query account <account_cosmos>
    gaiacli query account <destination_cosmos>
    

    你还可以使用--block标识查询在特定高度区块下你的余额:

    gaiacli query account <account_cosmos> --block=<block_height>
    

    你可以通过在命令行中附加--dry-run标识来模拟交易而不实际广播它:

    gaiacli tx send <destination_cosmosaccaddr> 10faucetToken \
      --chain-id=<chain_id> \
      --from=<key_name> \
      --dry-run
    

    此外,你可以通过将--generate-only附加到命令行参数列表来构建交易并将其JSON格式打印到STDOUT:

    gaiacli tx send <destination_cosmosaccaddr> 10faucetToken \
      --chain-id=<chain_id> \
      --from=<key_name> \
      --generate-only > unsignedSendTx.json
    
    gaiacli tx sign \
      --chain-id=<chain_id> \
      --from=<key_name>
      unsignedSendTx.json > signedSendTx.json
    

    你可以通过下面的命令验证交易的签名:

    gaiacli tx sign --validate-signatures signedSendTx.json
    

    你可以将由JSON文件提供的已签名的交易广播至指定节点:

    gaiacli tx broadcast --node=<node> signedSendTx.json
    

    查询交易

    匹配一组tag

    你可以使用交易搜索命令查询与每个交易上添加的特定标签集匹配的交易。

    每个标签都由<tag>:<value>形式的键值对形成。还可以使用符号组合标签来查询更具体的结果。

    使用标签查询交易的命令如下:

    gaiacli query txs --tags='<tag>:<value>'
    

    使用多个标签:

    gaiacli query txs --tags='<tag1>:<value1>&<tag2>:<value2>'
    

    通过pagelimit来实现分页:

    gaiacli query txs --tags='<tag>:<value>' --page=1 --limit=20
    

    注意

    action标签始终等于相关message的Type()函数返回的消息类型。

    你可以在每个SDK的模块中找到目前的标签列表:

    匹配一笔交易的hash

    你一可以通过指定hash值查询该笔交易:

    gaiacli query tx [hash]
    

    Slashing

    Unjailing

    将你入狱的验证人释放出狱:

    gaiacli tx slashing unjail --from <validator-operator-addr>
    
    Signing Info

    检索一个验证人的签名信息:

    gaiacli query slashing signing-info <validator-pubkey>
    
    查询参数

    你可以查询当前的slashing参数:

    gaiacli query slashing params
    

    Staking

    设置一个验证人

    有关如何设置验证人候选者的完整指南,请参阅验证人设置章节

    向一个验证人委托

    一旦主网上线,你可以把atom委托给一个验证人。这些委托人可以收到部分验证人的收益。阅读Cosmos Token Model了解更多信息。

    查询验证人

    你可以查询指定链的验证人:

    gaiacli query staking validators
    

    如果你想要获得单个验证人的信息,你可以使用下面的命令:

    gaiacli query staking validator <account_cosmosval>
    
    绑定token

    在测试网中,我们用stake来代替atom委托。你可以把token绑定在一个测试网验证人节点上(即委托):

    gaiacli tx staking delegate \
      --amount=10stake \
      --validator=<validator> \
      --from=<key_name> \
      --chain-id=<chain_id>
    

    <validator>是你要委托的验证人的操作者地址。如果你运行的是本地testnet,可以通过以下方式找到:

    gaiacli keys show [name] --bech val
    

    其中[name]是初始化gaiad时指定的键的名称。

    虽然token是绑定的,但它们与网络中的所有其他绑定的token汇集在一起。验证人和委托人获得一定比例的股权,这些股权等于他们在这个资产池中的抵押。

    注意

    不要使用超过你所拥有的steak!你可以使用水龙头获取

    查询委托

    一旦提交了一笔对验证人的委托,你可以使用下面的命令查看委托详情:

    gaiacli query staking delegation <delegator_addr> <validator_addr>
    

    或者你想查看所有当前的委托:

    gaiacli query staking delegations <delegator_addr>
    

    你还可以通过添加--height标识来获取先前的委托状态。

    解绑token

    如果出于一些原因验证人行为异常,或者你想解绑一定数量的token,请使用以下命令。你可以使用相应的shares-amount标识(例如:12.1)或shares-fraction(例如:0.25)来解绑。

    gaiacli tx staking unbond \
      --validator=<account_cosmosval> \
      --shares-fraction=0.5 \
      --from=<key_name> \
      --chain-id=<chain_id>
    

    经过解绑期后,解绑自动完成。

    查询Unbonding-Delegations

    一旦你开始了一笔unbonding-delegation,你可以使用以下命令查看信息:

    gaiacli query staking unbonding-delegation <delegator_addr> <validator_addr>
    

    或者你可以查看当前你所有的unbonding-delegation:

    gaiacli query staking unbonding-delegations <account_cosmos>
    

    此外,你可以从特定验证人获取所有unbonding-delegation:

    gaiacli query staking unbonding-delegations-from <account_cosmosval>
    

    要获取指定区块时的unbonding-delegation状态,请尝试添加--height标识。

    重新委托token

    重新授权是一种委托类型,允许你将非流动token从一个验证人上绑定到另一个验证人:

    gaiacli tx staking redelegate \
      --addr-validator-source=<account_cosmosval> \
      --addr-validator-dest=<account_cosmosval> \
      --shares-fraction=50 \
      --from=<key_name> \
      --chain-id=<chain_id>
    

    这里,你还可以使用shares-amountshares-fraction标识重新委托。

    经过解绑期后,重新委托自动完成。

    查询重新委托

    开始重新授权后,你可以使用以下命令查看其信息:

    gaiacli query staking redelegation <delegator_addr> <src_val_addr> <dst_val_addr>
    

    或者,如果你可以检查所有当前的unbonding-delegation:

    gaiacli query staking redelegations <account_cosmos>
    

    此外,你可以查询某个特定验证人的所有转出的重新绑定:

    gaiacli query staking redelegations-from <account_cosmosval>
    

    添加--height标识来查询之前某个特定区块的redelegation。

    查询参数

    参数定义了staking的高级参数。你可以使用以下方法获取:

    gaiacli query staking params
    

    使用上面的命令,你将获得以下值:

    • unbonding时间
    • 验证人的最大数量
    • 用于抵押的币种

    所有这些值都将通过对一个ParameterChange提案的governance流程进行更新。

    查询抵押池

    一个抵押池定义了当前状态的动态参数。你可以通过以下命令查询:

    gaiacli query staking pool
    

    使用pool命令,你将获得以下值:

    • 未绑定和已绑定的token
    • token总量
    • 当前的年度通货膨胀率以及上次发生通货膨胀的区块
    • 最后记录的绑定股权
    查询对验证人的绑定

    你可以查询对某个验证人的所有绑定:

    gaiacli query delegations-to <account_cosmosval>
    

    治理

    治理是Cosmos Hub的用户可以就软件升级,主网的参数或自定义文本提案并达成共识的过程。这是通过对提案进行投票来完成的,提案将由主要网络上的Atom持有者提交。

    关于投票过程的一些考虑因素:

    • 投票由绑定Atom的持有者以1个绑定的Atom对应1票方式投出
    • 委托人不投票的话会将票权继承给其验证人
    • 验证人必须对每个提案进行投票。如果验证人未对提案进行投票,则会对其进行削减处罚。
    • 投票期结束时(主网上是2周)统计投票。每个地址可以多次投票以更新其Option值(每次支付交易费用),只有最后一次投票将被视为有效。
    • 选民可以选择YesNoNoWithVetoAbstain选项。在投票结束时,如果( YesVotes / ( YesVotes + NoVotes + NoWithVetoVotes ) ) > 1/2( NoWithVetoVotes / ( YesVotes + NoVotes + NoWithVetoVotes )) < 1/3提案通过,否则就拒绝。

    有关治理流程及其工作原理的更多信息,请查看Governance模块规范

    创建一个治理提案

    要创建治理提案,你必须提交初始存款以及提案详细信息:

    • title : 提案的标题
    • description : 提案的描述
    • type : 提案类型。值必须是 Text(目前还不支持SoftwareUpgradeParameterChange类型)。
    gaiacli tx gov submit-proposal \
      --title=<title> \
      --description=<description> \
      --type=<Text/ParameterChange/SoftwareUpgrade> \
      --deposit=<40steak> \
      --from=<name> \
      --chain-id=<chain_id>
    
    查询提案

    一旦创建,你就可以查询提案的信息:

    gaiacli query gov proposal <proposal_id>
    

    或者查询所有的有效提案:

    gaiacli query gov proposals
    

    你还可以使用voterdepositor标识来过滤查询提案。

    要查询特定提案的提议人:

    gaiacli query gov proposer <proposal_id>
    
    增加存入金

    为了将提案广播到网络,存入的金额必须高于minDeposit值(默认值:10steak)。如果你之前创建的提案不符合此要求,你仍可以增加存入的总金额以激活它。达到最低存入金后,提案进入投票期:

    gaiacli tx gov deposit <proposal_id> <200steak> \
      --from=<name> \
      --chain-id=<chain_id>
    

    注意:达到MaxDepositPeriod后,将删除不符合此要求的提案。

    查询存入金

    创建新提案后,你可以查询提交其所有存款:

    gaiacli query gov deposits <proposal_id>
    

    你还可以查询特定地址提交的存入金:

    gaiacli query gov deposit <proposal_id> <depositor_address>
    
    投票给一个提案

    在提案的存入金达到MinDeposit后,投票期将开放。抵押了Atom的持有人可以投票:

    gaiacli query gov vote <proposal_id> <voter_address>
    

    你还可以查询提交给所有此前投给指定提案的投票:

    gaiacli query gov votes <proposal_id>
    
    查询提案的计票结果

    要检查指定提案的当前计票,你可以使用tally命令:

    gaiacli query gov tally <proposal_id>
    
    查询治理参数

    要检查当前的治理参数,请运行:

    gaiacli query gov params
    

    查询运行的治理参数的子集:

    gaiacli query gov param voting
    gaiacli query gov param tallying
    gaiacli query gov param deposit
    

    费用分配

    查询分配参数

    查询当前的分配参数:

    gaiacli query distr params
    
    查询

    查询当前未结算的(未提取)的奖励:

    gaiacli query distr outstanding-rewards
    
    查询验证人佣金

    查询对一个验证人的未结算的佣金:

    gaiacli query distr commission <validator_address>
    
    查询验证人的削减处罚

    查询一个验证人的处罚历史记录:

    gaiacli query distr slashes <validator_address> <start_height> <end_height>
    
    查询委托人奖励

    查询某笔委托当前的奖励(如果要取回):

    gaiacli query distr rewards <delegator_address> <validator_address>
    
    查询所有的委托人奖励

    要查询委托人的所有当前奖励(如果要取回),请运行:

    gaiacli query distr rewards <delegator_address>
    

    多签交易

    多签交易需要多个私钥的签名。因此,从多签账户生成和签署交易涉及有关各方之间的合作。密钥持有者的任何一方都可以发起多签,并且至少要有其中一方需要将其他账户的公钥导入到本地的数据库并生成多签公钥来完成和广播该笔交易。

    例如,给定包含密钥p1p2p3的多签密钥,每个密钥由不同方持有,持有p1的用户将需要导入p2p3的公钥以生成多签帐户公钥:

    gaiacli keys add \
      --pubkey=cosmospub1addwnpepqtd28uwa0yxtwal5223qqr5aqf5y57tc7kk7z8qd4zplrdlk5ez5kdnlrj4 \
      p2
    
    gaiacli keys add \
      --pubkey=cosmospub1addwnpepqgj04jpm9wrdml5qnss9kjxkmxzywuklnkj0g3a3f8l5wx9z4ennz84ym5t \
      p3
    
    gaiacli keys add \
      --multisig-threshold=2
      --multisig=p1,p2,p3
      p1p2p3
    

    已存储新的多签公钥p1p2p3,其地址将用作多签交易的签名者:

    gaiacli keys show --address p1p2p3
    

    创建多签交易的第一步是使用上面创建的多签地址初始化:

    gaiacli tx send cosmos1570v2fq3twt0f0x02vhxpuzc9jc4yl30q2qned 10stake \
      --from=<multisig_address> \
      --generate-only > unsignedTx.json
    

    unsignedTx.json文件包含以JSON编码的未签署交易。p1现在可以使用自己的私钥对交易进行签名:

    gaiacli tx sign \
      --multisig=<multisig_address> \
      --name=p1 \
      --output-document=p1signature.json \
      unsignedTx.json
    

    生成签名后,p1unsignedTx.jsonp1signature.json都发送到p2p3,然后p2p3将生成它们各自的签名:

    gaiacli tx multisign \
      unsignedTx.json \
      p1p2p3 \
      p1signature.json p2signature.json > signedTx.json
    

    现在可以把交易发送给节点:

    gaiacli tx broadcast signedTx.json
    

    shell完全脚本

    可以通过完全命令生成主流的UNIX shell解释器(如BashZsh)的completion命令,该命令可用于gaiadgaiacli

    如果要生成Bash完成脚本,请运行以下命令:

    gaiad completion > gaiad_completion
    gaiacli completion > gaiacli_completion
    

    如果要生成Zsh完成脚本,请运行以下命令:

    gaiad completion --zsh > gaiad_completion
    gaiacli completion --zsh > gaiacli_completion
    

    注意

    在大多数UNIX系统上,可以在.bashrc.bash_profile中加载此类脚本以启用Bash自动完成:

    echo '. gaiad_completion' >> ~/.bashrc
    echo '. gaiacli_completion' >> ~/.bashrc
    

    有关如何启用shell自动完成的信息,请参阅操作系统提供的解释器用户手册。

    docker run -it -d --name="eth-node-v1.8.23" -p 8545:8545 -p 8546:8546 -p 30303:30303 -v /data/.ethereum:/root/.ethereum 087ef0a891b7 --datadir /root/.ethereum --rpc --rpcapi "admin,debug,eth,net,personal,shh,txpool,web3" --rpcaddr "0.0.0.0" --rpcport 8545 --rpccorsdomain "" --ws --wsapi "admin,debug,eth,net,personal,shh,txpool,web3" --wsaddr "0.0.0.0" --wsport 8546 --wsorigins ""

    相关文章

      网友评论

        本文标题:Cosmos-- 二.Gaia -- 10.Gaia客户端

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