Merge PR #4408: remove cosmos hub docs translation

This commit is contained in:
gamarin2 2019-05-24 15:04:28 +02:00 committed by Alexander Bezobchuk
parent 68036ec71f
commit a7a1a469ae
32 changed files with 0 additions and 5588 deletions

View File

@ -1,23 +0,0 @@
# gaia文档
欢迎阅读`Gaia`文档。 `Gaia`是Cosmos Hub目前的应用程序名。
## 加入Cosmos Hub主网
- [安装`gaia`程序](./installation.md)
- [启动一个全节点并加入主网](./join-mainnet.md)
- [升级成一个验证人节点](./validators/validator-setup.md)
## 加入Cosmos Hub公共测试网
- [加入测试网](./join-testnet.md)
## 部署你自己的`gaia`测试网络
- [部署你自己的`gaia`测试网](./deploy-testnet.md)
## 额外资源
- [验证人介绍](./validators/overview.md)
- [验证人问答](./validators/validator-faq.md)
- [验证人安全性考量](./validators/security.md)

View File

@ -1,519 +0,0 @@
# 委托人指南 (CLI)
本文介绍了如何使用Cosmos Hub的命令行交互CLI程序实现通证委托的相关知识和操作步骤。
同时,本文也介绍了如何管理账户,如何从筹款人那里恢复账户,以及如何使用一个硬件钱包的相关知识。
::: 风险提示
**重要提示**:请务必按照下面的操作步骤谨慎操作,过程中发生任何错误都有可能导致您永远失去所拥有的通证。因此,请在开始操作之前先仔细阅读全文,如果有任何问题可以联系我们获得支持。
另请注意您即将要与Cosmos Hub进行交互Cosmos Hub仍然是一个试验型的区块链技术软件。虽然Cosmos Hub区块链是应用现有最新技术开发并经过审核的但我们仍然可能会在运行时遇到问题需要不断更新和修复漏洞。此外使用区块链技术仍然要求有很高的技术能力并且有可能遇到我们无法预知和控制的风险。使用Cosmos Hub前您需要充分了解与加密软件相关的潜在风险请参考[Cosmos跨链贡献条款](https://github.com/cosmos/cosmos/blob/master/fundraiser/Interchain%20Cosmos%20Contribution%20Terms%20-%20FINAL.pdf)中关于风险的部分条款),并且我们跨链基金会和(或)Tendermint团队对于因为使用本产品而可能产生的损失不承担任何责任。使用Cosmos Hub需要遵守Apache 2.0开源软件授权条款,用户需要自己承担所有责任,所使用的软件按“现状”提供且不提供任何形式的保障或条件。
:::
请务必谨慎行事!
## 目录
- [安装 `gaiacli`](#安装-gaiacli)
- [Cosmos账户](#Cosmos账户)
+ [通过募资人恢复一个账户](#通过募资人恢复一个账户)
+ [创建一个账户](#创建一个账户)
- [访问Cosmos Hub网络](#访问Cosmos-Hub网络)
+ [运行您自己的全节点](#运行您自己的全节点)
+ [连接到一个远程全节点](#连接到一个远程全节点)
- [设置`gaiacli`](#设置-gaiacli)
- [状态查询](#状态查询)
- [发起交易](#发起交易)
+ [关于gas费和手续费](#关于gas费和手续费)
+ [抵押Atom通证 & 提取奖励](#抵押atom通证--提取奖励)
+ [参与链上治理](#参与链上治理)
+ [从一台离线电脑上签署交易](#从一台离线电脑上签署交易)
## 安装 `gaiacli`
`gaiacli`: 与`gaiad`全节点交互的命令行用户界面。
::: 安全提示
**请检查并且确认你下载的`gaiacli`是可获得的最新稳定版本**
:::
[**下载已编译代码**]暂不提供
[**通过源代码安装**](https://cosmos.network/docs/gaia/installation.html)
::: tip 提示
`gaiacli` 需要通过操作系统的终端窗口使用,打开步骤如下所示:
- **Windows**: `开始` > `所有程序` > `附件` > `终端`
- **MacOS**: `访达` > `应用程序` > `实用工具` > `终端`
- **Linux**: `Ctrl` + `Alt` + `T`
:::
## Cosmos账户
每个Cosmos账户的核心基础是一个包含12或24个词的助记词组通过这个助记词可以生成无数个Cosmos账户例如一组私钥/公钥对。这被称为一个硬件钱包(跟多硬件钱包相关说明请参见[BIP32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki)
```
账户 0 账户 1 账户 2
+------------------+ +------------------+ +------------------+
| | | | | |
| 地址 0 | | 地址 1 | | 地址 2 |
| ^ | | ^ | | ^ |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| + | | + | | + |
| 公钥 0 | | 公钥 1 | | 公钥 2 |
| ^ | | ^ | | ^ |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| + | | + | | + |
| 私钥 0 | | 私钥 1 | | 私钥 2 |
| ^ | | ^ | | ^ |
+------------------+ +------------------+ +------------------+
| | |
| | |
| | |
+--------------------------------------------------------------------+
|
|
+---------+---------+
| |
| 助记词 (Seed) |
| |
+-------------------+
```
私钥是控制一个账户中所存资产的钥匙。私钥是通过助记词单向产生的。如果您不小心丢失了私钥,你可以通过助记词恢复。 然而,如果你丢失了助记词,那么你就有可能失去对由这个助记词产生的所有私钥的控制。同样,如果有人获得了你的助记词,他们就可以操作所有相关账户。
::: 警告
**谨慎保管并不要告诉他人你的助记词。 为了防止资产被盗或者丢失,您最好多备份几份助记词, 并且把它们存放在只有您知道的安全地方,这样做将有助于保障您的私钥以及相关账户的安全。**
:::
Cosmos地址是一个以可读词开头的字符串(比如`cosmos10snjt8dmpr5my0h76xj48ty80uzwhraqalu4eg`) 如果有人想给你转账通证,他们就往这个地址转账。根据给定地址来推算私钥是不可行的。
### 通过募资人恢复一个账户
::: 提示
*注:这部分内容仅适用于众筹活动参与者*
:::
如果您是众筹的参与者你应该有一个助记词。新产生的助记词用24个词但是12个词的助记词组也兼容所有Cosmos工具。
#### 通过硬件钱包设备进行操作
一个数字钱包设备的核心是通过一个助记词在多个区块链上创建账户包括Cosmos hub。通常您会在初始化您的数字钱包设备时创建一个新的助记词,也可以通过已有的助记词进行导入。让我们一起来看如何将您在参与众筹时获得的助记词设定为一个数字钱包设备的seed。
::: 警告
*注意:**最好使用一个新的钱包设备**来恢复您的Cosmos账户。确实每个数字钱包设备只能有一个助记词。 当然,您可以通过 `设置`>`设备`>`重置所有` 将一个已经有助记词的(用过的)数字钱包重新初始化。**但请注意,这样会清空您设备中现有的助记词,如果您没有做好备份的话,有可能会丢失您的资产***
:::
对于一个没有初始化的数字钱包设备,您需要做如下操作。
1. 将您的数字钱包设备通过USB与电脑链接
2. 同时按下两个按钮
3. **不要**选择“配置一个新设备”选项,而是选择“恢复配置”
4. 选择一个PIN
5. 选择12个词选项
6. 逐个按顺序输入您在众筹时获得的12个助记词
现在,您的钱包已经正确地设置好您在众筹时获得的助记词,切勿丢失!任何时候您的钱包设备出现问题,您都可以通过助记词在一个新的钱包设备上恢复所有账户。
接下来,请点击[这里](#使用硬件钱包设备进行操作)来学习如何生成一个账户。
#### 在电脑上操作
::: 警告
**注意: 在一台没有联网的计算机上执行以下操作会更加安全**
:::
如果您希望通过众筹时获得的助记词恢复账户并保存相关私钥,请按以下步骤操作:
```bash
gaiacli keys add <yourKeyName> --recover
```
首先,您需要输入一个密码来对您硬盘上账户`0`的私钥进行加密。每次您发出一笔交易时都将需要输入这个密码。如果您丢失了密码,您可以通过助记词来恢复您的私钥。
-`<yourKeyName>` 是账户名称,用来指代用助记词生成私钥/公钥对的Cosmos账户。在您发起交易时这个账户名称被用来识别您的账户。
- 您可以通过增加 `--account` 标志来指定您账户生成的路径 (`0`, `1`, `2`, ...) `0` 是缺省值。
### 创建一个账户
前,您需要先安装`gaiacli`,同时,您需要知道你希望在哪里保存和使用您的私钥。 最好的办法是把他们保存在一台没有上网的电脑或者一个硬件钱包设备里面。 将私钥保存在一台联网的电脑里面比较危险,任何人通过网络攻击都有可能获取您的私钥,进而盗取您的资产。
#### 使用硬件钱包设备进行操作
::: 警告
**建议仅使用您新买的钱包设备或者您足够信任的设备**
:::
当您初始化钱包设备时设备会产生一个24个词的助记词组。这个助记词组和Cosmos是兼容的我们可以通过这个助记词组创建Cosmos账户。所以您需要做的是确认您的钱包设备兼容`gaiacli`,通过下面的步骤可以帮助您确认您的设备是否兼容:
1. 下载[Ledger Live应用](https://www.ledger.com/pages/ledger-live).
2. 通过USB将钱包与计算机连接并且将钱包固件升级到最新版本。
3. 到Ledger Live钱包的应用商店下载”Cosmos“应用这可能需要花些时间。**下载”Cosmos“应用程序需要在Ledger Live钱包`Settings`选项中激活`Dev Mode`**
4. 在你的钱包设备上操作Cosmos APP。
然后,通过以下命令创建账户:
```bash
gaiacli keys add <yourAccountName> --ledger
```
::: 注意: 该命令仅在硬件钱包已导入并在解锁状态时才有效:::
- `<yourKeyName>` 是账户名称,用来指代用助记词生成私钥/公钥对的Cosmos账户。在您发起交易时这个账户名称被用来识别您的账户。
- 您可以通过增加 `--account` 标志来指定您账户生成的路径 (`0`, `1`, `2`, ...) `0` 是缺省值。
#### 使用电脑设备进行操作
::: 警告
**注意:在一台没有联网的电脑上操作会更加安全**
:::
然后,通过以下命令创建账户:
```bash
gaiacli keys add <yourKeyName>
```
这个命令会产生一个24个词的助记词组并且同时保存账户 `0` 的私钥和公钥。 另外,您还需要输入一个密码来对您硬盘上账户`0`的私钥进行加密。 每次您发出一笔交易时都将需要输入这个密码。如果您丢失了密码,您可以通过助记词来恢复您的私钥。
::: 危险提示
**千万不要丢失或者告诉其他人你的12个词的助记词组。 为了防止资产被盗或者丢失,您最好多备份几份助记词, 并且把它们存放在只有您知道的安全地方,如果有人取得您的助记词,那么他也就取得了您的私钥并且可以控制相关账户。**
:::
::: 警告
在确认已经安全保存好您的助记词以后至少3遍你可以用如下命令清除终端窗口中的命令历史记录以防有人通过历史记录获得您的助记词。
```bash
history -c
rm ~/.bash_history
```
:::
你可以用以下命令使用助记词生成多个账户:
```bash
gaiacli keys add <yourKeyName> --recover --account 1
```
- - `<yourKeyName>` 是账户名称,用来指代用助记词生成私钥/公钥对的Cosmos账户。在您发起交易时这个账户名称用来识别您的账户。
- 您可以通过增加 `--account` 标志来指定您账户生成的路径 (`0`, `1`, `2`, ...) `0` 是缺省值。
这条命令需要您输入一个密码。改变账号就代表生成了一个新的账户。
## 访问Cosmos Hub网络
为了查询网络状态和发起交易你需要通过自建一个全节点或者连接到其他人的全节点访问Cosmos Hub网络
::: 警告
**注意: 请不要与任何人分享您的助记词,您是唯一需要知道这些助记词的人。如果任何人通过邮件或者其他社交媒体向您要求您提供您的助记词,那就需要警惕了。 请记住Cosmos/Tendermint团队或跨链基金会永远不会通过邮件要求您提供您的账户密码或助记词。**
:::
### 运行您自己的全节点
这是最安全的途径但需要相当多的资源。您需要有较大的带宽和至少1TB的磁盘容量来运行一个全节点。
`gaia`的安装教程在[这里](https://cosmos.network/docs/gaia/installation.html) 如何运行一个全节点指导在[这里](https://cosmos.network/docs/gaia/join-testnet.html)
### 连接到一个远程全节点
如果您不想或没有能力运行一个全节点,您也可以连接到其他人的全节点。您需要谨慎的选择一个可信的运营商,因为恶意的运营商往往会向您反馈错误的查询结果,或者对您的交易进行监控。 然而,他们永远也无法盗取您的资产,因为您的私钥仅保持在您的本地计算机或者钱包设备中。 验证人,钱包供应商或者交易所是可以提供全节点的运营商。
连接到其他人提供的全节点,你需要一个全节点地址,如`https://77.87.106.33:26657`。这个地址是您的供应商提供的一个可信的接入地址。你会在下一节中用到这个地址。
## 设置 `gaiacli`
::: 提示
**在开始设置 `gaiacli`前,请确认你已经可以[访问Cosmos Hub网络](#访问cosmos-hub网络)**
:::
::: 警告
**请确认您使用的`gaiacli`是最新的稳定版本**
:::
无论您是否在自己运行一个节点,`gaiacli` 都可以帮您实现与Cosmos Hub网络的交互。让我们来完成对它的配置。
您需要用下面的命令行完成对`gaiacli`的配置:
```bash
gaiacli config <flag> <value>
```
此命名允许您为每个参数设置缺省值。
首先,设置你想要访问的全节点的地址:
```bash
gaiacli config node <host>:<port
// 样例: gaiacli config node https://77.87.106.33:26657
```
如果你是自己运行全节点,可以使用 `tcp://localhost:26657` 作为地址。
然后,让我们设置 `--trust-node` 指标的缺省值。
```bash
gaiacli config trust-node false
// Set to true if you run a light-client node, false otherwise
```
最后,让我们设置需要访问区块链的 `chain-id`
```bash
gaiacli config chain-id gos-6
```
## 状态查询
::: 提示
** 准备抵押ATOM通证和取回奖励前需要先完成 [`gaiacli` 配置](#设置-gaiacli)**
:::
`gaiacli` 可以帮助您获得所有区块链的相关信息, 比如账户余额,抵押通证数量,奖励,治理提案以及其他信息。下面是一组用于委托操作的命令
```bash
// 查询账户余额或者其他账户相关信息
gaiacli query account
// 查询验证人列表
gaiacli query staking validators
// 查询指定地址的验证人的信息(e.g. cosmosvaloper1n5pepvmgsfd3p2tqqgvt505jvymmstf6s9gw27)
gaiacli query staking validator <validatorAddress>
//查询指定地址的验证人相关的所有委托信息 (e.g. cosmos10snjt8dmpr5my0h76xj48ty80uzwhraqalu4eg)
gaiacli query staking delegations <delegatorAddress>
// 查询从一个指定地址的委托人(e.g. cosmos10snjt8dmpr5my0h76xj48ty80uzwhraqalu4eg)和一个指定地址的验证人(e.g. cosmosvaloper1n5pepvmgsfd3p2tqqgvt505jvymmstf6s9gw27) 之间的委托交易
gaiacli query staking delegation <delegatorAddress> <validatorAddress>
// 查询一个指定地址的委托人(e.g. cosmos10snjt8dmpr5my0h76xj48ty80uzwhraqalu4eg)所能获得的奖励情况
gaiacli query distr rewards <delegatorAddress>
// 查询所有现在正等待抵押的提案
gaiacli query gov proposals --status deposit_period
//查询所有现在正等待投票的填
gaiacli query gov proposals --status voting_period
// 查询一个指定propsalID的提案信息
gaiacli query gov proposal <proposalID>
```
需要了解跟多的命令,只需要用:
```bash
gaiacli query
```
对于每条命令,您都可以使用`-h` 或 `--help` 参数来获得更多的信息。
## 发起交易
### 关于gas费和手续费
Cosmos Hub网络上的交易在被执行时需要支付手续费。这个手续费是用于支付执行交易所需的gas。计算公式如下
```
fees = gas * gasPrices
```
`gas` 的多少取决于交易类型,不同的交易类型会收取不同的 `gas` 。每个交易的 `gas` 费是在实际执行过程中计算的,但我们可以通过设置 `gas` 参数中的 `auto` 值实现在交易前对 `gas` 费的估算,但这只是一个粗略的估计,你可以通过 `--gas-adjustment` (缺省值 `1.0`) 对预估的`gas` 值进行调节,以确保为交易支付足够的`gas` 。
`gasPrice` 用于设置单位 `gas` 的价格。每个验证人会设置一个最低gas价`min-gas-price`, 并只会将`gasPrice`大于`min-gas-price`的交易打包。
交易的`fees` 是`gas` 和 `gasPrice`的乘积。作为一个用户你需要输入3个参数中至少2个 `gasPrice`/`fees`的值越大,您的交易就越有机会被打包执行。
### 抵押Atom通证 & 提取奖励
::: 提示
**在您抵押通证或取回奖励之前,您需要完成[`gaiacli` 设置](#设置-gaiacli) 和 [创建账户](#创建一个账户)**
:::
::: 警告
**在抵押通证前,请仔细阅读[委托者常见问题](https://cosmos.network/resources/delegators) 并且理解其中的风险和责任**
:::
::: 警告
**注意:执行以下命令需要在一台联网的计算机。用一个硬件钱包设备执行这些命令会更安全。关于离线交易过程请看[这里](#从一台离线电脑上签署交易).**
:::
```bash
// 向指定验证人绑定一定数量的Atom通证
// 参数设定样例: <validatorAddress>=cosmosvaloper18thamkhnj9wz8pa4nhnp9rldprgant57pk2m8s, <amountToBound>=10000000000uatom, <gasPrice>=1000uatom
gaiacli tx staking delegate <validatorAddress> <amountToBond> --from <delegatorKeyName> --gas auto --gas-prices <gasPrice>
// 提取所有的奖励
// 参数设定样例: <gasPrice>=1000uatom
gaiacli tx distr withdraw-all-rewards --from <delegatorKeyName> --gas auto --gas-prices <gasPrice>
// 向指定验证人申请解绑一定数量的Atom通证
// 解绑的通证需要3周后才能完全解绑并可以交易
// 参数设定样例: <validatorAddress>=cosmosvaloper18thamkhnj9wz8pa4nhnp9rldprgant57pk2m8s, <amountToUnbound>=10000000000uatom, <gasPrice>=1000uatom
gaiacli tx staking unbond <validatorAddress> <amountToUnbond> --from <delegatorKeyName> --gas auto --gas-prices <gasPrice>
```
::: 提示
:::
如果您是使用一个联网的钱包设备,在交易被广播到网络前您需要在设备上确认交易。
确认您的交易已经发出,可以用以下查询:
```bash
// 您的账户余额在您抵押Atom通证或者取回奖励后会发生变化
gaiacli query account
// 您在抵押后应该能查到委托交易
gaiacli query staking delegations <delegatorAddress>
// 如果交易已经被打包将会返回交易记录tx
// 在以下查询命令中可以使用显示的交易哈希值作为参数
gaiacli query tx <txHash>
```
如果您是连接到一个可信全节点的话,您可以通过一个区块链浏览器做检查。
## 参与链上治理
#### 链上治理入门
Cosmos Hub有一个内建的治理系统该系统允许抵押通证的持有人参与提案投票。系统现在支持3种提案类型
- `Text Proposals`: 这是最基本的一种提案类型,通常用于获得大家对某个网络治理意见的观点。
- `Parameter Proposals`: 这种提案通常用于改变网络参数的设定。
- `Software Upgrade Proposal`: 这个提案用于升级Hub的软件。
任何Atom通证的持有人都能够提交一个提案。为了让一个提案获准公开投票提议人必须要抵押一定量的通证 `deposit`,且抵押值必须大于 `minDeposit` 参数设定值. 提案的抵押不需要提案人一次全部交付。如果早期提案人交付的 `deposit` 不足,那么提案进入 `deposit_period` 状态。 此后,任何通证持有人可以通过 `depositTx` 交易增加对提案的抵押。
当`deposit` 达到 `minDeposit`提案进入2周的 `voting_period` 。 任何**抵押了通证**的持有人都可以参与对这个提案的投票。投票的选项有`Yes`, `No`, `NoWithVeto``Abstain`。投票的权重取决于投票人所抵押的通证数量。如果通证持有人不投票,那么委托人将继承其委托的验证人的投票选项。当然,委托人也可以自己投出与所委托验证人不同的票。
当投票期结束后获得50%(不包括投`Abstain `票)以上 `Yes` 投票权重且少于33.33% 的`NoWithVeto`(不包括投`Abstain `票)提案将被接受,
#### 实践练习
::: 提示
**在您能够抵押通证或者提取奖励以前,您需要了解[通证抵押](#抵押atom通证--提取奖励)**
:::
::: 警告
**注意:执行以下命令需要一台联网的计算机。用一个硬件钱包设备执行这些命令会更安全。关于离线交易过程请看[这里](#从一台离线电脑上签署交易).**
:::
```bash
// 提交一个提案
// <type>=text/parameter_change/software_upgrade
// ex value for flag: <gasPrice>=100uatom
gaiacli tx gov submit-proposal --title "Test Proposal" --description "My awesome proposal" --type <type> --deposit=10000000uatom --gas auto --gas-prices <gasPrice> --from <delegatorKeyName>
// 增加对提案的抵押
// Retrieve proposalID from $gaiacli query gov proposals --status deposit_period
// 通过 $gaiacli query gov proposals --status deposit_period 命令获得 `proposalID`
// 参数设定样例: <deposit>=1000000uatom
gaiacli tx gov deposit <proposalID> <deposit> --gas auto --gas-prices <gasPrice> --from <delegatorKeyName>
// 对一个提案投票
// Retrieve proposalID from $gaiacli query gov proposals --status voting_period
通过 $gaiacli query gov proposals --status deposit_period 命令获得 `proposalID`
// <option>=yes/no/no_with_veto/abstain
gaiacli tx gov vote <proposalID> <option> --gas auto --gas-prices <gasPrice> --from <delegatorKeyName>
```
### 从一台离线电脑上签署交易
如果你没有数字钱包设备,而且希望和一台存有私钥的没有联网的电脑进行交互,你可以使用如下过程。首先,在**联网的电脑上**生成一个没有签名的交易,然后通过下列命令操作(下面以抵押交易为例):
```bash
// 抵押Atom通证
// 参数设定样例: <amountToBound>=10000000000uatom, <bech32AddressOfValidator>=cosmosvaloper18thamkhnj9wz8pa4nhnp9rldprgant57pk2m8s, <gasPrice>=1000uatom
gaiacli tx staking delegate <validatorAddress> <amountToBond> --from <delegatorKeyName> --gas auto --gas-prices <gasPrice> --generate-only > unsignedTX.json
```
然后,复制 `unsignedTx.json` 并且帮它转移到没有联网的电脑上比如通过U盘。如果没有在没联网的电脑上建立账户可先[在没有联网的电脑上建立账户](#使用电脑设备进行操作)。为了进一步保障安全,你可以在签署交易前用以下命令对参数进行检查。
```bash
cat unsignedTx.json
```
现在,通过以下命令对交易签名:
```bash
gaiacli tx sign unsignedTx.json --from-addr <delegatorAddr>> signedTx.json
```
复制 `signedTx.json` 并转移回联网的那台电脑。最后,用以下命令向网络广播交易。
```bash
gaiacli tx broadcast signedTx.json
```

View File

@ -1,258 +0,0 @@
# 部署你自己的测试网
这篇文章介绍了三种创建`gaiad`节点的测试网的方式,每种针对不同的使用场景:
1. 单节点,本地的,手动的测试网
2. 多节点,本地的,自动的测试网
3. 多节点,远程的,自动的测试网
支持代码可以在[networks目录](https://github.com/cosmos/cosmos-sdk/tree/develop/networks)中找到,还可以在`local`或`remote`子目录中找到。
> 注意:`remote`网络引导教程可能与最新版本不同步,不可完全依赖。
## 可获取的Docker镜像
如果你需要使用或部署gaia作为容器你可以跳过`build`步骤并使用官方镜像,$TAG标识你感兴趣的版本
+ `docker run -it -v ~/.gaiad:/root/.gaiad -v ~/.gaiacli:/root/.gaiacli tendermint:$TAG gaiad init`
+ `docker run -it -p 26657:26657 -p 26656:26656 -v ~/.gaiad:/root/.gaiad -v ~/.gaiacli:/root/.gaiacli tendermint:$TAG gaiad start`
+ ...
+ `docker run -it -v ~/.gaiad:/root/.gaiad -v ~/.gaiacli:/root/.gaiacli tendermint:$TAG gaiacli version`
相同的镜像也可以用于构建你自己的docker-compose栈
## 单节点,本地的,手动的测试网
本教程可帮助你创建一个在本地运行网络的验证人节点,以进行测试和其他相关的用途。
### 需要
+ [安装gaia](./installation.md)
+ [安装`jq`](https://stedolan.github.io/jq/download/)(可选的)
### 创建genesis文件并启动网络
```bash
# You can run all of these commands from your home directory
cd $HOME
# Initialize the genesis.json file that will help you to bootstrap the network
gaiad init --chain-id=testing testing
# Create a key to hold your validator account
gaiacli keys add validator
# Add that key into the genesis.app_state.accounts array in the genesis file
# NOTE: this command lets you set the number of coins. Make sure this account has some coins
# with the genesis.app_state.staking.params.bond_denom denom, the default is staking
gaiad add-genesis-account $(gaiacli keys show validator -a) 1000000000stake,1000000000validatortoken
# Generate the transaction that creates your validator
gaiad gentx --name validator
# Add the generated bonding transaction to the genesis file
gaiad collect-gentxs
# Now its safe to start `gaiad`
gaiad start
```
启动将会把`gaiad`相关的所有数据放在`~/.gaiad`目录。你可以检查所创建的genesis文件——`~/.gaiad/config/genesis.json`。同时`gaiacli`也已经配置完成并且有了一个拥有token的账户(stake和自定义的代币)。
## 多节点,本地的,自动的测试网
在[networks/local目录](https://github.com/cosmos/cosmos-sdk/tree/develop/networks/local)中运行如下命令:
### 需要
+ [安装gaia](./installation.md)
+ [安装docker](https://docs.docker.com/install/)
+ [安装docker-compose](https://docs.docker.com/compose/install/)
### 编译
编译`gaiad`二进制文件(linux)和运行`localnet`命令所需的`tendermint/gaianode` docker images。这个二进制文件将被安装到container中并且可以更新重建image因此您只需要构建一次image。
```
# Work from the SDK repo
cd $GOPATH/src/github.com/cosmos/cosmos-sdk
# Build the linux binary in ./build
make build-linux
# Build tendermint/gaiadnode image
make build-docker-gaiadnode
```
### 运行你的测试网
运行一个拥有4个节点的测试网络:
```bash
make localnet-start
```
此命令使用gaiadnode image创建了一个4节点网络。每个节点的端口可以在下表中找到
| `Node ID` | `P2P Port` | `RPC Port` |
| ----- | ----- | ---- |
| `gaianode0` | `26656` | `26657` |
| `gaianode1` | `26659` | `26660` |
| `gaianode2` | `26661` | `26662` |
| `gaianode3` | `26663` | `26664` |
更新可执行程序,只需要重新编译并重启节点:
```bash
make build-linux localnet-start
```
### 配置
`make localnet-start`命令通过调用`gaiad testnet`命令在`./build`中创建了一个4节点测试网络的文件。输出`./build`目录下一些文件:
```bash
$ tree -L 2 build/
build/
├── gaiacli
├── gaiad
├── gentxs
│ ├── node0.json
│ ├── node1.json
│ ├── node2.json
│ └── node3.json
├── node0
│ ├── gaiacli
│ │ ├── key_seed.json
│ │ └── keys
│ └── gaiad
│ ├── ${LOG:-gaiad.log}
│ ├── config
│ └── data
├── node1
│ ├── gaiacli
│ │ └── key_seed.json
│ └── gaiad
│ ├── ${LOG:-gaiad.log}
│ ├── config
│ └── data
├── node2
│ ├── gaiacli
│ │ └── key_seed.json
│ └── gaiad
│ ├── ${LOG:-gaiad.log}
│ ├── config
│ └── data
└── node3
├── gaiacli
│ └── key_seed.json
└── gaiad
├── ${LOG:-gaiad.log}
├── config
└── data
```
每个`./build/nodeN`目录被挂载到对应container的`/gaiad`目录。
### 日志输出
日志被保存在每个`./build/nodeN/gaiad/gaia.log`文件中。你也可以直接通过Docker来查看日志
```bash
docker logs -f gaiadnode0
```
### 密钥&账户
你需要使用指定节点的`gaiacli`目录作为你的`home`来同`gaiacli`交互,并执行查询或者创建交易:
```bash
gaiacli keys list --home ./build/node0/gaiacli
```
现在账户已经存在了,你可以创建新的账户并向其发送资金!
::: 提示
注意:每个节点的密钥种子放在`./build/nodeN/gaiacli/key_seed.json`中,可以通过`gaiacli keys add --restore`命令来回复。
:::
### 特殊的可执行程序
如果你拥有多个不同名称的可执行程序则可以使用BINARY环境变量指定要运行的可执行程序。可执行程序的路径是相对于挂载的卷。例如
```
# Run with custom binary
BINARY=gaiafoo make localnet-start
```
## 多节点,远程的,自动的测试网
应该从[networks目录](https://github.com/cosmos/cosmos-sdk/tree/develop/networks)运行下面的命令。
### Terraform & Ansible
使用[Terraform](https://www.terraform.io/)在AWS上创建服务器然后用[Ansible](https://www.ansible.com/)创建并管理这些服务器上的测试网来完成自动部署。
### 前提
+ 在一台Linux机器上安装[Terraform](https://www.terraform.io/downloads.html)和[Ansible](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html)
+ 创建一个具有EC2实例创建能力的[ASW API token](https://docs.aws.amazon.com/general/latest/gr/managing-aws-access-keys.html)
+ 创建SSH密钥
```
export AWS_ACCESS_KEY_ID="2345234jk2lh4234"
export AWS_SECRET_ACCESS_KEY="234jhkg234h52kh4g5khg34"
export TESTNET_NAME="remotenet"
export CLUSTER_NAME= "remotenetvalidators"
export SSH_PRIVATE_FILE="$HOME/.ssh/id_rsa"
export SSH_PUBLIC_FILE="$HOME/.ssh/id_rsa.pub"
```
`terraform`和`ansible`都会使用到。
### 创建一个远程网络
```
SERVERS=1 REGION_LIMIT=1 make validators-start
```
测试网络的名称将由`--chain-id`定义集群的名称则是AWS中服务器管理标识。该代码将在每个可用区中创建服务器数量的服务器最多为REGION_LIMIT从us-east-2开始。us-east-1被排除在外下面的BaSH脚本也是如此但更便于输入。
```
./new-testnet.sh "$TESTNET_NAME" "$CLUSTER_NAME" 1 1
```
### 快速查询状态入口
```
make validators-status
```
### 删除服务器
```
make validators-stop
```
### 日志输出
你可以将日志发送到Logz.io一个Elastic栈Elastic搜索Logstash和Kibana服务提供商。你可以将节点设置为自动登录。创建一个帐户并从此页面上的说明中获取你的API密钥然后
```
yum install systemd-devel || echo "This will only work on RHEL-based systems."
apt-get install libsystemd-dev || echo "This will only work on Debian-based systems."
go get github.com/mheese/journalbeat
ansible-playbook -i inventory/digital_ocean.py -l remotenet logzio.yml -e LOGZIO_TOKEN=ABCDEFGHIJKLMNOPQRSTUVWXYZ012345
```
### 监控
你可以安装DataDog代理
```
make datadog-install
```

View File

@ -1,833 +0,0 @@
# Gaia客户端
## Gaia CLI
`gaiacli`是一个工具,使您能够与 Cosmos Hub 网络中的节点进行交互,无论您是否自己运行它。 让我们恰当的设置它。 要安装它,请按照[安装步骤](./ installation.md)进行安装。
### 配置 gaiacli
设置`gaiacli`的主要命令如下:
```bash
gaiacli config <flag> <value>
```
该命令能为每个标志设置默认值。
首先,设置要连接的全节点的地址:
```bash
gaiacli config node <host>:<port
# example: gaiacli config node https://77.87.106.33:26657
```
如果您运行自己的全节点,只需使用`tcp://localhost:26657`地址即可。
然后,让我们设置`--trust-node`标志的默认值:
```bash
gaiacli config trust-node true
# Set to true if you trust the full-node you are connecting to, false otherwise
```
最后,设置我们想要与之交互链的`chain-id`
```bash
gaiacli config chain-id cosmoshub-2
```
### Key
#### Key类型
有如下类型的key
+ `cosmos`
+ 从通过`gaiacli keys add`生成的账户私钥中产生
+ 用于接收资金
+ 例如 `cosmos15h6vd5f0wqps26zjlwrc6chah08ryu4hzzdwhc`
+ `cosmosvaloper`
+ 用于关联一个验证人和其操作者
+ 用于发起staking操作命令
+ 例如 `cosmosvaloper1carzvgq3e6y3z5kz5y6gxp3wpy3qdrv928vyah`
+ `cosmospub`
+ 从通过`gaiacli keys add`生成的账户私钥中产生
+ 例如 `cosmospub1zcjduc3q7fu03jnlu2xpl75s2nkt7krm6grh4cc5aqth73v0zwmea25wj2hsqhlqzm`
+ `cosmosvalconspub`
+ 在使用`gaiad init`创建节点时生成
+ 使用`gaiad tendermint show-validator`获得该值
+ 例如 `cosmosvalconspub1zcjduepq0ms2738680y72v44tfyqm3c9ppduku8fs6sr73fx7m666sjztznqzp2emf`
#### 生成 Key
你需要一个帐户的私钥公钥对(分别称作`sk``pk`)才能接收资金,发送交易,绑定交易等等。
生成一个新的*secp256k1*密钥:
```bash
gaiacli keys add <account_name>
```
接下来,你必须创建一个密码来保护磁盘上的密钥。上述命令的输出将包含种子短语。建议将种子短语保存在安全的地方,以便在忘记密码的情况下,最终可以使用以下命令从种子短语重新生成密钥:
```bash
gaiacli keys add --recover
```
如果你检查你的私钥,你会看到`<account_name>` :
```bash
gaiacli keys show <account_name>
```
通过下面的命令查看验证人操作者的地址:
```bash
gaiacli keys show <account_name> --bech=val
```
你可以查看你所有的可以使用的密钥:
```bash
gaiacli keys list
```
查看你节点的验证人公钥:
```bash
gaiad tendermint show-validator
```
请注意这是Tendermint的签名密钥而不是你在委托交易中使用的操作员密钥。
::: danger Warning
我们强烈建议不要对多个密钥使用相同的密码。Tendermint 团队和 Interchain Foundation 将不承担资金损失的责任。
:::
#### 生成多签公钥
你可以生成一个多签公钥并将其打印:
```bash
gaiacli keys add --multisig=name1,name2,name3[...] --multisig-threshold=K new_key_name
```
`K`是将要对多签公钥发起的交易进行签名的最小私钥数。
`--multisig`标识必须包含要将组合成一个公钥的那些子公钥的名称,该公钥将在本地数据库中生成并存储为`new_key_name`。通过`--multisig`提供的所有名称必须已存在于本地数据库中。除非设置了`--nosort`标识,否则在命令行上提供密钥的顺序无关紧要,即以下命令生成两个相同的密钥:
```bash
gaiacli keys add --multisig=foo,bar,baz --multisig-threshold=2 multisig_address
gaiacli keys add --multisig=baz,foo,bar --multisig-threshold=2 multisig_address
```
多签地址也可以在运行中生成并通过以下命令打印:
```bash
gaiacli keys show --multisig-threshold K name1 name2 name3 [...]
```
有关如何生成多签帐户,使用其签名和广播多签交易的详细信息,请参阅[多签交易](#多签交易)
### Tx 广播
在广播交易时,`gaiacli`接受`--broadcast-mode`标识。 这个标识的值可以是`sync`(默认值)、`async`或`block`,其中`sync`使客户端返回 CheckTx 响应,`async`使客户端立即返回,而`block`使得 客户端等待 tx 被提交(或超时)。
值得注意的是,在大多数情况下**不**应该使用`block`模式。 这是因为广播可以超时但是 tx 仍然可能存在在块中,这可能导致很多不良结果。 因此,最好使用`sync`或`async`并通过 tx hash 查询以确定 tx 何时包含在块中。
### Fees 和 Gas
每笔交易可能会提供 fees 或 gas price但不能同时提供。
验证人可以配置最低 gas price多币种的并且在决定它们是否能被包含在区块中的`CheckTx`期间使用改值,其中 `gasPrices >= minGasPrices`。请注意,你的交易必须提供大于或等于验证人要求的任何接受币种的费用。
**注意**:有了这样的机制,验证人可能会开始在 mempool 中通过 gasPrice 来优先处理某些 txs因此提供更高 fee 或 gas price可能会产生更高的tx优先级。
比如:
```bash
gaiacli tx send ... --fees=50000uatom
```
或:
```bash
gaiacli tx send ... --gas-prices=0.025uatom
```
### 账户
#### 获取 Token
获取token的最佳方式是通过[Cosmos测试网水龙头](https://faucetcosmos.network)。如果水龙头对你不生效,尝试在[#cosmos-validator](https://riot.im/app/#/room/#cosmos-validators:matrix.org)上向人索要。水龙头需要你打算用于抵押股权的`cosmos`开头的地址。
#### 查询账户余额
在你的地址收到token后你可以通过以下命令查看账户的余额
```bash
gaiacli query account <account_cosmos>
```
::: warning Note
当你查询余额为零的帐户时,你将收到以下错误:`No account with address <account_cosmos> was found in the state.` 如果你在节点与区块链完全同步之前就查询,也会发生这种情况。这些都很正常。
:::
#### 发送 Token
你可以通过如下命令从一个账户发送资金到另一个账户:
```bash
gaiacli tx send <destination_cosmos> 10faucetToken \
--chain-id=<chain_id> \
--from=<key_name>
```
::: warning Note
`--amount`标识接收格式:`--amount=<value|coin_name>`
:::
::: tip Note
你可能希望通过`--gas`标识限制交易可以消耗的最大燃料。如果你通过`--gas=auto`将在执行交易前自动估gas。gas估算可能是不准确的因为状态变化可能发生在模拟结束和交易的实际执行之间因此在原始估计之上应用调整以确保能够成功地广播交易。可以通过`--gas-adjustment`标识控制调整其默认值为1.0。
:::
现在,查看源账户和目标账户的更新后的余额:
```bash
gaiacli query account <account_cosmos>
gaiacli query account <destination_cosmos>
```
你还可以使用`--block`标识查询在特定高度区块下你的余额:
```bash
gaiacli query account <account_cosmos> --block=<block_height>
```
你可以通过在命令行中附加`--dry-run`标识来模拟交易而不实际广播它:
```bash
gaiacli tx send <destination_cosmosaccaddr> 10faucetToken \
--chain-id=<chain_id> \
--from=<key_name> \
--dry-run
```
此外,你可以通过将`--generate-only`附加到命令行参数列表来构建交易并将其JSON格式打印到STDOUT
```bash
gaiacli tx send <destination_cosmosaccaddr> 10faucetToken \
--chain-id=<chain_id> \
--from=<key_name> \
--generate-only > unsignedSendTx.json
```
```bash
gaiacli tx sign \
--chain-id=<chain_id> \
--from=<key_name>
unsignedSendTx.json > signedSendTx.json
```
::: tip Note
标识 `--generate-only` 只能在访问本地 keybase 时使用。
:::
你可以通过下面的命令验证交易的签名:
```bash
gaiacli tx sign --validate-signatures signedSendTx.json
```
你可以将由JSON文件提供的已签名的交易广播至指定节点
```bash
gaiacli tx broadcast --node=<node> signedSendTx.json
```
### 查询交易
#### 匹配一组tag
你可以使用交易搜索命令查询与每个交易上添加的特定`标签集`匹配的交易。
每个标签都由`<tag>:<value>`形式的键值对形成。还可以使用``符号组合标签来查询更具体的结果。
使用`标签`查询交易的命令如下:
```bash
gaiacli query txs --tags='<tag>:<value>'
```
使用多个`标签`:
```bash
gaiacli query txs --tags='<tag1>:<value1>&<tag2>:<value2>'
```
通过`page`和`limit`来实现分页:
```bash
gaiacli query txs --tags='<tag>:<value>' --page=1 --limit=20
```
::: tip 注意
action标签始终等于相关message的`Type()`函数返回的消息类型。
你可以在每个SDK的模块中找到目前的标签列表
- [Common tags](https://github.com/cosmos/cosmos-sdk/blob/d1e76221d8e28824bb4791cb4ad8662d2ae9051e/types/tags.go#L57-L63)
- [Staking tags](https://github.com/cosmos/cosmos-sdk/blob/d1e76221d8e28824bb4791cb4ad8662d2ae9051e/x/staking/tags/tags.go#L8-L24)
- [Governance tags](https://github.com/cosmos/cosmos-sdk/blob/d1e76221d8e28824bb4791cb4ad8662d2ae9051e/x/gov/tags/tags.go#L8-L22)
- [Slashing tags](https://github.com/cosmos/cosmos-sdk/blob/d1e76221d8e28824bb4791cb4ad8662d2ae9051e/x/slashing/handler.go#L52)
- [Distribution tags](https://github.com/cosmos/cosmos-sdk/blob/develop/x/distribution/tags/tags.go#L8-L17)
- [Bank tags](https://github.com/cosmos/cosmos-sdk/blob/d1e76221d8e28824bb4791cb4ad8662d2ae9051e/x/bank/keeper.go#L193-L206)
:::
#### 匹配一笔交易的hash
你一可以通过指定hash值查询该笔交易
```bash
gaiacli query tx [hash]
```
### Slashing
#### Unjailing
将你入狱的验证人释放出狱:
```bash
gaiacli tx slashing unjail --from <validator-operator-addr>
```
#### Signing Info
检索一个验证人的签名信息:
```bash
gaiacli query slashing signing-info <validator-pubkey>
```
#### 查询参数
你可以查询当前的slashing参数
```bash
gaiacli query slashing params
```
### Staking
#### 设置一个验证人
有关如何设置验证人候选者的完整指南,请参阅[验证人设置]()章节
#### 向一个验证人委托
一旦主网上线,你可以把`atom`委托给一个验证人。这些委托人可以收到部分验证人的收益。阅读[Cosmos Token Model](https://github.com/cosmos/cosmos/raw/master/Cosmos_Token_Model.pdf)了解更多信息。
#### 查询验证人
你可以查询指定链的验证人:
```bash
gaiacli query staking validators
```
如果你想要获得单个验证人的信息,你可以使用下面的命令:
```bash
gaiacli query staking validator <account_cosmosval>
```
#### 绑定 Token
在Cosmos Hub主网中我们绑定`uatom``1atom = 1000000uatom`。你可以把token绑定在一个测试网验证人节点上即委托
```bash
gaiacli tx staking delegate \
--amount=10000000uatom \
--validator=<validator> \
--from=<key_name> \
--chain-id=<chain_id>
```
`<validator>`是你要委托的验证人的操作者地址。如果你运行的是本地testnet可以通过以下方式找到
```bash
gaiacli keys show [name] --bech val
```
其中`[name]`是初始化`gaiad`时指定的键的名称。
虽然token是绑定的但它们与网络中的所有其他绑定的token汇集在一起。验证人和委托人获得一定比例的股权这些股权等于他们在这个资产池中的抵押。
#### 查询委托
一旦提交了一笔对验证人的委托,你可以使用下面的命令查看委托详情:
```bash
gaiacli query staking delegation <delegator_addr> <validator_addr>
```
或者你想查看所有当前的委托:
```bash
gaiacli query staking delegations <delegator_addr>
```
你还可以通过添加`--height`标识来获取先前的委托状态。
#### 解绑 Token
如果出于一些原因验证人行为异常或者你想解绑一定数量的token请使用以下命令。
```bash
gaiacli tx staking unbond \
<validator_addr> \
10atom \
--from=<key_name> \
--chain-id=<chain_id>
```
经过解绑期后,解绑自动完成。
#### 查询Unbonding-Delegations
一旦你开始了一笔unbonding-delegation你可以使用以下命令查看信息
```bash
gaiacli query staking unbonding-delegation <delegator_addr> <validator_addr>
```
或者你可以查看当前你所有的unbonding-delegation:
```bash
gaiacli query staking unbonding-delegations <account_cosmos>
```
此外你可以从特定验证人获取所有unbonding-delegation
```bash
gaiacli query staking unbonding-delegations-from <account_cosmosval>
```
要获取指定区块时的unbonding-delegation状态请尝试添加`--height`标识。
#### 重新委托token
重新授权是一种委托类型允许你将非流动token从一个验证人上绑定到另一个验证人
```bash
gaiacli tx staking redelegate \
<src-validator-operator-addr> \
<dst-validator-operator-addr> \
10atom \
--from=<key_name> \
--chain-id=<chain_id>
```
这里,你还可以使用`shares-amount`或`shares-fraction`标识重新委托。
经过解绑期后,重新委托自动完成。
#### 查询重新委托
开始重新授权后,你可以使用以下命令查看其信息:
```bash
gaiacli query staking redelegation <delegator_addr> <src_val_addr> <dst_val_addr>
```
或者如果你可以检查所有当前的unbonding-delegation
```bash
gaiacli query staking redelegations <account_cosmos>
```
此外,你可以查询某个特定验证人的所有转出的重新绑定:
```bash
gaiacli query staking redelegations-from <account_cosmosval>
```
添加`--height`标识来查询之前某个特定区块的redelegation。
#### 查询参数
参数定义了staking的高级参数。你可以使用以下方法获取
```bash
gaiacli query staking params
```
使用上面的命令,你将获得以下值:
+ unbonding时间
+ 验证人的最大数量
+ 用于抵押的币种
所有这些值都将通过对一个`ParameterChange`提案的`governance`流程进行更新。
#### 查询抵押池
一个抵押池定义了当前状态的动态参数。你可以通过以下命令查询:
```bash
gaiacli query staking pool
```
使用`pool`命令,你将获得以下值:
+ 未绑定和已绑定的token
+ token总量
+ 当前的年度通货膨胀率以及上次发生通货膨胀的区块
+ 最后记录的绑定股权
#### 查询对验证人的绑定
你可以查询对某个验证人的所有绑定:
```bash
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模块[规范]()。
#### 创建一个治理提案
要创建治理提案,您必须提交初始抵押以及标题和说明。治理之外的其它模块可以实现自己的提议类型和处理程序(例如:参数更改),其中治理模块本身支持`Text`提议。治理之外的任何模块都将命令绑定在`submit-proposal`上。
提交一个文本类型的提案:
```bash
gaiacli tx gov submit-proposal \
--title=<title> \
--description=<description> \
--type="Text" \
--deposit="1000000uatom" \
--from=<name> \
--chain-id=<chain_id>
```
您也可以直接通过`--proposal`指向包含提案的 JSON 文件。
要提交更改参数的提案,您必须提供提案文件,因为其内容对 CLI 输入不太友好:
```bash
gaiacli tx gov submit-proposal param-change <path/to/proposal.json> \
--from=<name> \
--chain-id=<chain_id>
```
其中`proposal.json`包含以下内容:
```json
{
"title": "Param Change",
"description": "Update max validators",
"changes": [
{
"subspace": "staking",
"key": "MaxValidators",
"value": 105
}
],
"deposit": [
{
"denom": "stake",
"amount": "10000000"
}
]
}
```
::: danger Warning
Currently parameter changes are _evaluated_ but not _validated_, so it is very important
that any `value` change is valid (ie. correct type and within bounds) for its
respective parameter, eg. `MaxValidators` should be an integer and not a decimal.
Proper vetting of a parameter change proposal should prevent this from happening
(no deposits should occur during the governance process), but it should be noted
regardless.
目前,参数更改已经过*评估*但未*经过验证*,因此`value`对于其相应参数,任何更改都是有效的(即正确类型和边界内)非常重要,例如 `MaxValidators` 应该是整数而不是小数。
正确审查参数变更提案应该可以防止这种情况发生(在治理过程中不会发生抵押),但无论如何都应该注意。
:::
::: tip Note
目前不支持`SoftwareUpgrade`,因为它没有实现,目前与`Text`提议的语义没有区别。
:::
#### 查询提案
一旦创建,你就可以查询提案的信息:
```bash
gaiacli query gov proposal <proposal_id>
```
或者查询所有的有效提案:
```bash
gaiacli query gov proposals
```
你还可以使用`voter`或`depositor`标识来过滤查询提案。
要查询特定提案的提议人:
```bash
gaiacli query gov proposer <proposal_id>
```
#### 增加存入金
为了将提案广播到网络,存入的金额必须高于`minDeposit`值(初始值:`10steak`)。如果你之前创建的提案不符合此要求,你仍可以增加存入的总金额以激活它。达到最低存入金后,提案进入投票期:
```bash
gaiacli tx gov deposit <proposal_id> "10000000uatom" \
--from=<name> \
--chain-id=<chain_id>
```
> 注意:达到`MaxDepositPeriod`后,将删除不符合此要求的提案。
#### 查询存入金
创建新提案后,你可以查询提交其所有存款:
```bash
gaiacli query gov deposits <proposal_id>
```
你还可以查询特定地址提交的存入金:
```bash
gaiacli query gov deposit <proposal_id> <depositor_address>
```
#### 投票给一个提案
在提案的存入金达到`MinDeposit`后,投票期将开放。抵押了`Atom`的持有人可以投票:
```bash
gaiacli tx gov vote <proposal_id> <Yes/No/NoWithVeto/Abstain> \
--from=<name> \
--chain-id=<chain_id>
```
#### 查询投票
使用您刚才提交的参数检查投票:
```bash
gaiacli query gov vote <proposal_id> <voter_address>
```
你还可以查询提交给所有此前投给指定提案的投票:
```bash
gaiacli query gov votes <proposal_id>
```
#### 查询提案的计票结果
要检查指定提案的当前计票,你可以使用`tally`命令:
```bash
gaiacli query gov tally <proposal_id>
```
#### 查询治理参数
要检查当前的治理参数,请运行:
```bash
gaiacli query gov params
```
查询运行的治理参数的子集:
```bash
gaiacli query gov param voting
gaiacli query gov param tallying
gaiacli query gov param deposit
```
### 费用分配
#### 查询分配参数
查询当前的分配参数:
```bash
gaiacli query distr params
```
#### 查询
查询当前未结算的(未提取)的奖励:
```bash
gaiacli query distr outstanding-rewards
```
#### 查询验证人佣金
查询对一个验证人的未结算的佣金:
```bash
gaiacli query distr commission <validator_address>
```
#### 查询验证人的削减处罚
查询一个验证人的处罚历史记录:
```bash
gaiacli query distr slashes <validator_address> <start_height> <end_height>
```
#### 查询委托人奖励
查询某笔委托当前的奖励(如果要取回):
```bash
gaiacli query distr rewards <delegator_address> <validator_address>
```
#### 查询所有的委托人奖励
要查询委托人的所有当前奖励(如果要取回),请运行:
```bash
gaiacli query distr rewards <delegator_address>
```
### 多签交易
多签交易需要多个私钥的签名。因此,从多签账户生成和签署交易涉及有关各方之间的合作。密钥持有者的任何一方都可以发起多签,并且至少要有其中一方需要将其他账户的公钥导入到本地的数据库并生成多签公钥来完成和广播该笔交易。
例如,给定包含密钥`p1``p2`和`p3`的多签密钥,每个密钥由不同方持有,持有`p1`的用户将需要导入`p2`和`p3`的公钥以生成多签帐户公钥:
```bash
gaiacli keys add \
p2 \
--pubkey=cosmospub1addwnpepqtd28uwa0yxtwal5223qqr5aqf5y57tc7kk7z8qd4zplrdlk5ez5kdnlrj4
gaiacli keys add \
p3 \
--pubkey=cosmospub1addwnpepqgj04jpm9wrdml5qnss9kjxkmxzywuklnkj0g3a3f8l5wx9z4ennz84ym5t
gaiacli keys add \
p1p2p3 \
--multisig-threshold=2 \
--multisig=p1,p2,p3
```
已存储新的多签公钥`p1p2p3`,其地址将用作多签交易的签名者:
```bash
gaiacli keys show --address p1p2p3
```
您还可以通过查看 key 的 JSON 输出或增加`--show-multisig`标识来查看multisig阈值pubkey构成和相应的权重
```bash
gaiacli keys show p1p2p3 -o json
gaiacli keys show p1p2p3 --show-multisig
```
创建多签交易的第一步是使用上面创建的多签地址初始化:
```bash
gaiacli tx send cosmos1570v2fq3twt0f0x02vhxpuzc9jc4yl30q2qned 10000000uatom \
--from=<multisig_address> \
--generate-only > unsignedTx.json
```
`unsignedTx.json`文件包含以JSON编码的未签署交易。`p1`现在可以使用自己的私钥对交易进行签名:
```bash
gaiacli tx sign \
unsignedTx.json \
--multisig=<multisig_address> \
--from=p1 \
--output-document=p1signature.json
```
生成签名后,`p1`将`unsignedTx.json`和`p1signature.json`都发送到`p2`或`p3`,然后`p2`或`p3`将生成它们各自的签名:
```bash
gaiacli tx sign \
unsignedTx.json \
--multisig=<multisig_address> \
--from=p2 \
--output-document=p2signature.json
```
`p1p2p3` is a 2-of-3 multisig key, therefore one additional signature is sufficient. Any the key holders can now generate the multisig transaction by combining the required signature files:
p1p2p3` 是 2-of-3 多签key因此一个的签名就足够了。 现在,任何密钥持有者都可以通过组合所需的签名文件来生成多签交易:
```bash
gaiacli tx multisign \
unsignedTx.json \
p1p2p3 \
p1signature.json p2signature.json > signedTx.json
```
现在可以把交易发送给节点:
```bash
gaiacli tx broadcast signedTx.json
```
## shell 自动补全脚本
可以通过完全命令生成主流的UNIX shell解释器如`Bash`和`Zsh`)的`completion`命令,该命令可用于`gaiad`和`gaiacli`。
如果要生成Bash完成脚本请运行以下命令
```bash
gaiad completion > gaiad_completion
gaiacli completion > gaiacli_completion
```
如果要生成Zsh完成脚本请运行以下命令
```bash
gaiad completion --zsh > gaiad_completion
gaiacli completion --zsh > gaiacli_completion
```
::: tip Note
在大多数UNIX系统上可以在`.bashrc`或`.bash_profile`中加载此类脚本以启用Bash自动完成
```bash
echo '. gaiad_completion' >> ~/.bashrc
echo '. gaiacli_completion' >> ~/.bashrc
```
有关如何启用shell自动完成的信息请参阅操作系统提供的解释器用户手册。
:::

View File

@ -1,47 +0,0 @@
# Gaia 创世状态Genesis State
Gaia 创世状态`GenesisState`由账户、各种模块状态和元数据组成,例如创世交易。 每个模块可以指定自己的`GenesisState`。 此外,每个模块可以指定自己的创世状态有效性验证、导入和导出功能。
Gaia 创世状态定义如下:
```go
type GenesisState struct {
Accounts []GenesisAccount `json:"accounts"`
AuthData auth.GenesisState `json:"auth"`
BankData bank.GenesisState `json:"bank"`
StakingData staking.GenesisState `json:"staking"`
MintData mint.GenesisState `json:"mint"`
DistrData distr.GenesisState `json:"distr"`
GovData gov.GenesisState `json:"gov"`
SlashingData slashing.GenesisState `json:"slashing"`
GenTxs []json.RawMessage `json:"gentxs"`
}
```
在 Gaia 的 ABCI`initChainer`定义中调用`initFromGenesisState`,它在内部调用每个模块的`InitGenesis`,提供它自己的`GenesisState`作为参数。
## 账户Accounts
`GenesisState` 中的创世账户定义如下:
```go
type GenesisAccount struct {
Address sdk.AccAddress `json:"address"`
Coins sdk.Coins `json:"coins"`
Sequence uint64 `json:"sequence_number"`
AccountNumber uint64 `json:"account_number"`
// vesting account fields
OriginalVesting sdk.Coins `json:"original_vesting"` // total vesting coins upon initialization
DelegatedFree sdk.Coins `json:"delegated_free"` // delegated vested coins at time of delegation
DelegatedVesting sdk.Coins `json:"delegated_vesting"` // delegated vesting coins at time of delegation
StartTime int64 `json:"start_time"` // vesting start time (UNIX Epoch time)
EndTime int64 `json:"end_time"` // vesting end time (UNIX Epoch time)
}
```
除序列号nonce和地址外每个帐户还必须具有有效且唯一的账户编号。
账户也可能锁仓,此时他们必须提供必要的锁仓信息,锁仓帐户必须至少提供`OriginalVesting`和`EndTime`。如果还提供了`StartTime`,则该帐户将被视为“连续”锁仓帐户,其中按预定义的时间表锁仓 coins。 提供的`StartTime`必须小于`EndTime`,但可能是未来的时间。 换句话说,它不必等于创世时间。 在从新状态(未导出)开始的新链中,`OriginalVesting`必须小于或等于`Coins`。
<!-- TODO: Remaining modules and components in GenesisState -->

View File

@ -1,334 +0,0 @@
# 创世Genesis文件
本文档解释了 Cosmos Hub 主网的 genesis 文件是如何构建的。 它还解释了如何为自己的`gaia` testnet 创建一个 genesis 文件。
请注意,您可以通过运行以下命令为您自己的 testnet 生成默认的 genesis 文件:
```bash
gaiad init <moniker> --chain-id <chain-id>
```
genesis 文件存储在 `~/.gaiad/config/genesis.toml`.
## 什么是创世文件
genesis 文件是一个 JSON 文件,用于定义区块链的初始状态。 它可以看作是区块链的高度“0”。 高度为“1”的第一个块将引用 genesis 文件作为其父级。
genesis 文件中定义的状态包含所有必要的信息,如初始令牌分配、创建时间、默认参数等。 我们来分别描述这些信息。
## Genesis 时间和链ID
`genesis_time`定义在 genesis 文件的顶部。 它是一个“UTC”时间戳指示区块链何时启动。 此时,创世记验证人应该上线并开始参与共识过程。 当超过2/3的生成验证人通过投票权加权在线时区块链启动。
```json
"genesis_time": "2019-03-13T17:00:00.000000000Z",
```
`chain_id`是您的链的唯一标识符。 它有助于区分使用相同版本的软件的不同链。
```json
"chain_id": "cosmoshub-1",
```
## 共识参数
接下来,创世文件定义共识参数。 共识参数覆盖与共识层相关的所有参数,`gaia` 的共识层是 `Tendermint`。 我们来看看这些参数:
- `block`
- `max_bytes`: 每个块的最大字节数。
- `max_gas`: 每个块的最大 gas 数量。 该区块中包含的每笔交易都会消耗一些 gas包含在一个区块内的交易所使用的总 gas 不能超出。
- `evidence`
- `max_age`: 证据evidence是一种证明表明验证者在同一高度同一轮签署了两个不同的区块。 这是一种明显的恶意行为,会在状态机层受到惩罚。 `max_age`定义**块**的最大数量,在经过`max_age`块之后证据不再有效。
- `validator`
- `pub_key_types`: 可被验证人接受的公钥类型 (例如`ed25519`, `secp256k1`, ...) ,目前仅支持`ed25519`。
```json
"consensus_params": {
"block_size": {
"max_bytes": "150000",
"max_gas": "1500000"
},
"evidence": {
"max_age": "1000000"
},
"validator": {
"pub_key_types": [
"ed25519"
]
}
},
```
## 应用程序状态
应用程序状态定义了状态机的初始状态。
### 创世账号
在本节中,定义了初始分配的 Token。 可以通过直接编辑 genesis 文件手动添加帐户,但也可以使用以下命令:
```bash
// Example: gaiad add-genesis-account cosmos1qs8tnw2t8l6amtzvdemnnsq9dzk0ag0z37gh3h 10000000uatom
gaiad add-genesis-account <account-address> <amount><denom>
```
这个命令在 `app_state.accounts` 下创建一个条目。
```json
"accounts": [
{
"address": "cosmos1qs8tnw2t8l6amtzvdemnnsq9dzk0ag0z37gh3h",
"coins": [
{
"denom": "uatom",
"amount": "10000000"
}
],
"sequence_number": "0",
"account_number": "0",
"original_vesting": [
{
"denom": "uatom",
"amount": "26306000000"
}
],
"delegated_free": null,
"delegated_vesting": null,
"start_time": "0",
"end_time": "10000"
}
]
```
让我们来分别解读这些参数:
- `sequence_number`: 此编号用于计算此帐户发送的交易数。 每次事务包含在块中时它都会递增并用于防止重放攻击初始值为“0”。
- `account_number`: 帐户的唯一标识符,它在包含此帐户的首次被打包到块的交易中生成。
- `original_vesting`: 锁仓Vesting 由`gaia`原生支持。 您可以定义帐户需要锁仓 token 数量,这些 token 在一定时间之后才能流通。 锁仓中的 token 可用于委托。 默认值为“null”。
- `delegated_free`: 在 vest 过期后可转让的委托 token 数量。在创世文件中,大部分情况是 `null`
- `delegated_vesting`: 锁仓中的 token 数量。在创世文件中,大部分情况是 `null`
- `start_time`: vesting 期开始区块高度。创世文件中,大部分情况是`0`。
- `end_time`: vesting 期结束区块高度。如果没有 token 在 vesting 期,这个值是`0`。
### 银行Bank
`bank`模块负责 token。在本节中唯一 需要定义的参数是“转账”是否在创世文件启用。
```json
"bank": {
"send_enabled": false
}
```
### 权益Staking
`staking`模块处理状态机中的大多数 POS 逻辑。 此部分应如下所示:
```json
"staking": {
"pool": {
"not_bonded_tokens": "10000000",
"bonded_tokens": "0"
},
"params": {
"unbonding_time": "1814400000000000",
"max_validators": 100,
"max_entries": 7,
"bond_denom": "uatom"
},
"last_total_power": "0",
"last_validator_powers": null,
"validators": null,
"bonds": null,
"unbonding_delegations": null,
"redelegations": null,
"exported": false
}
```
让我们来分别解读这些参数:
- `pool`
- `not_bonded_tokens`: 在创世文件中没有绑定(即委托)的 token 数量。 通常情况下,它与权益 token (本例中是 `uatom`)的总供应量相等。
- `bonded_tokens`: 在创世文件中没绑定的 token 数量通常是0。
- `params`
- `unbonding_time`: 以**纳秒**为单位的解绑延迟时间。
- `max_validators`: 最大验证人节点数量。
- `max_entries`: 可同时进行解委托、重新委托的最大条目数。
- `bond_denom`: 权益代币符号。
- `last_total_power`: 总投票权重。在创世文件通常是0除非创世文件使用了之前的状态
- `last_validator_powers`: 最后一个区块的状态中每个验证人的投票权重。在创世文件中通常是 null除非创世文件使用了之前的状态
- `validators`: 最后一个区块中的验证人列表。在创世文件中通常是 null除非创世文件使用了之前的状态
- `bonds`: 最后一个区块中的委托列表。在创世文件中通常是 null除非创世文件使用了之前的状态
- `unbonding_delegations`: 最后一个区块中解绑的委托列表。在创世文件中通常是 null除非创世文件使用了之前的状态
- `redelegations`: 最后一个区块中的重新委托列表。在创世文件中通常是 null除非创世文件使用了之前的状态
- `exported`: 创世文件是否是从之前的状态导出得到的。
### 挖矿Mint
`mint`模块管理 token 供应的通胀逻辑。 创世文件中的`mint`部分如下所示:
```json
"mint": {
"minter": {
"inflation": "0.070000000000000000",
"annual_provisions": "0.000000000000000000"
},
"params": {
"mint_denom": "uatom",
"inflation_rate_change": "0.130000000000000000",
"inflation_max": "0.200000000000000000",
"inflation_min": "0.070000000000000000",
"goal_bonded": "0.670000000000000000",
"blocks_per_year": "6311520"
}
}
```
让我们来分别解读这些参数:
- `minter`
- `inflation`:总 token 供应量的年化通胀百分比,每周更新。值 “0.070000000000000000” 意味着目标是每年通货膨胀率为“7每周重新计算一次。
- `annual_provisions`: 每块重新计算。初始值是 `0.000000000000000000`
- `params`
- `mint_denom`: 增发权益代币面值,此处是 `uatom`
- `inflation_rate_change`: 通胀每年最大变化。
- `inflation_max`: 最高通胀水平。
- `inflation_min`: 最低通胀水平。
- `goal_bonded`: 目标绑定量占总供应量百分比。如果委托 token 的百分比低于此目标,则通胀率会增加(在`inflation_rate_change`之后),直至达到`inflation_max`。 如果委托 token 的百分比高于此目标,则通胀率会下降(在`inflation_rate_change`之后),直至达到`inflation_min`。
- `blocks_per_year`: 每年出块量估算。用于计算出块收益中权益 token 的通胀部分(称之为块供给)。
### 分配Distribution
`distr`模块处理每个块中发给验证人和委托人的挖矿及手续费的分配逻辑。 创世文件中的`distr`部分如下所示:
```json
"distr": {
"fee_pool": {
"community_pool": null
},
"community_tax": "0.020000000000000000",
"base_proposer_reward": "0.010000000000000000",
"bonus_proposer_reward": "0.040000000000000000",
"withdraw_addr_enabled": false,
"delegator_withdraw_infos": null,
"previous_proposer": "",
"outstanding_rewards": null,
"validator_accumulated_commissions": null,
"validator_historical_rewards": null,
"validator_current_rewards": null,
"delegator_starting_infos": null,
"validator_slash_events": null
}
```
让我们来分别解读这些参数:
- `fee_pool`
- `community_pool`: 用于支付奖励的 token 放在公共池中,它通过治理提案分配。在创世文件中通常是 null。
- `community_tax`: 税率,即交易费和出块收益中需要放入公共池部分的百分比。
- `base_proposer_reward`: 区块提议者在有效区块中收取的交易费用奖励的基础部分。 如果值为`0.010000000000000000`则1的费用将转给提议者。
- `bonus_proposer_reward`: 如果预提交取得了 2/3 (该块有效的最小值)的加权投票,他们会获得 `base_proposer_reward` 奖励。 如果预提交获得100的加权投票则此奖励线性增加至`bonus_proposer_reward`。
- `withdraw_addr_enabled`: 如果是`true`,委托人可以设置不同的地址来取回他们的奖励。 如果要在创世时禁用转账,则要设置为`false`,因为它可以绕过转账限制。
- `delegator_withdraw_infos`: 委托人收益地址列表。 如果没有从之前的状态导出,一般是`null`。
- `previous_proposer`: 上一个块的提议者, 如果没有从之前的状态导出,则设置为""。
- `outstanding_rewards`: 未付(未提取)奖励。如果没有从之前的状态导出,设置为`null`。
- `validator_accumulated_commission`: 未付(未提取)验证人佣金。如果没有从之前的状态导出,设置为`null`。
- `validator_historical_rewards`: 验证人的历史奖励相关的信息,由`distr`模块用于各种计算。 如果没有从之前的状态导出,设置为`null`。
- `validators_current_rewards`: 验证人的当前奖励相关的信息,由`distr`模块用于各种计算。 如果没有从之前的状态导出,设置为`null`。
- `delegator_starting_infos`: Tracks the previous validator period, the delegation's amount of staking token, and the creation height (to check later on if any slashes have occurred). 跟踪先前的验证人时期,委托的 token 数量和创建高度(稍后检查是否发生了需要惩罚的事件)。 如果没有从之前的状态导出,设置为`null`。
- `validator_slash_events`: Set of information related to the past slashing of validators. Set to `null` if genesis was not exported from previous state. 过往验证人惩罚事件相关的信息集。 如果没有从之前的状态导出,设置为`null`。
### 治理Governance
`gov`模块处理所有与治理相关的事务。 `gov`部分的初始状态如下所示:
```json
"gov": {
"starting_proposal_id": "1",
"deposits": null,
"votes": null,
"proposals": null,
"deposit_params": {
"min_deposit": [
{
"denom": "uatom",
"amount": "512000000"
}
],
"max_deposit_period": "1209600000000000"
},
"voting_params": {
"voting_period": "1209600000000000"
},
"tally_params": {
"quorum": "0.4",
"threshold": "0.5",
"veto": "0.334",
"governance_penalty": "0.0"
}
}
```
让我们来分别解读这些参数:
- `starting_proposal_id`: 此参数定义第一个提案的ID每个提案都由唯一ID标识。
- `deposits`: 每个提案 ID 的保证金列表。如果没有从之前的状态导出,设置为`null`。
- `votes`: 每个提案 ID 的投票列表。 如果没有从之前的状态导出,设置为`null`。
- `proposals`: 所有提案列表。如果没有从之前的状态导出,设置为`null`。
- `deposit_params`
- `min_deposit`: 使提案进入投票期的最小抵押数量,如果提供了多种面值,满足其一即可。
- `max_deposit_period`: 最长抵押等待时间(单位**纳秒**),之后就不能再进行抵押了。
- `voting_params`
- `voting_period`: 投票期时长(单位**纳秒**)。
- `tally_params`
- `quorum`: 提议生效所需的投票数占总抵押数的百分比。
- `threshold`: 提议生效所需 `YES` 票最小百分比。
- `veto`: 若提议生效,`NO_WITH_VETO` 票最大百分比.
- `governance_penalty`: 对未给特定提案进行投票的验证人的处罚。
### 惩罚Slashing
The `slashing` module handles the logic to slash delegators if their validator misbehave. The `slashing` section in genesis looks as follows:
`slashing`模块处理对验证人行为不当的惩罚逻辑。 创世文件中的`slashing`部分如下:
```json
"slashing": {
"params": {
"max_evidence_age": "1814400000000000",
"signed_blocks_window": "10000",
"min_signed_per_window": "0.050000000000000000",
"downtime_jail_duration": "600000000000",
"slash_fraction_double_sign": "0.050000000000000000",
"slash_fraction_downtime": "0.000100000000000000"
},
"signing_infos": {},
"missed_blocks": {}
}
```
让我们来分别解读这些参数:
- `params`
- `max_evidence_age`: 证据最长有效期,单位 **纳秒**
- `signed_blocks_window`: 用于识别离线验证人节点的块滑动窗口。
- `min_signed_per_window`: 在滑动窗口中预提交的数量少于此值,认为验证人节点离线。
- `downtime_jail_duration`: 如果验证人离线时间超过此处设定的**纳秒**数,验证人节点将被关小黑屋。
- `slash_fraction_double_sign`: 验证人节点双签时,需缴纳罚金占总委托数量的百分比。
- `slash_fraction_downtime`: 验证人节点离线时,需缴纳罚金占总委托数量的百分比。
- `signing_infos`:`slashing` 模块所需的每个验证人节点的各种信息。如果没有从之前的状态导出,设置为`{}`。
- `missed_blocks`: `slashing` 模块所需的与丢块相关的各种信息。如果没有从之前的状态导出,设置为`{}`。
### 创世交易Genesis Transactions
默认情况下genesis文件不包含任何`gentxs`。 `gentx`是一种交易,在创世文件中的将`accounts`下的 token 委托给验证人节点,本质上就是在创世时创建验证人。 在`genesis_time`之后,一旦有超过 2/3 的验证人(加权投票)作为有效`gentx`的接收者上线,该链就会启动。
可以手动将`gentx`添加到genesis文件或通过以下命令
```bash
gaiad collect-gentxs
```
此命令将存储在`~/.gaiad/config/gentx`中的所有`gentxs`添加到genesis文件中。 要创建创世纪交易,请单击[此处](./validators/validator-setup.md#participation-in-genesis-as-a-validator)。

View File

@ -1,66 +0,0 @@
## 安装Gaia
本教程将详细说明如何在你的系统上安装`gaiad`和`gaiacli`。安装后,你可以作为[全节点](./join-mainnet.md)或是[验证人节点](./validators/validator-setup.md)加入到主网。
### 安装Go
按照[官方文档](https://golang.org/doc/install)安装`go`。记得设置环境变量`$GOPATH`,`$GOBIN`和`$PATH`:
```bash
mkdir -p $HOME/go/bin
echo "export GOPATH=$HOME/go" >> ~/.bash_profile
echo "export PATH=\$PATH:\$GOPATH/bin" >> ~/.bash_profile
echo "export GO111MODULE=on" >> ~/.bash_profile
source ~/.bash_profile
```
::: tip
Cosmos SDK需要安装**Go 1.12+**
:::
### 安装二进制执行程序
接下来安装最新版本的Gaia。需要确认您 `git checkout 了正确的[发布版本](https://github.com/cosmos/cosmos-sdk/releases)。
::: warning
对于主网,请确保你的版本大于或等于`v0.33.0`
:::
```bash
mkdir -p $GOPATH/src/github.com/cosmos
cd $GOPATH/src/github.com/cosmos
git clone https://github.com/cosmos/cosmos-sdk
cd cosmos-sdk && git checkout <latest-release-tag>
make tools install
```
> *注意*: 如果在这一步中出现问题请检查你是否安装的是Go的最新稳定版本。
等`gaiad`和`gaiacli`可执行程序安装完之后,请检查:
```bash
$ gaiad version --long
$ gaiacli version --long
```
`gaiacli`的返回应该类似于:
```
cosmos-sdk: 0.33.0
git commit: 7b4104aced52aa5b59a96c28b5ebeea7877fc4f0
go.sum hash: d156153bd5e128fec3868eca9a1397a63a864edb5cfa0ac486db1b574b8eecfe
build tags: netgo ledger
go version go1.12 linux/amd64
```
##### Build Tags
build tags指定了可执行程序具有的特殊特性。
| Build Tag | Description |
| --------- | ----------------------------------------------- |
| netgo | Name resolution will use pure Go code |
| ledger | 支持Ledger设备(硬件钱包) |
### 接下来
然后你可以选择 加入[主网](./join-mainnet.md)、[公共测试网](./join-testnet.md) 或是 [创建私有测试网](./deploy-testnet.md)。

View File

@ -1,148 +0,0 @@
## 加入主网
::: 提示
请查看[launch repo](https://github.com/cosmos/launch)获取主网信息包含了所使用的Cosmos-SDK的正确版本和genesis文件。
:::
::: 警告
**在更进一步之前你需要[安装gaia](./installation.md)**
:::
## 创建一个新节点
这些指令适用于从头开始设置一个全节点。
首先,初始化节点并创建必要的配置文件:
```bash
gaiad init <your_custom_moniker>
```
::: 注意
moniker只能包含ASCII字符。使用Unicode字符会使得你的节点不可访问
:::
你可以稍后在`~/.gaiad/config/config.toml`文件中编辑`moniker`:
```toml
# A custom human readable name for this node
moniker = "<your_custom_moniker>"
```
你可以编辑`~/.gaiad/config/config.toml`文件来开启垃圾交易过滤机制以拒绝收到的手续费过低的交易:
```
# This is a TOML config file.
# For more information, see https://github.com/toml-lang/toml
##### main base config options #####
# The minimum gas prices a validator is willing to accept for processing a
# transaction. A transaction's fees must meet the minimum of any denomination
# specified in this config (e.g. 10uatom).
minimum-gas-prices = ""
```
你的全节点已经初始化成功!
## Genesis & Seeds
### 复制genesis文件
将主网的`genesis.json`文件放置在`gaiad`的配置文件夹中
```bash
mkdir -p $HOME/.gaiad/config
curl https://raw.githubusercontent.com/cosmos/launch/master/genesis.json > $HOME/.gaiad/config/genesis.json
```
注意我们使用了[launch repo](https://github.com/cosmos/launch)中的`latest`文件夹,该文件夹包含了最新版本主网的详细信息。
::: 提示
如果你想加入的是公共测试网,点击[这里](./join-testnet.md)
:::
运行命令验证配置的正确性:
```bash
gaiad start
```
### 添加种子节点
你的节点需要知道如何寻找伙伴节点。你需要添加有用的种子节点到`$HOME/.gaiad/config/config.toml`文件中。[`launch`](https://github.com/cosmos/launch) repo包含了一些种子节点的链接。
如果这些种子节点不再运行你可以在Cosmos Hub浏览器(可以在[launch page](https://cosmos.network/launch)中找到)发现种子节点和持久节点。
你还可以到[验证人Riot聊天室](https://riot.im/app/#/room/#cosmos-validators:matrix.org)里询问可用节点。
你可以阅读[这里](https://github.com/tendermint/tendermint/blob/develop/docs/tendermint-core/using-tendermint.md#peers)了解更多伙伴节点和种子节点的信息。
::: 警告
在Cosmos Hub主网中可接受的币种是`uatom`,`1atom = 1.000.000uatom`
:::
Cosmos Hub网络中的交易需要支付一笔交易手续费以得到处理。手续费支付执行交易所消耗的gas。计算公式如下
```
fees = gas * gasPrices
```
`gas`由交易本身决定。不同的交易需要不同数量的`gas`。一笔交易的`gas`数量在它被执行时计算,但有一种方式可以提前估算,那就是把标识`gas`
的值设置为`auto`。当然这只是给出一个预估值。如果你想要确保为交易提供足够的gas你可以使用`--gas-adjustment`标识来调整预估值(默认是`1.0`)。
`gasPrice`是每个单位`gas`的单价。每个验证人节点可以设置`min-gas-price`,只会把那些`gasPrice`高于自己设置的`min-gas-price`的交易打包。
交易的`fees`是`gas`与`gasPrice`的结果。作为一个用户,你必须输入三者中的两者。更高的`gasPrice`/`fees`,将提高你的交易被打包的机会。
::: 提示
主网中推荐的`gas-prices`是`0.025uatom`
:::
## 设置`minimum-gas-prices`
你的全节点可以在交易池中放入未确认的交易。为了保护其免受Spam攻击最好设置一个`minimum-gas-prices`来过滤交易以决定是否要放入交易池。这个参数可以在`~/.gaiad/config/gaiad.toml`文件中配置。
推荐的初始`minimum-gas-prices`是`0.025uatom`,如果你愿意可以稍后再修改它。
## 运行一个全节点
通过这条命令开始运行全节点:
```bash
gaiad start
```
检查一切是否平稳运行中:
```bash
gaiacli status
```
使用[Cosmos Explorer](https://cosmos.network/launch)查看网络状态。
## 导出状态
Gaia能够将整个应用程序的状态转存到一个JSON文件中该文件可以用于分析还可以用作一个新网络的genesis文件。
导出状态:
```bash
gaiad export > [filename].json
```
你还可以导出指定高度的状态(处理完指定高度后的状态):
```bash
gaiad export --height [height] > [filename].json
```
如果你计划使用导出的状态文件启动一个新网络,导出时要加上`--for-zero-height`标识:
```bash
gaiad export --height [height] --for-zero-height > [filename].json
```
## 升级成为验证人节点
你现在有了一个运行状态的全节点。接下来你可以升级你的全节点成为一个Cosmos验证人。排名前100的验证人节点可以向Cosmos Hub提议新的区块。请查看[创建验证人节点](./validators/validator-setup.md)。

View File

@ -1,59 +0,0 @@
# 加入公共测试网
::: 提示 当前测试网
请查看[testnet repo](https://github.com/cosmos/testnets)获取最新的公共测试网信息包含了所使用的Cosmos-SDK的正确版本和genesis文件。
:::
::: 警告
你需要先完成[安装`gaia`](./installation.md)
:::
## 创建一个新节点
> 注意:如果你在之前的测试网中运行过一个全节点,请跳至[升级之前的Testnet](#upgrading-from-previous-testnet)。
要创建一个新节点,主网的指令同样适用:
+ [加入mainnet](./join-mainnet.md)
+ [部署验证人节点](./validators/validator-setup.md)
只有SDK的版本和genesis文件不同。查看[testnet repo](https://github.com/cosmos/testnets)
获取测试网的信息包括Cosmos-SDK正确的版本和genesis文件。
## 升级之前的Testnet
这些指令用以把运行过以前测试网络的全节点升级至最新的测试网络。
### 重置数据
首先,移除过期的文件并重置数据:
```bash
rm $HOME/.gaiad/config/addrbook.json $HOME/.gaiad/config/genesis.json
gaiad unsafe-reset-all
```
你的节点现在处于原始状态并保留了最初的`priv_validator.json`文件和`config.toml`文件。如果之前你还有其他的哨兵节点或者全节点,你的节点仍然会连接他们,但是会失败,因为他们还没有升级。
::: 警告
确保每个节点有一个独一无二的`priv_validator.json`文件。不要从一个旧节点拷贝`priv_validator.json`到多个新的节点。运行两个有着相同`priv_validator.json`文件的节点会导致双签。
:::
### 升级软件
现在升级软件:
```bash
cd $GOPATH/src/github.com/cosmos/cosmos-sdk
git fetch --all && git checkout master
make update_tools install
```
::: 提示
*注意*如果在这一步出现问题请检查是否安装了最新稳定版本的Go。
:::
注意这里我们使用的是包含最新稳定发布版本的`master`分支。请查看[testnet repo](https://github.com/cosmos/testnets)查看哪个版本的测试网需要哪一个Cosmos-SDK版本在[SDK发布版](https://github.com/cosmos/cosmos-sdk/releases)中对应的详细信息。
你的全节点已经升级成功!

View File

@ -1,71 +0,0 @@
# Cosmos Hub主网上线计划
* 2016年夏天Cosmos首次发表了项目白皮书。
* 2017年春天Cosmos完成了首次募资。
* 2019年一月Cosmos Hub软件完成功能开发。
* 至此Cosmos Hub主网即将启动。
* 那么Cosmos 主网上线将为Cosmos通证Atom的持有者带来什么呢
如果你是一个Atom通证的持有者你可以将通证委托给主网的验证人并参加对链上治理提案的投票。 实际上,通证持有者的委托和参与治理对于未来网络的成功具有决定性的意义。 然而,通证持有者暂时还不能在网络上实现交易。 在下一个允许交易的硬分叉启动之前,交易协议是关闭的。
**Atom通证持有人务必仔细阅读以下内容以保障您的通证能够安全委托给验证人。在您开始实际操作前请先仔细阅读整个CLI指南并熟悉所有命令**
* [CLI指南](https://github.com/cosmos/cosmos-sdk/blob/develop/docs/gaia/delegator-guide-cli.md)
CLI指南中所介绍的流程是至今为止唯一经过验证的在主网实现通证委托的安全途径。这是因为指南中用到的gaiacli工具是唯一正在进行第三方安全审计的数字钱包软件目前尚没有其他数字钱包供应商通过类似的安全审计。
请记住,通证委托有一定风险。 一旦您将通证委托给了一个验证人,通证将在委托期内锁定,无法回收。 如果在这段时间内,被委托的验证人有任何违规行为,您的部分或者全部通证将被罚没焚毁。因此,在委托前,您有责任对验证人进行尽职调查。
**Cosmos Hub主网仍然是个实验型的网络。在主网的早期估计仍会出现一些问题比如软件升级或发现新的漏洞。现有的工具要求使用者具有很高的专业技术能力并且可能还会存在我们跨链基金会或者Tendermint团队无法控制的风险请见跨链 Cosmos 贡献条款中的风险部分条款。使用Cosmos Hub开源软件需要遵守Apache 2.0授权协议,使用者需要自己承担所有风险,而且软件将依照“现状”提供,不提供任何形式的保证或条件,并且跨链基金会和/或Tendermint团队不对因软件引起的损失承担任何责任。所以务必请谨慎行事**
* [跨链 Cosmos 贡献条款](https://github.com/cosmos/cosmos/blob/master/fundraiser/Interchain%20Cosmos%20Contribution%20Terms%20-%20FINAL.pdf)
* [Apache 2.0授权协议](https://www.apache.org/licenses/LICENSE-2.0)
如果您希望获得更多关于通证委托的介绍并且愿意和Cosmos的开发者做直接的交流您可以参加我们2月14日的线上直播在直播中我们将介绍主网启动后通证委托的整个流程。
注册链接:[gotowebinar.com/register/](https://register.gotowebinar.com/register/5028753165739687691)
## 主网启动的里程碑
欢迎收藏[cosmos.network/launch](https://cosmos.network/launch),跟踪主网启动全过程。
* Cosmos-SDK 安全审计✔: 在1月初Cosmos-SDK启动了2019年一季度计划进行的一系列第三方安全评估的第一个评估项目。此次安全评估审计持续2周半的时间2个不同的安全审计公司对Cosmos-SDK各部分做了安全评估而第三家安全审计公司的评估工作也正在进行中。
* Cosmos-SDK正式发布版本: RC版本一旦完成Cosmos-SDK的功能在主网上线前将不再变更此后Cosmos-SDK团队将开始一轮内部漏洞检测以便进一步确保在发布前完成最终的安全性检查。Cosmos-SDK v0.31.0 一发布我们将启动一个新的Gaia测试网以便在实际运行环境中找到那些在测试中难以被发现的漏洞。
* 权益争夺赛结束: 2018年12月启动的权益争夺赛GoS是同类区块链网络的第一个对抗性的测试网络。GoS旨在对纯PoS网络中的经济激励和社区协作进行压力测试。到目前为止GoS区块链网络已经完成了3次硬分叉。GoS任务结束后我们将通过记分准则来判断获胜者并且在整个活动结束时宣布对获胜者的奖励。[GoS记分准则](https://github.com/cosmos/game-of-stakes/blob/master/README.md#scoring)
* 创世交易的收集: 跨链基金会将对创世时Atom通证的分配情况发布一个议案提出了对Cosmos投资者参与者早期贡献者和权益争夺赛的获胜者的通证分配方案。任何被推荐获得通证分配的个人或机构都可以提交一个gentx文件只有提交了该文件才有可能在主网启动创世时成为Cosmos验证人。推荐分配数量和gentx收集的最终结果将保存在创世genesis文件中
* Cosmos Hub 主网启动🔥 🚀 🌔🔥: 一旦社区接受了genesis文件 并且占有2/3以上投票权的验证人们上线Cosmos主网就可以启动了。
## Cosmos官方交流渠道
**以下是Cosmos有关主网启动的官方渠道**
* Cosmos Network (twitter.com/cosmos)
* Cosmos GitHub (github.com/cosmos)
* Cosmos Blog (blog.cosmos.network)
**请注意Cosmos forumRiot群和Telegram群将不被视为官方信息发布渠道。**
* [Cosmos forum](https://forum.cosmos.network)
* [Riot群](https://riot.im/app/#/group/+cosmos:matrix.org)
* [Telegram群](http://t.me/cosmosproject)
如果你对下一步应该做什么或者消息来源的可信度还有什么疑虑那么在启动时请先不要有任何行动您可以关注以上三个Cosmos官方渠道发布的最新情况另外不要向任何管理员、网站或者非官方软件提供您的助记词。
切记,我们绝不会要求您提供您的私钥或者助记词。
## 在主网启动期间确保资产安全可靠
任何公链启动都会令人十分激动但同时也会有一些唯利是图的人趁机作恶。自人类起源社会工程学就已经存在了在当今技术时代网络钓鱼和鱼叉式网钓是利用社会工程学原理实行欺诈的主要形式。这两种攻击方式都非常有效95%以上的账户安全漏洞都是由这两种攻击造成的而且现在也不仅是通过电子邮件来发动攻击这么简单了。今天网络钓鱼可能会随机或有针对性地发生在您所有的信息接收渠道无论您是使用SignalTelegramSMSTwitter或只是在论坛、社交媒体上接收信息都有可能受到网络攻击盗取您的重要信息和资产。
虽然作恶者的攻击听起来很可怕,但我们仍可以做很多事情来保护自己免受各种攻击。在准备主网启动期间,我们有必要为您提供一些培训来提高您发现和规避安全风险的能力,提供验证信息的可靠渠道,并通过一些技术手段来减少或避免关键风险和证件被窃风险。
## 安全规则
#### 参与Cosmos主网启动您需要熟记以下规则:
* 直接从官方来源下载软件并确保在您进行助记词相关的任何操作时始终使用最新、最安全的gaiacli版本。最新版的TendermintCosmos-SDK和gaiacli只能从我们官方GitHub仓库中获取从这些渠道下载可避免上当受骗避免使用恶意修改的软件版本。
* 不要将助记词告诉给任何人你是助记词的唯一保管人。如果有人试图为您的Atom提供托管服务那么就要警惕了为了避免对通证失去控制您应该将其离线存储最大限度降低被盗风险并制定安全的备份策略永远不要与任何人分享。
* 对于在区块链或加密货币环境中要求您访问来自可疑或不熟悉网站的附件或电子邮件要保持警惕。攻击者可能会试图引诱您访问虚假网站以从您的计算机窃取敏感信息。如果您是Gmail用户[请在此处对钓鱼邮件进行测试](https://phishingquiz.withgoogle.com)。
* 在购买Atoms之前请做好充分的信息调研。通证在主网启动时是不允许交易的所以它们不能进行买卖。只有到实现交易功能的硬叉发布后才能实现通证的在线交易。通证的在线交易功能实现后请首先对卖方和交易所进行全面调研确保Atom通证的来源可信。
* Tendermint团队和跨链基金会都不会出售Atom通证所以如果您在社交媒体或者电子邮件中看到我们发出的通证销售广告请不要相信一定是假的。
* 对于来自论坛或者技术交流群中的陌生人提供的技术建议必须保持警惕您需要熟悉所有重要的指令特别是那些可能存在高风险的操作指令。您可以查阅我们的官方文档以避免上当受骗损害自身及他人的利益。请牢记Cosmos论坛Riot群和Telegram群都不是Cosmos官方信息或者新闻的发布渠道。
* 在发送交易前再次确认交易。链上地址的确很长,但请仔细检查,确保交易发送到正确的地址,防止错误发送。
如果突然出现的交易极具诱惑或显示的消息要求您提供永远不应该与其他人分享的信息您就应该立刻通过Cosmos网站或者其他官方渠道来验证这些信息。请再次牢记来自CosmosTendermint团队或跨链基金会的任何人都不会发送电子邮件要求您提供任何类型的帐户凭据或您的助记词我们仅会通过我们的官方博客Twitter和GitHub帐户与Cosmos社区沟通重要新闻和进展。

View File

@ -1,116 +0,0 @@
# **Cosmos主网上线三部曲**
Cosmos主网启动将分成3个阶段分布完成下面我们将具体介绍每一阶段的预期目标。
## **🚨第一阶段:网络逐步趋于稳定🚨**
在第一阶段主网可能会不太稳定也许会出现暂停或其他故障可能需要Cosmos主网验证人和全节点运营者们一起来协助修复。在网络趋于稳定过程中出现此类故障并不意外。
**状态修改和主网启动:**
区块链的核心价值之一是其不可篡改性,也就是说我们不会通过回滚来修改过去的状态记录。最终,这种不可篡改的理念在软件共识协议层面得到了支持,并最终在社区参与者之间形成了社会契约。
也就是说Cosmos Hub的底层技术开发是能够实现低难度的分叉和回滚的 我们已经看到社区在测试网上做过多次相应的演练。这些技术也会在主网上应用,用以最终抵御卡特尔风险的发生。
回滚网络状态通常被认为是非常严重的问题因为这将损害网络的经济最终性。因此回滚网络状态只能在极端状态下使用比如以太网的DAO硬分叉也就是说在Cosmos Hub主网启动初期转账交易不会开启因此回滚的危害性很小因为状态转换远比“经济最终性”的影响低。 如果需要,比如发现漏洞,我们可以将过去某一个高度时的网络状态导出,然后重启网络,就如同我们在测试网上演练过的那样。
一旦链上治理决定开启交易功能,全网将会遵从经济最终性。
总而言之如果在链上交易功能开启之前Cosmos Hub发现任何错误或漏洞那么用户可期望回滚至任意状态甚至创世块。
一旦链上交易功能开始后,状态回滚方式将很难被采纳。
**对开发人员的建议**Cosmos主网启动是投资者参与主网的第一阶段。作为分布式应用的开发人员您可能是Cosmos-SDK框架或Tendermint Core的用户。开发者基于[Cosmos-SDK](https://cosmos.network/docs/)或[Tendermint](https://tendermint.com/docs/)的应用开发进度现阶段应该不受Cosmos Hub的影响但如果您的项目需要使用[IBC](https://blog.cosmos.network/developer-deep-dive-cosmos-ibc-5855aaf183fe)链间通信协议则必须要等到第三阶段或参与即将开始的IBC测试网络。
**对于用户的建议**在此阶段我们强烈建议您不要交易Atoms其实法律合同也限定不能交易因为在这个阶段仍然存在状态回滚的风险。
但是,您可以通过下面链接的[CLI指南](https://github.com/cosmos/cosmos-sdk/blob/develop/docs/gaia/delegator-guide-cli.md)和视频教程的指导在此阶段将Atoms通证委托给验证人。当然如果发生状态修改那么所有收益包括手续费和通胀收益都将丢失。Voyager是用于与Cosmos Hub交互的图形化客户端目前处于alpha版正在持续开发中。一旦Voager beta版上线并可以安全使用我们将另行公告。
CLI指南和视频教程https://v.qq.com/x/page/q08425izfhi.html
## 第二阶段:链上交易开启
**摘要:**
一旦我们认为主网足够稳定在链上抵押了Atom的通证持有者将会通过链上治理过程投票决定是否开启链上交易。
Cosmos浏览器是查看治理提案状态的最佳途径可以在我们的主网启动页面上找到多款[Cosmos浏览器](https://cosmos.network/launch)。
对用户来说如果提案被社区接受并且链上交易开启您就可以在链上转移您的Atom了。
## 第三阶段启用IBC协议
**摘要:**
第三阶段我们将会发布[IBC协议](https://github.com/cosmos/cosmos-sdk/blob/develop/docs/spec/ibc/overview.md)并且对是否将其纳入Cosmos-SDK的核心模块库进行链上治理投票。
**对开发人员的建议**使用Cosmos-SDK或Tendermint BFT构建的应用专有链将能够连接到 Cosmos Hub并与连接到Hubs上的其他任意区块链进行跨链交互。
**对用户的建议**您可以将各种通证和NFT直接从采用IBC协议连接的一个链转移到另一个通过IBC协议连接的链而无需通过一个第三方中心化平台。
## 验证人提示: 提交您的主网gentx文件
1. 验证人应该已经生成并且安全的保存好用于主网验证的共识密钥。
2. 验证人根据自己获得ATOM通证的来源比如募资参与者或权益争夺活动的获奖者准备好在创世文件Genesis中需要签署的交易。
3. 一旦创世通证分配计划发布我们将开始征集gentx文件。
## 总结
Cosmos旨在建立所有区块链间的桥梁最终建立一个区块链互联网。然而路漫漫其修远兮我们还有很长的路要走。主网上线之后我们需要完成与整个通证经济世界的深度融合很多的工作要做等着我们去完成。正如肯尼迪在逆境中曾经说过的那样
“我们选择去月球,不是因为很容易,而是因为很难......”
走更崎岖的路,才会看见更美的风景!
****

View File

@ -1,77 +0,0 @@
# Ledger Nano支持
## 关于HD钱包
HD钱包分层确定性钱包, 最初是在比特币的[BIP32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki)提案中提出,
是一种特殊的钱包类型,可以让用户从单个种子派生任意数量的账户。为了更好的理解, 让我们定义以下术语:
- **钱包**: 从一个给定的seed中获得的一组账户。
- **账户**: 一组公钥/私钥对。
- **私钥**: 私钥是用于签署消息的私密信息。在区块链领域, 一个私钥就是一个账户的所有者。永远不要想他人透露用户的私钥。
- **公钥**: 公钥是通过对私钥上使用不可逆的加密函数而获得的一条信息。从公钥中可以导出地址。但无法从公钥中逆向获得私钥。
- **地址**: 地址是一个公开的用于标识账户的,带着可读前缀的字符串。通过对公钥使用加密函数获得。
- **数字签名**: 数字签名是一段加密信息,证明了指定私钥的所有者在不泄露其私钥的情况下,批准了指定消息。
- **种子**: 同助记词。
- **助记词**: 助记符是一串单词,用作种子来派生私钥。助记符是每个钱包的核心。永远不要丢失你的助记词。把它写在一张纸上,然后把它存放在安全的地方。如果你失去了它,那就没有办法去重新获取它了。如果某人获得了助记词访问权限,他们将获得所有相关帐户的访问权限。
HD钱包的核心是种子。用这个种子用户可以确定地生成子帐户。要从种子生成子帐户使用了单向的数学转换。要决定生成哪个帐户用户指定`path`,通常是`integer``0``1``2`...)。
例如,通过将`path`指定为`0`,钱包将从种子生成`0号私钥`。然后,可以从`0号私钥`生成“`号公钥`。最后,可以从`0号公钥`生成`0号地址`。所有这些步骤都是单向的,这意味着`公钥`无法从`地址`中获得,`私钥`无法从`公钥`中获得,......
```
Account 0 Account 1 Account 2
+------------------+ +------------------+ +------------------+
| | | | | |
| Address 0 | | Address 1 | | Address 2 |
| ^ | | ^ | | ^ |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| + | | + | | + |
| Public key 0 | | Public key 1 | | Public key 2 |
| ^ | | ^ | | ^ |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| + | | + | | + |
| Private key 0 | | Private key 1 | | Private key 2 |
| ^ | | ^ | | ^ |
+------------------+ +------------------+ +------------------+
| | |
| | |
| | |
+--------------------------------------------------------------------+
|
|
+---------+---------+
| |
| Mnemonic (Seed) |
| |
+-------------------+
```
从种子中推导出帐户的过程是确定性的。这意味着给定相同的路径,派生出私钥将始终相同。
存储在帐户中的资金由私钥控制。此私钥对助记词使用单向函数生成的。如果丢失了私钥,则可以使用助记词恢复它。但是,如果丢失了助记词,则将无法访问所有派生的私钥。同样,如果有人获得了你的助记词访问权限,他们就可以访问所有相关帐户。
## Ledger支持HD钱包
在Ledger钱包的内核有一个用于生成私钥的助记词。初始化Ledger时会生成助记词。
::: 危险
**不要遗失或与任何人分享你的12/24个单词。为防止盗窃或资金损失最好确保备份多个助记词拷贝并将其存放在安全可靠的地方并且只有你知道如何访问。如果有人能够访问你的助记词他们将能够访问你的私钥并控制与其关联的帐户**
:::
助记词与Cosmos帐户体系兼容。用于在Cosmos Hub网络上生成地址和交易的工具称为`gaiacli`它支持从Ledger种子派生帐户私钥。请注意Ledger钱包充当种子和私钥的沙盒并且对交易进行签名的过程完全在内部进行。没有任何私人信息会离开Ledger钱包。
要将`gaiacli`与Ledger钱包一起使用你需要具备以下条件
- [在Ledger Nano中安装`COSMOS`应用并生成账户](./delegator-guide-cli.md#using-a-ledger-device)
- [有一个你打算连接的可访问的并处于运行状态的`gaiad`实例](./delegator-guide-cli.md#accessing-the-cosmos-hub-network)
- [一个同你所选的`gaiad`实例相连接的`gaiacli`实例](./delegator-guide-cli.md#setting-up-gaiacli)
现在,你都准备好去[发送交易到网络](./delegator-guide-cli.md#sending-transactions).

View File

@ -1,38 +0,0 @@
# 验证人概览
## 介绍
Cosmos Hub基于Tendermint它依赖于一组负责在区块链中提交新区块的验证人。这些验证人通过广播投票来参与共识协议投票包含由每个验证人的私钥签名的加密签名。
验证人候选者可以绑定他们自己的Atoms=还能让token持有者将Atoms=“委托”或“抵押”给他们。Cosmos Hub将有100个验证人但随着时间的推移将根据预定义的时间表增加到300个验证人。验证人根据谁拥有最多的投票权来确定——拥有最多股权的前100名验证人候选者将成为Cosmos的验证人。
验证人及其委托人能通过执行Tendermint共识协议赚取Atom作为区块增发奖励和作为交易手续费的其他token。最初交易费用将以Atom支付但在将来Cosmos生态中的任何token如果通过治理加入到白名单中就能作为有效的交易手续费。请注意验证人可以设置从他们的委托人身上收取的佣金作为额外奖励。
如果验证人双签频繁下线或不参与治理则可以削减其抵押的Atom包括那些用户委托给他们的Atom。处罚取决于违规的严重程度。
## 硬件
目前还没有合适的针对验证人密钥管理的云解决方案。这可能会等到2018年云解决方案SGX变得更加普及时才会有所改善。由于这个原因验证人必须设置一个受限访问的物理操作。例如安置在安全的数据中心。
验证人期望为他们的数据中心装备充足的电力,带宽及存储备份。期望有数个充足的对应光纤,防火墙还有路由的需求的网络设备,一台有着足够硬盘和容错能力的小型服务器。硬件可以先从低端的数据中心配置开始。
我们预计最初的网络需求是比较低的。当前的测试网络只需要极小的资源。之后带宽CPU和内存的需求将会随着网络的发展而增长。要存储数年区块链的历史信息的话推荐配置足够大的的硬盘。
## 创建一个网站
建立一个专门的用以显示验证人信息网站,并在我们的[论坛](https://forum.cosmos.network/t/validator-candidates/127/3)上表明您想成为验证人的意图。这非常重要因为委托人希望获得关于他们予以Atom委托的验证人的信息。
## 寻求法律建议
如果您打算成为一个验证人,请寻求法律建议
## 社区
在我们的社区聊天频道和论坛上讨论有关成为验证人的更多细节:
+ [Validator Chat](https://riot.im/app/#/room/#cosmos_validators:matrix.org)
+ [Validator Forum](https://forum.cosmos.network/c/validating)

View File

@ -1,55 +0,0 @@
# 验证人安全
我们鼓励每一个验证人候选者独立运行其操作,因为不同的设置增加了网络的抵抗能力。为了能按时启动主网,验证人候选者现在就应该开始设置了。
## 密钥管理 - HSM
让攻击者无法盗取验证人的密钥是至关重要的任务。如果可能发生盗取,这将会使委托给抵抗力脆弱的验证人的所有股权都处于风险之中。硬件安全模块是防范该风险的一个重要策略。
为了支持Cosmos HubHSM模块必须要支持`ed25519`签名。YubiHSM2支持了`ed25519`我们期望在2017年12月时能有一个可以使用的库。YubiHSM可以保护私钥但是不能确保它不会去重复签署一个区块。
Tendermint团队也在为拓展Ledger Nano S应用以支持验证人签名做贡献。这个应用将会储存最近的区块并能降低双重签名攻击的风险。
我们会在有更多关于密钥保存安全的可行的解决方案出现时更新这个文档。
## 哨兵节点DDOS防御
验证人有责任确保网络能够经受住DDOS攻击。
降低这种风险的一个推荐方案是验证人要在成为哨兵节点的网络拓扑结构上去精心搭建他们的网络结构。
因为验证人节点可以操作自身也可以被其熟知的其它验证人运行验证人节点应该只连接到其所信任的全节点上。一个验证人节点通常会运行在一个数据中心。大部分数据中心提供对主流云服务提供商的直接网络连接服务。验证人可以去连接云服务中上的哨兵节点。验证人节点直接连接到其哨兵节点减缓了DDOS攻击带来的压力还可以添加多个新的哨兵节点用以轮换来减轻已存在哨兵节点所遭受到的攻击。
哨兵节点能够迅速轮换或者改变它们的IP地址。因为与哨兵节点的连接是在私有的IP网段基于因特网的攻击不可能直接骚扰到验证人节点。这将确保验证人区块的提交和投票总是能广播至网络中的其余节点。
你可以按照下面的指令去设置你的哨兵节点架构:
验证人节点必须编辑它们的config.toml文件
```bash
# Comma separated list of nodes to keep persistent connections to
# Do not add private peers to this list if you don't want them advertised
persistent_peers =[list of sentry nodes]
# Set true to enable the peer-exchange reactor
pex = false
```
哨兵节点应该编辑它们的config.toml文件:
```bash
# Comma separated list of peer IDs to keep private (will not be gossiped to other peers)
private_peer_ids = "ipaddress of validator nodes"
```
## 环境变量
默认情况下,具有以下前缀的大写环境变量将替换小写命令行标志:
+ `GA`对应Gaia的标识
+ `TM`对应Tendermint的标识
+ `BC`对应democli或basecli的标识
例如,环境变量`GA_CHAIN_ID`将映射到命令行标识`--chain-id`。注意虽然显式命令行标识优先于环境变量但环境变量优先于任何配置文件。因此必须锁定环境以便在CLI上将任何关键参数定义为标识或防止修改任何环境变量。

View File

@ -1,328 +0,0 @@
# 验证人相关问题
::: 声明
这项工作正在进行中。机制和具体值都容易发生变化。
:::
## 基本概念
### 什么是验证人?
[Cosmos Hub](../what-is-gaia.md)基于[Tendermint](https://tendermint.com/docs/introduction/what-is-tendermint.html),它依靠一组验证人来保障网络的安全。验证人的作用是通过广播包含由验证人的私钥签名的加密签名的投票来运行全节点并参与共识。验证人在区块链中提交新的区块并获得收益作为报酬。他们还必须通过对提案进行投票来参与治理。验证人根据他们的总抵押股权来排位。
### 什么是'抵押'?
Cosmos Hub是一个权益证明PoS区块链意味着验证人的权重由其抵押的用作担保金的代币Atom的数量决定。这些Atom可以直接由验证人抵押或者由Atom持有者委托给验证人。
系统中的任何用户都可以通过发送`create-validator`交易来表明其想成为验证人的意图。从那里,他们成为验证者。从这开始,才能成为验证人。
验证人的权重即总抵押决定其是否能成为有效验证人还有该节点提议区块的频率以及它将获得多少收益。一开始只有权重最多的100个验证人才是有效验证人。如果验证者双重签名经常脱机或不参与治理如果验证人双签频繁掉线或者不参加治理他们抵押的Atom(包括那些委托给他们的Atom)会被销毁,也就是‘削减处罚’。
### 什么是全节点?
全节点是一个全程验证区块链的交易和区块的程序。区别于只处理区块头信息和小部分交易的轻节点。运行一个全节点比轻节点需要更多的资源,这也是成为验证人必须要具备的。实际上,运行全节点意味着运行网络延迟较低且不掉线的软件的最新版本。
当然,我们鼓励任何用户都去运行一个全节点,即使他们并不打算成为验证人。
### 什么是委托人?
委托人是那些没有能力或者不想执行验证人操作的Atom持有者。通过[Cosmos Voyager](https://cosmos.network/docs/getting-started/voyager.html)一个用户可以把Atom委托给一个验证人并获取一部分交易收益关于收益是如何分配的查看下面的[**抵押有什么激励?**](#抵押有什么激励?)和[**运行一个验证人有什么激励?**](#运行一个验证人有什么激励?)
委托人与他们的验证人分享收益,所以委托人也要共担责任。如果一个验证人行为不端,每一个相关的委托人也会按比例遭受股权的部分削减处罚。这就是为什么委托人在委托之前应该履行调查职责,还要尽量把股权分散给多个验证人。
委托人在系统里扮演了一个关键角色,因为他们负责选举验证人。委托人也并不是一个消极的角色:委托人应该积极监控验证人的行为,并参与到治理当中。
## 成为一个验证人
### 如何成为一个验证人?
网络中的任何参与者都可以通过发送一笔`create-validator`交易来表明他们想成为一个验证人,必须要填写下列参数:
+ **验证人的公钥:**用于签名**投票**和**提交**的私钥对应的公钥。通过这种方式,验证人可以用不同的账户分别去做验证和持有流动资金。
+ **验证人的地址:**应用程序级别的地址。这是用于外界识别验证人的地址。与此地址关联的私钥用于绑定取消绑定声明奖励和参与治理仅限MVP
+ **验证人的名称(moniker)**
+ **验证人的网站(可选的)**
+ **验证人的描述信息(可选的)**
+ **初始佣金比例:**区块增发奖励,区块奖励,交易手续费中抽成给验证人的初始比例
+ **最大佣金:**该验证人保证的最大佣金率
+ **佣金变化率:**验证人候选者的最大每日佣金增长率
+ **最小自抵押数量:**验证人在任何时候所要的抵押的最小Atom数量。如果验证人的自抵押股权数量跌破了这个限制其整个抵押池都会被释放。
+ **初始自抵押数量:**验证人最初的自抵押的Atom数量
一旦创建了验证人Atom持有者可以向其委托Atom有效地向股权池里增加股权。一个地址的总股权是验证人自抵押的Atom和委托人委托的Atom的总和。
在所有表明的验证人中股权最多的100名被任命为有效验证人。如果某个验证人的股权总量跌出了前100名就会失去验证人权利。随着时间的推移验证人的最大数量会依照计划逐渐增加
+ **Year 0:** 100
+ **Year 1:** 113
+ **Year 2:** 127
+ **Year 3:** 144
+ **Year 4:** 163
+ **Year 5:** 184
+ **Year 6:** 208
+ **Year 7:** 235
+ **Year 8:** 265
+ **Year 9:** 300
+ **Year 10:** 300
## 测试网
### 我要怎样加入到测试网?
测试网络是一个在主网上线之前很好的测试验证人设置的环境。
我们将参与测试网络视为一个向社区展示你是有准备且有能力去运行验证人节点的方式。你可以在[这里](https://github.com/cosmos/cosmos-sdk/tree/develop/cmd/gaia/testnets)和[这里](https://github.com/cosmos/testnets)找到有关测试网的更多内容。
### 密钥的不同类型?
简而言之有两种密钥:
+ **Tendermint Key** :这是用于对区块哈希进行签名的唯一密钥。它与一个公钥`cosmosvalconspub`相关联。
+ 使用`gaiad init`创建节点时生成。
+ 使用`gaiad tendermint show-validator`查看,如`cosmosvalconspub1zcjduc3qcyj09qc03elte23zwshdx92jm6ce88fgc90rtqhjx8v0608qh5ssp0w94c`。
+ **Application keys** :这些密钥是由应用程序创建的,用于签名交易。作为验证人,你可能会使用一个密钥来签名与抵押相关的交易,另一个密钥用于签署与治理相关的交易。应用程序私钥和公钥`cosmospub`及地址`cosmos`相关联。两者都来自`gaiacli keys add`生成的帐户私钥。
+ 注意:验证人的操作员的私钥直接绑定到应用程序私钥,但为此目的保留前缀:`cosmosvaloper`和`cosmosvaloperpub`
### 验证人可以具有哪些不同的状态
使用`create-validator`交易创建验证人后,它可以处于三种状态:
+ `bonded` : 验证人在活跃集合中并参与共识。验证人正在获得奖励,并且可能因为不当行为而遭到削减处罚。
+ `unbonding` : 验证人不在活跃集合中,也不参与共识。验证人没有获得奖励,但仍然可能因为不当行为而遭到削减处罚。这是从`bonded`到`unbonding`的过渡状态。如果验证人在`unbonding`模式下未发送`rebond`交易,则状态转换将需要三周时间才能完成。
+ `unbonded` : 验证人不在活跃集合中因此不签署区块。验证人不能遭到削减处罚也不会获得任何奖励。仍然可以将Atom委托给此验证人。从`unbonded`状态的验证人取消委托是立即的。
委托人与其验证人具有相同的状态。
请注意委托不一定是绑定的。Atom可以是delegated和bonded状态delegated和unbonding状态delegated和unbonded状态或流通状态。
### 什么是`self-bond`?怎样增加我的`self-bond`?有水龙头吗?
如果你想获得测试网的测试币,你可以使用这个[水龙头](https://faucet.cosmos.network/)。
### 成为一个活跃的(=bonded验证人必须要抵押最小数量的Atom吗
没有最小限制。总股权(总股权=自抵押股权+委托股权最高的前100名是活跃验证人。
#### 委托人要怎样选择验证人?
委托人可以根据他们的主观判断随意去选择验证人。也就是说,包括对以下内容的判断相当重要:
+ **自抵押的Atom数量**一个验证人在股权池里自抵押的Atom数量。有着更多自抵押Atom的验证人承担了更大的风险将促使其对自己的行为更加负责。
+ **委托的Atom总量**: 委托给某个验证人的Atom总量。大量的股权显示社区对该验证人的信任但这也意味着该验证人更容易成为黑客们的目标。实际上黑客更倾向攻击更大的验证人这样他们可能会从不能抵御攻击的验证人那里获得更多。随着委托的Atom的增长验证人也被期待不要太过引人注目。
+ **佣金比率** 在把奖励分散给委托人之前抽成一部分佣金来奖励验证人。
+ **跟踪记录**:委托人很可能去查看他们计划去委托的验证人的行为记录。包括资历,过去对提议的投票,历史的平均运行时长和验证人节点掉线的频率。
除去这些会展示在Cosmos Voyager上的评判标准验证人还可能向公众展示一个网站来完善他们的简历。验证人需要通过多种方式去树立良好的声誉来吸引委托人。比如验证人让第三方来审计他们的设置就是一个很好的实践。注意Tendermint团队将不会批准和引导任何对自身的审计。有关尽职调查的更多信息请参阅此[博客](https://medium.com/@interchain_io/3d0faf10ce6f)
## 责任
### 验证人需要公开表明身份吗?
不需要。每个委托人会用他们自己的评判标准去衡量验证人的价值。验证人可以(也被推荐)在他们提名自己时注册一个网站,以便他们可以按照自己的意愿宣传自己的行动。一些委托人可能更喜欢通过一个清楚展示团队是如何去运行验证人节点以及团队成员的简历的网站来帮助选择,尽管其他一些委托人更偏好那些隐藏了行为记录的匿名验证人。最有可能的是身份明确的验证人和匿名的验证人都会存在于验证人集合中。
### 一个验证人要担负哪些责任?
验证人有两个主要的职责:
+ **能够不断运行软件的正确版本**:验证人需要去保证他们的服务器任何时刻都在线,保护其私钥避免遭到窃取。
+ **积极地参与治理**:验证人需要对每个提案投票表决。
此外,验证人应该是社区的活跃成员。他们应该始终与生态系统的当前状态保持同步,以便他们能够轻松适应任何变化。
### "参与治理"需要?
Cosmos Hub中的验证人员和委托人可以就改变运行参数例如区块燃料限制协调升级以及对治理Cosmos Hub的宪法的修正方案进行投票表决。
验证人在治理系统中发挥着特殊作用。身为系统的支柱他们需要对每一个提案进行投票表决。这是尤其重要的,因为委托人把票权给了验证人而自己无法直接去投票。每次当某个验证人不去对一个提案投票表决时,他就会遭受削减处罚。
### 抵押是指?
抵押Atom可以被认为是一种在验证活动中进行的安全储蓄。当一个验证人或者委托人想要拿回部分甚至所有的存款时他们就发送一笔unbonding交易。然后Atom会经历一个*3周的解绑周期*在unbonding开始前他们容易因错误提交而遭到削减处罚。
验证人和与其形成联盟的委托人得到区块增发奖励区块奖励和手续费奖励还有参与治理的权利。如果一个验证人行为不端它的总股份的一部分会遭削减处罚处罚的严厉性取决于错误行为的类型。这意味着每一个往验证人委托Atom的用户也会受到一定比例的处罚。因此委托人倾向于把Atom委托给那些规范安全运作的验证人。
### 验证人可以卷走委托人的Atom跑路吗?
向一个验证人委托用户只是委托了他的股权。验证人有更多的股权在共识和治理工程中也就有了更大的权重。这不意味着验证人可以扣押其委托人的Atom。一个验证人是绝不可能带着委托人的Atom跑路的。
尽管委托资金不可能被验证人盗取,委托人仍然要对他们的验证人做出的不端行为负责。这种情况下,每个委托人的股权也会按其股权比例遭到部分的削减处罚。
### 一个验证人多久被选择提议下一个区块会随着抵押的Atom数量上升吗
被选作提议下一个区块的验证人称为提案人。每个提案人都是由明确的方式选出来的,被选的频率也与他们的总股权相等(总股权=自抵押股权+委托股权。比如如果所有验证人总的抵押股权是100个Atom一个验证人的总股权是10个Atom那么有10%的时间该验证人会被选作下一个提案人。
### Cosmos Hub的验证人需要去验证Cosmos生态中的其他分区吗
是的他们会如此。最初Cosmos Hub的验证人还会验证第一个公共Ethermint分区。如果通过治理决定这么做Cosmos Hub的验证人可能需要去验证Cosmos生态系统里的其它分区。就Ethermint分区而言对每个额外的分区奖励都会以区块奖励和交易手续费的形式来提供。
## 激励
### 抵押有什么激励?
一个验证人股权池里的每个成员赚取不同类型的收益:
+ **区块增发奖励** 验证人运行的应用里的原生的token例如Cosmos Hub中的Atom会是通胀的用作区块增发奖励。这些增发奖励激励Atom持有者去抵押他们的股权所以未绑定的Atom会随着时间的流逝而稀释。
+ **区块奖励** 对于Ethermint分区区块奖励会以Photon来支付。对Ethereum进行硬分叉来完成初始的分配。这意味着Photon会按和Ether的比例11发放。
+ **交易手续费**Cosmos Hub维持一个token的白名单上面的token都能作为手续费。
这些总收益会按验证人股权池中每个验证人所占的权重来进行分配。然后,每个验证人的股权池的收益又会根据其每一个委托人的股权来分配。注意,会在分配前从委托人所得中抽取佣金给予验证人。
### 运行一个验证人有什么激励?
由于能抽成佣金,验证人比起他们的委托人能按比例赚取更多的收益。
验证人在治理中充当一个重要角色。如果一个委托人没有投票,他也能从他的验证人那里继承到投票权。这样验证人在生态里承担主要的责任。
### 什么是验证人的佣金?
一个验证人的股权池收到的收益会被拆分为给验证人的部分和给委托人的部分。验证人可以从给其委托人的收益中抽取一部分作为给自己佣金奖励。这个佣金被设置成一个百分比。每个验证人可以随意设置初始佣金最大每日佣金变化率和最大佣金。Cosmos Hub强制每个验证人都要明确设置这些参数。这些参数只能在一开始声明竞选时设置也只可能在声明之后被进一步限制。
### 区块增发奖励怎么分配?
区块增发奖励会按验证人的总股权来成比例地发放。这意味着即使每个验证人每次增发奖励时都获得了Atom但所有验证人仍然会维持相等的权重。
让我们举一个例子我们有着股权相等的10个验证人佣金比例是1%。然后我们假设一个区块的增发奖励是1000个Atom每一个验证人有20%的自抵押Atom。这些token不会直接分给提案人。而是被均匀地分发给验证人。所以现在每个验证人的股权池获得100个Atom。这100个Atom会依据每个参与者的股权来分发
+ 佣金:` 100*80%*1% = 0.8 Atoms `
+ 验证人获得部分: ` 100*20% + 佣金 = 20.8 Atoms `
+ 委托人获得部分: ` 100*80% - 佣金 = 79.2 Atoms `
然后每个委托人可以按照他们在验证人股权池中的股权从79.2个Atom中等比例地索要属于他们应得的那一份。注意验证人的佣金不仅只适用于区块增发奖励也适用于区块奖励使用Photon支付
### 交易手续费怎么分配?
手续费以类似的方式分发,不同之处在于,如果区块的提案人有多于明确的提交所需的最小值,区块提案人就可以在由其提议的区块手续费中获得一笔奖励。
当一个验证人被选作去提议下一个区块时必须要含有对当前区块至少2/3的验证人签名许可。尽管如此仍然存在有一个激励去奖励那些超过2/3的验证人签名许可。这个奖励是线性的如果提案人含有2/3的签名许可区块有效的最小值比例是1% 如果提案人含有100%的签名许可比例是5%。当然,提案人不应该等待太久去做提案,或许其他的验证人有可能超时,长时间的等待容易造成提案的延误。这样的话,验证人不得不在获取最多签名的等待时间和失去对下个区块的提案之间寻找一个平衡点。这个机制旨在提案人不要去提案空块,维护验证人之间更好的网络,还有减轻审查。
让我们举一个实际的例子来说明上面的概念。在这个例子中有着10个股权相等的验证人。每个验证人采用1%的佣金比例有20%的自抵押Atom。现在产出了一个有着1025.51020408个Atom手续费的区块。
首先,一个 2% 的税是必须的。这部分Atom会进入贮存池中。贮存池里的资金会通过治理来分配用来作奖赏和更新升级的花费。
+ ` 2% * 1025.51020408 = 20.51020408 Atoms ` 进入到贮存池中
现在只剩下了1005个Atom。让我们假设提案人提案的区块包含了100%的验证人签名。因此提案人能获得手续费奖励中的5%的额外奖励。
我们解这个简单的算式得出给每一个验证人的奖励R :
` 9*R + R + R*5% = 1005 ⇔ R = 1005/10.05 = 100 `
+ 对于发起提案的验证人:
+ 奖金池获得 ` R + R * 5% = 105 Atoms `
+ 佣金: ` 105 * 80% * 1% = 0.84 Atoms `
+ 验证人的奖励: ` 105 * 20% + 佣金 = 21.84 Atoms `
+ 委托人的奖励: ` 105 * 80% - 佣金 = 83.16 Atoms `(每个委托人可以按照他们的股权占比等比例地索要这部分奖励)
+ 对于每个非提案验证人:
+ 奖金池获得 ` R = 100 Atoms `
+ 佣金: ` 100 * 80% * 1% = 0.8 Atoms `
+ 验证人的奖励: ` 100 * 20% + 佣金 = 20.8 Atoms `
+ 委托人的奖励: ` 100 * 80% - 佣金 = 79.2 Atoms `(每个委托人可以按照他们的股权占比等比例地索要这部分奖励)
### 遭到削减处罚的原因?
如果一个验证人行为不端其抵押的股权连同其委托人的股权都会遭到削减处罚。处罚的严重性依据错误的类型来定。有3个主要的错误会导致验证人和其委托人的资金遭到削减处罚
+ **双签**如果某人反馈在A链上一个验证人在相同高度的A链和B链上签署了两个区块这个验证人会被A链处罚。
+ **不在线** 如果一个验证人的签名没有被最近的X个区块包含对该验证人会按与X成比例的最低额度来处罚。如果X高于某个限制Y这个验证人会被赎回下线。
+ **不投票** 如果一个验证人没有对某个提案投票表决,一旦被某个人举报,他的股权会受到削减处罚。
请注意即使一个验证人并不是有意作恶在出现节点崩溃失去连接被DDOS攻击或者是私钥泄露的情况时仍然会被遭受削减处罚。
### 验证人需要去自抵押一些Atom吗?
不,他们不必。一个验证人的总股权等于其自抵押股权和受委托股权的总和。这意味着一个验证人可以通过吸引更多委托人来补偿其低额的自抵押股权。这也是为何对验证人而言,良好的声誉是极其重要的。
尽管对验证人来说是并没有义务去自抵押Atom委托人还是希望他们的验证人在其股权池里有一定的自抵押Atom。换句话说验证人应该共担风险。
为了委托人能获得一些与之共担风险的验证人给予的保证验证人可以声明一个最小数量的自抵押Atom额度。如果一个验证人的自抵押额度低于预先定义的限制该验证人和其所有的委托人的股权都会被赎回。
### 怎样预防股权集中到少数的验证人手中?
目前我们期望社区能有更明智的和有自我保护意识的行为表现。当一个Bitcoin的矿池获得过多的算力时社区通常会停止向该矿池贡献算力。Cosmos Hub在初期也将会依赖同样的方式。之后其他的机制会被应用来尽可能地使这个过程更顺畅
+ **免处罚的重新委托** :这允许委托人轻易地从一个验证人切换到另一个验证人,从而降低对验证人的粘性
+ **黑客赏金** 激励社区去攻击验证人。攻击者将获得与所攻击的验证人规模成比例的赏金,促使一个验证人随着其总股权的增长,成为一个受人关注的攻击目标。
+ **UI警告** 如果用户想要去委托股权给一个已经有了大量股权的验证人的话用户会收到来自Cosmos Voyager的警告。
## 技术要求
### 对硬件的要求是什么?
我们期望验证人供应一个或多个的有着充足电力网络资源防火墙安全HSM和服务器的数据中心。
我们期望初期能有一个适度级别的硬件规格说明书,会随着网络使用的增长而逐步提高标准。参与到测试网络是了解更多情况的不错方式。
### 对软件有什么要求?
除了能运行一个Cosmos Hub节点验证人还应该开发相关的监控预警和管理工具。
### 对带宽有什么要求?
与像Ethereum或Bitcoin这样的区块链相比Cosmos网络要有高吞吐量的性能。
我们建议数据中心只在云服务上连接信任的全节点或者是熟知的验证人节点这会减轻数据中心遭受DDOS攻击的压力。
最后随着网络越来越被重度使用具有单日GB级别的带宽是可能的。
### 运行一个验证人节点意味着什么?
运行一个成功的验证人节点需要多方面的高超技艺的和持久关注的共同努力。相比运行一个Bitcoin矿工节点要付出更多。
### 怎样去进行密钥管理?
我们期望验证人去运行一个HSM来支持ed25519密钥。下面是可能的选择
+ YubiHSM 2
+ Ledger Nano S
+ Ledger BOLOS SGX enclave
+ Thales nShield support
Tendermint团队不会推荐上面的其中之一。鼓励社区最好加强改进HSM和密钥管理的安全性。
### 在操作上我们期望验证人可以做到哪些?
进行有效率的操作是避免验证人节点的意外掉线或遭到削减处罚的关键所在。这包括良好的攻击应对方法,断电情况,还有维持数据中心的安全性和独立性。
### 维护需要什么?
验证人应该去执行常规的软件升级以适应更新和修复漏洞。在启动阶段的前期阶段不可避免的会出现一些网络问题,这需要大量的警觉。
### 验证人怎样保护自己免于DDOS攻击
当一个攻击者向一个IP地址发送海量的因特网流量来阻止该IP地址上的网络服务时这就是DDOS攻击。
一个攻击者扫描网络尽量去获得多个验证人节点的IP地址然后通过向他们发送海量流量来阻断他们之间的连接。
一个降低这样的风险的推荐做法是验证人在所谓的哨兵节点的架构中精心去构建他们的网络拓扑结构。
验证人节点应该只连接到他们所信任的全节点上因为他们可以操作自身也可以被他们熟知的其他验证人运行。一个验证人节点通常会运行在一个数据中心。大部分数据中心提供对主流云服务提供商的直接网络连接服务。验证人可以使用去连接云服务中的哨兵节点。验证人节点直接连接到他们的哨兵节点这样减缓了DOS攻击带来的压力可能需要新的哨兵节点被激活去减轻已存在的哨兵节点所遭受到的攻击。
哨兵节点能够迅速地被轮换或者改变它们的IP地址。因为与哨兵节点的连接是私有的IP网段基于因特网的攻击不可能直接骚扰到它们。这将确保验证人区块的提交和投票总是能传播到网络中的其余节点。
期待验证人在这方面良好的操作将完全消除这些威胁。
了解哨兵节点架构的更多信息请看[这里](https://forum.cosmos.network/t/sentry-node-architecture-overview/454)。

View File

@ -1,210 +0,0 @@
# 在主网上运行一个验证人
::: 提示
加入主网所需的信息(`genesis.json`和种子节点)在[`lauch` repo](https://github.com/cosmos/launch/tree/master/latest)中可以找到。
:::
在启动你验证人节点前,确定你已经完成了[启动全节点](../join-mainnet.md)教程。
## 什么是验证人?
[验证人](./overview.md)负责通过投票来向区块链提交新区块。如果验证人不可访问或者对多个相同高度的区块签名将会遭受到削减处罚。如果变得不可用或者在同一高度上签名则会被削减。请阅读有关Sentry节点架构的信息以保护您的节点免受DDOS攻击并确保高可用性。请阅读[哨兵节点网络架构]()来保护你的节点免于DDOS攻击并保证高的可访问性。
::: 警告
如果你想要成为Cosmos Hub主网的验证人你应该[安全研究](./security.md)。
:::
如果你已经[启动了一个全节点](../join-mainnet.md),可以跳过下一节的内容。
## 创建你的验证人
你的`cosmosvalconspub`可以用于通过抵押token来创建一个新的验证人。你可以通过运行下面的命令来查看你的验证人公钥
```bash
gaiad tendermint show-validator
```
使用下面的命令创建你的验证人:
::: 注意
不要使用多于你所拥有的`uatom`!
:::
```bash
gaiacli tx staking create-validator \
--amount=1000000uatom \
--pubkey=$(gaiad tendermint show-validator) \
--moniker="choose a moniker" \
--chain-id=<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.025uatom" \
--from=<key_name>
```
::: 提示
在指定commission参数时`commission-max-change-rate`用于度量`commission-rate`的百分比点数的变化。比如1%到2%增长了100%,但反映到`commission-rate`上只有1个百分点。
:::
::: 提示
如果没有指定,`consensus_pubkey`将默认为`gaiad tendermint show-validator`命令的输出。`key_name`是将用于对交易进行签名的私钥的名称。
:::
你可以在第三方区块链浏览器上确定你是否处于验证人行列。
## 以初始验证人的形式加入到genesis文件
::: 警告
这一节内容只针对想要在Cosmos Hub主网启动前就作为初始验证人身份的节点。如果主网已经启动请跳过这一节。
:::
如果你想作为初始验证人被写入到genesis.json文件你需要证明你在创世状态中有一些权益代币创建一个或多个交易以将股权与你的验证人地址联系起来并将此交易包含在genesis文件中。
你的`cosmosvalconspub`可以用于通过抵押token来创建一个新的验证人。运行如下命令来获取你的验证人节点公钥
```bash
gaiad tendermint show-validator
```
然后执行`gaiad gentx`命令:
::: 提示
`gentx`是持有self-delegation的JSON文件。所有的创世交易会被`创世协调员`收集起来验证并初始化成一个`genesis.json`
:::
::: 注意
不要使用多于你所拥有的`uatom`!
:::
```bash
gaiad gentx \
--amount <amount_of_delegation_uatom> \
--commission-rate <commission_rate> \
--commission-max-rate <commission_max_rate> \
--commission-max-change-rate <commission_max_change_rate> \
--pubkey <consensus_pubkey> \
--name <key_name>
```
::: 提示
在指定佣金相关的参数时,`commission-max-change-rate`用于标识`commission-rate`每日变动的最大百分点数。比如从1%到2%按比率是增长了100%但只增加了1个百分点。
:::
你可以提交你的`gentx`到[launch repository](https://github.com/cosmos/launch). 这些`gentx`将会组成最终的genesis.json.
## 编辑验证人的描述信息
你可以编辑验证人的公开说明。此信息用于标识你的验证人节点,委托人将根据此信息来决定要委托的验证人节点。确保为下面的每个标识提供输入,否则该字段将默认为空( `--moniker`默认为机器名称)。
<key_name>指定你要编辑的验证人。如果你选择不包含此标识,记住必须要含有--from标识来指定你要更新的验证人。
`--identity`可用于验证和Keybase或UPort这样的系统一起验证身份。与Keybase一起使用时`--identity`应使用由一个[keybase.io](https://keybase.io/)帐户生成的16位字符串。它是一种加密安全的方法可以跨多个在线网络验证您的身份。 Keybase API允许我们检索你的Keybase头像。这是你可以在验证人配置文件中添加徽标的方法。
```bash
gaiacli tx staking edit-validator
--moniker="choose a moniker" \
--website="https://cosmos.network" \
--identity=6A0D65E29A4CBC8E \
--details="To infinity and beyond!" \
--chain-id=<chain_id> \
--gas="auto" \
--gas-prices="0.025uatom" \
--from=<key_name> \
--commission-rate="0.10"
```
**注意** : `commission-rate`的值必须符合如下的不变量检查:
+ 必须在 0 和 验证人的`commission-max-rate` 之间
+ 不得超过 验证人的`commission-max-change-rate`, 该参数标识**每日**最大的百分点变化数。也就是,一个验证人在`commission-max-change-rate`的界限内每日一次可调整的最大佣金变化。
## 查看验证人的描述信息
通过该命令查看验证人的描述信息:
```bash
gaiacli query staking validator <account_cosmos>
```
## 跟踪验证人的签名信息
你可以通过`signing-info`命令跟踪过往的验证人签名:
```bash
gaiacli query slashing signing-info <validator-pubkey>\
--chain-id=<chain_id>
```
## unjail验证人
当验证人因停机而"jailed"(入狱)时,你必须用节点操作人帐户提交一笔`Unjail`交易使其再次能够获得区块提交的奖励奖励多少取决于分区的fee分配
```bash
gaiacli tx slashing unjail \
--from=<key_name> \
--chain-id=<chain_id>
```
## 确认你的验证人节点正在运行
如果下面的命令返回有内容就证明你的验证人正处于活跃状态:
```bash
gaiacli query tendermint-validator-set | grep "$(gaiad tendermint show-validator)"
```
你必须要在[区块浏览器](https://explorecosmos.network/validators)中看见你的验证人节点信息。你可以在`~/.gaiad/config/priv_validator.json`文件中找到`bech32`编码格式的`address`。
::: warning 注意
为了能进入验证人集合你的权重必须超过第100名的验证人。
:::
## 常见问题
### 问题 #1 : 我的验证人的`voting_power: 0`
你的验证人已经是jailed状态。如果验证人在最近`10000`个区块中有超过`500`个区块没有进行投票或者被发现双签就会被jail掉。
如果被因为掉线而遭到jail你可以重获你的投票股权以重回验证人队伍。首先如果`gaiad`没有运行,请再次启动:
```bash
gaiad start
```
等待你的全节点追赶上最新的区块高度。然后,运行如下命令。接着,你可以[unjail你的验证人]()。
最后,检查你的验证人看看投票股权是否恢复:
```bash
gaiacli status
```
你可能会注意到你的投票权比之前要少。这是由于你的下线受到的削减处罚!
### 问题 #2 : 我的`gaiad`由于`too many open files`而崩溃
Linux可以打开的默认文件数每个进程是1024。已知`gaiad`可以打开超过1024个文件。这会导致进程崩溃。快速修复运行`ulimit -n 4096`(增加允许的打开文件数)来快速修复,然后使用`gaiad start`重新启动进程。如果你使用`systemd`或其他进程管理器来启动`gaiad`,则可能需要在该级别进行一些配置。解决此问题的示例`systemd`文件如下:
```toml
# /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
```

View File

@ -1,22 +0,0 @@
# Gaia是什么
`gaia`是作为Cosmos SDK应用程序的Cosmos Hub的名称。它有两个主要的入口
+ `gaiad` : Gaia的服务进程运行着`gaia`程序的全节点。
+ `gaiacli` : Gaia的命令行界面用于同一个Gaia的全节点交互。
`gaia`基于Cosmos SDK构建使用了如下模块:
+ `x/auth` : 账户和签名
+ `x/bank` : token转账
+ `x/staking` : 抵押逻辑
+ `x/mint` : 增发通胀逻辑
+ `x/distribution` : 费用分配逻辑
+ `x/slashing` : 处罚逻辑
+ `x/gov` : 治理逻辑
+ `x/ibc` : 跨链交易
+ `x/params` : 处理应用级别的参数
> 关于Cosmos Hub : Cosmos Hub是第一个在Cosmos Network中上线的枢纽。枢纽的作用是用以跨链转账。如果区块链通过IBC协议连接到枢纽它会自动获得对其它连接至枢纽的区块链的访问能力。Cosmos Hub是一个公开的PoS区块链。它的权益代币称为Atom。
接着,学习如何[安装Gaia](./installation.md)

View File

@ -1,19 +0,0 @@
# Gaia Documentation
`Gaia` docs에 오신 것을 환영합니다. `Gaia` 는 코스모스 허브를 위한 코스모스 애플리케이션의 현재 명칭입니다.
## 코스모스 퍼블릭 테스트넷에 참가하세요
- [`gaia` 애플리케이션 설치하기](./installation.md)
- [풀노드를 세팅하고 현재 퍼블릭 테스트넷 참가하기](./join-testnet.md)
- [벨리데이터 노드로 업그레이드 하기](./validators/validator-setup.md)
## 자체 `gaia` 테스트넷 세팅하기
- [자체 `gaia` 테스트넷 세팅하기](./deploy-testnet.md)
## 추가 리소스
- [밸리데이터에 대한 소개](./validators/overview.md)
- [밸리데이터 FAQ](./validators/validator-faq.md)
- [밸리데이터가 알아야할 보안](./validators/security.md)

View File

@ -1,436 +0,0 @@
# 위임자 가이드라인 (CLI)
이 분서는 위임자가 커맨드라인 인터페이스(CLI, Command-Line Interface)를 통해 코스모스 허브와 소통하기 위해 필요한 모든 정보를 포함하고 있습니다.
또한 계정 관리, 코스모스 펀드레이저로 받은 계정을 복구하는 방법, 그리고 렛저 나노 하드웨어 지갑 사용법 또한 포함되어있습니다.
__중요__: 이 문서에 설명되어있는 모든 단계를 신중하게 진행하십시오. 특정 행동의 실수는 소유하고 있는 아톰의 손실을 초래할 수 있습니다. 진행 전 이 문서에 있는 모든 절차를 자세히 확인하시고 필요시 코스모스 팀에게 연락하십시오. **이 문서는 참고용 정보를 제공하기 위해 번역된 영어 원문의 번역본입니다. 이 문서에 포함되어있는 정보의 완결성은 보장되지 않으며, 개인의 행동에 따른 손실을 책임지지 않습니다. 꼭 영어 원문을 참고하시기 바랍니다. 만약 이 문서의 정보와 영어 원문의 정보가 다른 경우, 영어 문서의 정보가 상위 권한을 가지게 됩니다.**
CLI를 사용하는 위임자는 매우 실험적인 블록체인 기술이 사용되고 있는 코스모스 허브를 사용하게됩니다. 코스모스 허브는 우수한 기술을 기반으로 다수의 보안 감사를 진행했으나 문제, 업데이트 그리고 버그가 존재할 수 있습니다. 또한 블록체인 기술을 사용하는 것은 상당한 기술적 배경을 필요로 하며, 공식 팀의 컨트롤 밖에 있는 리스크가 따릅니다. 유저는 이 소프트웨어를 사용함으로써 암호학 기반 소프트웨어를 사용하는 리스크를 인지하고 있음을 인정하는 것입니다. (참고 문서: [인터체인 코스모스 펀드레이저 약관](https://github.com/cosmos/cosmos/blob/master/fundraiser/Interchain%20Cosmos%20Contribution%20Terms%20-%20FINAL.pdf))
인터체인 재단(Interchain Foundation)과 텐더민트 팀은 소프트웨어 사용으로 발생하는 모든 손실에 대해서 책임을 지지 않습니다. Apache 2.0 라이선스 기반의 오픈소스 소프트웨어를 사용하는 것은 각 개인의 책임이며, 소프트웨어는 그 어떤 보증과 조건이 없는 'As Is(있는 그대로)' 기반으로 제공됩니다.
모든 행동은 신중하고 침착하게 진행하시기 바랍니다.
## 목차
- [`gaiacli` 설치하기](#installing-gaiacli)
- [코스모스 계정](#cosmos-accounts)
+ [펀드레이저 계정 복구하기](#restoring-an-account-from-the-fundraiser)
+ [계정 생성하기](#creating-an-account)
- [코스모스 허브 네트워크 액세스하기](#accessing-the-cosmos-hub-network)
+ [자체 풀노드 운영하기](#running-your-own-full-node)
+ [다른 풀노드와 연결하기](#connecting-to-a-remote-full-node)
- [`gaiacli` 설정하기](#setting-up-gaiacli)
- [상태(state) 조회하기](#querying-the-state)
- [아톰 위임하기 / 위임 철회(unbond)하기 / 보상 수령하기](#bonding-atoms-and-withdrawing-rewards)
- [거버넌스에 참여하기](#participating-in-governance)
- [오프라인 컴퓨터에서 트랜잭션 서명하기](#signing-transactions-from-an-offline-computer)
## `gaiacli` 설치하기
`gaiacli`: `gaiacli``gaiad` 풀노드와 소통하기 위해 사용되는 명령어 기반 인터페이스입니다.
::: 경고
**추가적인 행동을 진행하기 전 최신 `gaiacli` 클라이언트를 다운로드 하셨는지 확인하십시오**
:::
[**바이너리 설치하기**]
[**소스에서 설치하기**](https://cosmos.network/docs/gaia/installation.html)
## 코스모스 계정
모든 코스모스 계정에는 12개 또는 24개의 단어로 이루어진 '시드(Seed)'가 할당됩니다. 이 시드 단어(또는 시드 키)를 기반으로 다수의 코스모스 계정을 생성할 수 있습니다 (예를들어: 다수의 프라이빗 키/퍼블릭 키 쌍). 이런 형태의 월렛은 HD(Hierarchical deterministic) 월렛이라고 불립니다 (HD 월렛에 대한 자세한 정보는 [BIP32](https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki)를 참고하세요).
```
계정 0 계정 1 계정 2
+------------------+ +------------------+ +------------------+
| | | | | |
| 주소 0 | | 주소 1 | | 주소 2 |
| ^ | | ^ | | ^ |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| + | | + | | + |
| 퍼블릭 키 0 | | 퍼블릭 키 1 | | 퍼블릭 키 2 |
| ^ | | ^ | | ^ |
| | | | | | | | |
| | | | | | | | |
| | | | | | | | |
| + | | + | | + |
| 프라이빗 키 0 | | 프라이빗 키 1 | | 프라이빗 키 2 |
| ^ | | ^ | | ^ |
+------------------+ +------------------+ +------------------+
| | |
| | |
| | |
+--------------------------------------------------------------------+
|
|
+---------+---------+
| |
| Mnemonic (시드) |
| |
+-------------------+
```
특정 계좌에 보관된 자산은 프라이빗 키에 의해 관리됩니다. 이 프라이빗 키는 시드의 일방적 기능(one-way function)을 통해 생성됩니다. 프라이빗 키를 분실한 경우, 시드 키를 사용하여 프라이빗 키를 다시 복구하는 것이 가능합니다. 하지만 시드 키를 분실한 경우, 모든 프라이빗 키에 대한 사용권을 잃게 됩니다. 누군가 본인의 시드 키를 가진 경우, 해당 키와 연관된 모든 계정의 소유권을 가진 것과 동일합니다.
::: warning
**12 단어 시드키를 분실하거나 그 누구와도 공유하지 마세요. 자금 탈취와 손실을 예방하기 위해서는 다수의 시드키 사본을 만드시고 금고 같이 본인만이 알 수 있는 안전한 곳에 보관하는 것을 추천합니다. 누군가 시드키를 가지게 된 경우, 관련 프라이빗 키와 모든 계정의 소유권을 가지게 됩니다.**
:::
주소는 특정 계정을 구분하는 용도로 사용되며, 단어로 이루어진 특정 프리픽스(예, cosmos10)와 스트링 값을 조합한 값입니다 (예, `cosmos10snjt8dmpr5my0h76xj48ty80uzwhraqalu4eg`). 주소는 누군가 자산을 특정 계정으로 전송할때 사용되며, 퍼블릭키를 사용해 프라이빗 키를 추출하는 것은 불가능합니다.
### 펀드레이저 계정 복구하기
::: tip
*참고: 이 항목은 코스모스 펀드레이저 참가자만을 위한 정보입니다*
:::
코스모스 펀드레이저에 참가한 인원은 12개의 단어로 구성된 시드키를 부여받습니다. 새로 생성된 시드키는 24개 단어로 이루어졌으나, 12개 단어로 이루어진 시드키 또한 모든 코스모스가 제공하는 도구에서 호환됩니다.
#### 렛저(Ledger) 기기 사용하기
모든 렛저 기기에는 (코스모스 허브를 포함한) 다수의 블록체인에서 계정을 생성하기 위해 사용되는 시드키가 있습니다. 통상 시드키는 렛저 기기를 처음 활성화 할때 생성하지만, 유저가 시드키를 직접 입력하는 것 또한 가능합니다. 이제 펀드레이저를 통해 받은 시드키를 어떻게 렛저 하드웨어 지갑에 입력하는지 알아보겠습니다.
::: warning
*참고: 이번 단계를 진행하실때 **한번도 사용되지 않은 신규 기기를 사용하는 것을 권장합니다**. 한 렛저 기기에는 하나의 시드키만을 입력할 수 있습니다. 만약 이미 사용하시던 하드웨어 지갑을 사용하시기를 바라는 경우, `Settings`>`Device`>`Reset All`를 통해 리셋을 진행한 후 펀드레이저 시드를 입력할 수 있습니다. **렛저 기기를 리셋할 경우, 기존에 사용했던 시드키는 기기에서 삭제됩니다. 리셋을 진행하기 전 기존 기기의 시드키를 백업하셨는지 확인하신 후 진행하시기 바랍니다.** 백업 되지 않은 상태로 기기를 리셋하는 경우, 관련 계정의 자산을 잃을 수 있습니다.*
:::
다음 단계는 신규 렛저 기기 또는 초기화 된 렛저 기기에서 진행되어야 합니다:
1. USB를 사용해 렛저 기기를 컴퓨터에 연결하세요
2. 두개의 버튼을 동시에 누르세요
3. "Restore Configuration"을 선택하세요. **"Config as a new device"를 선택하시면 안됩니다**
4. 원하시는 핀 번호를 입력하세요
5. 12-words 옵션을 선택하세요
6. 코스모스 펀드레이저에서 부여 받은 시드키를 차례대로 정확하게 입력하세요
이제 렛저 하드웨어 지갑 기기가 펀드레이저 시드로 활성화되었습니다. 기존의 펀드레이저 시드를 파기하지 마십시오! 만약 렛저 기기가 고장나거나 분실된 경우, 동일한 시드키를 이용해 복구가 가능합니다.
이제 [여기](#using-a-ledger-device)를 클릭하여 계정을 생성하는 방법을 확인하세요.
#### 컴퓨터 사용하기
::: warning
**참고: 다음 행동은 오프라인 상태인 컴퓨터에서 진행하는 것이 더욱 안전합니다.**
:::
컴퓨터를 이용해 펀드레이저 시드키를 복구하시고 컴퓨터에 프라이빗 키를 저장사기 위해서는 다음 명령어를 실행하세요:
```bash
gaiacli keys add < 명칭 지정(YourKeyName)> --recover
```
명령어를 입력하셨다면 프로그램이 지금 생성(복구)하시는 계정의 프라이빗 키를 암호화할때 사용될 비밀번호를 입력할 것을 요청합니다. 해당 계정을 이용해 트랜잭션을 보낼때마다 이 비밀번호를 입력하셔야 합니다. 만약 비밀번호를 잃어버리셨다면 시드키를 사용해 계정을 다시 복구할 수 있습니다.
- `<yourKeyName>` 은 계정의 이름입니다. 이는 시드키로부터 키 페어를 파생할때 레퍼런스로 사용됩니다. 이 이름은 토큰을 전송할때 보내는 계정을 구분하기 위해서 사용됩니다.
- 추가적인 선택 사항으로 명령어에 `--account` 플래그를 추가해 특정 패스(`0`, `1`, `2`, 등)를 지정할 수 있습니다. 기본적으로 `0`을 사용하여 계정이 생성됩니다.
### 계정 생성하기
새로운 계정을 생성하기 위해서는 `gaiacli`를 설치해야합니다. 신규 계정을 생성하기 전, 프라이빗 키를 어디에 저장하고 어떻게 불러올지 미리 인지를 하셔야 합니다. 프라이빗 키를 보관하기 가장 좋은 곳은 오프라인 컴퓨터 또는 렛저 하드웨어 월렛 기기입니다. 흔히 사용되는 온라인 컴퓨터에 프라이빗 키를 보관하게 될 경우, 인터넷을 통해 컴퓨터를 침투한 공격자가 프라이빗 키를 탈취할 수 있기 때문에 상당한 리스크가 존재합니다.
#### 렛저(Ledger) 하드웨어 월렛 기기 사용하기
::: warning
**새로 주문한 렛저 기기 또는 신뢰할 수 있는 렛저 기기만을 사용하세요**
:::
렛저 기기를 처음 활성화할때 24개 단어로 구성된 시드키가 생성되고 기기에 저장됩니다. 렛저 기기의 시드키는 코스모스와 코스모스 계정과 호환이 되며, 해당 시드키를 기반으로 계정을 생성할 수 있습니다. 렛저 기기는 `gaiacli`와 호환될 수 있게 설정이 되어야 합니다. 렛저 기기를 설정하는 방법은 다음과 같습니다:
1. [Ledger Live 앱](https://www.ledger.com/pages/ledger-live) 다운로드
2. 렛저 기기를 USB로 연결한 후 최신 펌웨어 버전으로 업데이트
3. Ledger Live 앱스토어로 이동한 후, "Cosmos" 애플리케이션 다운로드. (이 단계는 다소 시간이 걸릴 수 있습니다)
4. 렛저 기기에서 코스모스 앱 선택
계정을 생성하기 위해서는 다음 명령어를 실행하십시오:
```bash
gaiacli keys add < 명칭 지정(yourKeyName)> --ledger
```
- `<yourKeyName>` 은 계정의 이름입니다. 이는 시드키로부터 키 페어를 파생할때 레퍼런스로 사용됩니다. 이 이름은 토큰을 전송할때 보내는 계정을 구분하기 위해서 사용됩니다.
- 추가적인 선택 사항으로 명령어에 `--account` 플래그를 추가해 특정 패스(`0`, `1`, `2`, 등)를 지정할 수 있습니다. 기본적으로 `0`을 사용하여 계정이 생성됩니다.
#### 컴퓨터 사용하기
::: warning
**참고: 다음 행동은 오프라인 상태인 컴퓨터에서 진행하는 것이 더욱 안전합니다.**
:::
계정을 생성하기 위해서는 다음 명령어를 입력하세요:
```bash
gaiacli keys add < 명칭 지정(yourKeyName)>
```
위 명령어는 새로운 24단어로 구성된 시드키를 생성하고, 계정 `0`의 프라이빗 키와 퍼블릭 키를 저장합니다. 이후, 디스크에 저장될 계정 `0`의 프라이빗 키를 암호화할때 사용될 비밀번호를 입력할 것을 요청합니다. 해당 계정을 이용해 트랜잭션을 보낼때마다 이 비밀번호를 입력하셔야 합니다. 만약 비밀번호를 잃어버리셨다면 시드키를 사용해 계정을 다시 복구할 수 있습니다.
::: danger
**경고: 12 단어 시드키를 분실하거나 그 누구와도 공유하지 마세요. 자금 탈취와 손실을 예방하기 위해서는 다수의 시드키 사본을 만드시고 금고 같이 본인만이 알 수 있는 안전한 곳에 보관하는 것을 추천합니다. 누군가 시드키를 가지게 된 경우, 관련 프라이빗 키와 모든 계정의 소유권을 가지게 됩니다.**
:::
::: warning
시드키를 안전하게 보관하셨다면 (두번 세번씩이라도 정확하게 작성되었는지 확인하셔야 합니다!) 커맨드 라인의 기록을 다음과 같이 삭제하시면 됩니다:
```bash
history -c
rm ~/.bash_history
```
:::
- `<yourKeyName>` 은 계정의 이름입니다. 이는 시드키로부터 키 페어를 파생할때 레퍼런스로 사용됩니다. 이 이름은 토큰을 전송할때 보내는 계정을 구분하기 위해서 사용됩니다.
- 추가적인 선택 사항으로 명령어에 `--account` 플래그를 추가해 특정 패스(`0`, `1`, `2`, 등)를 지정할 수 있습니다. 기본적으로 `0`을 사용하여 계정이 생성됩니다.
동일한 시드키로 추가적인 계정을 생성하기 원한다면, 다음 명령어를 사용하세요:
```bash
gaiacli keys add < 명칭 지정(yourKeyName)> --recover --account 1
```
해당 명령어는 비밀번호와 시드키를 입력할 것을 요청할 것입니다. 이 외에 추가적인 계정을 생성하시기 원한다면 account 플래그의 번호를 바꾸십시오.
## 코스모스 허브 네트워크 사용하기
블록체인의 상태(state)를 확인하거나 트랜잭션을 전송하기 위해서는 직접 풀노드를 운영하거나 다른 사람이 운영하는 풀노드에 연결할 수 있습니다.
::: danger
**경고: 12개 단어 / 24개 단어 시드키를 그 누구와도 공유하지 마세요. 시드키는 본인만이 알고있어야 합니다. 특히 이메일, 메시지 등의 수단으로 블록체인 서비스 지원을 사칭해 시드키를 요청할 수 있으니 주의를 바랍니다. 코스모스 팀, 텐더민트 팀 그리고 인터체인 재단은 절대로 이메일을 통해 개인 정보 또는 시드키를 요청하지 않습니다.**.
:::
### 직접 풀노드 운영하기
이 방법이 가장 안전한 방법이지만, 대량의 리소스를 필요로 합니다. 풀노드를 직접 운영하기 위해서는 우수한 인터넷 대역폭과 최소 1TB 상당의 하드디스크 용량을 필요로 합니다.
[풀노드를 운영하는 절차](https://cosmos.network/docs/gaia/join-mainnet.html)와 [`gaiad`를 설치하는 방법](https://cosmos.network/docs/gaia/installation.html)은 첨부된 링크를 확인하세요.
### 외부 풀노드에 연결하기
만약 본인이 직접 풀노드를 운영하는 것을 원하지 않는다면 다른 사람의 풀노드에 연결을 할 수 있습니다. 이 과정에서는 신뢰할 수 있는 풀노드 운영자에만 연결하세요. 악의적인 풀노드 운영자는 트랜잭션을 막거나 틀린 정보를 전달할 가능성이 있습니다. 하지만 프라이빗 키는 당신의 컴퓨터/렛저 기기에 저장되어 있기 때문에 풀노드 운영자는 절대로 자금을 탈취할 수 없습니다. 검증된 검증인, 월렛 제공자, 거래소 등의 풀노드에만 연결하는 것을 추천드립니다.
풀노드에 연결하기 위해서는 다음과 같은 형식의 주소가 필요합니다: `https://77.87.106.33:26657` (*이는 예시를 위한 주소이며 실제 풀노드 주소가 아닙니다*). 이 계정은 신뢰할 수 있는 풀노드 운영자에게서 직접 받으시기 바랍니다. 이 주소는 [다음 항목](#setting-up-gaiacli)에서 사용됩니다.
## `gaiacli` 설정하기
::: warning
**`gaiacli`의 최신 스테이블 버전을 사용하고 있는지 확인해주세요**
:::
`gaiacli`는 코스모스 허브 네트워크에서 운영되고 있는 노드와 소통할 수 있게 하는 도구입니다. 풀노드는 본인이 직접 운영하거나, 타인이 운영하는 풀노드를 사용할 수 있습니다. 이제 `gaiacli`의 설정을 진행하겠습니다.
`gaiacli`을 설정하기 위해서는 다음 명령어를 실행하세요:
```bash
gaiacli config <플래그(flag)> <(value)>
```
해당 명령어는 각 플래그에 대한 값을 설정할 수 있게 합니다. 우선 연결하고 싶은 풀노드의 주소를 입력하겠습니다:
```bash
gaiacli config node <호스트(host)>:<포트(port)>
// 예시: gaiacli config node https://77.87.106.33:26657
```
만약 풀노드를 직접 운영하시는 경우, `tcp://localhost:26657`을 주소 값으로 입력하세요.
이제 `--trust-node` 플래그의 값을 설정하겠습니다:
```bash
gaiacli config trust-node false
// 만약 라이트 클라이언트 노드를 운영하고 싶으신 경우 `true` 값을 입력하세요. 그렇지 않은 경우 `false`를 입력하세요
```
마지막으로 소통하고 싶은 블록체인의 `chain-id`를 입력하겠습니다:
```bash
gaiacli config chain-id gos-3
```
## 블록체인 상태 조회하기
[`gaiacli`](https://cosmos.network/docs/gaia/gaiacli.html)는 계정 잔고, 스테이킹 중인 토큰 수량, 지급 가능한 보상, 거버넌스 프로포절 등 블록체인과 관련된 모든 정보를 확인할 수 있게 합니다. 다음은 위임자에게 유용한 명령어들입니다. 다음 명령어를 실행하기 전 [gaiacli 설정](#setting-up-gaiacli)을 진행하세요.
```bash
// 계정 잔고와 계정 관련 정보 조회
gaiacli query account
// 검증인 목록 조회
gaiacli query validators
// 검증인 주소로 (예시: cosmos10snjt8dmpr5my0h76xj48ty80uzwhraqalu4eg) 검증인 정보 조회
gaiacli query validator <검증인 주소(validatorAddress)>
// 위임자 주소로 (예시: cosmos10snjt8dmpr5my0h76xj48ty80uzwhraqalu4eg) 계정의 모든 위임 기록 조회
gaiacli query delegations <위임자 주소(delegatorAddress)>
// 위임자가 특정 검증인에게 위임한 기록 조회
gaiacli query delegations <위임자 주소(delegatorAddress)> <검증인 주소(validatorAddress)>
// 위임자 주소로 (예시: cosmos10snjt8dmpr5my0h76xj48ty80uzwhraqalu4eg) 위임자 리워드 조회
gaiacli query distr rewards <위임자 주소(delegatorAddress)>
// 예치금(deposit)을 대기중인 모든 프로포절 조회
gaiacli query proposals --status deposit_period
// 투표가 가능한 모든 프로포절 조회
gaiacli query proposals --status voting_period
// 특정 프로포절 ID로 프로포절 정보 조회
gaiacli query proposal <proposalID>
```
더 많은 명령어를 확인하기 위해서는 다음 명령어를 실행하세요:
```bash
gaiacli query
```
각 명령어에는 `-h` 또는 `--help`를 추가하여 관련 정보를 확인하실 수 있습니다.
## 트랜잭션 전송하기
::: warning
코스모스 메인넷에서는 `uatom` 단위가 표준 단위로 사용됩니다. `1atom = 1,000,000uatom`으로 환산됩니다.
:::
### 가스와 수수료에 대해서
코스모스 허브 네트워크는 트랜잭션 처리를 위해 트랜잭션 수수료를 부과합니다. 해당 수수료는 트랜잭션을 실행하기 위한 가스로 사용됩니다. 공식은 다음과 같습니다:
```
수수료(Fee) = 가스(Gas) * 가스 값(GasPrices)
```
위 공식에서 `gas`는 전송하는 트랜잭션에 따라 다릅니다. 다른 형태의 트랜잭션은 각자 다른 `gas`량을 필요로 합니다. `gas` 수량은 트랜잭션이 실행될때 계산됨으로 사전에 정확한 값을 확인할 수 있는 방법은 없습니다. 다만, `gas` 플래그의 값을 `auto`로 설정함으로 예상 값을 추출할 수는 있습니다. 예상 값을 수정하기 위해서는 `--gas-adjustment` (기본 값 `1.0`) 플래그 값을 변경하셔서 트랜잭션이 충분한 가스를 확보할 수 있도록 하십시오.
`gasPrice`는 각 `gas` 유닛의 가격입니다. 각 검증인은 직접 최소 가스 가격인 `min-gas-price`를 설정하며, 트랜잭션의 `gasPrice`가 설정한 `min-gas-price`보다 높을때 트랜잭션을 처리합니다.
트랜잭션 피(`fees`)는 `gas` 수량과 `gasPrice`를 곱한 값입니다. 유저는 3개의 값 중 2개의 값을 입력하게 됩니다. `gasPrice`가 높을수록 트랜잭션이 블록에 포함될 확률이 높아집니다.
::: tip
메인넷 권장 `gas-prices``0.025uatom` 입니다.
:::
### 아톰 위임하기 / 리워드 수령하기
::: warning
**아톰을 위임하기 전에 [위임자 faq](https://cosmos.network/resources/delegators)를 먼저 확인하시고 위임에 따르는 책임과 위험을 사전에 인지하시기 바랍니다**
:::
::: warning
**참고: 다음 명령어는 온라인 상태인 컴퓨터에서 실행되어야 합니다. 해당 명령은 렛저 하드웨어 월렛 기기를 사용해 실행하는 것을 추천드립니다. 오프라인으로 트랜잭션을 발생하는 방법을 확인하기 위해서는 [여기](#signing-transactions-from-an-offline-computer)를 참고하세요.**
:::
```bash
// 아톰 위임하기
// 각 플래그 값 예시: <위임할 수량(amountToBound)> = 10000uatom, <검증인의 bech32 주소(bech32AddressOfValidator)> = cosmosvaloper18thamkhnj9wz8pa4nhnp9rldprgant57pk2m8s, <가스 가격(gasPrice)> = 0.025uatom
gaiacli tx staking --amount <위임할 수량(amountToBond)> --validator <검증인의 bech32 주소(bech32AddressOfValidator)> --from <위임자 명칭(delegatorKeyName)> --gas auto --gas-prices <가스 가격(gasPrice)>
// 리워드 수령하기
gaiacli tx distr withdraw-rewards --from <위임자 명칭(delegatorKeyName)>
```
::: tip
렛저 기기를 사용해 트랜잭션을 발생하시는 경우, 기기에서 트랜잭션을 확인하는 과정이 추가적으로 발생됩니다. 기기에서 트랜잭션을 서명하셔야 네트워크로 전파됩니다
:::
해당 트랜잭션이 성공적으로 진행된 것을 확인하기 위해서는 다음 조회 명령어를 사용하세요:
```bash
// 아톰을 위임하거나 리워드를 수령하신 후 계정 잔고가 달라집니다 (계정 잔고 확인 명령어)
gaiacli query account
// 위임을 진행하셨다면 스테이킹 잔고가 표시됩니다 (스테이킹 확인 명령어)
gaiacli query delegations <위임자 주소(delegatorAddress)>
// 트랜잭션이 블록체인에 포함되었으면 해당 tx 정보를 전달합니다
// 트랜잭션을 생성하셨을때 표시되었던 tx hash를 입력하세요 (트랜잭션 확인 명령어)
gaiacli query tx <tx 해시값(txHash)>
```
만약 외부 풀노드를 통해서 블록체인을 사용하신 경우 블록 익스플로러를 통해 트랜잭션을 확인하십시오.
## 거버넌스 참가하기
### 거버넌스에 대해서
코스모스 허브는 아톰을 스테이킹 한 위임자들이 투표를 할 수 있는 시스템이 내장되어있습니다. 프로포절의 종류는 3개가 있으며 다음과 같습니다:
- `텍스트 프로포절(Text Proposals)`: 가장 기본적인 형태의 프로포절입니다. 특정 주제에 대한 네트워크의 의견을 확인하기 위해서 사용됩니다.
- `파라미터 프로포절(Parameter Proposals)`: 네트워크의 기존 파라미터 값을 변경하는 것을 제안하기 위해서 사용됩니다.
- `소프트웨어 업그레이드 프로포절(Software Upgrade Proposal)`: 코스모스 허브의 소프트웨어를 업그레이드 하는 것을 제안하기 위해서 사용됩니다.
모든 아톰 보유자는 프로포절을 제안할 수 있습니다. 특정 프로포절의 투표가 활성화되기 위해서는 `minDeposit`값에 정의된 예치금 보다 높은 `deposit` 비용이 예치되어야 합니다. `deposit`은 프로포절 제안자 외에도 예치를 할 수 있습니다. 만약 제안자가 충분하지 않은 `deposit`을 예치한 경우, 프로포절은 `deposit_period` 상태로 들어가 추가 예치금을 대기합니다. 모든 아톰 보유자는 `depositTx` 트랜잭션을 통해 예치금을 추가할 수 있습니다.
프로포절의 `deposit``minDeposit`을 도달하게 되면 해당 프로포절의 2주 간의 `voting_period`(투표 기간)이 시작됩니다. **위임된 아톰**의 보유자는 해당 프로포절에 투표를 행사할 수 있으며, `Yes`, `No`, `NoWithVeto` 또는 `Abstain` 표를 선택할 수 있습니다. 각 표는 투표자의 위임된 아톰 수량을 반영하게 됩니다. 만약 위임자가 직접 투표를 진행하지 않은 경우, 위임자는 검증인의 표를 따르게 됩니다. 하지만 모든 위임자는 직접 투표를 행사하여 검증인의 표와 다른 표를 행사할 수 있습니다.
투표 기간이 끝난 후, 프로포절이 50% 이상의 `Yes`표를 받았고 (`Abstain` 표를 제외하고) `NoWithVeto` (`Abstain` 표를 제외하고) 표가 33.33% 이하일 경우 통과하게 됩니다.
### 거버넌스 트랜잭션
::: warning
**참고: 다음 명령어는 온라인 상태인 컴퓨터에서만 진행이 가능합니다. 해당 명령은 렛저 하드웨어 월렛 기기를 사용해 실행하는 것을 추천드립니다. 오프라인으로 트랜잭션을 발생하는 방법을 확인하기 위해서는 [여기](#signing-transactions-from-an-offline-computer)를 참고하세요.**
:::
```bash
// 프로포절 제안하기
// <프로포절 종류(type)>=text/parameter_change/software_upgrade
// 플래그 값 예시: <가스 가격(gasPrice)>=0.025uatom
gaiacli tx gov submit-proposal --title "Test Proposal" --description "My awesome proposal" --type <프로포절 종류(type)> --deposit=10000000uatom --gas auto --gas-prices <가스 가격(gasPrice)> --from <위임자 명칭(delegatorKeyName)>
// 프로포절의 예치금 추가하기
// 프로포절의 proposalID 조회: $gaiacli query gov proposals --status deposit_period
// 파라미터 값 예시: <예치금(deposit)>=10000000uatom
gaiacli tx gov deposit <프로포절 ID(proposalID)> <추가할 예치금(deposit)> --gas auto --gas-prices <가스 가격(gasPrice)> --from <위임자 명칭(delegatorKeyName)>
// 프로포절에 투표하기
// 프로포절의 proposalID 조회: $gaiacli query gov proposals --status voting_period
// < 선택(option)>=yes/no/no_with_veto/abstain
gaiacli tx gov vote <프로포절 ID(proposalID)> < 선택(option)> --gas auto --gas-prices <가스 가격(gasPrice)> --from <위임자 명칭(delegatorKeyName)>
```
## 오프라인 컴퓨터에서 트랜잭션 서명하기
렛저 기기가 없거나 오프라인 컴퓨터에서 프라이빗 키를 관리하고 싶으신 경우, 다음 절차를 따라하세요. 우선 **온라인** 컴퓨터에서 미서명 트랜잭션을 다음과 같이 생성하십시오 (예시 명령어에는 본딩 트랜잭션이 포함되어 있습니다):
```bash
// 아톰 본딩하기
// 플래그 값 예시: <본딩할 수량(amountToBond)>=10000000uatom, <위임할 검증인의 bech32 주소(bech32AddressOfValidator)>=cosmosvaloper18thamkhnj9wz8pa4nhnp9rldprgant57pk2m8s, <가스 가격(gasPrice)>=0.025uatom
gaiacli tx staking --amount <본딩할 수량(amountToBond)> --validator <위임할 검증인의 bech32 주소(bech32AddressOfValidator)> --gas auto --gas-prices <가스 가격(gasPrice)> --generate-only > unsignedTX.json
```
이후 서명이 진행되지 않은 `unsignedTx.json` 파일을 복사하신 후 (USB 등을 이용하여) 오프라인 컴퓨터로 이동하십시오. 만약 오프라인 컴퓨터에 아직 계정을 생성하지 않으셨을 경우, [이 항목](#using-a-computer)을 참고하여 오프라인 컴퓨터에서 계정을 생성하세요. 안전을 위해서 서명하기 전에 다음 명령어를 실행해 트랜잭션의 파라미터를 한번 더 확인하십시오:
```bash
cat unsignedTx.json
```
이제 다음 명령어를 실행해 트랜잭션을 서명합니다:
```bash
gaiacli tx sign unsignedTx.json --from <위임자 명칭(delegatorKeyName)> > signedTx.json
```
서명된 `signedTx.json` 파일을 복사하시고 다시 온라인 컴퓨터로 이동하세요. 다음 명령어를 실행해 해당 트랜잭션을 네트워크에 전파하세요:
```bash
gaiacli tx broadcast signedTx.json
```

View File

@ -1,249 +0,0 @@
# 자체 테스트넷 구축하기
해당 문서는 `gaiad` 노드 네트워크를 구축하는 세가지 방법을 제시합니다. 각 모델은 다른 이용 사례에 특화되어 있습니다.
1. 싱글-노드, 로컬, 수동 테스트넷
2. 멀티-노드, 로컬, 자동 테스트넷
3. 멀티-노드, 리모트, 자동 테스트넷
관련 코드는 [네트워크 디렉토리](https://github.com/cosmos/cosmos-sdk/tree/develop/networks)와 하단의 `local``remote` 서브 디렉토리에서 찾으실 수 있습니다.
> 참고: 현재 `remote` 관련 정보는 최신 릴리즈와 호환성이 맞지 않을 수 있으므로 참고하시기 바랍니다.
## 싱글-노드, 로컬, 수동 테스트넷
이 가이드는 하나의 검증인 노드를 로컬 환경에서 운영하는 방식을 알려드립니다. 이런 환경은 테스트/개발 환경을 구축하는데 이용될 수 있습니다.
### 필수 사항
- [gaia 설치](./installation.md)
- [`jq` 설치](https://stedolan.github.io/jq/download/) (선택 사항)
### 제네시스 파일 만들기, 네트워크 시작하기
```bash
# You can run all of these commands from your home directory
cd $HOME
# Initialize the genesis.json file that will help you to bootstrap the network
gaiad init --chain-id=testing testing
# Create a key to hold your validator account
gaiacli keys add validator
# Add that key into the genesis.app_state.accounts array in the genesis file
# NOTE: this command lets you set the number of coins. Make sure this account has some coins
# with the genesis.app_state.staking.params.bond_denom denom, the default is staking
gaiad add-genesis-account $(gaiacli keys show validator -a) 1000stake,1000validatortoken
# Generate the transaction that creates your validator
gaiad gentx --name validator
# Add the generated bonding transaction to the genesis file
gaiad collect-gentxs
# Now its safe to start `gaiad`
gaiad start
```
이 셋업은 모든 `gaiad` 정보를 `~/.gaiad`에 저장힙니다. 생성하신 제네시스 파일을 확인하고 싶으시다면 `~/.gaiad/config/genesis.json`에서 확인이 가능합니다. 위의 세팅으로 `gaiacli`가 이용이 가능하며, 토큰(스테이킹/커스텀)이 있는 계정 또한 함께 생성됩니다.
## 멀티 노드, 로컬, 자동 테스트넷
관련 코드 [networks/local 디렉토리](https://github.com/cosmos/cosmos-sdk/tree/develop/networks/local):
### 필수 사항
- [gaia 설치](./installation.md)
- [docker 설치](https://docs.docker.com/engine/installation/)
- [docker-compose 설치](https://docs.docker.com/compose/install/)
### 빌드
`localnet` 커맨드를 운영하기 위한 `gaiad` 바이너리(리눅스)와 `tendermint/gaiadnode` docker 이미지를 생성합니다. 해당 바이너리는 컨테이너에 마운팅 되며 업데이트를 통해 이미지를 리빌드 하실 수 있습니다.
Build the `gaiad` binary (linux) and the `tendermint/gaiadnode` docker image required for running the `localnet` commands. This binary will be mounted into the container and can be updated rebuilding the image, so you only need to build the image once.
```bash
# Work from the SDK repo
cd $GOPATH/src/github.com/cosmos/cosmos-sdk
# Build the linux binary in ./build
make build-linux
# Build tendermint/gaiadnode image
make build-docker-gaiadnode
```
### 테스트넷 실행하기
4개 노드 테스트넷을 실행하기 위해서는:
```
make localnet-start
```
이 커맨드는 4개 노드로 구성되어있는 네트워크를 gaiadnode 이미지를 기반으로 생성합니다. 각 노드의 포트는 하단 테이블에서 확인하실 수 있습니다:
| 노드 ID | P2P 포트 | RPC 포트 |
| --------|-------|------|
| `gaianode0` | `26656` | `26657` |
| `gaianode1` | `26659` | `26660` |
| `gaianode2` | `26661` | `26662` |
| `gaianode3` | `26663` | `26664` |
바이너리를 업데이트 하기 위해서는 리빌드를 하신 후 노드를 재시작 하시면 됩니다:
```
make build-linux localnet-start
```
### 설정
`make localnet-start``gaiad testnet` 명령을 호출하여 4개 노드로 구성된 테스트넷에 필요한 파일을 `./build`에 저장합니다. 이 명령은 `./build` 디렉토리에 다수의 파일을 내보냅니다.
```bash
$ tree -L 2 build/
build/
├── gaiacli
├── gaiad
├── gentxs
│   ├── node0.json
│   ├── node1.json
│   ├── node2.json
│   └── node3.json
├── node0
│   ├── gaiacli
│   │   ├── key_seed.json
│   │   └── keys
│   └── gaiad
│   ├── ${LOG:-gaiad.log}
│   ├── config
│   └── data
├── node1
│   ├── gaiacli
│   │   └── key_seed.json
│   └── gaiad
│   ├── ${LOG:-gaiad.log}
│   ├── config
│   └── data
├── node2
│   ├── gaiacli
│   │   └── key_seed.json
│   └── gaiad
│   ├── ${LOG:-gaiad.log}
│   ├── config
│   └── data
└── node3
├── gaiacli
│   └── key_seed.json
└── gaiad
├── ${LOG:-gaiad.log}
├── config
└── data
```
`./build/nodeN` 디렉토리는 각자 컨테이너 안에 있는 `/gaiad`에 마운팅 됩니다.
### 로깅
로그는 각 `./build/nodeN/gaiad/gaia.log`에 저장됩니다. 로그는 docker를 통해서 바로 확인하실 수도 있습니다:
```
docker logs -f gaiadnode0
```
### 키와 계정
`gaiacli`를 이용해 tx를 생성하거나 상태를 쿼리 하시려면, 특정 노드의 `gaiacli` 디렉토리를 `home`처럼 이용하시면 됩니다. 예를들어:
```shell
gaiacli keys list --home ./build/node0/gaiacli
```
이제 계정이 존재하니 추가로 새로운 계정을 만들고 계정들에게 토큰을 전송할 수 있습니다.
::: tip
**참고**: 각 노드의 시드는 `./build/nodeN/gaiacli/key_seed.json`에서 확인이 가능하며 `gaiacli keys add --restore` 명령을 통해 CLI로 복원될 수 있습니다.
:::
### 특수 바이너리
다수의 이름을 가진 다수의 바이너리를 소유하신 경우, 어떤 바이너리의 환경 변수(environment variable)를 기준으로 실행할지 선택할 수 있습니다. 바이너리의 패스(path)는 관련 볼륨(volume)에 따라 달라집니다. 예시:
```
# Run with custom binary
BINARY=gaiafoo make localnet-start
```
## 멀티 노드, 리모트, 자동 테스트넷
다음 환경은 [네트워크 디렉터리](https://github.com/cosmos/cosmos-sdk/tree/develop/networks)에서 실행하셔야 합니다.
### Terraform 과 Ansible
자동 디플로이멘트(deployment)는 [Terraform](https://www.terraform.io/)를 이용해 AWS 서버를 만든 후 [Ansible](http://www.ansible.com/)을 이용해 해당 서버에서 테스트넷을 생성하고 관리하여 운영됩니다.
### 필수 사항
- [Terraform](https://www.terraform.io/downloads.html) 과 [Ansible](http://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html)를 리눅스 머신에 설치.
- EC2 create 권한이 있는 [AWS API 토큰](https://docs.aws.amazon.com/general/latest/gr/managing-aws-access-keys.html) 생성
- SSH 키 생성.
```
export AWS_ACCESS_KEY_ID="2345234jk2lh4234"
export AWS_SECRET_ACCESS_KEY="234jhkg234h52kh4g5khg34"
export TESTNET_NAME="remotenet"
export CLUSTER_NAME= "remotenetvalidators"
export SSH_PRIVATE_FILE="$HOME/.ssh/id_rsa"
export SSH_PUBLIC_FILE="$HOME/.ssh/id_rsa.pub"
```
해당 명령은 `terraform``ansible`에서 이용됩니다..
### 리모트 네트워크 만들기
```
SERVERS=1 REGION_LIMIT=1 make validators-start
```
테스트넷 이름은 --chain-id에서 이용될 값이며, 클러스터 이름은 AWS 서버 관리 태그에서 이용될 값입니다. 코드는 각 존의
The testnet name is what's going to be used in --chain-id, while the cluster name is the administrative tag in AWS for the servers. The code will create SERVERS amount of servers in each availability zone up to the number of REGION_LIMITs, starting at us-east-2. (us-east-1 is excluded.) The below BaSH script does the same, but sometimes it's more comfortable for input.
```
./new-testnet.sh "$TESTNET_NAME" "$CLUSTER_NAME" 1 1
```
### Quickly see the /status endpoint
```
make validators-status
```
### Delete servers
```
make validators-stop
```
### Logging
You can ship logs to Logz.io, an Elastic stack (Elastic search, Logstash and Kibana) service provider. You can set up your nodes to log there automatically. Create an account and get your API key from the notes on [this page](https://app.logz.io/#/dashboard/data-sources/Filebeat), then:
```
yum install systemd-devel || echo "This will only work on RHEL-based systems."
apt-get install libsystemd-dev || echo "This will only work on Debian-based systems."
go get github.com/mheese/journalbeat
ansible-playbook -i inventory/digital_ocean.py -l remotenet logzio.yml -e LOGZIO_TOKEN=ABCDEFGHIJKLMNOPQRSTUVWXYZ012345
```
### Monitoring
You can install the DataDog agent with:
```
make datadog-install
```

View File

@ -1,751 +0,0 @@
# Gaia 클라이언트
## Gaia CLI
::: tip 참고
다음과 같은 에러 메시지가 나오는 경우:
```bash
Must specify these options: --chain-id when --trust-node is false
```
라이트 클라이언트 증거를 검증할지 선택하셔야 합니다. 만약 쿼리를 요청하고 있는 노드를 신뢰할 수 있다면, `--trust-node=true`를 입력하시고, 그렇지 않다면 `--chain-id`를 입력하세요.
:::
`gaiacli`는 코스모스 테스트넷에서 이루어지는 트랜잭션과 계정을 관리하는 커맨드 라인 인터페이스입니다. 다음은 유용할 수 있는 `gaiacli` 명령어입니다:
`gaiacli`의 설정 파일은 `$HOME/.gaiacli/config/config.toml` 경로에 저장되며, 파일 수정 또는 `gaiacli config` 명령어를 통해 수정할 수 있습니다:
```bash
gaiacli config chain-id gaia-9004
```
명령어 사용에 관련한 정보는 help를 참고하세요: `gaiacli config --help`.
이 문서에는 유용한 `gaiacli` 명령어와 예시가 포함되어있습니다.
### 키(Keys)
#### 키 종류
키의 형태는 총 3개가 있습니다:
- `cosmos`
- `gaiacli keys add`로 생성되는 계정 키
- 자금을 받는데 사용
- 예시) `cosmos15h6vd5f0wqps26zjlwrc6chah08ryu4hzzdwhc`
* `cosmosvaloper`
- 특정 검증인을 운영자와 연관하는데 사용됨
- 스테이킹 명령 요청에 이용됨
- 예시) `cosmosvaloper1carzvgq3e6y3z5kz5y6gxp3wpy3qdrv928vyah`
- `cosmospub`
- `gaiacli keys add`로 생성되는 계정 키
- 예시) `cosmospub1zcjduc3q7fu03jnlu2xpl75s2nkt7krm6grh4cc5aqth73v0zwmea25wj2hsqhlqzm`
- `cosmosvalconspub`
- `gaiad init`로 새로운 노드가 생성될때 같이 생성되는 키.
- `gaiad tendermint show-validator` 명령으로 키 값을 확인할 수 있음
- 예시) `cosmosvalconspub1zcjduepq0ms2738680y72v44tfyqm3c9ppduku8fs6sr73fx7m666sjztznqzp2emf`
#### 키 생성하기
자금을 받거나, 트랜잭션을 전송하거나, 스테이킹을 하기 위해서는 프라이빗 키(`sk`)와 퍼블릭 키(`pk`) 쌍이 필요합니다.
새로운 _secp256k1_ 키를 생성하기 위해서는:
```bash
gaiacli keys add <account_name(계정/ 이름)>
```
새로운 키를 생성하는 과정에서 나오는 _시트키(seed phrase)_ 는 안전하게 저장하시길 바랍니다. 시드키는 다음과 같은 명령을 실행하여 잊어버린 퍼블릭/프라이빗 키를 복구하는데 이용됩니다:
```bash
gaiacli keys add --recover
```
이제 프라이빗 키를 확인하고 `<account_name>`을 찾으면 됩니다:
```bash
gaiacli keys show <account_name(계정/ 이름)>
```
검증인 운영자 주소는 다음과 같이 확인하시고:
```shell
gaiacli keys show <account_name> --bech=val
```
관련 되어 있는 모든 키 목록은 다음 명령어로 찾으실 수 있습니다:
```bash
gaiacli keys list
```
본인이 연결된 노드의 검증인 pubkey는 다음과 같이 확인할 수 있습니다:
```bash
gaiad tendermint show-validator
```
위 키는 텐더민트 사이닝 키이며, 위임 트랜잭션에서 이용되는 '오퍼레이터 키'가 아니라는 점을 참고하세요.
::: danger 경고
다수의 키에 동일한 passphrase를 사용하는 것을 추천하지 않습니다. 텐더민트 팀과 인터체인 재단은 자산 손실에 대한 책임을 지지 않습니다.
:::
#### 멀티시그 퍼블릭 키 생성하기
새로운 멀티시그 퍼블릭키를 생성하고 확인하시려면 다음과 같은 명령을 입력하세요:
```bash
gaiacli keys add --multisig=name1,name2,name3[...] --multisig-threshold=K new_key_name
```
여기서 `K`는 트랜잭션이 승인되기 위해서 필요한 최소의 키 개수입니다.
`--multisig` 플래그는 로컬 데이터베이스에 `new_key_name`으로 저장될 멀티시그 퍼블릭 키를 생성할때 사용되는 다수의 퍼블릭 키들의 값을 뜻합니다. `--multisig` 값에 포함될 각 키는 로컬 데이터베이스에 존재해야 합니다. `--nosort` 플래그가 정의된지 않은 경우, 멀티시그 조합에 필요한 키들이 입력되는 순서는 무관합니다. 예를 들어 다음 두 명령어는 두개의 동일한 멀티시그 퍼블릭 키를 생성합니다:
```bash
gaiacli keys add --multisig=foo,bar,baz --multisig-threshold=2 multisig_address
gaiacli keys add --multisig=baz,foo,bar --multisig-threshold=2 multisig_address
```
멀티시그 키의 주소는 다음과 같이 빠르게 생성하여 커맨드라인에 프린트할 수 있습니다:
```bash
gaiacli keys show --multisig-threshold K name1 name2 name3 [...]
```
멀티시그 트랜잭션를 생성, 서명, 전파하는 방법은 [멀티시그 트랜잭션](#멀티시그-트랜잭션) 항목을 참고하세요.
### 수수료와 가스
각 트랜잭션은 수수료(fee)를 지정하거나 가스 가격(gas price)을 지정할 수 있지만, 두 값을 함께 지정하는 것은 불가능합니다. 대다수의 유저는 본인이 지불하고 싶은 수수료 금액을 지정할 것으로 예상되며, 이 경우에는 수수료(fee)를 지정하는 방식으로 트랜잭션을 생성하면 됩니다.
각 검증인은 최소 가스 가격(minimum gas price)를 (다수 토큰 사용 가능) 설정할 수 있으며 이 값을 기준으로 `CheckTx` 단계에서 특정 트랜잭션을 블록에 포함시킬지 확인합니다. `gasPrices >= minGasPrices`일때 검증인은 트랜잭션을 처리합니다. 참고로 트랜잭션 전파시 검증인이 요구하는 토큰 중 하나를 수수료 지불 토큰으로 사용하셔야 합니다.
__참고__: 위와 같은 메커니즘에서 일부 검증인은 멤풀에 있는 트랜잭션 중 높은 `gasPrice`의 트랜잭션을 우선적으로 처리할 수 있습니다. 그렇기 때문에 높은 수수료는 트랜잭션 처리 우선 순위를 높힐 수 있습니다.
예시)
```bash
gaiacli tx send ... --fees=100photino
```
또는
```bash
gaiacli tx send ... --gas-prices=1uatom
```
### 계정
#### 테스트 토큰 받기
토큰을 받기 가장 쉬운 곳은 [코스모스 테스트넷 faucet](https://faucetcosmos.network) 입니다. 만약 해당 faucet이 작동하지 않는 경우 [#cosmos-validators](https://riot.im/app/#/room/#cosmos-validators:matrix.org) 채팅 방에서 요청을 하실 수 있습니다. 해당 faucet은 스테이킹을 하려고 하시는 계정의 `cosmos` 주소를 입력하시면 됩니다.
#### 계정 잔고 조회하기
주소에 토큰을 받으신 후 잔고를 확인하시려면 다음 명령어를 입력하시면 됩니다:
```bash
gaiacli query account <account_cosmos(코스모스 주소)>
```
::: warning 참고
계정의 토큰 잔고가 `0`인 계정을 조회하실 경우 다음과 같은 에러 메시지가 표시될 수 있습니다: `No account with address <account_cosmos> was found in the state.` 노드가 체인과 완벽하게 연동이 안된 상태에서 조회를 할 경우 동일한 에러가 발생할 수 있습니다.
:::
### 토큰 전송하기
한 계정에서 다른 계정으로 토큰/코인을 전송하기 위해서는 다음 명령어를 이용하시면 됩니다:
```bash
gaiacli tx send <destination_cosmos(수신자 코스모스 주소)> 10faucetToken \
--chain-id=<chain_id(체인 아이디)> \
--from=<key_name(보낼 /계정 이름)> \
```
::: warning 참고
`--amount` 플래그는 다음과 같은 포맷을 사용합니다 `--amount=<수량|코인 이름>`.
:::
::: tip 참고
해당 트랜잭션이 사용할 가스에 한도를 설정하기 원하시면 `--gas` 플래그를 이용하세요. 만약 `--gas=auto`를 이용하시는 경우, 트랜잭션이 실행되기 전에 가스 서플라이가 자동으로 예측됩니다. 예측된 가스 값과 실제 트랜잭션이 일어나는 사이에 블록체인 상태가 변경될 수 있으며, 기존 예측 수량에서 값이 변경이 될 수 있다는 점을 유의하십시오. 변경 값은 `--gas-adjustment` 플래그를 이용해 설정하실 수 있으며 기본 값은 1.0입니다.
:::
이제 토큰을 전송한 계정과 토큰을 받은 계정의 잔고를 확인합니다:
```bash
gaiacli query account <account_cosmos(보낸 코스모스 계정 주소)>
gaiacli query account <destination_cosmos(수신자 코스모스 주소)>
```
특정 블록 높의에서의 잔고를 확인하고 싶으시다면 `--block` 플래그를 사용하실 수 있습니다:
```bash
gaiacli query account <account_cosmos(코스모스 코스모스 주소)> --block=<block_height(블록 높이)>
```
트랜잭션을 실제 전파하지 않고 시뮬레이션을 하시려면 명령어 뒤에 `--dry-run` 플래그를 추가하세요:
```bash
gaiacli tx send <destination_cosmosaccaddr(받는이 계정 주소)> 10faucetToken \
--chain-id=<chain_id(체인아이디)> \
--from=<key_name(보내는 /계정 이름)> \
--dry-run
```
또한 트랜잭션을 빌드한 후 해당 트랜잭션을 JSON 포맷으로 STDOUT에 프린트 하시기를 원하면 `--generate-only`를 명령어에 추가하시면 됩니다:
```bash
gaiacli tx send <destination_cosmosaccaddr(받는이 코스모스 주소)> 10faucetToken \
--chain-id=<chain_id(체인 아이디)> \
--from=<key_name(보내는 /계정 이름)> \
--generate-only > unsignedSendTx.json
```
::: tip 참고
시뮬레이션은 퍼블릭 키를 필요로 하고 generate only는 키베이스를 사용하지 않기 때문에 시뮬레이션은 tx generate only 기능과 함께 사용될 수 없습니다.
:::
이제 `--generate-only`를 통해 프린트된 트랜잭션 파일을 서명하시려면 다음 명령어를 통해 키를 입력하시면 됩니다:
```bash
gaiacli tx sign \
--chain-id=<chain_id(체인 아이디)> \
--from=<key_name(보내는 /계정 이름)>
unsignedSendTx.json > signedSendTx.json
```
트랜잭션의 서명을 검증하기 위해서는:
```bash
gaiacli tx sign --validate-signatures signedSendTx.json
```
서명된 트랜잭션을 노드로 전파하기 위해서는 JSON 파일을 다음 명령어를 통해 전달하면 됩니다:
```bash
gaiacli tx broadcast --node=<node> signedSendTx.json
```
### 트랜잭션 조회하기
#### 태그 매칭하기
트랜잭션 검색 명령을 이용하여 모든 트랜잭션에 추가되는 특정 `tags` 세트를 검색할 수 있습니다.
각 태그의 키-값 페어는 `<tag(태그)>:<value(값)>` 형태로 이루어집니다. 더 상세한 검색을 원하실 경우 `&` 를 사용하여 태그를 추가할 수 있습니다.
`tag`를 이용한 트랜잭션 조회는 다음과 같이 합니다:
```bash
gaiacli query txs --tags='<tag(태그)>:<value()>'
```
다수의 `tags`를 이용하실 경우:
```bash
gaiacli query txs --tags='<tag1>:<value1>&<tag2>:<value2>'
```
페이지네이션은 `page``limit` 값으로 지원됩니다.
```bash
gaiacli query txs --tags='<tag(태그)>:<value()>' --page=1 --limit=20
```
::: tip 참고
액션 태그는 관련 메시지의 `Type()` 명령이 응답하는 메시지 타입과 언제나 동일합니다.
각 SDK 모듈에 대한 `tags`는 여기에서 확인할 수 있습니다:
- [Common tags](https://github.com/cosmos/cosmos-sdk/blob/d1e76221d8e28824bb4791cb4ad8662d2ae9051e/types/tags.go#L57-L63)
- [Staking tags](https://github.com/cosmos/cosmos-sdk/blob/d1e76221d8e28824bb4791cb4ad8662d2ae9051e/x/staking/tags/tags.go#L8-L24)
- [Governance tags](https://github.com/cosmos/cosmos-sdk/blob/d1e76221d8e28824bb4791cb4ad8662d2ae9051e/x/gov/tags/tags.go#L8-L22)
- [Slashing tags](https://github.com/cosmos/cosmos-sdk/blob/d1e76221d8e28824bb4791cb4ad8662d2ae9051e/x/slashing/handler.go#L52)
- [Distribution tags](https://github.com/cosmos/cosmos-sdk/blob/develop/x/distribution/tags/tags.go#L8-L17)
- [Bank tags](https://github.com/cosmos/cosmos-sdk/blob/d1e76221d8e28824bb4791cb4ad8662d2ae9051e/x/bank/keeper.go#L193-L206)
:::
#### 트랜잭션 해시로 검색하기
다음과 같은 명령어를 이용하여 한 트랜잭션의 해시값을 이용해 조회를 할 수 있습니다:
```bash
gaiacli query tx [hash]
```
### 슬래싱
#### 언제일(Unjailing)
제일링 된 검증인을 언제일 하기 위해서는:
```bash
gaiacli tx slashing unjail --from <validator-operator-addr(검증인 오퍼레이터 주소)>
```
#### 서명 정보
특정 검증인의 서명 정보를 확인하기 위해서는:
```bash
gaiacli query slashing signing-info <validator-pubkey(검증인 pubkey)>
```
#### 슬래싱 파라미터 조회
현재 슬래싱 파라미터를 확인하기 위해서는:
```bash
gaiacli query slashing params
```
### 스테이킹
#### 검증인 세팅하기
검증인 후보가 되기 위한 가이드는 [검증인 세팅](../validators/validator-setup.md) 문서를 참고하세요.
#### 검증인에게 위임하기
메인넷에서는 `atom`을 특정 검증인에게 위임할 수 있습니다. 스테이킹에 참여하는 [위임인](/resources/delegators-faq)은 검증인 보상의 일부를 받을 수 있습니다. 관련 정보는 [코스모스 토큰 모델](https://github.com/cosmos/cosmos/raw/master/Cosmos_Token_Model.pdf)에서 확인하세요.
##### 검증인 조회하기
특정 체인의 모든 검증인 목록을 확인하기 위해서는 다음 명령을 실행하세요:
```bash
gaiacli query staking validators
```
특정 검증인에 대한 정보를 원하실 경우 다음 명령을 실행하세요:
```bash
gaiacli query staking validator <account_cosmosval(cosmosval 계정)>
```
#### 토큰 본딩하기
테스트넷의 경우 `atom`이 아닌 `stake`를 위임합니다. 특정 테스트넷 검증인에게 토큰을 본딩하기 위해서는:
```bash
gaiacli tx staking delegate \
--amount=10000000uatom \
--validator=<validator(검증인 주소)> \
--from=<key_name(트랜잭션을 발생할 /계정 이름)> \
--chain-id=<chain_id(체인 아이디)>
```
`<validator>` 는 검증 대상 검증인의 운영자 주소입니다. 로컬 테스트넷을 운영하시는 경우, 다음 명령어로 관련 주소를 확인하실 수 있습니다:
```bash
gaiacli keys show [name] --bech val
```
여기에서`[name]`은 `gaiad`를 처음 설정하셨을때 정의한 키의 명칭입니다.
토큰이 본딩되고 있는 기간 동안에는 다른 본딩된 토큰과 함께 하나의 '풀'을 이룹니다. 검증인들과 위임인들은 해당 풀의 소유량에 비례하는 보상을 받게 됩니다.
::: tip 참고
보유하고 있는 `stake` 이상을 사용하지 마세요. `stake`가 더 필요한 경우 [Faucet](https://faucetcosmos.network/)에서 추가로 받으실 수 있습니다!
:::
##### 위임 조회
위임 요청을 검증인에게 전송한 경우, 관련 정보를 다음 명령을 통해 조회하실 수 있습니다:
```bash
gaiacli query staking delegation <delegator_addr(위임자 코스모스 주소)> <validator_addr(검증인 주소)>
```
만약 특정 검증인에 대한 모든 위임 상태를 확인하고 싶으실 경우 다음 명령을 이용하세요:
```bash
gaiacli query staking delegation <delegator_addr(위임자 코스모스 주소)>
```
#### 토큰 언본딩 하기
만약 특정 검증인이 악의적인 행동을 했거나 또는 본인이 개인적인 이유로 일부 토큰을 언본딩을 워하는 경우 다음 명령어를 통해 토큰을 언본딩 할 수 있습니다. 언본딩은 정확한 수량인 `shares-amount`(예시, `12.1`) 또는 언본딩을 원하는 물량의 비율인 `shares-fraction`(예시, `0.25`) 값으로 표현될 수 있습니다.
```bash
gaiacli tx staking unbond \
<validator_addr> \
10atom \
--from=<key_name> \
--chain-id=<chain_id>
```
언본딩은 언본딩 기간이 끝나는 대로 완료됩니다.
##### 언본딩 조회하기
언본딩 절차를 시작하신 후 관련 정보를 조회하는 방법은 다음과 같습니다:
```bash
gaiacli query staking unbonding-delegation <delegator_addr(위임자 주소)> <validator_addr(검증인 주소)>
```
또는 특정 위임자의 모든 언본딩 정보를 확인하고 싶으신 경우:
```bash
gaiacli query staking unbonding-delegations <account_cosmos(위임자 주소)>
```
추가적으로 특정 검증인으로 부터 언본딩하는 정보를 확인하고 싶으신 경우:
```bash
gaiacli query staking unbonding-delegations-from <account_cosmosval(검증인 cosmosval 주소)>
```
#### 재위임(Redelegate) 하기
재위임이란 본딩 되어있는 토큰을 한 검증인으로 부터 다른 검증인으로 옮기는 것입니다:
```bash
gaiacli tx staking redelegate \
<src-validator-operator-addr> \
<dst-validator-operator-addr> \
10atom \
--from=<key_name> \
--chain-id=<chain_id>
```
위 예시와 같이 재위임될 토큰의 수량은 특정 수량(`shares-amount`) 또는 일정 비율(`shares-fraction`)로 표현될 수 있습니다.
언본딩 기간이 지나면 재위임은 자동으로 완료됩니다.
##### 재위임 조회하기
재위임을 시작하신 후, 다음 명령을 통해서 관련 정보를 조회하실 수 있습니다:
```bash
gaiacli query staking redelegation <delegator_addr(위임자 주소)> <src_val_addr(위임 취소한 검증인 주소)> <dst_val_addr(위임 받을 검증인 주소)>
```
특정 위임자의 모든 검증인에 대한 재위임을 확인하고 싶으신 경우:
```bash
gaiacli query staking redelegations <account_cosmos(위임자 코스모스 주소)>
```
특정 검증인에 대한 재위임을 확인하고 싶으신 경우:
```bash
gaiacli query staking redelegations-from <account_cosmosval(검증인 주소)>
```
#### 파라미터 조회
파라미터는 스테이킹의 하이-레벨 설정을 정의합니다. 현재 값은 다음 명령어를 통해서 조회할 수 있습니다:
```bash
gaiacli query staking params
```
위 명령어는 다음과 같은 정보를 표기합니다:
- 언본딩 기간
- 최대 검증인 수
- 스테이킹 코인 표기
해당 값은 거버넌스 절차의 `ParameterChange`(파라미터 변경) 프로포절을 통해서 변경됩니다.
#### 스테이킹 풀 조회하기
스티이킹 풀은 현재 상태(state)에 대한 다이내믹 파라미터(dynamic parameter)를 정의합니다. 관련 정보는 다음 명령을 통해 조회할 수 있습니다:
```bash
gaiacli query staking pool
```
`pool` 명령은 다음과 같은 정보에 대한 현재 값을 제공합니다:
- 본딩된 토큰 / 본딩 되어있지 않은 토큰
- 총 토큰 수량
- 연 인플레이션 비율과 가장 최근에 인플레이션이 변경된 블록 높이
- 가장 최근 기록된 bonded shares
##### 검증인 위임 조회하기
특정 검증인에 대한 모든 위임은 다음 명령으로 조회가 가능합니다:
```bash
gaiacli query delegations-to <account_cosmosval(검증인 주소)>
```
### 거버넌스
거버넌스는 코스모스 허브의 유저가 소프트웨어 업그레이드, 메인넷 파라미터 또는 문서 형태의 프로포절 등에 대한 합의를 하는 절차입니다. 유저는 프로포절에 대한 투표를 함으로 이 절차에 참여할 수 있으며, 투표권은 메인넷 아톰 홀더들에게만 주어집니다.
다음은 투표 절차에 대한 정보입니다:
- 투표권은 본딩된 `Atom`을 소유한 유저에게만 주어지며, `본딩된 아톰 1개 = 1표` 기준으로 집계됩니다
- 투표권을 행사하지 않은 위임인들은 본인이 위임한 검증인들의 투표를 따르게 됩니다
- **검증인은 모든 프로포절에 투표를 해야합니다.** 프로포절에 투표를 하지 않는 검증인들은 부분적 슬래싱 페널티를 받게 됩니다
- 표는 각 프로포절의 투표 마감 시점(메인넷 기준 2주)에서 집계됩니다. 각 계정은 투표기간 중 표를 변경할 수 있으며(트랜잭션 수수료는 부과됩니다), 가장 마지막 표가 유효한 표로 집계됩니다
- 투표자들은 `Yes`, `No`, `NoWithVeto``Abstain` 중에서 하나를 선택하여 투표할 수 있습니다
- 프로포절은 `(YesVote/(YesVotes+NoVotes+NoWithVetoVotes))>1/2` 또는 `(NoWithVetoVotes/(YesVotes+NoVotes+NoWithVetoVotes))<1/3`일 경우에만 통과하며, 이 외의 경우 부결됩니다.
거버넌스 절차에 대한 더 자세한 정보는 [거버넌스 모듈 스펙](./../spec/governance)을 확인하세요.
#### 거버넌스 프로포절 생성하기
새로운 거버넌스 프로포절을 생성하기 위해서는 프로포절 정보와 일정의 보증금을 예치해야 합니다:
- `title`: 프로포절 제목
- `description`: 프로포절 설명
- `type`: 프로포절 유형. _Text_ 형태여야 합니다 (_SoftwareUpgrade_ 와 _ParameterChange_ 는 아직 지원되지 않습니다).
```bash
gaiacli tx gov submit-proposal \
--title=<title(프로포절 제목)> \
--description=<description(프로포절 설명)> \
--type=<Text/ParameterChange/SoftwareUpgrade(프로포절 타입)> \
--deposit=<40000000uatom(예치금 수량)> \
--from=<name(트랜잭션을 발생시킬 /계정 이름)> \
--chain-id=<chain_id(체인 아이디)>
```
##### 프로포절 조회
프로포절이 생성된 후 관련 정보를 조회하는 방법은 다음과 같습니다:
```bash
gaiacli query gov proposal <proposal_id>
```
모든 프로포절에 대한 조회를 하기 위해서는:
```bash
gaiacli query gov proposals
```
프로포절을 `voter` 또는 `depositor`로 필터링 해서 조회할 수도 있습니다.
특정 거버넌스 프로포절의 제안자를 확인하기 위해서는:
```bash
gaiacli query gov proposer <proposal_id(프로포절 ID)>
```
#### 보증금 추가하기
프로포절이 네트워크에 전파되기 위해서는 해당 프로포절의 보증금이 `minDeposit` 값 이상이어야 합니다 (현재 기본 값은 `10 stake`입니다). 만약 사전에 생성한 프로포절이 해당 기준을 충족하지 못하였다면 추후에 보증금을 추가 예치하여 활성화할 수 있습니다. 프로포절의 보증금이 최소 값을 도달하면 해당 프로포절의 투표는 활성화 됩니다:
```bash
gaiacli tx gov deposit <proposal_id(프로포절 ID)> <200000000uatom(금액)> \
--from=<name(트랜잭션을 발생시킬 /계정 이름)> \
--chain-id=<chain_id(체인 아이디)>
```
> _참고_: 기본 보증금 기준을 충족하지 못한 프로포절은 `MaxDepositPeriod`이 지나면 자동으로 삭제됩니다.
##### 보증금 조회하기
새로운 프로포절이 생성된 후, 해당 프로포절에 대한 보증금은 다음과 같이 조회할 수 있습니다:
```bash
gaiacli query gov deposits <proposal_id(프로포절 ID)>
```
특정 주소에 대한 보증금은 다음과 같이 확인하실 수 있습니다:
```bash
gaiacli query gov deposit <proposal_id(프로포절 ID)> <depositor_address(예치자 주소)>
```
#### 프로포절 투표하기
프로포절의 보증금이 `MinDeposit` 값에 도달하면 투표 기간이 시작됩니다. 본딩된 `Atom`을 보유한 홀더들은 각자 투표를 할 수 있습니다:
```bash
gaiacli tx gov vote <proposal_id> <Yes/No/NoWithVeto/Abstain( 선택)> \
--from=<name(트랜잭션을 발생시킬 /계정 이름)> \
--chain-id=<chain_id(체인 아이디)>
```
##### 표 조회하기
특정 표와 관련한 정보를 조회하기 위해서는:
```bash
gaiacli query gov vote <proposal_id(프로포절 ID)> <voter_address(투표자 주소)>
```
과거 프로포절에 대한 표 정보를 확인하기 위해서는:
```bash
gaiacli query gov votes <proposal_id(프로포절 ID)>
```
#### 프로포절 결과 조회하기
특정 프로포절에 대한 결과를 확인하기 위해서는:
```bash
gaiacli query gov tally <proposal_id(프로포절 ID)>
```
#### 거버넌스 파라미터 조회하기
현재 거버넌스 파라미터를 조회하기 위해서는:
```bash
gaiacli query gov param voting
gaiacli query gov param tallying
gaiacli query gov param deposit
```
### 스테이킹 리워드 분배
#### 리워드 분배 파라미터 조회
현재 리워드 분배 파라미터 값을 조회하기 위해서는:
```bash
gaiacli query distr params
```
#### 수령되지 않은 리워드를 받기
수령하지 않은 리워드를 수령하기 위해서는:
```bash
gaiacli query distr outstanding-rewards
```
#### 검증인 커미션 조회
특정 검증인의 커미션을 조회하기 위해서는:
```bash
gaiacli query distr commission <validator_address(검증인 주소)>
```
#### 검증인 슬래싱 조회
특정 검증인의 슬래싱 기록을 조회하기 위해서는:
```bash
gaiacli query distr slashes <validator_address(검증인 주소)> <start_height(시작 블록 높이)> <end_height(마지막 블록 높이)>
```
#### 특정 검증인에서 수령되지 않은 리워드 조회
위임자의 특정 검증인에서 발생된 미수령 리워드를 조회하기 위해서는:
```bash
gaiacli query distr rewards <delegator_address(위임자 주소)> <validator_address(검증인 주소)>
```
#### 위임자의 수령 대기중인 모든 리워드 조회
위임자의 모든 수령 대기 리워드를 조회하기 위해서는:
```bash
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`이 보관되었으며 이 주소를 기반으로 멀티 트랜잭션이 서명됩니다:
```bash
gaiacli keys show --address p1p2p3
```
위 주소를 기반으로 멀티시그 트랜잭션을 생성하는 과정의 첫 단계는 다음과 같습니다:
```bash
gaiacli tx send cosmos1570v2fq3twt0f0x02vhxpuzc9jc4yl30q2qned 10000000uatom \
--from=<multisig_address(멀티시그 주소)> \
--generate-only > unsignedTx.json
```
`unsignedTx.json` 파일은 서명되지 않은 트랜잭션을 JSON 형태로 보관합니다. 이제 `p1`은 본인의 프라이빗 키를 사용해 트랜잭션을 서명할 수 있습니다:
```bash
gaiacli tx sign \
--multisig=<multisig_address(멀티시그 주소)> \
--name=p1 \
--output-document=p1signature.json \
unsignedTx.json
```
서명이 생성된 후, `p1``unsignedTx.json``p1signature.json``p2` 또는 `p3`에게 전다합니다. `p2``p3`은 이를 기반으로 서명을 진행합니다:
```bash
gaiacli tx sign \
--multisig=<multisig_address(멀티시그 주소)> \
--name=p2 \
--output-document=p2signature.json \
unsignedTx.json
```
`p1p2p3`은 3명 중 2명의 서명을 필요로 하는 멀티시그 키입니다. 그렇기 때문에 `p1`이 서명한 트랜잭션에 하나의 프라이빗 키만 더해지면 트랜잭션이 유효합니다. 이제 다른 키 보유자들은 필요한 서명 파일을 결합하여 멀티시그 트랜잭션을 생성할 수 있습니다:
```bash
gaiacli tx multisign \
unsignedTx.json \
p1p2p3 \
p1signature.json p2signature.json > signedTx.json
```
서명된 트랜잭션은 다음과 같은 명령을 실행하여 노드에 전파합니다:
```bash
gaiacli tx broadcast signedTx.json
```
## Shell 완료 스크립트
흔히 사용되는 `Bash``Zsh` 같은 UNIX의 완료 스크립트(completion script)는 `completion` 명령어를 사용해 생성될 수 있습니다. 이 명령은 `gaiad``gaiacli`에서 사용 가능합니다.
`Bash` 완료 스크립트를 생성하기 위해서는 다음 명령어를 실행하세요:
```bash
gaiad completion > gaiad_completion
gaiacli completion > gaiacli_completion
```
`Zsh` 완료 스크립트를 생성하기 위해서는 다음 명령어를 실행하세요:
```bash
gaiad completion --zsh > gaiad_completion
gaiacli completion --zsh > gaiacli_completion
```
::: tip 참고
대다수의 UNIX 시스템에서는 이런 스크립트를 `.bashrc` 또는 `.bash_profile`을 사용해 로딩할 수 있습니다:
```bash
echo '. gaiad_completion' >> ~/.bashrc
echo '. gaiacli_completion' >> ~/.bashrc
```
셸 자동 완성을 사용하시려면 사용하시는 OS의 매뉴얼을 참고하십시오.
:::

View File

@ -1,47 +0,0 @@
# Gaia 제네시스 스테이트
Gaia의 제네시스 스테이트인 `GenesisState`는 계정 정보, 모듈 스테이트 그리고 제네시스 트랜잭션 같은 메타데이터 등으로 구성됩니다. 각 모듈은 각자의 `GenesisState`를 지정할 수 있습니다. 또한, 각 모듈은 각자의 제네시스 스테이트 검증, 임포트, 엑스포트 기능 등을 지정할 수 있습니다.
Gaia 제네시스 스테이트는 다음과 같이 정의됩니다:
```go
type GenesisState struct {
Accounts []GenesisAccount `json:"accounts"`
AuthData auth.GenesisState `json:"auth"`
BankData bank.GenesisState `json:"bank"`
StakingData staking.GenesisState `json:"staking"`
MintData mint.GenesisState `json:"mint"`
DistrData distr.GenesisState `json:"distr"`
GovData gov.GenesisState `json:"gov"`
SlashingData slashing.GenesisState `json:"slashing"`
GenTxs []json.RawMessage `json:"gentxs"`
}
```
ABCI `initChainer`에서는 Gaia의 `initFromGenesisState`를 기반으로 각 모듈의 `InitGenesis`를 호출해 각 모듈들의 `GenesisState`를 파라미터 값으로 불러옵니다.
## 계정
`GenesisState`에서 제네시스 계정은 다음과 같이 정의됩니다:
```go
type GenesisAccount struct {
Address sdk.AccAddress `json:"address"`
Coins sdk.Coins `json:"coins"`
Sequence uint64 `json:"sequence_number"`
AccountNumber uint64 `json:"account_number"`
// vesting account fields
OriginalVesting sdk.Coins `json:"original_vesting"` // total vesting coins upon initialization
DelegatedFree sdk.Coins `json:"delegated_free"` // delegated vested coins at time of delegation
DelegatedVesting sdk.Coins `json:"delegated_vesting"` // delegated vesting coins at time of delegation
StartTime int64 `json:"start_time"` // vesting start time (UNIX Epoch time)
EndTime int64 `json:"end_time"` // vesting end time (UNIX Epoch time)
}
```
각 계정은 시퀀스 수(sequence number (nonce))와 주소 외에도 유효한 고유 계정 번호를 보유해야 합니다.
만약 계정이 베스팅 계정인 경우, 필수 베스팅 정보가 제공되어야 합니다. 베스팅 계정은 최소 `OriginalVestin` 값과 `EndTime` 값이 정의되어야 합니다. 먄약 `StartTime`이 함께 정의된 경우, 계정은 "연속되는(continuous)" 베스팅 계정으로 처리되며, 지정된 스케줄 안에서 꾸준히 토큰을 언락합니다. 여기에서 `StartTime`의 값은 `EndTime`의 값 보다 작아야 하지만, `StartTime`의 값은 미래 값으로 지정할 수는 있습니다 (제네시스 시간과 동일하지 않아도 괜찮습니다). 새로운 스테이트(엑스포트 되지 않은 스테이트)에서 시작하는 체인의 경우, `OriginalVestin`의 값은 `Coins`의 값과 동일하거나 적어야 합니다.
<!-- TODO: Remaining modules and components in GenesisState -->

View File

@ -1,45 +0,0 @@
## Gaia 설치하기
이 가이드는 `gaiad``gaiacli`를 엔트리포인트를 시스템에 설치하는 방법을 설명합니다. `gaiad``gaiacli`가 설치된 서버를 통해 [풀노드](./join-testnet.md#run-a-full-node) 또는 [밸리데이터로](./validators/validator-setup.md)써 최신 테스트넷에 참가하실 수 있습니다.
### Go 설치하기
공식 [Go 문서](https://golang.org/doc/install)를 따라서 `go`를 설치하십시오. `$GOPATH`, 그리고 `$PATH`의 환경을 꼭 세팅하세요. 예시:
```bash
mkdir -p $HOME/go/bin
echo "export GOPATH=$HOME/go" >> ~/.bash_profile
echo "export PATH=\$PATH:\$GOPATH/bin" >> ~/.bash_profile
echo "export GO111MODULE=on" >> ~/.bash_profile
source ~/.bash_profile
```
::: tip
코스모스 SDK를 운영하기 위해서는 **Go 1.11.ㅎ+** 이상 버전이 필요합니다.
:::
### 바이너리 설치하기
다음은 최신 Gaia 버전을 설치하는 것입니다. 예시에서는 최신 스테이블 릴리즈가 포함되어있는 `master` 브랜치를 이용해 진행됩니다. 필요에 따라 `git checkout`을 통해 [최신 릴리즈](https://github.com/cosmos/cosmos-sdk/releases)가 설치되어있는지 확인하세요.
```bash
mkdir -p $GOPATH/src/github.com/cosmos
cd $GOPATH/src/github.com/cosmos
git clone https://github.com/cosmos/cosmos-sdk
cd cosmos-sdk && git checkout master
make tools install
```
> *참고*: 여기에서 문제가 발생한다면, Go의 최신 스테이블 버전이 설치되어있는지 확인하십시오.
위 절차를 따라하시면 `gaiad``gaiacli` 바이너리가 설치될 것입니다. 설치가 잘 되어있는지 확인하십시오:
```bash
$ gaiad version
$ gaiacli version
```
### 다음 절차
축하합니다! 이제 [퍼블릭 테스트넷](./join-testnet.md)에 참가하시거나 or [프라이빗 테스트넷](./deploy-testnet.md)을 운영하실 수 있습니다.

View File

@ -1,157 +0,0 @@
# 최신 퍼블릭 테스트넷에 참가하기
::: tip 최신 테스트넷
최신 테스트넷에 대한 정보는 다음의 [테스트넷 리포](https://github.com/cosmos/testnets)를 참고하세요. 어떤 코스모스 SDK 버전과 제네시스 파일에 대한 정보가 포합되어있습니다.
:::
::: warning
**여기에서 더 진행하시기 전에 [gaia](./installation.md)가 꼭 설치되어있어야 합니다.**
:::
## 새로운 노드 세팅하기
> 참고: 과거 테스트넷에서 풀 노드를 운영하셨다면 이 항목은 건너뛰시고 [과거 테스트넷에서 업그레이드 하기](#upgrading-from-previous-testnet)를 참고하세요.
다음 절차는 새로운 풀노드를 처음부터 세팅하는 절차입니다.
우선 노드를 실행하고 필요한 config 파일을 생성합니다:
```bash
gaiad init --moniker <your_custom_moniker>
```
::: warning 참고
`--moniker`는 ASCII 캐릭터만을 지원합니다. Unicode 캐릭터를 이용하는 경우 노드 접근이 불가능할 수 있으니 참고하세요.
:::
`moniker``~/.gaiad/config/config.toml` 파일을 통해 추후에 변경이 가능합니다:
```toml
# A custom human readable name for this node
moniker = "<your_custom_moniker>"
```
최소 수수료보다 낮은 트랜잭션을 거절하는 스팸 방지 메커니즘을 활성화 하시려면 `~/.gaiad/config/gaiad.toml` 파일을 변경하시면 됩니다:
```
# This is a TOML config file.
# For more information, see https://github.com/toml-lang/toml
##### main base config options #####
# Validators reject any tx from the mempool with less than the minimum fee per gas.
minimum_fees = ""
```
당신의 풀노드가 활성화 되었습니다! [제네시스와 시드](#genesis-seeds)로 넘어가주세요.
## 과거 테스트넷에서 업그레이드 하기
다음은 과거 테스트넷에서 운영을 했었던 풀노드가 최신 테스트넷으로 업그레이드를 하기 위한 절차입니다.
### 데이터 리셋
우선, 과거 파일을 삭제하고 데이터를 리셋합니다.
```bash
rm $HOME/.gaiad/config/addrbook.json $HOME/.gaiad/config/genesis.json
gaiad unsafe-reset-all
```
이제 `priv_validator.json``config.toml`을 제외하고 노드가 초기화 되었습니다. 만약 해당 노드에 연결된적이 있는 센트리노드나 풀노드가 같이 업그레이드 되지 않았다면 연결이 실패할 수 있습니다.
::: danger 경고
각 노드가 **고유한** `priv_validator.json`을 보유하고 있는 것을 확인하세요. 오래된 노드의 `priv_validator.json`을 다수의 새로운 노드로 복사하지 마세요. 동일한 `priv_validator.json`을 보유한 두개 이상의 노드가 동시에 운영될 경우, **더블 사이닝**이 일어날 수 있습니다.
:::
### 소프트웨어 업그레이드
이제 소프트웨어를 업그레이드할 시간입니다:
```bash
cd $GOPATH/src/github.com/cosmos/cosmos-sdk
git fetch --all && git checkout master
make update_tools install
```
::: tip
*참고*: 이 단계에서 문제가 있으시다면 최신 스테이블 GO 버전이 설치되어있는지 확인해주세요.
:::
위 예시에서는 가장 최신 스테이블 릴리즈가 있는 `master`를 사용합니다. 테스트넷마다 운용하는 릴리즈가 다를 경우가 있으니 [testnet repo](https://github.com/cosmos/testnets)를 확인하셔서 어떤 버전이 필요한지 확인하시고, [SDK 릴리즈 페이지](https://github.com/cosmos/cosmos-sdk/releases)에서 각 릴리즈에 대한 정보를 확인하세요.
이제 풀 노드가 깔끔하게 업그레이드 되었습니다!
## 제네시스와 시드
### 제네시스 파일 복사하기
테스트넷의 `genesis.json`파일을 `gaiad`의 config 디렉토리로 가져옵니다.
```bash
mkdir -p $HOME/.gaiad/config
curl https://raw.githubusercontent.com/cosmos/testnets/master/latest/genesis.json > $HOME/.gaiad/config/genesis.json
```
위 예시에서는 최신 테스트넷에 대한 정보가 포함되어있는 [테스트넷 repo]의 `latest`를 이용하는 것을 참고하세요. 만약 다른 테스트넷에 연결하신다면 해당 테스트넷의 파일을 가져오는 것인지 확인하세요.
설정이 올바르게 작동하는지 확인하기 위해서는 다음을 실행하세요:
```bash
gaiad start
```
### 시드 노드 추가하기
이제 노드가 다른 피어들을 찾는 방법을 알아야합니다. `$HOME/.gaiad/config/config.toml`에 안정적인 시드 노드들을 추가할 차례입니다. `testnets` repo에 각 테스트넷에 대한 시드 노드 링크가 포함되어있습니다. 만약 현재 운영되고 있는 테스트넷을 참가하고 싶으시다면 [여기](https://github.com/cosmos/testnets)에서 어떤 노드를 이용할지 확인하세요.
만약 해당 시드가 작동하지 않는다면, 추가적인 시드와 피어들을 [코스모스 익스플로러](https://explorer.cosmos.network/nodes)를 통해 확인하실 수 있습니다. `Full Nodes` 탭을 들어가셔서 프라이빗(`10.x.x.x`) 또는 로컬 IP 주소(https://en.wikipedia.org/wiki/Private_network)가 *아닌* 노드를 열어보세요. `Persistent Peer` 값에 연결 스트링(connection string)이 표기되어 있습니다. 가장 최적화된 결과를 위해서는 4-6을 이용하세요.
이 외에도 [밸리데이터 라이엇 채팅방](https://riot.im/app/#/room/#cosmos-validators:matrix.org)을 통해서 피어 요청을 할 수 있습니다.
시드와 피어에 대한 더 많은 정보를 원하시면 [여기](https://github.com/tendermint/tendermint/blob/develop/docs/tendermint-core/using-tendermint.md#peers)를 확인하세요.
## 풀노드 운영하기
다음 커맨드로 풀노드를 시작하세요:
```bash
gaiad start
```
모든 것이 잘 작동하고 있는지 확인하기 위해서는:
```bash
gaiacli status
```
네트워크 상태를 [코스모스 익스플로러](https://explorecosmos.network)를 통해 확인하세요. 현재 풀 노드가 현재 블록높이로 싱크되었을 경우, 익스플로러의 [풀 노드 리스트](https://explorecosmos.network/validators)에 표시가 될 것입니다. 익스플로러가 모든 노드에 연결하지는 않아 표시가 되지 않을 수 있다는 점 참고해주십시오.
## 상태 내보내기(Export State)
Gaia는 현재 애플리케이션의 상태를 JSON파일 형태로 내보낼 수 있습니다. 이런 데이터는 수동 분석과 새로운 네트워크의 제네시스 파일로 이용될 때 유용할 수 있습니다.
현재 상태를 내보내기 위해서는:
```bash
gaiad export > [filename].json
```
특정 블록 높이의 상태를 내보낼 수 있습니다(해당 블록 처리 후 상태):
```bash
gaiad export --height [height] > [filename].json
```
만약 해당 상태를 기반으로 새로운 네트워크를 시작하시려 한다면, `--for-zero-height` 플래그를 이용하셔서 내보내기를 실행해주세요:
```bash
gaiad export --height [height] --for-zero-height > [filename].json
```
## 밸리데이터 노드로 업그레이드 하기
이제 풀노드가 활성화 되었습니다! 다음은 무엇일까요?
이제는 해당 풀노드를 업그레이드 하여 코스모스 밸리데이터가 될 수 있습니다. 상위 100개 밸리데이터는 코스모스 허브의 블록 생성과 제안을 할 수 있습니다. 밸리데이터 노드로 업그레이드 하시기 위해서는 [밸리데이터 설정하기](./validators/validator-setup.md) 항목으로 넘어가주세요.

View File

@ -1,9 +0,0 @@
# 키
키 관리에 대해서는 [텐더민트 스펙](https://github.com/tendermint/tendermint/blob/master/docs/spec/blockchain/encoding.md#public-key-cryptography)을 확인하세요.
`gaiacli keys --help` 명령어를 통해 추가 정보를 얻으실 수 있습니다.
[테스트넷 투토리얼](https://github.com/cosmos/cosmos-sdk/tree/develop/cmd/gaia/testnets)에서 관련 정보를 확인하실 수 있습니다.
참고: 이 문서는 현재 작업중에 있습니다.

View File

@ -1,30 +0,0 @@
# 레저(Ledger) 나노 하드웨어 지갑 지원
### 레저 시드를 이용한 계정 키 관리
이제 `gaiacli` 가 레저(Ledger) 시드를 통한 계정 키 관리를 지원합니다. 해당 기능을 이용하시기 위해서는 다음이 필요합니다:
- 이용하실 네트워크와 연결된 `gaiad` 인스턴스.
- 사용하시는 `gaiad` 인스턴스와 연동된 `gaiacli` 인스턴스.
- `ledger-cosmos` 앱이 설치된 레저 나노 기기.
* 레저 기기에 코스모스 앱을 설치하기 위해서는 [`ledger-cosmos`](https://github.com/cosmos/ledger-cosmos/blob/master/docs/BUILD.md) 깃허브 레포지토리를 확인하세요.
* 실전 운용 가능한 앱 버전은 추후 [레저 앱스토어](https://www.ledgerwallet.com/apps)를 통해 배포될 예정입니다.
> **참고:** 코스모스 키는 [BIP 44 Hierarchical Deterministic wallet 스펙](https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki)에 파생되었습니다. 관련 패스에 대한 정보는 [hd package](https://github.com/cosmos/cosmos-sdk/blob/develop/crypto/keys/hd/hdpath.go#L30)를 참고하세요.
코스모스 앱을 레저 기기에 성공적으로 설치하시고, `gaiacli` 에서 레저와 연결하는데 성공하셨다면 다음과 같이 레저 키를 생성하실 수 있습니다:
```bash
$ gaiacli keys add {{ .Key.Name }} --ledger
NAME: TYPE: ADDRESS: PUBKEY:
{{ .Key.Name }} ledger cosmos1aw64xxr80lwqqdk8u2xhlrkxqaxamkr3e2g943 cosmospub1addwnpepqvhs678gh9aqrjc2tg2vezw86csnvgzqq530ujkunt5tkuc7lhjkz5mj629
```
이 키는 레저가 연결되고 잠금 해제된 상태에서면 사용이 가능합니다. 해당 키를 이용해 코인을 전송하시려면 다음 명령을 실행하세요:
```bash
$ gaiacli tx send { .Destination.AccAddr } 10000000uatom --from { .Key.Name } --chain-id=gaia-7000
```
레저 기기에서 해당 트랜잭션을 검토하신 후 서명이 되었다면 트랜잭션 결과를 레저 기기에서 확인하실 수 있습니다.

View File

@ -1,34 +0,0 @@
# 검증인(밸리데이터) 개요
## 소개
[코스모스 허브](/introduction/cosmos-hub.md)는 [텐더민트](/introduction/tendermint.md) 기반으로 만들어졌으며 특정 검증인들이 블록체인에 새로운 블록을 기록하는 절차를 기반으로 설계되었습니다. 검증인들은 각 검증인들의 프라이빗키로 서명된 암호화된 표(votes)를 전파하면서 합의 프로토콜에 참여합니다.
검증인 후보는 본인들의 아톰을 자체적으로 위임하거나, 위임자들의 아톰을 위임받을 수 있습니다. 코스모스 허브는 100개의 검증인으로 시작하여 300개의 검증인으로 숫자를 늘려나갈 예정입니다. 검증인은 위임량에 따라서 정해지며, 상위 100위 검증인은 코스모스 검증인으로 선출됩니다.
검증인들과 위임자들은 텐더민트 합의 프로토콜에 참여하며 블록생성에 대한 보상을 지급받게 됩니다. 초기에 트랜잭션 수수료는 아톰으로 결제되지만, 거버넌스로 통과된 '화이트리스트 토큰'들이 수수료 토큰으로 이용될 수 있습니다. 추가적으로 검증인들은 본인의 검증인 서비스 제공에 대한 커미션을 측정할 수 있습니다.
만약 검증인이 이중서명(double sign)을 하거나, 자주 오프라인 되거나 또는 거버넌스에 참여하지 않는 경우, 그들의 아톰과 해당 검증인에게 위임된 아톰은 '슬래싱'당할 수 있습니다. 슬래싱 페널티는 악의적 행동의 중대성에 따라 비례합니다.
## 하드웨어
현재 검증인의 키 관리에 적합한 클라우드 솔루션은 없습니다. 앞으로 클라우드 SGX 도입이 되면서 조금 더 안전한 솔루션이 제공될 수 있을 것으로 기대되고 있습니다. 하지만 현재로써 클라우드 키 관리에 리스크가 있기 때문에 검증인들은 제한된 안전한 구역에 장비를 세팅하는 것을 추천합니다. 보안이 확보되는 특정 데이터 센터의 코로케이션(co-location) 같은 형태로 운영이 될 수 있습니다.
검증인들은 서버 장비가 운영되는 데이터센터에 스토리지 백업, 복수 회선, 그리고 전력 백업 등의 시스템이 갖춰져 있는 것을 확인해야 합니다. 광선, 방화벽, 스위칭 등 또한 중복되어있는 것을 추천드립니다. 하드웨어 성능에는 중저형 서버로 시작해도 충분할 것으로 예상되나, 충분한 검증과 테스팅을 실행하시는 것을 추천드립니다.
코스모스 생태계 초기의 네트워크 사용량은 크지 않을 것으로 예상되며, 현재 테스트넷은 대량의 리소스를 필요로 하지 않습니다. 하지만 네트워크가 성장하며 대역폭, CPU와 메모리 사용량이 높아질 것으로 예상됩니다. 추가적으로, 몇년의 블록체인 기록을 저장해야되기 때문에 대용량 하드드라이브를 이용하시는 것을 추천드립니다.
## 웹사이트 세팅하기
검증인의 고유 웹사이트를 만드시고, 코스모스 [포럼](https://forum.cosmos.network/t/validator-candidates-websites/127/3)을 통해서 검증인 참여 의사를 알려주십시오. 위임인들은 위임 대상 검증인에 대한 정보를 확인하려 할 수 있으니, 관련 정보를 기제해주시기 바랍니다.
## 법적 검토
검증인 사업을 운영하시기 전에 전문 법적 검토를 미리 받으실 것을 추천드립니다.
## 검증인 커뮤니티
추가적으로 검증인을 운영하는 것에 대한 질문과 정보는 검증인 커뮤니티 채팅방과 포럼을 이용하세요:
* [검증인 채팅](https://riot.im/app/#/room/#cosmos_validators:matrix.org)
* [검증인 포럼](https://forum.cosmos.network/c/validating)

View File

@ -1,54 +0,0 @@
## 검증인 보안
검증인 세팅의 다양성이 네트워크 전체의 탄력성을 증가하기 때문에 각 검증인은 각자 독립적인 형태로 노드를 운영하는 것을 추천합니다. 메인넷을 대비하기 위해서 지금 부터 노드 운영을 시작하실 것을 추천합니다.
## 키 관리 - HSM
안전한 노드 운영의 기초는 공격자가 검증인의 프라이빗키를 탈취할 수 없게 하는 것입니다. 만약 이 것이 가능하다면, 키가 탈취된 모든 위임된 코인은 위험에 처해질 수 있습니다. 이런 리스크를 줄이기 위한 가장 좋은 방법은 하드웨어 보안 모듈(HSM, Hardware Security Module)을 이용하는 것입니다.
코스모스 허브에서 HSM을 사용하시는 경우, 해당 모듈은 `ed25519` 서명을 지원해야 합니다. YubiHSM2는 `ed25519`를 지원하며 이에 대한 어답터 라이브러리(adapter library)는 추후 지원할 계획입니다. YubiHSM은 프라이빗 키 탈취에 대한 보안을 지원하지만, 동일한 블록을 두번 서명하는 것에 대한 안전성은 제공하지 않는다는 것에 유의하시기 바랍니다.
이 외에도 텐더민트 팀은 현재 검증인 서명을 위한 Ledger Nano S 지원을 준비하고 있습니다. Ledger Nano S의 경우 최신 블록을 저장하기 떄문에 더블사인 공격을 막을 수 있을 것으로 보입니다.
추후 솔루션들이 준비되는대로 이 페이지는 업데이트 됩니다.
## 센트리노드 (DDOS 방어)
검증인은 코스모스 네트워크가 일정의 서비스 거부 공격(denial of service) 공격을 감내할 수 있도록 해야 합니다.
이런 공격을 방어할 방법 중 하나는 검증인이 본인의 네트워크를 '센트리노드 아키텍쳐' 형태로 구성하는 것입니다.
검증인은 신뢰할 수 있는 풀노드에만 연결해야 합니다. 이는 본인이 직접 운영하는 노드 또는 사회적으로(개인적으로) 아는 검증인들이 운영하는 풀노드 등이 포함될 수 있습니다. 대다수의 검증인 노드는 데이터센터에서 운영됩니다. 대다수의 데이터센터는 다른 주요 클라우드 서비스 제공자와 직접적인 링크를 제공합니다. 검증인들은 이런 링크를 통해서 클라우드 기반 센트리를 연결할 수 있습니다. 이런 형태의 아키텍쳐는 DDoS 공격의 부담을 검증 노드에서 센트리노드로 우회시키기 때문에 상황에 따라 추가적인 센트리노드를 운영해야될 수 있습니다.
센트리노드는 빠르게 추가될 수 있으며 상황에 따라 IP 주소를 변경할 수 있습니다. 센트리노드와 검증인 노드 간의 연결은 프라이빗 IP를 통해 이루어지기 때문에, 인터넷 기반 공격의 피해를 줄일 수 있습니다. 이런 형태의 디자인은 검증인의 블록 제안과 투표가 언제나 네트워크에 전달될 수 있게 합니다.
센트리노드 아키텍쳐를 세팅하시기 위해서는 다음 절차를 참고하십시오:
검증인 노드는 해당 노드의 `config.toml`을 수정해야 합니다:
```bash
# Comma separated list of nodes to keep persistent connections to
# Do not add private peers to this list if you don't want them advertised
persistent_peers =[list of sentry nodes]
# Set true to enable the peer-exchange reactor
pex = false
```
센트리노드 또한 해당 노드의 `config.toml` 파일을 수정해야 합니다:
```bash
# Comma separated list of peer IDs to keep private (will not be gossiped to other peers)
private_peer_ids = "ipaddress of validator nodes"
```
## 환경 변수
기본적으로 다음 프리픽스(prefix)의 대문자 환경 변수(environment variables)는 소문자 커맨드라인 플래그를 대체하게 됩니다:
- `GA` (for Gaia 플래그)
- `TM` (for Tendermint 플래그)
- `BC` (for democli 또는 basecli 플래그)
예를들어 `GA_CHAIN_ID` 환경 변수는 `--chain-id` 커맨드라인 플래그에 매핑됩니다. 명백한(explicit) 커맨드라인 플래그는 환경 변수 보다 상위에 속하며, 환경 변수는 모든 설정 파일 보다 상위에 속합니다. 중요한 파라미터는 CLI의 플래그로 정의되어야 하며 환경 변수의 수정 가능성을 줄이는 것이 중요합니다.

View File

@ -1,308 +0,0 @@
# 검증인 FAQ
::: warning 경고
코스모스 프로젝트는 현재 진행형입니다. 메커니즘과 값은 추후 변경될 수 있다는 점을 확인하십시오.
:::
## 기본 개념
### 검증인이란 무엇인가?
[코스모스 허브](/introduction/cosmos-hub.md)는 [텐더민트](/introduction/tendermint.md) 기반으로 특정 [검증인](/validators/overview.md) 들이 네트워크의 보안을 지키는 허브입니다. 검증인들은 풀노드를 운영하며 본인의 프라이빗키로 서명된 암호화된 서명으로 투표를 하며, 이 표를 네트워크에 전파하여 합의 절차에 참여하게 됩니다. 검증인들은 새로운 블록은 블록체인에 기록하고, 이런 역할에 대한 보상을 받게됩니다. 또한 검증인은 프로포절에 대한 투표를 하며 거버넌스 절차에 참여합니다. 검증인들의 순위는 위임 받은 코인 수량에 따라서 정해집니다.
### '스테이킹'은 무엇인가?
코스모스 허브는 퍼블릭 지분증명 블록체인입니다. 이는 각 검증인들의 순위가 각자가 위임받아 본딩된 스테이킹 토큰(아톰)의 수량에 따라 순위가 정해진다는 것입니다. 검증인은 스테이킹은 검증인 자체 물량 또는 위임자가 위임한 토큰이 될 수 있습니다.
검증인이 될 의사가 있는 유저는 누구나 `create-validator` 트랜잭션을 발생시켜 의사를 표시하고 검증인이 될 수 있습니다.
(스테이킹 수량으로 결정되는) 검증인의 가중치(weight)는 해당 검증인이 실제 블록 생성에 참여할 수 있는지를 결정하며, 얼마나 자주 블록은 제안할 수 있는지와 얼마나 많은 보상을 가저가는지에 영향을 끼칩니다. 초기에는 가중치가 높은 100개의 검증인들이 실제 블록생성에 참여합니다. 만약 검증인이 이중서명을 하거나, 자주 오프라인 상태로 전환되거나, 거버넌스 절차에 참여하지 않을경우 위임된 모든 아톰(자체물량과 위임 받은 물량 포함)은 '슬래싱'되어 사라지게 됩니다.
### 풀노드는 무엇인가?
풀노드는 블록의 블록과 트랜잭션을 검증하는 프로그램입니다. 라이트노드와의 차이점은 라이트노드의 경우 블록헤더와 일부 소량의 트랜잭션을 처리하지만, 풀노드는 모든 거래와 모든 기록을 저장하고 검증합니다. 풀노드를 운영하기 위해서는 라이트노드보다 많은 리소스가 필요하지만, 검증인을 운영하기 위해서는 필수적입니다. 실질적으로 풀노드를 운영한다는 것은 최신 버전과 안전성이 확보된 소프트웨어를 다운타임과 네트워크 지연없이 운영하는 것입니다.
검증인을 운영할 의사가 없는 유저들도 풀노드를 운영할 수 있습니다.
### 위임인은 무엇인가?
위임자/위임인은 아톰을 보유하고 있지만 검증인을 운영할 수 없거나, 운영할 의사가 없는 유저입니다. 위임인은 [코스모스 보이저][Cosmos Voyager](/getting-started/voyager.md) 또는 다른 지갑을 통해 본인의 아톰을 검증인에게 위임하여 검증인 보상의 일부를 돌려받을 수 있습니다(보상 분배에 대한 자세한 정보는 **스테이킹의 인센티브**와 **검증인 커미션은 무엇인가?** 항목을 확인하십시오).
위임인은 검증인들과 보상을 나누기 때문에, 위임인에게도 책임이 주어집니다. 만약 검증인이 악의적인 행동을 한다면 위임인들의 토큰 또한 함께 슬래싱될 수 있습니다. 그렇기 때문에 위임인들은 위임을 하기 전 충분한 검토와 조사를 실시한 후 위임을 해야하며, 다수의 검증인에게 분산위임하는 방법을 추천합니다.
위임인들은 코스모스 네트워크를 운영하는 검증인들을 선택하는 역할을 하기 때문에네 네트워크의 핵심적인 역할을 하는 유저입니다. 위임인은 수동적인 역할을 하는 유저가 아닙니다. 활발하게 검증인들의 활동과 행동을 모니터링하고 그들의 거버넌스 참여 투표 등을 자주 확인해야할 필요가 있습니다.
## 검증인 되기
### 어떻게 검증인이 되는가?
네트워크에 참여하는 모든 유저는 `create-validator` 트랜잭션을 통해 본인이 검증인이 될 의사를 표시할 수 있습니다. 해당 트랜잭션에는 다음과 같은 값이 포함되어야 합니다:
* 검증인의 PubKey: PubKey와 연관된 프라이빗키는 _prevote__precommit_ 을 서명하는데 사용됩니다. 이런 방식을 통해서 검증인은 유동적 자금이 있는 계정과 검증용 계정을 따로 관리할 수 있습니다.
* 검증인 주소: 애플리케이션 단 주소입니다. 이 주소는 공개적으로 검증인의 신원을 확인할때 이용됩니다. 해당 주소와 연관되어있는 프라이빗키는 본딩, 언본딩, 보상 수령, 거버넌스 참여 등에서 이용됩니다.
* 검증인 이름(moniker)
* 검증인 웹사이트(선택 사항)
* 검증인 설명(선택 사항)
* 최초 커미션: 블록 검증으로 받는 보상에서 위임인들 지불되기 전 삭감되는 수수료
* 최대 커미션: 해당 검증인이 설정한 최대 수수료
* 최소 셀프본딩 수량: 검증인이 최소로 본딩해야 하는 아톰의 수량. 만약 해당 검증인의 총 위임 수량이 이 값보다 떨어지는 경우, 스테이킹 풀 전체는 언본딩 됩니다.
* 최초 셀프본딩 수량: 최초로 검증인이 자체 스테이킹 하는 수량.
이제 검증인이 만들어지면, 위임인들은 해당 검증인에게 아톰을 위임하며 해당 스테이킹 풀의 수량을 늘려갈 수 있습니다. 특정 주소의 총 스테이크는 자체 스테이킹 물량 + 위임 받은 스테이킹 물량입니다.
검증인으로 참가할 의사를 밝힌 모든 검증인 중 스테이킹 수량이 가장 많은 상위 100개의 검증인은 '활성화된 검증인'으로 블록생성에 참여할 수 있게 됩니다. 상위 100 순위 밖으로 나가게 되는 검증인은 **bonded 검증인**이 되며 검증인 권한을 일게됩니다. 이때 해당 검증인의 물량은 **언본딩 모드**로 들어가면서 서서히 **언본딩** 됩니다.
코스모스 허브의 검증인 수는 시간이 지날수록 다음과 같이 인상될 예정입니다:
* **0년차:** 100
* **1년차:** 113
* **2년차:** 127
* **3년차:** 144
* **4년차:** 163
* **5년차:** 184
* **6년차:** 208
* **7년차:** 235
* **8년차:** 265
* **9년차:** 300
* **10년차:** 300
## 테스트넷
### 어떻게 테스트넷에 참여할 수 있나요?
테스트넷은 로치 전에 검증인 세팅을 확인할 수 있는 좋은 환경입니다. 테스트넷에 참가함으로 본인이 검증인 운영을 위해 준비해왔다는 것을 보여주는 기회가 될 수도 있습니다. 테스트넷에 관련된 정보는 [여기](https://github.com/cosmos/cosmos-sdk/tree/develop/cmd/gaia/testnets) 와 [여기](https://github.com/cosmos/testnets)에서 확인하실 수 있습니다.
### 어떤 종류들의 '키'가 있나요?
간략하게 설명하면 두가지 종류의 키가 있습니다:
* **텐더민트 키**: 이 키는 블록 해시를 서명할때 이용되는 고유 키입니다. 해당 키는 `cosmosvalconspub` 퍼블릭키와 연관되어 있습니다.
* gaiad init으로 노드가 생성될때 키가 생성되며
* 해당 키 정보는 `gaiad tendermint show-validator` 명령어로 확인하실 수 있습니다. 예) `cosmosvalconspub1zcjduc3qcyj09qc03elte23zwshdx92jm6ce88fgc90rtqhjx8v0608qh5ssp0w94c`
* **애플리케이션 키**: 이 키는 애플리케이션에 의하여 생성되고 트랜잭션을 서명할때 이용됩니다. 검증인으로써는 이 키를 스테이킹 관련 트랜잭션과 거버넌스 관련 트랜잭션을 서명할때 이용하시게 됩니다. 애플리케이션 키는 `cosmospub` 퍼블릭키와 `cosmos` 주소와 연관되어있습니다. 두 키 모두 `gaiacli keys add` 명령으로 생성됩니다.
* 참고: 특정 검증인의 운영키는 애플리케이션키와 연관이 있으나 `cosmosvaloper``cosmosvaloperpub`같은 특정 용도에만 맞는 사전 정의된 prefix를 이용합니다.
### 밸리데이터들의 '상태(state)'에는 어떤 것들이 있나요?
`create-validator` 트랜잭션을 통해 만들어진 검증인은 총 3개의 상태가 있을 수 있습니다:
- `bonded`: 검증인은 현재 합의에 참가하고 있는 활성화된 검증인입니다. 이 검증인은 블록 보상을 받을 수 있으며, 악의적인 행동에 대한 슬래싱 페널티를 받을 수도 있습니다.
- `unbonding`: 검증인은 현재 합의에 참가하고 있지 않으면 활성화된 검증인 세트에 포함되어있지 않습니다. 검증인은 블록 생성을 받지 않지만 악의적인 행동에 대한 슬래싱 페널티는 적용될 수 있습니다. 이 상태는 `bonded` 상태인 검증인이 `unbonded`으로 전환되는 중간 상태이며, 만약 `unbonding` 상태에서 `rebond` 트랜잭션을 발생하지 않으면 최대 3주간 중간 단계에 머무를 수 있습니다.
- `unbonded`: 검증인은 합의에 참가하고 있지 않은 검증인이며, 활성화된 검증인 세트에 포함되어있지 않습니다. 이 검증인은 블록 생성 보상을 받지 않으며 슬래싱 페널티도 적용되지도 않습니다. 이 검증인에게 아톰을 위임하는 것은 가능합니다. `unbonded` 상태인 검증인으로 부터의 언본딩은 바로 처리 됩니다.
위임인들은 관련 검증인들과 동일한 상태를 가지게 됩니다.
*Note that delegation are not necessarily bonded. Atoms can be delegated and bonded, delegated and unbonding, delegated and unbonded, or liquid*
### 셀프본딩은 무엇이며 어떻게 셀프본딩을 늘릴 수 있나요?
### 테스트넷 토큰은 어떻게 받을 수 있나요?
테스트넷 토큰을 받고 싶으시다면 [faucet](https://gaia.faucetcosmos.network/)을 통해서 받으실 수 있습니다.
### 활성화된 검증인이 되기 위해서 최소 필요한 아톰 수량이 있나요?
합의 프로세스에 참여하며 블록을 생성하는 검증인이 되기 위해서 특정 수량의 아톰이 필요하지는 않습니다. 다만, 셀프본딩 수량과 위임 받은 수량의 합이 사우이 100위에 들어야 활성화된 검증인이 되실 수 있습니다.
### 위임인들은 어떻게 검증인들을 선택하나요?
위임인들은 본인들이 설정한 기준에 따라 검증인을 선택할 자유가 있습니다. 검증인을 선택할때 고려해야하는 주요 사항은 다음과 같습니다:
* **셀프본딩 수랑:** 특정 검증인이 자체 본딩한 아톰의 수량입니다. 셀프본딩 수량이 높은 검증인은 본인의 행동에 따라 잃을 수 있는 것이 많기 때문에 더 많은 책임감이 부여될 수 있습니다.
* **위임된 아톰 수량:** 해당 검증인이 위임받은 아톰의 총 수량. 높은 위임 수량은 해당 검증인에 대한 신뢰도가 높다는 것을 뜻할 수 있습니다. 다만, 대형 검증인은 책임지고 있는 물량이 많기 때문에 해커들의 타겟이 될 수 있다는 위험이 존재할 수 있습니다. 해커들은 특정 검증인이 위임하고 있는 물량의 일정 %를 보상으로 받기 때문에 해커는 대형 검증인을 타겟할 확률이 높습니다. 검증인이 위임받고 있는 아톰이 과도할 경우, 높은 위임 수량은 단점으로 적용될 수 있습니다.
* **커미션:** 해당 검증인이 생성하는 보상에 대하여 위임인들에게 청구하는 수수료입니다.
* **검증인 활동 기록:** 위임인들은 본인들의 아톰을 위임하기 전 검증인들의 활동 기록을 먼저 살펴볼 수 있습니다. 이 항목에는 활동 기간, 과거 투표 현황, 업타임 기록, 노드 공격 기록 등이 포함될 수 있습니다.
위에 표기된 항목 외에도 검증인 정보에 포함되어있는 웹사이트를 통해서 검증인에 대한 정보를 받을 수 있습니다. 검증인 세팅에 대해 외부 감사를 받은 경우 이를 표기하는 것도 좋은 기록이 될 수 있습니다. 참고로 텐더민트 팀은 특정 검증인에 대한 감사를 진행하지 않습니다. 검증인 선택 기준에 대한 더 많은 정보는 [이 블로그 글](https://medium.com/@interchain_io/3d0faf10ce6f)에서 확인하실 수 있습니다.
## 검증인들의 책임
### 검증인을 하기 위해서는 신원을 밝혀야 하나요?
아닙니다. 각 위임인들은 본인들이 설정한 기준으로 각자 투표를 합니다. 검증인들은 홍보 용도를 위해서 본인들에 대한 정보가 표기된 웹사이트를 공개하는 것을 추천합니다. 해당 웹사이트에서 본인들의 정보를 공개할 것인지 또는 익명으로 본인들의 활동 기록만을 공개할 것인지는 검증인의 선택입니다. 코스모스 허브에는 익명의 팀과 팀 정보를 공개하는 팀이 공존할 확률이 높습니다.
### 검증인들이 되기 위해서는 어떤 책임이 있나요?
검증인들은 다음과 같은 책임이 있습니다:
* **언제나 올바른 소프트웨어로 노드를 운영하기:** 검증인들은 본인들의 서버가 언제나 온라인 상태며 프라이빗키가 탈취당하지 않게 관리를 해야합니다.
* **활발하게 거버넌스에 참가하기:** 검증인들은 모든 프로포절에 투표를 해야 합니다.
추가적으로 검증인들은 코스모스 커뮤니티에서 활동을 해야합니다. 검증인들은 생태계의 현재 상황에 대해 언제나 인지하며 혹시 있을 변화에 유연하게 대처할 수 있어야 합니다.
### '거버넌스에 참여'한다는 것은 무슨 뜻인가요?
코스모스 허브의 검증인들과 위임인들은 블록 가스 제한 같은 운영적 파라미터(operational parameters) 변경을 요청하거나, 소프트웨어 업그레이드를 조율하거나, 코스모스 허브에 대한 헌법을 제안할 수 있습니다.
검증인들은 거버넌스 시스템에서 특별한 역할을 합니다. 검증인들은 코스모스 허브의 기둥으로써 모든 프로포절에 투표를 해야합니다. 이는 투표에 참가하지 않는 위임인들이 검증인들의 투표를 따르기 때문에 특히 중요합니다. 프로포절에 투표를 하지 않는 검증인에게는 슬래싱 페널티가 부여됩니다.
### 스테이킹은 어떤 의미를 가지나요?
아톰을 스테이킹하는 것은 검증 활동에 대한 보증금이라고 생각하시면 됩니다. 만약 특정 검증인 또는 위임인이 본인의 아톰의 전체(또는 일부)를 언본딩 하기 위해서는 언본딩 트랜잭션을 발생해야 합니다. 이후, 해당 아톰은 _3주 간의_ 언본딩 기간을 두며 검증인들의 악의적인 행동에 대해 함께 책임을 지게 됩니다.
검증인과 해당 검증인에 위임을 한 위임인들은 블록 생성에 대한 보상, 수수료 보상, 그리고 거버넌스에 참여할 권한을 부여받습니다. 만약 특정 검증인이 악의적인 행동을 한다면 해당 검증인의 검증 권한에 있는 아톰은 슬래싱 페널티를 받을 수 있습니다. 그렇기 때문에, 위임인들은 검증인이 안정적이고 안전성을 보장할 수 있는 여부를 확인할 필요가 있습니다.
### 검증인은 위임인들의 위임된 아톰을 탈취할 수 있나요?
검증인에게 위임을 하는 위임인은 '스테이킹 파워(staking power)'를 위임하는 것입니다. 검증인의 스테이킹 파워가 많을수록 해당 검증인은 합의 절차와 거버넌스 절차에서 가지는 힘이 커집니다. 하지만 검증인은 위임인의 아톰의 소유권을 가지지는 앖습니다. 코스모스 허브의 설계는 검증인이 위임인들의 아톰을 탈취할 수 없게 설계되었습니다.
검증인들은 위임인들의 자산을 직접적으로 탈취할 수 없지만, 검증인들의 악의적인 행동으로 발생하는 페널티에 대한 슬래싱은 검증인과 위임인들에게 동일하게 적용됩니다.
### 검증인들은 얼마나 자주 블록 생성 제안을 할 수 있는건가요? 확률은 스테이킹된 아톰에 비례해서 올라가나요?
블록체인의 다음 블록을 제안하는 검증인은 '제안자(proposer)'라고 불립니다. 각 제안자는 결정론적이게 선택되며, 제안자로 선택될 확률은 총 스테이킹 물량(셀프 본딩 스테이크 + 위임받은 스테이크)에 비례합니다. 예를들어, 모든 검증인들의 시스템상의 모든 스테이킹 수량이 100 아톰이고, 특정 검증인의 스테이킹 수량이 10아톰일 경우, 해당 검증인이 제안자로 선택될 확률은 10% 입니다.
### 코스모스 허브의 검증인은 코스모스 생태계 내 다른 존을 검증해야될 수도 있나요?
네, 그렇습니다. 초기에는 코스모스 허브의 검증인은 최초 이더민트 존을 검증해야합니다. 거버넌스에 의하여 결정된 경우, 코스모스 허브의 검증인은 코스모스 생태계 내의 다른 존 또한 검증해야 합니다. 검증인들은 이더민트 존과 동일하게 다른 존을 검증하는 것에 대한 블록 생성 보상과 트랜잭션 수수료를 보상으로 받을 수 있습니다.
## 인센티브
### 스테이킹을 할 인센티브는 무엇이 있나요?
특정 검증인의 스테이킹 풀의 참여자는 다수의 형태로 수익을 받을 수 있습니다:
* **블록 생성 보상:** 검증인들이 운영하는 특정 블록체인 애플리케이션의 고유 스테이킹 토큰(예, 코스모스 허브의 아톰)은 블록 생성을 통한 인플레이션이 있습니다. 인플레이션은 아톰 부유자들이 스테이킹을 할 인센티브를 부여하기 위한 목적이 있으며, 스테이킹을 하지 않는 아톰의 가치는 시간이 지날수록 희석됩니다.
* **블록 리워드:**: 이더민트 존의 경우, 블록 생성 보상은 포톤(photon) 토큰으로 지급됩니다. 포톤은 초기에 이더리움에서 '하드 스푼(hard spoon)'을 통해 분배되며 이더리움 수량의 1:1 비율로 지급될 예정입니다(거버넌스에 따라 해당 사항은 변경될 수 있습니다).
* **트랜잭션 수수료:** 코스모스 허브는 트랜잭션 수수료로 지불이 가능한 토큰들의 화이트리스트를 관리합니다.
위에 나열된 보상과 수수료로 발생하는 수익은 각 검증인의 총 스테이킹 물량에 비례하여 지급되며, 각 검증인 풀에 위임한 위임인들은 이 수익을 분배받습니다. 보상 수익은 각 검증인의 커미션을 차감한 후 지급된다는 점을 참고하시기 바랍니다.
### 검증인을 운영할 인센티브는 무엇이 있나요?
검증인은 커미션을 통해서 위임인들 보다 많은 보상을 받을 수 있습니다.
또한, 검증인들은 거버넌스 절차에서 더 큰 권한을 보유합니다. 예를 들어, 거버넌스 투표를 하지 않는 위임인은 본인이 스테이킹 한 검증인들의 표를 따르게 됩니다. 이런 이유로 검증인들은 생태계 내에서 중대한 책임감을 지게 됩니다.
### 검증인 커미션은 무엇인가요?
검증인 풀에게 지급되는 수익은 검증인과 위임인들 사이에서 나눠어집니다. 각 검증인은 위임인들에게 지급하는 수익에서 일정의 수수료를 '커미션'의 형태로 차감할 수 있습니다. 커미션은 퍼센트 값으로 설정됩니다. 각 검증인은 본인 정책에 따라 최초 커미션을 설정할 수 있으며, 일일 최대 변경값 또한 정할 수 있습니다. 코스모스 허브는 해당 검증인이 설정한 파라미터를 따릅니다. 이런 값은 검증인이 초기에 검증인 참여 의사를 밝힐때 설정할 수만 있으며, 검증인으로 선택된 이후 변경될 수 없습니다.
### 블록 생성 보상은 어떻게 나누어지나요?
블록 생성 보상은 검증인의 총 위임 물량에 비례하여 분배됩니다. 코스모스 허브는 블록을 생성한 검증인만 보상을 받지만 확률적으로 특정 기간 안에서 검증인들의 전체적인 블록 보상률은 스테이킹 수량에 비례하게 설계되었습니다.
10명의 검증인이 동일한 스테이킹 물량과 동일한 1%의 커미션을 가진 경우를 예시롤 들겠습니다. 만약 블록 생성에 대한 보상이 1,000 아톰이며 검증인들은 각자 20%의 스테이킹 물량을 자체 위임(셀프본딩) 했다고 보겠습니다. 1,000개의 블록생성 보상은 제안자에게 바로 지급되지 않으며, 검증인들 사이에서 스테이킹 수량에 비례하여 분배됩니다. 즉, 10명의 검증인들은 각자 100 아톰의 보상을 받게되는 것입니다. 이후 이 100 아톰은 다음과 같이 위임인들과 검증인들 사이에서 분배됩니다:
* 커미션: `100*80%*1% = 0.8아톰`
* 밸리데이터가 가지는 보상: `100\*20% + 커미션 = 20.8 아톰`
* 모든 위임인들이 나누는 보상: `100\*80% - 커시면 = 79.2 아톰`
이후 각 위임인은 79.2 아톰 중에서 각자 위임한 물량에 비례하는 보상을 수령할 수 있습니다. 포톤(photon) 또한 이와 동일한 메커니즘을 통해 분배됩니다.
### 수수료는 어떻게 나누어지나요?
수수료는 위와 비슷하게 분배되지만, 제안자가 최소 프리커밋(precommit) 보다 많은 프리커밋을 받을 경우 수수료에 대한 보너스를 지급 받습니다.
블록 제안자로 선택된 검증인은 다른 검증인 2/3 이상의 서명을 통해 프리커밋을 받아야 블록을 생성할 수 있습니다. 추가적으로, 제안자는 특정 블록에서 검증인 2/3 이상의 서명을 받는 것에 대한 인센티브가 존재합니다. 보너스는 선형적으로 증가합니다: 2/3의 프리커밋을 받은 경우 1% 보너스로 시작하여 100% 프리커밋을 받은 경우 5% 보너스로 증가합니다. 하지만 제안자는 프리커밋을 과도하게 기다릴 경우 블록 제안 시간을 초과하여 제안자 순서가 다른 검증인으로 넘어갈 수 있다는 점을 유의해야 합니다. 이런 이유로 검증인들은 시간을 초과하지 않되 최대한 많은 프리커밋을 받을 수 있는 기간의 균형을 찾아야 합니다. 이 메커니즘은 검증인이 빈 블록을 생성하는 것을 방지하고 검증인 간 네트워킹 향상하며 검증인 검열을 방지하기 위해 도입되었습니다.
이 개념에 대한 예시를 들겠습니다. 10명의 동일한 스테이킹 물량을 가진 검증인들이 각자 1% 커미션과 20% 자체 본딩을 하고 있는 상황을 가정합니다. 새로운 총 1025.51020408 아톰의 보상이 있는 새로운 블록이 생성됩니다.
우선 2% 수수료가 삭감되고 예비 풀(reserve pool)로 이동합니다. 이 예비 풀은 거버넌스를 통해 업그레이드와 버그 바운티를 지급하는데 이용됩니다.
* `2% \* 1025.51020408 = 20.51020408` 아톰이 예비 풀로 이동합니다.
이제 1005 아톰이 남아있습니다. 만약 블록 제안자가 해당 블록에 100% 프리커밋 서명을 포함했다면 최대 보너스인 5%를 지급받습니다.
각 검증인들에 대한 보상인 R을 찾기 위해서는 다음의 공식을 적용합니다:
`9*R + R R*5% = 1005 ⇔ R = 1005/10.05 = 100`
* 제안자 검증인:
* 풀(pool)이 `R + R * 5%`를 얻음: 105 아톰
* 커미션: `105 * 80% * 1%` = 0.84 아톰
* 검증인 보상: `105 * 20% + 커미션` = 21.84 아톰
* 위임인 보상: `105 * 80% - 커미션` = 83.16 아톰 (각 위임인은 본인의 위임 수량에 비례하는 보상을 받음)
* 제안을 하지 않은 검증인:
* 풀이 R 아톰을 얻음: 100 아톰
* 커미션: `100 * 80% * 1%` = 0.8 아톰
* 검증인 보상: `105 * 20% + 커미션` = 20.8 아톰
* 위임인 보상: `100 * 80% - 커미션` = 79.2 아톰 (각 위임인은 본인의 위임 수량에 비례하는 보상을 받음)
### 슬래싱 페널티를 발생하는 경우는 무엇이 있나요?
특정 검증인이 악의적으로 행동할 경우, 검증인에게 본딩된 아톰(위임인들의 아톰 포함)은 슬래싱이 됩니다. 슬래싱 페널티는 악의적인 행동에 비례한 가중치가 적용됩니다. 검증인과 위임인들의 스테이크가 슬래싱 되는 경우는 3개가 있습니다:
* **이중 서명(더블 사이닝):** 누군가 체인A에서 특정 검증인이 동일한 높이의 두개의 블록을 체인A와 체인B에서 서명한 경우 (체인A 와 체인B 가 동일한 ancestor에서 유례한 경우) 해당 검증인은 체인A에서 슬래싱될 수 있습니다.
* **오프라인(unavailability):** 특정 검증인의 서명이 X 블록동안 포함되지 않았을 경우, 해당 검증인은 X 에 비례한 소량의 아톰이 슬래싱됩니다. 만약 X가 사전에 설정된 Y 한도보다 높을 경우, 해당 검증인은 언본딩 됩니다.
* **미투표(non-voting):** 특정 검증인이 거버넌스 프로포절에 투표를 하지 않는 경우 소량의 스테이크가 슬래싱될 수 있습니다.
검증인의 행동의 의도적으로 악의적이지 않아도(예시: 노드 에러, 인터넷 연결 문제, DDoS, 프라이빗 탈취) 검증인은 슬래싱될 수 있다는 점을 참고하시기 바랍니다.
### 검증인은 꼭 자체 위임(셀프본딩)을 해야하나요?
검증인은 자체 위임을 하지 않아도 검증인을 할 수 있습니다. 검증인의 총 스테이킹 수량은 셀프본딩 수량과 위임 수량의 합입니다. 셀프본딩이 낮은 검증인은 많은 위임인들의 스테이크를 통해 총 스테이킹 수량을 늘릴수 있습니다. 이런 이유로 검증인의 평판은 중요한 요소로 적용합니다.
검증인이 셀프본딩 할 의무는 없을 수 있지만, 위임인들의 대다수는 검증인들이 셀프본딩을 하는 것을 선호할 수 있습니다. 본인에 행동에 대한 책임감을 보여줄 수 있기 때문입니다.
검증인들은 본인의 책임감을 표기하기 위해서 자체적인 최소 셀프본딩 수량을 설정할 수 있습니다. 만약 해당 검증인의 셀프본딩률이 해당 수치보다 낮아질 경우, 해당 검증인들과 모든 위임인들의 아톰은 언본딩 됩니다.
### 상위 검증인에게 스테이킹이 몰리는 현상은 어떻게 막을 수 있나요?
현재로써는 커뮤니티가 자체적으로 이런 위험성을 인지하고 위임하는 것을 예상하고 있습니다. 비트코인의 경우, 특정 채굴풀이 과도한 해시파워를 확보한 경우 커뮤니티는 자체적으로 해당 채굴풀에 대한 위임을 멈춥니다. 코스모스는 초기에 이와 비슷한 형태로 채굴풀의 중앙화를 조절할 수 있을 것으로 기대하고 있습니다. 추후에는 이런 현상을 막을 수 있는 장치들이 소개될 예정입니다:
* **무-페널티 재위임(penalty-free re-delegation):** 특정 검증인에 과도하게 묶여있는 현상을 줄이기 위해서 한 검증인에서 다른 검증인으로 위임을 쉽게 바꿀 수 있는 방식.
* **해킹 바운티:** 커뮤니티가 검증인을 해킹하는 것을 장려하는 정책. 바운티 보상은 검증인이 스테이킹 하고 있는 물량의 크기에 비례.
* **UI 경고:** 코스모스 보이저(Cosmos Voyager) 지갑을 이용하는 유저는 이미 과도한 스테이킹 물량을 보유하고 있는 검증인에게 위임을 하려고 할때 경고를 받는다.
## 기술적 요건
### 필요한 하드웨어 장비는 무엇인가요?
검증인은 전력, 네트워킹, 방화벽, 하드웨어 보안 모듈과 서버 백업이 있는 하나 이상의 데이터 센터를 제공할 것을 추천합니다.
네트워크 초기의 하드웨어 요건은 그리 고성능이 아닐 것으로 예상하고 있지만, 네트워크 사용량이 증가하면서 하드웨어 스펙 또한 증가할 것을 예상하고 있습니다. 테스트넷에 참가해서 하드웨어 세팅을 실험해보는 것을 추천드립니다.
### 필요한 소프트웨어는 무엇인가요?
코스모스 허브 노드 외에도 모니터링, 알림, 관리 솔루션을 준비해야할 것으로 예상하고 있습니다.
### 필요한 대역폭은 어느 정도 인가요?
코스모스 네트워크는 이더리움과 비트코인에 비교해서 많은 대역폭과 쓰루풋(throughput)을 필요로 합니다.
데이터 센터 노드는 신뢰할 수 있는 클라우드 풀노드와 사회적으로 신뢰할 수 있는 다른 검증인들에게만 연결하는 것을 추천드립니다. 이는 데이터 센터의 노드과 DDoS 공격의 피해를 입는 것을 방지할 수 있습니다.
네트워크가 성장하면서 매일 몇 기가바이트 이상의 대역폭을 사용하는 것은 현실적인 것으로 판단됩니다.
### 검증인을 하는 것은 운영 측면에서 어떤가요?
성공적인 검증인은 다수의 실력있는 운영 인력이 확보되어야 할 것으로 예측됩니다. 코스모스 검증인 운영은 비트코인 채굴에 비해서 높은 난이도에 속합니다.
### 키 관리는 어떻게 하는 것이 바람직한가요?
검증인은 ed25519 키를 지원하는 하드웨어 보안 모듈(HSM, Hardware Security Module)을 이용하는 것을 추천드립니다. 다음은 추천이 가능한 HSM들의 일부입니다:
* YubiHSM 2
* Ledger Nano S
* Ledger BOLOS SGX enclave
* Thales nShield support
텐더민트 팀은 특정 회사의 솔루션을 지목하여 추천하지 않습니다. 검증인 커뮤니티는 자체적으로 HSM을 이용한 보안 솔루션을 연구하여 향상시킬 것을 권장합니다.
### 운영 측면에서 어떤 요소들이 있나요?
효율적으로 검증인을 운영하는 것은 예측 할 수 없는 언본딩과 슬래싱을 막는 것입니다. 이는 공격에 대한 대응, 전력 단절, 네트워크 단절, 보안 등에 대한 모든 위험 요소를 차단하고 준비하는 것입니다.
### 보수 측면에서 어떤 것들이 요구되나요?
검증인은 정기적으로 소프트웨어 업그레이드와 버그 패치를 적용해야합니다. 네트워크 초기에는 다수의 문제들이 발생할 수 있을 것으로 예상되기 때문에 검증인들은 유심히 네트워크 상태를 모니터링 해야 합니다.
### 검증인은 어떻게 DDoS 공격에 방어를 할 수 있을까요?
DDoS 공격은 공격자가 특정 IP의 서버에게 인터넷 트래픽을 과도하게 발생시켜 인터넷에 연결되는 것을 막는 공격입니다.
공격자는 네트워크를 스캔하여 특정 IP 주소를 지목하고 엄청난 트래픽을 발생시켜 공격을 하여 해당 노드의 정상적인 운영을 막습니다.
이런 공격을 막을 수 있는 하나의 방법은 노드에 센트리노드 아키텍쳐를 도입하여 방어율을 높이는 것입니다.
검증인 노드는 본인이 직접 운영하는 풀노드 또는 사회적으로 신뢰가 가능한 다른 검증인이 운영하는 풀노드에만 연결해야 합니다. 검증인 노드의 대다수는 데이터 센터에서 운영이 되며, 대다수의 데이터 센터는 다른 클라우드 서비스 제공자와 직접적인 연결을 제공합니다. 검증이는 이런 직접 연결을 통해서 클라우드에 있는 센트리노드를 연결할 수 있습니다. 이런 형태의 아키텍처는 DDoS 공격의 부담을 검증 노드에서 센트리 노드로 우회합니다. 공격 상황에서 새로운 센트리노드를 생성하는 것은 다소 쉽기 때문에 공격의 위험성을 줄일 수 있습니다.
센트리노드는 새로 생성되거나 IP 주소를 변경할 수 있습니다. 센트리노드와 검증노드 간의 연결은 프라이빗 IP를 통해서 이루어지기 떄문에 공격자는 직접적으로 공격을 할 수 없습니다. 이는 검증 노드가 언제나 블록 제안과 블록 투표에 참여할 수 있게 합니다.
올바른 운영과 아키텍쳐를 이용하는 검증이는 이런 공격 가능성을 막을 수 있을 것으로 기대됩니다.
센트리노드에 대한 추가적인 정보는 [여기](https://forum.cosmos.network/t/sentry-node-architecture-overview/454)에서 확인 가능합니다.

View File

@ -1,223 +0,0 @@
# 퍼블릭 테스트넷에서 밸리데이터 운영하기
::: tip
현재 테스트넷을 참가하는 방법은 [`testnet` repo](https://github.com/cosmos/testnets/tree/master/latest)에 있습니다. 최신 테스트넷에 대한 정보를 확인하시려면 해당 링크를 확인해주세요.
:::
__Note__: 이 문서는 **퍼블릭 테스트넷** 검증인들을 위해서만 작성되었습니다.
밸리데이터 노드를 세팅하기 전, [풀노드 세팅](../join-testnet.md) 가이드를 먼저 확인해주세요.
## 밸리데이터란 무엇인가?
[밸리데이터](./overview.md)는 블록체인의 투표를 통해서 새로운 블록은 생성하는 역할을 합니다. 만약 특정 밸리데이터가 오프라인이 되거나, 같은 블록높이에서 중복 사이닝을 한 경우 해당 밸리데이터의 지분은 삭감(슬래싱, slashing) 됩니다. 노드를 DDOS 공격에서 보호하고 높은 접근성을 유지하기 위해서는 [센트리노드 아키텍쳐](./validator-faq.md#how-can-validators-protect-themselves-from-denial-of-service-attacks)에 대해서 읽어보세요.
::: danger 경고
코스모스 허브의 검증인이 되는 것을 검토하신다면, [보안에 대한 분석](./security.md)을 사전에 하시기를 바랍니다.
:::
만약 [풀노드](../join-testnet.md)를 이미 운영중이시다면, 다음 항목을 건너뛰셔도 좋습니다.
## 밸리데이터 생성하기
토큰 스테이킹을 통해 `cosmosvalconspub`로 새로운 밸리데이터를 생성할 수 있습니다. 본인의 밸리데이터 pubkey를 확인하기 위해서는 다음 명령어를 입력하세요:
```bash
gaiad tendermint show-validator
```
다음은 `gaiad gentx` 명령을 입력하세요:
::: warning 참고
보유하고 있는 `STAKE`이상을 이용하지 마십시오. 언제나 [Faucet](https://faucet.cosmos.network/)을 통해서 추가 `STAKE`를 받으실 수 있습니다.
:::
```bash
gaiacli tx staking create-validator \
--amount=5000000uatom \
--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-max-change-rate`는 기존 `commission-rate`에서의 *퍼센트 포인트* 변경을 기준으로 측정됩니다. 예) 커미션이 1%에서 2%로 변경되는 것은 100% 상승되는 것이지만, 1%p 변경.
__참고__: `consensus_pubkey` 값이 지정되지 않은 경우, 기본적으로 `gaiad tendermint show-validator` 의 값으로 설정됩니다. `key_name`은 트랙잭션을 서명할때 이용되는 프라이빗키의 명칭입니다.
## 밸리데이터로써 제네시스 참가하기
__참고__: 이 문항은 제네시스 파일에 참가하려는 밸리데이터에게만 해당됩니다. 만약 검증을 하려는 체인이 이미 작동되고 있는 상태라면 이 항목을 건너뛰셔도 좋습니다.
밸리데이터로써 제네시스에 참가하고 싶으시다면 우선 본인(또는 위임자)가 stake를 보유하고 있다는 것을 증명해야 합니다. 스테이크를 검증인에게 본딩하는 하나 이상의 트랜잭션을 발생하신 후, 해당 트랜잭션을 제네시스 파일에 추가하시기 바랍니다.
이런 경우에는 `gentx`를 생성하셔야 합니다:
```bash
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>
```
__참고__: 이 명령어는 제네시스에서의 처리를 위해 `gentx``~/.gaiad/config/gentx`에 저장합니다.
::: tip
명령어 플래그에 대한 정보는 `gaiad gentx --help`를 사용에 확인하십시오.
:::
`gentx`는 자체위임 정보가 포함된 JSON 파일입니다. 모든 제네시스 트랜잭셕은 `genesis coordinator`에 의하여 모아진 후 최초 `genesis.json`파일과 대치하여 검증합니다. 최초 `genesis.json`에는 계정 리스트와 각 계정이 보유하고 있는 코인 정보가 포함되어있습니다. 트랜잭션이 처리되었다면 해당 정보는 `genesis.json``gentx` 항목에 머지(merge)됩니다.
### 제네시스 파일 복사, 제네시스 트랜잭션 처리하기
우선 `genesis.json`파일을 `gaiad`의 config 디렉토리로 가져옵니다.
Fetch the `genesis.json` file into `gaiad`'s config directory.
```bash
mkdir -p $HOME/.gaiad/config
curl https://raw.githubusercontent.com/cosmos/testnets/master/latest/genesis.json > $HOME/.gaiad/config/genesis.json
```
__참고:__ 이 항목에서는 최신 테스트넷 관련 정보가 있는 [테스트넷 repo](https://github.com/cosmos/testnets)의 `latest` 디렉토리를 사용합니다. 만약 다른 테스트넷에 연결하신다면 이용하시는 파일을 확인하시기 바랍니다.
이제 다른 제네시스 밸리데이터들의 제네시스 트랜잭션을 가져옵니다. 현재 밸리데이터들이 본인들의 제네시스 트랜잭션을 제공할 수 있는 리포지토리가 없는 상태이나, 추후 테스트넷에서 검증 후 추가될 예정입니다.
모든 제네시스 트랜잭션을 받으시고 `~/.gaiad/config/gentx`에 저장하셨다면 다음 명령어를 실행하십시오:
```bash
gaiad collect-gentxs
```
__참고:__ `gentx`에서 위임을 하는 계정에 스테이크(stake) 토큰이 있는 것을 확인하세요. 만약 해당 계정에 토큰이 없다면 `collect-gentx`가 실패하게 됩니다.
이전에 실행하신 명령어는 모든 제네시스 트랜잭션을 모으고 `genesis.json`을 파이널라이즈(finalize)합니다. 설정이 올바르게 되었는지 확인하기 위해서는 노드를 시작하십시오:
```bash
gaiad start
```
## 검증인 설명 수정하기
검증인의 공개 설명 문구와 정보는 수정이 가능합니다. 이 정보는 위임자들이 어떤 검증인에게 위임을 할지 결정할때 이용될 수 있습니다. 각 플래그에 대해서 정보를 꼭 입력하시기 바랍니다. 만약 비어있는 항목이 있다면 해당 값은 빈 상태로 유지됩니다 (`--moniker`의 경우 머신 이름 값이 사용됩니다).
`--identity` 값은 Keybase 또는 UPort 같은 시스템을 이용해서 신분(identity)를 검증하는데 이용될 수 있습니다. Keybase를 사용하시는 경우 `--identity`는 [keybase.io](https://keybase.io) 계정으로 생성하신 16자리 string 값이 입력되어야 합니다. 이런 절차는 다수의 온라인 네트워크에서 본인의 신분을 증명하는데 이용될 수 있습니다. 또한 Keybase API를 이용해서 Keybase 아바타를 가져와 밸리데이터 프로파일에 이용하실 수 있습니다.
```bash
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`는 하루에 최대 커미션 값을 변경할 수 있는 한도입니다. 밸리데이터는 하루에 한번 `commission-max-change-rate`의 한도 안에서만 커미션을 변경할 수 있습니다.
## 밸리데이터 설명 확인하기
검증인의 정보는 다음 명령어로 확인이 가능합니다:
```bash
gaiacli query staking validator <account_cosmos>
```
## 밸리데이터 서명 정보 추적하기
특정 검증인의 과거 서명 정보를 확인하기 위해서는 `signing-info` 명령어를 이용하실 수 있습니다:
```bash
gaiacli query slashing signing-info <validator-pubkey>\
--chain-id=<chain_id>
```
## 밸리데이터 석방(Unjail)하기
특정 검증인이 과도한 다운타임으로 '구속(jailed)' 상태로 전환되면 운영자의 계정에서 '석방(unjail)' 요청 트랜잭션을 전송해야만 다시 블록 생성 리워드를 받을 수 있습니다(각 존의 리워드 분배 정책에 따라 다를 수 있음).
```bash
gaiacli tx slashing unjail \
--from=<key_name> \
--chain-id=<chain_id>
```
## 밸리데이터 작동상태 확인
다음 명령어가 반응을 준다면 당신의 밸리데이터는 작동하고 있습니다:
```bash
gaiacli query tendermint-validator-set | grep "$(gaiad tendermint show-validator)"
```
코스모스 테스트넷의 경우 코스모스 [익스플로러](https://explorecosmos.network/validators)를 통해서 밸리데이터가 운영되고 있는지 확인하실 수 있습니다. `~/.gaiad/config/priv_validator.json` 파일의 `bech32` 인코딩이된 `address` 항목을 참고하세요.
::: warning 참고
검증인 세트에 포함되시기 원하신다면 100등 밸리데이터보다 보팅 파워(voting power)가 높아야 합니다.
:::
## 흔히 발생하는 문제들
### 문제 #1: 내 검증인의 보팅 파워가 0 입니다
밸리데이터가 자동 언본딩 되었습니다. `gaia-8000`의 경우, 100개 블록 중 50개의 블록에 투표하지 않을 경우 언본딩 됩니다. 블록은 대략 ~2초 마다 생성되기 때문에 ~100초 이상 비활성화 상태를 유지하는 밸리데이터는 언본딩 될 수 있습니다. 가장 흔한 이유는 `gaiad` 프로세스가 멈춘 경우입니다.
보팅 파워를 다시 밸리데이터에게 되돌리기 위해서, 우선 `gaiad`가 실행되고 있는지 확인하십시오. 만약 실행되고 있지 않은 경우 다음 명령어를 실행하십시오:
```bash
gaiad start
```
당신의 풀노드가 최신 블록높이에 싱크될때까지 기다리십시오. 이후, 다음 명령어를 실행하십시오. 참고로 `<cosmos>` 항목은 밸리데이터 계정의 주소이며, `<name>`은 밸리데이터 계정의 이름입니다. 해당 정보는 `gaiacli keys list` 명령어를 통해 확인하실 수 있습니다.
```bash
gaiacli tx slashing unjail <cosmos> --chain-id=<chain_id> --from=<from>
```
::: danger 경고
`gaiad`가 싱크되지 않은 상태에서 `unjail` 명령을 실행하실 경우, 검증인이 아직 '구속' 상태라는 메시지를 받게 됩니다.
:::
마지막으로 밸리데이터의 보팅파워가 복구 되었는지 확인하십시오.
```bash
gaiacli status
```
만약 보팅 파워가 예전보다 감소되었다면 다운타임에 대한 슬래싱이 이유일 수 있습니다.
### 문제 #2: `too many open files`때문에 `gaiad`가 강제 종료됩니다
리눅스가 각 프로세스당 열 수 있는는 파일 수는 최대 `1024`개입니다. `gaiad`는 1024개 이상의 열게될 수 있음으로 프로세스가 중단될 수 있습니다. 가장 간편한 해결책은 `ulimit -n 4096` (열 수 있는 최대 파일 수)명령어를 입력하고 프로세스를 `gaiad start`로 재시작하는 것입니다. 만약 `systemd` 또는 다른 프로세스 매니저로 `gaiad`를 실행하신다면 해당 레벨에서 몇가지 설정을 해야합니다. 문제 해결 샘플 `systemd` 파일은 다음과 같습니다:
```toml
# /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
```

View File

@ -1,22 +0,0 @@
# Gaia는 무엇인가요?
가이아(`gaia`)는 코스모스 허브의 코스모스 SDK 애플리케이션의 이름입니다. 가이아는 두개의 엔트리 포인트로 구성돼있습니다:
- `gaiad`: 가이아 데몬, `gaia` 애플리케이션의 풀노드를 운영합니다.
- `gaiacli`: 가이아 커맨드 라인 인터페이스는 유저가 가이아 풀노드와 소통할 수 있게 합니다.
`gaia`는 코스모스 SDK의 다음 모듈들을 이용해 제작되었습니다:
- `x/auth`: 계정 및 서명
- `x/bank`: 토큰 전송
- `x/staking`: 스테이킹 로직
- `x/mint`: 인플레이션 로직
- `x/distribution`: 수수료(보상) 분배 로직(fee distribution logic)
- `x/slashing`: 슬래싱 로직
- `x/gov`: 거버넌스 로직
- `x/ibc`: 인터블록체인 전송
- `x/params`: 앱레벨 파라미터 관리
>코스모스 허브에 대해서: 코스모스 허브는 코스모스 네트워크의 최초 허브입니다. 허브는 블록체인 간 전송을 수행하는 역할을 합니다. IBC를 통해 특정 허브에 연결된 블록체인은 해당 허브에 연결되어있는 모든 블록체인과 함께 연결됩니다. 코스모스 허브는 지분증명 기반 퍼블릭 블록체인이며, 고유 토큰은 아톰(Atom)입니다. 다음은 Gaia를 [설치하는 방법](./installation.md)을 알아보겠습니다.