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

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 ""

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容