cosmos主网即将上线,对文档做了大量更新。特地翻译了一下,方便小伙伴们阅览, 之后会持续更新
第二章Gaia:
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
你需要一个帐户的私钥公钥对(分别称作sk
,pk
)才能接收资金,发送交易,绑定交易等等。
生成一个新的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>'
通过page
和limit
来实现分页:
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-amount
或shares-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
值(每次支付交易费用),只有最后一次投票将被视为有效。 - 选民可以选择
Yes
,No
,NoWithVeto
和Abstain
选项。在投票结束时,如果( YesVotes / ( YesVotes + NoVotes + NoWithVetoVotes ) ) > 1/2
且( NoWithVetoVotes / ( YesVotes + NoVotes + NoWithVetoVotes )) < 1/3
提案通过,否则就拒绝。
有关治理流程及其工作原理的更多信息,请查看Governance模块规范。
创建一个治理提案
要创建治理提案,你必须提交初始存款以及提案详细信息:
-
title
: 提案的标题 -
description
: 提案的描述 -
type
: 提案类型。值必须是 Text(目前还不支持SoftwareUpgrade和ParameterChange类型)。
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
你还可以使用voter
或depositor
标识来过滤查询提案。
要查询特定提案的提议人:
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>
多签交易
多签交易需要多个私钥的签名。因此,从多签账户生成和签署交易涉及有关各方之间的合作。密钥持有者的任何一方都可以发起多签,并且至少要有其中一方需要将其他账户的公钥导入到本地的数据库并生成多签公钥来完成和广播该笔交易。
例如,给定包含密钥p1
,p2
和p3
的多签密钥,每个密钥由不同方持有,持有p1
的用户将需要导入p2
和p3
的公钥以生成多签帐户公钥:
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
生成签名后,p1
将unsignedTx.json
和p1signature.json
都发送到p2
或p3
,然后p2
或p3
将生成它们各自的签名:
gaiacli tx multisign \
unsignedTx.json \
p1p2p3 \
p1signature.json p2signature.json > signedTx.json
现在可以把交易发送给节点:
gaiacli tx broadcast signedTx.json
shell完全脚本
可以通过完全命令生成主流的UNIX shell解释器(如Bash
和Zsh
)的completion
命令,该命令可用于gaiad
和gaiacli
。
如果要生成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 ""
网友评论