# 运行教程

## 加入网络

#### 硬件指南

<table><thead><tr><th width="145">处理器</th><th width="117">内存</th><th>存储空间</th><th>网络带宽</th></tr></thead><tbody><tr><td>16 核心</td><td>16G</td><td>2 TB（推荐使用SSD以优化读写速度）</td><td>上行/下行100Mbps，固定公网IP</td></tr></tbody></table>

\*在测试网阶段，验证者的存储使用量较小，预计在几百GB级别

### 前置要求

确保安装以下软件，以便正确编译和运行Titan共识节点：

* **Git**: 用于克隆源代码
* **Go 1.21+**: 用于编译源代码，Titan节点是用Go语言编写的，确保您安装了Go 1.21或更高版本

## 总体配置

### 安装 titan cli

#### 1.克隆Titan的代码仓库：

```bash
git clone https://github.com/Titannet-dao/titan-chain.git
```

#### 2.进入仓库目录并构建Titan命令行工具：

```bash
cd titan-chain
go build ./cmd/titand
```

#### 3.将构建好的可执行文件移动到系统路径中：

```bash
cp titand /usr/local/bin
```

### 初始化Titan验证节点

**1. 初始化节点**

使用Titan命令行工具（CLI）初始化您的节点，这一步骤将配置节点并创建必要的文件结构。

* 打开终端窗口。
* 运行以下命令，其中`<your-custom-moniker>`是您给节点选择的唯一名称，用于网络中的标识：

```bash
titand init <your-custom-moniker> --chain-id titan-test-4
```

这个命令将在您的用户目录下创建一个`.titan`文件夹，里面包含所有必要的配置文件和数据文件夹。这是节点运行的基础配置环境。

**2. 设置节点的自定义名称**

初始化节点后，您需要设置或确认节点的自定义名称，这个名称在网络中用于识别您的节点。

* 使用 `vim` 编辑器打开配置文件：

```bash
vim ~/.titan/config/config.toml
```

* 在打开的文件中找到`moniker`项，如果在初始化时已经设置，它应该显示您之前输入的名称。如果需要修改，您可以在此处进行：

```toml
# A custom human readable name for this node
moniker = "<your-custom-moniker>"
```

确保将`<your-custom-moniker>`替换为您想要的节点名称，这个名称将在网络中代表您的节点。

* 保存并关闭文件。在 `vim` 中，按 `Esc` 键退出编辑模式，输入 `:wq` （意为 write and quit，写入并退出），然后按 `Enter` 键来保存更改并退出编辑器。

**3. 确认配置**

* 完成配置后，建议检查一下`.titan`目录结构，确保所有文件都已正确创建。您可以使用以下命令查看目录内容：

```bash
ls -la ~/.titan
```

检查是否存在`config`和`data`等子目录。

通过以上步骤，您的Titan节点应已正确初始化并设置好自定义名称，现在已准备好连接到网络并开始同步数据。这些设置确保您的节点能在Titan网络中正确识别和运作。

### 配置网络连接和创世文件

#### 1.下载并配置初始区块文件（Genesis file）：

{% code overflow="wrap" %}

```bash
wget https://raw.githubusercontent.com/Titannet-dao/titan-chain/main/genesis/genesis.json
mv genesis.json ~/.titan/config/genesis.json
```

{% endcode %}

#### 2. Seeds & Peers

2.1 理解Seeds与persistent\_peers

在启动Titan验证节点时，与网络中的其他节点建立连接是至关重要的。种子节点（Seeds）和持久对等节点（Persistent Peers）是两种帮助新节点发现并维持网络连接的方式。

{% hint style="info" %}

* **Seeds**：这些节点的信息被用来帮助新节点获取网络的初始连接点。一旦完成初次连接，节点将尝试与更多的网络节点建立连接。
* **persistent\_peers**：与种子节点不同，持久对等节点一旦连接，节点将尝试保持与这些节点的长期连接，这对于网络的稳定性非常关键。
  {% endhint %}

2.2 编辑配置文件

配置文件`config.toml`位于`~/.titan/config`目录下，是设置节点连接的主要文件。

* 打开配置文件：

```bash
vim ~/.titan/config/config.toml
```

* 在文件中找到`seeds`和`persistent_peers`部分，并根据需要进行编辑：

```bash
# 示例：种子节点配置
seeds = "<seed node id 1>@<seed node address 1>:26656,<seed node id 2>@<seed node address 2>:26656"

# 示例：持久对等节点配置
persistent_peers = "<node id 1>@<node address 1>:26656,<node id 2>@<node address 2>:26656"

```

2.3 添加已提供的种子节点

为您的节点配置已知的稳定种子节点，以增强节点启动时的连接可靠性：

```bash
seeds = "bb075c8cc4b7032d506008b68d4192298a09aeea@47.76.107.159:26656"
```

2.4 使用Quicksync地址簿

下载并使用Quicksync地址簿可以加速您的节点与网络同步的过程，使其更快地集成进网络。

* 下载并移动地址簿到正确位置：

{% code overflow="wrap" %}

```bash
wget https://raw.githubusercontent.com/Titannet-dao/titan-chain/main/addrbook/addrbook.json
mv addrbook.json ~/.titan/config/addrbook.json
```

{% endcode %}

### Titan-test 配置Gas价格和手续费

配置合理的Gas价格和手续费是保护节点免受滥用同时保持经济效率的重要措施。设置这些参数确保只处理那些支付足够手续费的交易。

1\. 了解面额和单位转换

在Titan-test-1网络中，最小的货币单位是`uttnt`，其中`1 ttnt`等于`1,000,000 uttnt`。这种转换非常重要，因为所有的交易费用都是以`uttnt`为单位计算和支付的。

2\. 计算交易费用

交易费用是通过以下公式计算的，这是网络运行交易所需支付的费用：

```
fees = ceil(gas * gasPrices)
```

其中：

* `gas`是交易执行所消耗的计量单位。
* `gasPrices`是每单位gas的费用。

3\. 设置最低Gas价格

设置合适的最低Gas价格（`min-gas-price`）是确保您的节点不会处理低费用的交易的关键措施。这不仅可以保护您的节点免受资源浪费（如垃圾邮件攻击），还可以确保您的节点运行效率和经济效益。

* 在`~/.titan/config/app.toml`文件中设置最低Gas价格：

```toml
# 设置验证器愿意接受的最低交易费用价格
minimum-gas-prices = "0.0025uttnt"
```

4\. 推荐的Gas价格

对于当前的Titan-test-1网络，建议的Gas价格是`0.0025 uttnt`。这个价格足以抵御大多数垃圾交易，同时保持网络的吸引力。

全节点将所有未确认的交易保存在其内存池中。设置合理的最低Gas价格是确保只有符合费用标准的交易能被加入到内存池中的重要策略。这样做可以保护您的节点免受可能导致服务拒绝的低质量或恶意交易的影响。

### 使用systemd进行节点管理

要确保您的Titan节点作为一个后台服务稳定运行，使用systemd对titand服务进行管理非常关键，它可以帮助在节点遇到问题时自动重启。

**1. 创建systemd服务文件**

您需要创建一个新的systemd服务文件`/etc/systemd/system/titan.service`，这个文件将定义如何启动和管理您的Titan节点。

* 打开终端并输入以下命令来创建并编辑服务文件：

```bash
sudo vim /etc/systemd/system/titan.service
```

* 在编辑器中，粘贴以下配置。这些设置定义了如何启动服务，以及在服务失败时如何自动重启它：

```ini
[Unit]
Description=Titan Daemon
After=network-online.target

[Service]
User=root
ExecStart=/usr/local/bin/titand start
Restart=always
RestartSec=3
LimitNOFILE=4096

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

* **Description**: 服务的描述。
* **After**: 指定`titand`服务需要在网络完全启动后才开始。
* **User**: 指定运行服务的用户。出于安全考虑，可能需要创建并指定非root用户。
* **ExecStart**: 指定启动命令。
* **Restart**: 设置为`always`以在服务失败时自动重启。
* **RestartSec**: 出错后延迟重启的秒数。
* **LimitNOFILE**: 增加文件描述符的限制，有助于节点管理大量连接。

**2. 启用并启动服务**

* 保存文件并退出vim编辑器后，执行以下命令来启用并启动服务：

```bash
sudo systemctl enable titan.service
sudo systemctl start titan.service
```

这些命令将确保Titan服务在系统启动时自动启动，并且在运行中如果出现任何问题都会自动重启。

**3. 检查服务状态**

* 检查Titan服务的状态，确保它正在运行：

```bash
sudo systemctl status titan.service
```

* 如果需要查看服务的日志，可以使用：

```bash
journalctl -u titan.service
```

通过以上步骤，您的Titan节点将作为一个systemd服务安全稳定地运行，能有效地处理网络中的事务和数据。这样的设置帮助您减少手动干预，确保节点始终在线并可用。

### **启动和配置Titan验证者节点**

在开始运行Titan验证器之前，请确保您的节点已经设置完毕并且同步到了最新的区块高度。下面的指南将帮助您一步步成为一个验证器：

#### 创建您的账户

1. **生成新的密钥对**： 使用Titan Daemon (titand) 创建新的密钥对，此命令将生成一个新的账户和相关的助记词。

```bash
titand keys add <name>
```

* `<name>`: 为您的密钥对选择一个名称。
* 请确保安全保存生成的助记词，因为它们可以用来恢复您的账户。助记词还可以用于Keplr等钱包软件的导入。

1. **转移代币到您的地址**：
   * 向您的新账户地址转移一定数量的TTNT代币，这些代币将用于支付交易费用以及作为自委托到验证节点的资金。

### 创建验证器指南

1. **创建验证器配置文件**：&#x20;

* 首先，创建并编辑验证器配置文件：

```bash
vim ~/validator.json
```

* 在文件中添加以下信息：

```json
{
 "pubkey":  "<pubkey>",
 "amount": "<amount>uttnt",
 "moniker": "<moniker>",
 "commission-rate": "0.07",
 "commission-max-rate": "1.0",
 "commission-max-change-rate": "0.01",
 "min-self-delegation": "1",
 "identity": "<identity>",
 "website": "<website>",
 "security": "<security>",
 "details": "<details>"
}
```

解释各个参数：

• `<pubkey>`: 使用命令 `titand tendermint show-validator` 获取验证器公钥。

• `<amount>`: 您想要自委托到验证器的 TTNT 代币数量。

• `<moniker>`: 您的验证器的名称，这是一个自定义名称，用于在网络中标识您的节点。

• `<commission-rate>`: 设置您的验证器收取的佣金比率。例如，如果设置为 0.07，则表示从委托人收到的奖励中收取 7% 作为佣金。

• `<commission-max-rate>`: 您的验证器可以收取的最大佣金比率。这是一个保护措施，防止验证器随意增加佣金。

• `<commission-max-change-rate>`: 您的验证器在已声明的佣金率上可以进行的最大变化率。这定义了您可以多频繁地更改佣金率，以及每次更改可以调整多少。

•`<min-self-delegation>`: 验证器必须在自己的节点上持续委托的最低代币数量。这个参数确保验证器有足够的经济激励来保持诚实和负责任的行为。

• `<identity>`: 可选的身份签名（例如 UPort 或 Keybase）。

• `<website>`: 验证器的（可选）网站。

• `<security>`: 验证器的（可选）安全联系人邮箱。

• `<details>`: 验证器的（可选）详细信息。

2. 使用配置文件创建验证节点

使用刚才编辑的配置文件创建验证节点：

{% code overflow="wrap" %}

```sh
titand tx staking create-validator ~/validator.json --from <account> --fees 500uttnt --ip <ip>
```

{% endcode %}

解释各个参数：

• `<account>`: 指定命令中使用哪个账户来签署交易。这应该是您创建的账户名称，账户中需要有足够的余额来支付交易费。

•`<ip>`: 您的公网 IP 地址，如果您打算让您的节点成为公共对等点，则需要设置此参数。如果不是，则可以省略此参数。

### 完整示例

*<mark style="color:red;">\*请勿直接复制此示例，请根据您的实际情况填写！</mark>*

{% code overflow="wrap" %}

```json
{
 "pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"oWg2ISpLF405Jcm2vXV+2v4fnjodh6aafuIdeoW+rUw="},
 "amount": "1000uttnt",
 "moniker": "Titan-Validator",
 "commission-rate": "0.07",
 "commission-max-rate": "1.0",
 "commission-max-change-rate": "0.01",
 "min-self-delegation": "1",
 "identity": "KeybaseIdentity",
 "website": "https://titannet.io",
 "security": "titan@titannet.io",
 "details": "New incentive layer for global idle resources"
}
```

{% endcode %}

#### 注意事项

* **成为活跃验证者**：初始时，您的验证器可能不会立即成为活跃验证者集的一部分，因为需要足够的委托总量才能进入活跃集。
* **委托操作**：用户可以使用如Keplr这样的钱包应用程序来委托TTNT给您或其他任何验证者。
* **监控状态**：您可以使用如Mintscan这样的区块链浏览器来监控您的验证器状态和排名。

### 使用Titan区块链浏览器辅助设置和监控验证者节点

在设置和运行Titan验证者节点时，访问专用的Titan区块链浏览器是极其有用的。这样的工具可以帮助您实时监控网络状态、确认交易是否成功，以及检查您的节点及其他节点的性能。

**推荐使用的区块链浏览器：**

[区块链浏览器1](https://explorers.titannet.io/en)

🌟[区块链浏览器2（ping.hub）](https://testnet.ping.pub/Titan%20Network%20Testnet)\ <br>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://titannet.gitbook.io/titan-network-cn/qu-kuai-lian-ce-shi/yan-zheng-jie-dian-validator/yun-xing-jiao-cheng.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
