# Stratos-chain testnet 测试网说明

## 准备运行环境

### **0. 创建用户帐户（可选）**

为了创建单独的和更安全的环境，建议创建单独的用户帐户来运行节点。

```bash
sudo adduser stratos --home /home/stratos
```

创建用户后，使用 *stratos* 帐户登录系统并以该用户继续以下安装步骤

### 1. 下载二进制可执行文件

#### **获取 `stchaind` 和 `stchaincli` 二进制文件**

```
cd $HOME
wget https://github.com/stratosnet/stratos-chain/releases/download/v0.5.0/stchaincli
wget https://github.com/stratosnet/stratos-chain/releases/download/v0.5.0/stchaind
```

{% hint style="warning" %}
请注意：这些二进制文件是使用 linux amd64 创建的，因此如果您准备在其他内核上运行节点，请按照步骤 1.1 创建二进制文件
{% endhint %}

{% hint style="warning" %}
为了使用方便，我们推荐将下载的文件存入 `$HOME` 目录下。 如果不确定你的 `$HOME` 目录， 可以使用命令终端（terminal）查看。 以下的说明，都是在 `$HOME` 目录下进行的。
{% endhint %}

{% tabs %}
{% tab title="Linux" %}

```
$ echo $HOME
/home/<your login name>
```

{% endtab %}

{% tab title="Mac" %}

```
$ echo $HOME
/Users/<your login name>
```

{% endtab %}
{% endtabs %}

#### 使用 `md5sum` 检查文件完整性

```bash
md5sum stchain*

## 期待以下类似的输出 
## aded93fa2f1f4816375dcb425ec4ce42 stchaincli
## 2d79092bd2096baa82879edc64c17294 stchaind
```

#### 为下载的二进制文件添加可执行权限

```bash
chmod +x stchaincli
chmod +x stchaind
```

### **1.1 用源代码编译二进制文件**

请首先确保安装了 Go 1.16+ ([link](https://golang.org/doc/install)).

{% tabs %}
{% tab title="Linux" %}

```
git clone https://github.com/stratosnet/stratos-chain.git
cd stratos-chain
git checkout v0.5.0
make build
```

{% endtab %}

{% tab title="Mac" %}

```
git clone https://github.com/stratosnet/stratos-chain.git
cd stratos-chain
git checkout v0.5.0
make build-mac
```

{% endtab %}
{% endtabs %}

此时, 你会在 `./build` 目录下找到 `stchaincli` 和 `stchaind` 这两个可执行文件。现在把这两个文件移动到你的 `$HOME` 目录下

```
mv build/stchaincli ./
mv build/stchaind ./
```

还可以通过以下方式将二进制文件安装到 `$GOPATH/bin`目录。

```bash
make install
```

### 2. 获取`genesis`和 `config` 文件

#### 初始化节点

```bash
./stchaind init --home ./  "<node name you prefer>"

# 请忽略输出的错误，因为您需要下载 genesis 文件 
```

#### 下载 `genesis`和 `config` 文件

```bash
wget https://raw.githubusercontent.com/stratosnet/stratos-chain-testnet/main/genesis.json
wget https://raw.githubusercontent.com/stratosnet/stratos-chain-testnet/main/config.toml
```

#### 更改节点名称

在 `config.toml` 第#16行

```bash
# 使用您喜欢的名字来命名节点
moniker = "<节点名称>"
```

#### 将 `config.toml` 和 `genesis.json` 文件移动到 `.stchaind/config/` 文件夹里

```bash
mv config.toml .stchaind/config/
mv genesis.json .stchaind/config/
```

至此，节点已经配置完毕。 `$HOME` 目录下应该包含以下的目录和文件

```
.
├── ...
├── stchaincli
├── .stchaind
│   ├── config
│   │   ├── addrbook.json
│   │   ├── app.toml
│   │   ├── config.toml
│   │   ├── genesis.json
│   │   ├── node_key.json
│   │   └── priv_validator_key.json
│   └── data
│       └── priv_validator_state.json 
├── stchaind
├── ...
```

{% hint style="info" %}
默认情况下，此时`$HOME`目录下包含有两个二进制可执行文件`stchaincli` 和 `stchaind， 以及 .stchaind 目录。.stchaind 目录包含了节点的配置和数据`
{% endhint %}

### 3. 启动节点

```bash
./stchaind start 
```

在此之后，节点将尝试赶上区块链直到最新的区块

您也可以使用以下命令在后台运行节点

```bash
./stchaind start --home ./ 2>&1 >> chain.log &
```

## 测试网操作

一旦节点已追至最新的区块，您就可以进行各种交易(transaction, 简写为`tx`) 和查询(query)操作了。我们的文档已有详细的解释，请参阅：

[How to Become a Validator](https://stratos.gitbook.io/st-docs/stratos-chain-english/stratos-chain-commands/how-to-become-a-validator)

[Stratos-chain 'stchaincli' Commands(Part1)](https://stratos.gitbook.io/st-docs/stratos-chain-english/stratos-chain-commands/stratos-chain-stchaincli-commands-part1)

[Stratos-chain 'stchaincli' Commands(Part2)](https://stratos.gitbook.io/st-docs/stratos-chain-english/stratos-chain-commands/stratos-chain-stchaincli-commands-part2)

[Stratos-chain 'stchaind' Commands](https://stratos.gitbook.io/st-docs/stratos-chain-english/stratos-chain-commands/stratos-chain-stchaind-commands)

[Stratos-chain REST APIs](https://stratos.gitbook.io/st-docs/stratos-chain-english/stratos-chain-commands/stratos-chain-rest-apis)

以下，我们仅对常用操作进行说明。

### 创建帐户

首先， 您需要使用下面的命令创建一个钱包地址。创建完毕后，系统会提供一个以`st1`开头的钱包地址和24个英文单词组成的助记符。请妥为保管，以备将来恢复您的钱包地址。

```bash
./stchaincli keys add --hd-path "m/44'/606'/0'/0/0" --keyring-backend test <钱包名称>
```

例如

```bash
./stchaincli keys add --hd-path "m/44'/606'/0'/0/0" --keyring-backend test Wallet1
```

{% hint style="info" %}
执行上述命令后，在$HOME目录下会创建 `.stchaincli 目录，里面包含了已创建的钱包信息及地址。`
{% endhint %}

```
.
└── keyring-test-cosmos
    ├── st1jvf660xagmzuzyqyqu3w27sj0ragn7qetnwmyr.address
    └── wallet1.info
```

### Faucet 水龙头(接水)

我们在 `https://faucet-test.thestratos.org/` 提供了Faucet(接水)服务， 请使用以下命令免费获取测试Token。

```bash
curl -X POST https://faucet-test.thestratos.org/faucet/<钱包地址>
```

例如

```bash
curl -X POST https://faucet-test.thestratos.org/faucet/st1ef7u53xqgec6pd3uvna6zgtrqmkj5l89wrxzxm
```

{% hint style="info" %}

* 1 stos = 1000000000 ustos
* Faucet 默认发送 100stos = 100,000,000,000ustos 到提供的地址。
* 一小时内， 同一IP地址最多可发 3 个 `faucet` 请求给任意不同地址注资
* 一小时内， 最多可发 1 个 `faucet` 请求给同一地址注资。
  {% endhint %}

### 查询账户余额

在节点已追至最新的区块后， 使用以下命令查询您的账户余额

```bash
./stchaincli query account <钱包地址> 
```

例如

```bash
./stchaincli query account st1ef7u53xqgec6pd3uvna6zgtrqmkj5l89wrxzxm
```

### 检查节点状态

```bash
./stchaincli status
```

### 发送您的第一个 tx:  `send`

您可以尝试从一个钱包发送Token 至另外一个钱包

```bash
./stchaincli tx send <from address> <to address> <amount> --keyring-backend test --chain-id <current chain-id>
```

例如

```bash
./stchaincli tx send st1kuhyf59qvukk8r5manky062d6c66utvytm7az6 st1m4f4hnyfhpaeqlcgv7lfhgzjwmrvfeggwnpygz  1000000ustos --keyring-backend test --chain-id stratos-testnet-3
```

{% hint style="info" %}
以上命令会从 `st1kuhyf59qvukk8r5manky062d6c66utvytm7az6` 发送 `1000000ustos` 到 `st1m4f4hnyfhpaeqlcgv7lfhgzjwmrvfeggwnpygz`。
{% endhint %}

{% hint style="info" %}

* 测试阶段，--keyring-backend="test"
* 测试阶段，--`chain-id 的值可能会在版本更新时改变。使用时需要用户明确指定当前的chain-id。此值可在`[`BIG DIPPER`](https://big-dipper-test.thestratos.org/)`的顶部查询栏左侧找到（目前为'`stratos-testnet-3'`）。`
  {% endhint %}

## 将节点作为服务运行

{% hint style="warning" %}
**注意：** 以下所有步骤都需要 `root` 权限
{% endhint %}

创建文件 `/lib/systemd/system/stratos.service`。

拷贝以下内容至 `/lib/systemd/system/stratos.service`。

```
[Unit]
Description=Stratos Chain Node
After=network-online.target

[Service]
User=stratos
Group=stratos
ExecStart=/home/stratos/stchaind start --home=/home/stratos/.stchaind
Restart=on-failure
RestartSec=3
LimitNOFILE=8192

[Install]
WantedBy=multi-user.target
```

### 启动服务

```
systemctl daemon-reload
systemctl enable stratos.service
systemctl start stratos.service
```

### 检查服务是否按预期运行

```
systemctl status stratos.service
```

### 检查节点日志

```
journalctl -u stratos.service -f 
# exit with 
```
