diff --git a/.gitbook/cn/infra/archival-setup.mdx b/.gitbook/cn/infra/archival-setup.mdx new file mode 100644 index 00000000..517cc616 --- /dev/null +++ b/.gitbook/cn/infra/archival-setup.mdx @@ -0,0 +1,134 @@ +--- +title: 归档设置 +--- + +本指南将引导你完成创建一组提供归档数据的节点以及如何使用网关将它们连接在一起的过程。 + +## 架构 + +为了使归档数据的服务更加便捷,我们将数据分成较小的片段。这些片段存储在 `s3://injective-snapshots/mainnet/subnode` 中。 + +| 快照目录 | 高度范围 | Injective 版本 | 推荐磁盘大小 | +| ------------ | ------------ | ----------------- | --------------------- | +| `/0073` | 0 – 73M | v1.12.1 | 42 TiB | +| `/6068` | 60M – 68M | v1.12.1 | 7 TiB | +| `/7380` | 73M – 80M | v1.12.1 | 7 TiB | +| `/8088` | 80M – 88M | v1.13.3 | 7 TiB | +| `/8896` | 88M – 96M | v1.13.3 | 7 TiB | +| `/8898` | 88M – 98M | v1.13.3 | 7 TiB | +| `/98106` | 98M – 106M | v1.13.3 | 7 TiB | +| `/98107` | 98M – 107M | v1.14.0 | 7.5 TiB | +| `/66101` | 66M – 101M | v1.14.0 | 27 TiB | +| `/105116` | 105M – 116M | v1.15.0 | 7.5 TiB | +| `/113127` | 113M – 127M | v1.15.0 | 11 TiB | +| `/119143` | 119M – 143M | v1.17.0 | 16 TiB | +| `/138150` | 138M – 150M | v1.17.2 | 5.8 TiB | + +这些片段通过网关连接在一起,网关是一个聚合代理,根据区块范围将查询路由到适当的节点。 + +![归档架构](./assets/archival_architecture.jpg) + +## 系统要求 + +托管归档数据片段的每个节点应满足以下最低要求: + +| 组件 | 最低规格 | 备注 | +| ----------- | --------------------- | ---------------------------------------------------------- | +| **CPU** | AMD EPYC™ 9454P | 48 核 / 96 线程 | +| **内存** | 128 GB DDR5 ECC | DDR5-5200 MHz 或更高,ECC 用于数据完整性 | +| **存储** | 7 – 40 TB NVMe Gen 4 | PCIe 4.0 驱动器,可以是单个驱动器或 RAID-0 阵列 | + +## 设置步骤 +### 在托管归档片段的每个节点上: +#### 1. 使用以下命令下载你的设置所需历史记录的归档片段 +```bash +aws s3 cp --recursive s3://injective-snapshots/mainnet/subnode/ $INJ_HOME +``` + +#### 2. 根据上表下载或设置适当的 injective 二进制文件或镜像标签 + +#### 3. 生成配置文件夹 +```bash +injectived init $MONIKER --chain-id injective-1 --home $INJ_HOME --overwrite +``` +#### 4. 在 app.toml 文件中禁用修剪,在 config.toml 文件中阻止 p2p 并将日志级别设置为 error。 + +这确保数据不会被修剪,节点保持在停止状态。将日志级别设置为 error 可减少磁盘操作并提高性能。 + +```bash +# 在 app.toml 中禁用修剪 +sed -i 's/^pruning *= *.*/pruning = "nothing"/' $INJ_HOME/config/app.toml + +# 在 config.toml 中禁用 p2p 并禁用创建空区块 +awk ' + BEGIN { section = "" } + /^\[/ { + section = $0 + } + section == "[p2p]" { + if ($1 ~ /^laddr/) $0 = "laddr = \"tcp://0.0.0.0:26656\"" + if ($1 ~ /^max_num_inbound_peers/) $0 = "max_num_inbound_peers = 0" + if ($1 ~ /^min_num_inbound_peers/) $0 = "min_num_inbound_peers = 0" + if ($1 ~ /^pex/) $0 = "pex = false" + if ($1 ~ /^seed_mode/) $0 = "seed_mode = false" + } + section == "[consensus]" { + if ($1 ~ /^create_empty_blocks/) $0 = "create_empty_blocks = false" + } + { print } + ' $INJ_HOME/config/config.toml > $INJ_HOME/config/config.tmp && mv $INJ_HOME/config/config.tmp $INJ_HOME/config/config.toml + +# 将日志级别设置为 error(减少磁盘写入 = 更好的性能) +sed -i 's/^log_level *= *.*/log_level = "error"/' $INJ_HOME/config/app.toml +``` + +#### 5. 运行节点 +```bash +injectived start --home $INJ_HOME +``` + +### 网关配置 + +#### 1. 克隆网关仓库 +```bash +git clone https://github.com/decentrio/gateway +``` +#### 2. 构建网关 +```bash +make build +``` +#### 3. 创建配置文件 +```yaml +upstream: + # 示例:节点 1 保存区块 0-80M,节点 2 保存区块 80-88M + - rpc: "http://$NODE1:$RPC_PORT" + grpc: "$NODE1:$GRPC_PORT" + api: "http://$NODE1:$API_PORT" + blocks: [0,80000000] + - rpc: "http://$NODE2:$RPC_PORT" + grpc: "$NODE2:$GRPC_PORT" + api: "http://$NODE2:$API_PORT" + blocks: [80000000,88000000] + + # <其他节点在此处> + + # 归档尖端,提供最新的 x 个区块,通常设置为修剪节点 + - rpc: "http://$PRUNED_NODE:$RPC_PORT" + grpc: "$PRUNED_NODE:$GRPC_PORT" + api: "http://$PRUNED_NODE:$API_PORT" + blocks: [1000] + + +ports: + rpc: $RPC_PORT + api: $API_PORT + grpc: $GRPC_PORT + # 暂时将这些设置为零以禁用 + jsonrpc: 0 + jsonrpc_ws: 0 + +``` +#### 4. 运行网关 +```bash +gateway start --config $CONFIG_FILE +``` diff --git a/.gitbook/cn/infra/cosmovisor.mdx b/.gitbook/cn/infra/cosmovisor.mdx new file mode 100644 index 00000000..2a2fe7ed --- /dev/null +++ b/.gitbook/cn/infra/cosmovisor.mdx @@ -0,0 +1,171 @@ +--- +title: Injective 网络的 Cosmovisor 设置指南 +--- + +Cosmovisor 是为基于 Cosmos SDK 的区块链设计的进程管理器,可简化二进制(链)升级的管理。本指南提供了为 Injective 网络节点设置 Cosmovisor 的分步说明。 + +> **注意:** 这些说明假设你已经有一个现有的链二进制文件(例如 `injectived`),如果你选择从源代码安装 Cosmovisor,还需要一个可用的 Go 环境。请根据你的具体设置调整名称和路径。 + +--- + +## 目录 + +1. [安装](#安装) + - [通过 Go 安装](#通过-go-安装) +2. [环境变量](#环境变量) +3. [目录结构](#目录结构) +4. [运行 Cosmovisor](#运行-cosmovisor) +5. [处理链升级](#处理链升级) +6. [将 Cosmovisor 作为 Systemd 服务运行](#将-cosmovisor-作为-systemd-服务运行) + +--- + +## 安装 + +### 通过 Go 安装 + +如果你已安装 Go,可以使用以下命令安装 Cosmovisor: + +```bash +go install cosmossdk.io/tools/cosmovisor/cmd/cosmovisor@v1.5.0 +``` + +> **提示:** 确保你的 Go 二进制安装路径(通常是 `$GOPATH/bin` 或 `$HOME/go/bin`)已添加到系统的 `PATH` 中。你可以通过运行以下命令验证安装: +> +> ```bash +> which cosmovisor +> ``` + +## 环境变量 + +设置以下环境变量,以便 Cosmovisor 知道要运行哪个二进制文件以及在哪里找到它: + +- **`DAEMON_NAME`** + 你的链二进制文件的名称(例如 `injectived`)。 + +- **`DAEMON_HOME`** + 你节点的主目录(例如 `~/.injectived`)。 + +你可以在 shell 的配置文件(如 `~/.bashrc` 或 `~/.profile`)中设置这些变量,或直接在终端会话中导出它们: + +```bash +export DAEMON_NAME=injectived +export DAEMON_HOME=~/.injectived +``` + +--- + +## 目录结构 + +Cosmovisor 期望在你节点的主目录中有特定的文件夹结构: + +1. **创建 Genesis 目录** + + 此目录保存初始(genesis)二进制文件。 + + ```bash + mkdir -p $DAEMON_HOME/cosmovisor/genesis/bin + ``` + +2. **复制当前二进制文件** + + 将当前的链二进制文件(例如 `injectived`)放入 genesis 文件夹。确保文件名与 `DAEMON_NAME` 值匹配(见下一节)。 + + ```bash + cp $(which injectived) $DAEMON_HOME/cosmovisor/genesis/bin/injectived + ``` + +--- + +## 运行 Cosmovisor + +不要直接运行链的二进制文件,而是通过执行以下命令使用 Cosmovisor 启动节点: + +```bash +cosmovisor run start +``` + +Cosmovisor 将: + +- 在 `$DAEMON_HOME/cosmovisor/genesis/bin`(或适当的升级文件夹)中查找二进制文件。 +- 使用该二进制文件启动你的节点。 +- 监控任何链上升级信号,并在需要时自动切换二进制文件。 + +--- + +## 处理链升级 + +当链上宣布升级时,准备新的二进制文件,以便 Cosmovisor 可以自动切换到它: + +1. **创建升级目录** + + 使用链上提供的升级名称(例如 `v1.14.0`): + + ```bash + mkdir -p $DAEMON_HOME/cosmovisor/upgrades//bin + ``` + +2. **放置新二进制文件** + + 编译或下载新的二进制文件,然后将其复制到升级目录。确保二进制文件名称与 `DAEMON_NAME` 匹配。 + + ```bash + cp /path/to/new/injectived $DAEMON_HOME/cosmovisor/upgrades//bin + cp /path/to/new/libwasmvm.x86_64.so $DAEMON_HOME/cosmovisor/upgrades//bin + ``` + +> **提示:** 如果你从 GitHub 下载了 `injectived` 二进制包,我们将 `libwasmvm.x86_64.so` 复制到升级 `bin` 目录。稍后将向 systemd 服务添加环境变量,以将此目录添加到 `LD_LIBRARY_PATH`。 + +3. **升级过程** + + 当达到升级高度时,Cosmovisor 将检测到计划的升级并自动切换到相应升级文件夹中的二进制文件。 + +--- + +## 将 Cosmovisor 作为 Systemd 服务运行 + +对于生产环境,通常将节点作为 systemd 服务运行。以下是示例服务文件。 + +1. **创建服务文件** + + 创建一个文件(例如 `/etc/systemd/system/injectived.service`),内容如下。根据需要调整路径和 ``: + + ```ini + [Unit] + Description=Injective Daemon managed by Cosmovisor + After=network-online.target + + [Service] + User= + ExecStart=/home//go/bin/cosmovisor run start + Restart=always + RestartSec=3 + Environment="DAEMON_NAME=injectived" + Environment="DAEMON_HOME=/home//.injectived" + Environment="PATH=/usr/local/bin:/home//go/bin:$PATH" + Environment="DAEMON_ALLOW_DOWNLOAD_BINARIES=false" + Environment="DAEMON_RESTART_AFTER_UPGRADE=true" + Environment="UNSAFE_SKIP_BACKUP=true" + Environment="LD_LIBRARY_PATH=/home//.injectived/cosmovisor/current/bin" + + [Install] + WantedBy=multi-user.target + ``` + +2. **启用并启动服务** + + ```bash + sudo systemctl daemon-reload + sudo systemctl enable injectived.service + sudo systemctl start injectived.service + ``` + +3. **检查日志** + + 验证服务是否正常运行: + + ```bash + journalctl -u injectived.service -f + ``` + +--- diff --git a/.gitbook/cn/infra/index.mdx b/.gitbook/cn/infra/index.mdx new file mode 100644 index 00000000..92b7fbcf --- /dev/null +++ b/.gitbook/cn/infra/index.mdx @@ -0,0 +1,10 @@ +--- +description: >- + 本节帮助节点运营者和验证者运行、升级和维护他们的哨兵/验证者节点。 +title: 概述 +--- + +本节提供运行 Injective 节点和验证者所需的所有信息。 + +* [主网验证者](/cn/infra/validator-mainnet/) +* [测试网验证者](/cn/infra/validator-testnet/) diff --git a/.gitbook/cn/infra/interact-node/command-line.mdx b/.gitbook/cn/infra/interact-node/command-line.mdx new file mode 100644 index 00000000..0472d579 --- /dev/null +++ b/.gitbook/cn/infra/interact-node/command-line.mdx @@ -0,0 +1,7 @@ +--- +title: 使用 CLI 与节点交互 +--- + +你可以使用 `injectived` CLI 与节点交互。如果你正在与本地私有网络中的节点交互,请确保在使用 CLI 之前节点已在终端中运行。 + +有关如何使用 `injectived` 的更多详细信息,请参阅[使用 injectived](/developers/injectived/use/ "mention")。 diff --git a/.gitbook/cn/infra/interact-node/go.mdx b/.gitbook/cn/infra/interact-node/go.mdx new file mode 100644 index 00000000..813c7c70 --- /dev/null +++ b/.gitbook/cn/infra/interact-node/go.mdx @@ -0,0 +1,88 @@ +--- +title: 使用 Go 与节点进行编程交互 +--- + + +以下示例使用 Go,但 Python 和 TS SDK 也可用于以编程方式与节点/Injective 交互。 + +* [TypeScript 示例](/developers-native/examples/) +* [Python 示例](https://github.com/InjectiveLabs/sdk-python/tree/master/examples) + + +以下代码片段展示了如何在 Go 程序中使用 gRPC 查询状态。其思路是创建一个 gRPC 连接,并使用 Protobuf 生成的客户端代码来查询 gRPC 服务器。 + +```go +import ( + "context" + "fmt" + + "google.golang.org/grpc" + + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/tx" +) + +func queryState() error { + myAddress, err := sdk.AccAddressFromBech32("inj...") + if err != nil { + return err + } + + // 创建到 gRPC 服务器的连接。 + grpcConn := grpc.Dial( + "127.0.0.1:9090", // 你的 gRPC 服务器地址。 + grpc.WithInsecure(), // SDK 不支持任何传输安全机制。 + ) + defer grpcConn.Close() + + // 这将创建一个 gRPC 客户端来查询 x/bank 服务。 + bankClient := banktypes.NewQueryClient(grpcConn) + bankRes, err := bankClient.Balance( + context.Background(), + &banktypes.QueryBalanceRequest{Address: myAddress, Denom: "inj"}, + ) + if err != nil { + return err + } + + fmt.Println(bankRes.GetBalance()) // 打印账户余额 + + return nil +} +``` + +#### **使用 Go 查询历史状态** + +通过在 gRPC 请求中添加区块高度元数据来查询历史区块。 + +```go +import ( + "context" + "fmt" + + "google.golang.org/grpc" + "google.golang.org/grpc/metadata" + + grpctypes "github.com/cosmos/cosmos-sdk/types/grpc" + "github.com/cosmos/cosmos-sdk/types/tx" +) + +func queryState() error { + // --snip-- + + var header metadata.MD + bankRes, err = bankClient.Balance( + metadata.AppendToOutgoingContext(context.Background(), grpctypes.GRPCBlockHeightHeader, "12"), // 向请求添加元数据 + &banktypes.QueryBalanceRequest{Address: myAddress, Denom: denom}, + grpc.Header(&header), // 从响应中检索头部 + ) + if err != nil { + return err + } + blockHeight = header.Get(grpctypes.GRPCBlockHeightHeader) + + fmt.Println(blockHeight) // 打印区块高度 (12) + + return nil +} +``` diff --git a/.gitbook/cn/infra/interact-node/grpc.mdx b/.gitbook/cn/infra/interact-node/grpc.mdx new file mode 100644 index 00000000..52f88b3a --- /dev/null +++ b/.gitbook/cn/infra/interact-node/grpc.mdx @@ -0,0 +1,62 @@ +--- +title: 使用 gRPC 与节点交互 +--- + +Protobuf 生态系统为不同的用例开发了工具,包括从 `*.proto` 文件生成各种语言的代码。这些工具使客户端可以轻松构建。通常,客户端连接(即传输)可以轻松插入和替换。让我们探索一种流行的传输方法——gRPC。 + +由于代码生成库在很大程度上取决于你自己的技术栈,我们只介绍两种替代方案: + +* `grpcurl` 用于通用调试和测试 +* 通过 Go、Python 或 TS 进行编程 + +## grpcurl + +[grpcurl](https://github.com/fullstorydev/grpcurl) 类似于 `curl`,但用于 gRPC。它也可以作为 Go 库使用,但我们只将其用作 CLI 命令进行调试和测试。按照上述链接中的说明进行安装。 + +假设你有一个本地节点正在运行(无论是本地网络还是连接到实时网络),你应该能够运行以下命令来列出可用的 Protobuf 服务。你可以将 `localhost:9090` 替换为另一个节点的 gRPC 服务器端点,该端点在 `app.toml` 中的 `grpc.address` 字段下配置: + +```bash +grpcurl -plaintext localhost:9090 list +``` + +你应该会看到 gRPC 服务列表,如 `cosmos.bank.v1beta1.Query`。这称为反射,它是一个 Protobuf 端点,返回所有可用端点的描述。每个服务代表一个不同的 Protobuf 服务,每个服务公开多个可以查询的 RPC 方法。 + +要获取服务的描述,你可以运行以下命令: + +```bash +# 我们要检查的服务 +grpcurl \ + localhost:9090 \ + describe cosmos.bank.v1beta1.Query +``` + +也可以执行 RPC 调用来查询节点信息: + +```bash +grpcurl \ + -plaintext + -d '{"address":"$MY_VALIDATOR"}' \ + localhost:9090 \ + cosmos.bank.v1beta1.Query/AllBalances +``` + +## 使用 grpcurl 查询历史状态 + +你还可以通过向查询传递一些 [gRPC 元数据](https://github.com/grpc/grpc-go/blob/master/Documentation/grpc-metadata.md)来查询历史数据:`x-cosmos-block-height` 元数据应包含要查询的区块。使用上述 grpcurl,命令如下: + +```bash +grpcurl \ + -plaintext \ + -H "x-cosmos-block-height: 279256" \ + -d '{"address":"$MY_VALIDATOR"}' \ + localhost:9090 \ + cosmos.bank.v1beta1.Query/AllBalances +``` + +假设该区块的状态尚未被节点修剪,此查询应返回非空响应。 + +## 发送交易 + +使用 gRPC 和 REST 发送交易需要一些额外的步骤:生成交易、签名,最后广播。 + +你可以在[交易](/defi/transactions/ "mention")中了解更多信息。 diff --git a/.gitbook/cn/infra/interact-node/index.mdx b/.gitbook/cn/infra/interact-node/index.mdx new file mode 100644 index 00000000..cee22adf --- /dev/null +++ b/.gitbook/cn/infra/interact-node/index.mdx @@ -0,0 +1,10 @@ +--- +title: 与节点交互 +--- + +本节介绍与 Injective 节点交互的不同方法。 + +- [命令行](/cn/infra/interact-node/command-line) +- [gRPC](/cn/infra/interact-node/grpc) +- [Go](/cn/infra/interact-node/go) +- [REST](/cn/infra/interact-node/rest) diff --git a/.gitbook/cn/infra/interact-node/rest.mdx b/.gitbook/cn/infra/interact-node/rest.mdx new file mode 100644 index 00000000..2c163611 --- /dev/null +++ b/.gitbook/cn/infra/interact-node/rest.mdx @@ -0,0 +1,44 @@ +--- +title: 使用 REST 端点与节点交互 +--- + +Cosmos SDK 上的所有 gRPC 服务都可以通过 gRPC-gateway 以更方便的 REST 查询方式使用。URL 路径的格式基于 Protobuf 服务方法的完全限定名称,但可能包含一些小的自定义,以使最终 URL 看起来更符合习惯。例如,`cosmos.bank.v1beta1.Query/AllBalances` 方法的 REST 端点是 `GET /cosmos/bank/v1beta1/balances/{address}`。请求参数作为查询参数传递。 + +以下示例假设你使用 REST 端点与本地私有网络中的节点交互。你可以将域名更改为公共网络。 + +作为具体示例,发出余额请求的 `curl` 命令是: + +```bash +curl \ + -X GET \ + -H "Content-Type: application/json" \ + http://localhost:1317/cosmos/bank/v1beta1/balances/$MY_VALIDATOR +``` + +确保将 `localhost:1317` 替换为你节点的 REST 端点,该端点在 `api.address` 字段下配置。 + +所有可用 REST 端点的列表以 Swagger 规范文件的形式提供;可以在 `localhost:1317/swagger` 查看。确保你的 `app.toml` 文件中的 `api.swagger` 字段设置为 true。 + +## 使用 REST 查询历史状态 + +使用 HTTP 头 `x-cosmos-block-height` 查询历史状态。例如,curl 命令如下: + +```bash +curl \ + -X GET \ + -H "Content-Type: application/json" \ + -H "x-cosmos-block-height: 279256" \ + http://localhost:1317/cosmos/bank/v1beta1/balances/$MY_VALIDATOR +``` + +假设该区块的状态尚未被节点修剪,此查询应返回非空响应。 + +## 跨域资源共享 (CORS) + +默认情况下未启用 [CORS 策略](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS)以帮助提高安全性。如果你想使用 rest-server,我们建议你提供反向代理。这可以使用 [nginx](https://www.nginx.com/) 完成。出于测试和开发目的,`app.toml` 中有一个 `enabled-unsafe-cors` 字段。 + +## 发送交易 + +使用 gRPC 和 REST 发送交易需要一些额外的步骤:生成交易、签名,最后广播。 + +你可以在[交易](/defi/transactions/ "mention")中了解更多信息。 diff --git a/.gitbook/cn/infra/join-a-network.mdx b/.gitbook/cn/infra/join-a-network.mdx new file mode 100644 index 00000000..9a4ad785 --- /dev/null +++ b/.gitbook/cn/infra/join-a-network.mdx @@ -0,0 +1,376 @@ +--- +title: 加入网络 +--- + +本指南将引导你完成在本地设置独立网络的过程,以及在主网或测试网上运行节点。 + +你还可以在相应的选项卡中找到每个网络的硬件要求。 + + + +要轻松设置本地节点,请下载并运行 `setup.sh` 脚本。这将初始化你的本地 Injective 网络。 + +```bash +wget https://raw.githubusercontent.com/InjectiveLabs/injective-chain-releases/master/scripts/setup.sh +chmod +x ./setup.sh # 使脚本可执行 +./setup.sh +``` + +通过运行以下命令启动节点: + +```bash +injectived start # 运行此命令后应该开始出现区块 +``` + +有关脚本功能的进一步说明以及对设置过程的更精细控制,请继续阅读下文。 + +#### 初始化链 + +在运行 Injective 节点之前,我们需要初始化链以及节点的创世文件: + +```bash +# 参数是你节点的自定义用户名。它应该是人类可读的。 +injectived init --chain-id=injective-1 +``` + +上述命令创建了节点运行所需的所有配置文件以及默认的创世文件,该文件定义了网络的初始状态。所有这些配置文件默认位于 `~/.injectived` 中,但你可以通过传递 `--home` 标志来覆盖此文件夹的位置。请注意,如果你选择使用 `~/.injectived` 以外的目录,则每次运行 `injectived` 命令时都必须使用 `--home` 标志指定位置。如果你已经有创世文件,可以使用 `--overwrite` 或 `-o` 标志覆盖它。 + +`~/.injectived` 文件夹具有以下结构: + +```bash +. # ~/.injectived + |- data # 包含节点使用的数据库。 + |- config/ + |- app.toml # 应用程序相关的配置文件。 + |- config.toml # Tendermint 相关的配置文件。 + |- genesis.json # 创世文件。 + |- node_key.json # 用于 p2p 协议中节点身份验证的私钥。 + |- priv_validator_key.json # 用于共识协议中作为验证者的私钥。 +``` + +#### 修改 `genesis.json` 文件 + +此时,需要对 `genesis.json` 文件进行修改: + +* 将 staking `bond_denom`、crisis `denom`、gov `denom` 和 mint `denom` 值更改为 `"inj"`,因为这是 Injective 的原生代币。 + +这可以通过运行以下命令轻松完成: + +```bash +cat $HOME/.injectived/config/genesis.json | jq '.app_state["staking"]["params"]["bond_denom"]="inj"' > $HOME/.injectived/config/tmp_genesis.json && mv $HOME/.injectived/config/tmp_genesis.json $HOME/.injectived/config/genesis.json +cat $HOME/.injectived/config/genesis.json | jq '.app_state["crisis"]["constant_fee"]["denom"]="inj"' > $HOME/.injectived/config/tmp_genesis.json && mv $HOME/.injectived/config/tmp_genesis.json $HOME/.injectived/config/genesis.json +cat $HOME/.injectived/config/genesis.json | jq '.app_state["gov"]["deposit_params"]["min_deposit"][0]["denom"]="inj"' > $HOME/.injectived/config/tmp_genesis.json && mv $HOME/.injectived/config/tmp_genesis.json $HOME/.injectived/config/genesis.json +cat $HOME/.injectived/config/genesis.json | jq '.app_state["mint"]["params"]["mint_denom"]="inj"' > $HOME/.injectived/config/tmp_genesis.json && mv $HOME/.injectived/config/tmp_genesis.json $HOME/.injectived/config/genesis.json +``` + + +上述命令仅在使用默认 `.injectived` 目录时有效。对于特定目录,请修改上述命令或手动编辑 `genesis.json` 文件以反映更改。 + + +#### 为验证者账户创建密钥 + +在启动链之前,你需要用至少一个账户填充状态。为此,首先在 `test` 密钥环后端下创建一个名为 `my_validator` 的新账户(可以随意选择其他名称和其他后端): + +```bash +injectived keys add my_validator --keyring-backend=test + +# 将生成的地址放入变量中以供后续使用。 +MY_VALIDATOR_ADDRESS=$(injectived keys show my_validator -a --keyring-backend=test) +``` + +现在你已经创建了一个本地账户,继续在链的创世文件中授予它一些 `inj` 代币。这样做还将确保你的链从创世开始就知道此账户的存在: + +```bash +injectived add-genesis-account $MY_VALIDATOR_ADDRESS 100000000000000000000000000inj --chain-id=injective-1 +``` + +`$MY_VALIDATOR_ADDRESS` 是保存密钥环中 `my_validator` 密钥地址的变量。Injective 中的代币具有 `{amount}{denom}` 格式:`amount` 是 18 位精度的十进制数,`denom` 是带有面额键的唯一代币标识符(例如 `inj`)。这里,我们授予 `inj` 代币,因为 `inj` 是 `injectived` 中用于质押的代币标识符。 + +#### 将验证者添加到链 + +现在你的账户有了一些代币,你需要向链添加一个验证者。验证者是参与共识过程以向链添加新区块的特殊全节点。任何账户都可以声明其成为验证者运营商的意图,但只有那些拥有足够委托的账户才能进入活跃集。在本指南中,你将把本地节点(通过上述 `init` 命令创建)添加为链的验证者。验证者可以在链首次启动之前通过创世文件中包含的特殊交易(称为 `gentx`)声明: + +```bash +# 创建 gentx。 +injectived genesis gentx my_validator 1000000000000000000000inj --chain-id=injective-1 --keyring-backend=test + +# 将 gentx 添加到创世文件。 +injectived genesis collect-gentxs +``` + +`gentx` 做三件事: + +1. 将你创建的 `validator` 账户注册为验证者运营商账户(即控制验证者的账户)。 +2. 自委托提供的质押代币 `amount`。 +3. 将运营商账户与用于签署区块的 Tendermint 节点公钥链接。如果未提供 `--pubkey` 标志,则默认为通过上述 `injectived init` 命令创建的本地节点公钥。 + +有关 `gentx` 的更多信息,请使用以下命令: + +```bash +injectived genesis gentx --help +``` + +#### 使用 `app.toml` 和 `config.toml` 配置节点 + +两个配置文件会自动生成在 `~/.injectived/config` 中: + +* `config.toml`:用于配置 Tendermint(在 [Tendermint 文档](https://docs.tendermint.com/v0.34/tendermint-core/configuration.html)中了解更多),以及 +* `app.toml`:由 Cosmos SDK(Injective 基于此构建)生成,用于状态修剪策略、遥测、gRPC 和 REST 服务器配置、状态同步等配置。 + +这两个文件都有大量注释——请直接参考它们来调整你的节点。 + +一个需要调整的示例配置是 `app.toml` 中的 `minimum-gas-prices` 字段,它定义了验证者节点愿意接受的处理交易的最低 gas 价格。如果为空,请确保编辑该字段并设置一些值,例如 `10inj`,否则节点将在启动时停止。在本教程中,让我们将最低 gas 价格设置为 0: + +```toml + # 验证者愿意接受的处理交易的最低 gas 价格。 + # 交易的费用必须满足此配置中指定的任何面额的最低要求 + # (例如 0.25token1;0.0001token2)。 + minimum-gas-prices = "0inj" +``` + +#### 运行本地网络 + +现在一切都设置好了,你终于可以启动节点了: + +```bash +injectived start # 运行此命令后应该开始出现区块 +``` + +此命令允许你运行单个节点,这足以通过节点与链交互,但你可能希望同时运行多个节点以查看它们之间如何达成共识。 + + + +#### 硬件规格 + +节点运营商应部署裸机服务器以实现最佳性能。此外,验证者节点必须满足推荐的硬件规格,特别是 CPU 要求,以确保高正常运行时间。 + +| _最低要求_ | _推荐配置_ | +| :-------------------: | :-------------------: | +| 内存 128GB | 内存 128GB | +| CPU 12 核 | CPU 16 核 | +| CPU 基础频率 3.7GHz | CPU 基础频率 4.2GHz | +| 存储 2TB NVMe | 存储 2TB NVMe | +| 网络 1Gbps+ | 网络 1Gbps+ | + +#### 安装 `injectived` 和 `peggo` + +请参阅 [Injective 发布仓库](https://github.com/InjectiveLabs/testnet/releases)获取最新版本。非验证者节点运营商不需要安装 `peggo`。 + +```bash +wget https://github.com/InjectiveLabs/testnet/releases/latest/download/linux-amd64.zip +unzip linux-amd64.zip +sudo mv peggo /usr/bin +sudo mv injectived /usr/bin +sudo mv libwasmvm.x86_64.so /usr/lib +``` + +#### 初始化新的 Injective 链节点 + +在运行 Injective 节点之前,我们需要初始化链以及节点的创世文件: + +```bash +# 参数是你节点的自定义用户名,它应该是人类可读的。 +export MONIKER= +# Injective 测试网的 chain-id 是 "injective-888" +injectived init $MONIKER --chain-id injective-888 +``` + +运行 `init` 命令将在 `~/.injectived` 创建 `injectived` 默认配置文件。 + +#### 准备配置以加入测试网 + +你现在应该使用测试网的创世文件和应用程序配置文件更新默认配置,并使用种子节点配置你的持久对等节点。 + +```bash +git clone https://github.com/InjectiveLabs/testnet.git + +# 将创世文件复制到配置目录 +aws s3 cp --no-sign-request s3://injective-snapshots/testnet/genesis.json . +mv genesis.json ~/.injectived/config/ + +# 将配置文件复制到配置目录 +cp testnet/corfu/70001/app.toml ~/.injectived/config/app.toml +cp testnet/corfu/70001/config.toml ~/.injectived/config/config.toml +``` + +你还可以验证创世文件的校验和 - a4abe4e1f5511d4c2f821c1c05ecb44b493eec185c0eec13b1dcd03d36e1a779 + +```bash +sha256sum ~/.injectived/config/genesis.json +``` + +#### 为 `injectived` 配置 `systemd` 服务 + +编辑 `/etc/systemd/system/injectived.service` 的配置: + +```bash +[Unit] + Description=injectived + +[Service] + WorkingDirectory=/usr/bin + ExecStart=/bin/bash -c '/usr/bin/injectived --log-level=error start' + Type=simple + Restart=always + RestartSec=5 + User=root + +[Install] + WantedBy=multi-user.target +``` + +启动和重启 systemd 服务 + +```bash +sudo systemctl daemon-reload +sudo systemctl restart injectived +sudo systemctl status injectived + +# 启用开机自启 +sudo systemctl enable injectived + +# 查看日志 +journalctl -u injectived -f +``` + +#### 与网络同步 + +请参阅 [Polkachu Injective 测试网节点快照](https://polkachu.com/testnets/injective/snapshots)下载快照并与网络同步。 + +**支持** + +如有任何其他问题,你可以随时通过 [Discord](https://discord.gg/injective)、[Telegram](https://t.me/joininjective) 或[电子邮件](mailto:contact@injectivelabs.org)与 Injective 团队联系。 + + + +#### 硬件规格 + +节点运营商应部署裸机服务器以实现最佳性能。此外,验证者节点必须满足推荐的硬件规格,特别是 CPU 要求,以确保高正常运行时间。 + +| _最低要求_ | _推荐配置_ | +| :-------------------: | :-------------------: | +| 内存 128GB | 内存 128GB | +| CPU 12 核 | CPU 16 核 | +| CPU 基础频率 3.7GHz | CPU 基础频率 4.2GHz | +| 存储 2TB NVMe | 存储 2TB NVMe | +| 网络 1Gbps+ | 网络 1Gbps+ | + +#### 安装 `injectived` 和 `peggo` + +请参阅 [Injective 链发布仓库](https://github.com/InjectiveLabs/injective-chain-releases/releases/)获取最新版本。非验证者节点运营商不需要安装 `peggo`。 + +```bash +wget https://github.com/InjectiveLabs/injective-chain-releases/releases/latest/download/linux-amd64.zip +unzip linux-amd64.zip +sudo mv peggo /usr/bin +sudo mv injectived /usr/bin +sudo mv libwasmvm.x86_64.so /usr/lib +``` + +#### 初始化新的 Injective 节点 + +在运行 Injective 节点之前,我们需要初始化链以及节点的创世文件: + +```bash +# 参数是你节点的自定义用户名。它应该是人类可读的。 +export MONIKER= +# Injective 主网的 chain-id 是 "injective-1" +injectived init $MONIKER --chain-id injective-1 +``` + +运行 `init` 命令将在 `~/.injectived` 创建 `injectived` 默认配置文件。 + +#### 准备配置以加入主网 + +你现在应该使用主网的创世文件和应用程序配置文件更新默认配置,并使用种子节点配置你的持久对等节点。 + +```bash +git clone https://github.com/InjectiveLabs/mainnet-config + +# 将创世文件复制到配置目录 +cp mainnet-config/10001/genesis.json ~/.injectived/config/genesis.json + +# 将配置文件复制到配置目录 +cp mainnet-config/10001/app.toml ~/.injectived/config/app.toml +``` + +你还可以验证创世文件的校验和 - 573b89727e42b41d43156cd6605c0c8ad4a1ce16d9aad1e1604b02864015d528 + +```bash +sha256sum ~/.injectived/config/genesis.json +``` + +然后使用 `mainnet-config/10001/seeds.txt` 的内容更新 `~/.injectived/config/config.toml` 中的 `seeds` 字段,并将 `timeout_commit` 更新为 `300ms`。 + +```bash +cat mainnet-config/10001/seeds.txt +nano ~/.injectived/config/config.toml +``` + +#### 为 `injectived` 配置 `systemd` 服务 + +编辑 `/etc/systemd/system/injectived.service` 的配置: + +```bash +[Unit] + Description=injectived + +[Service] + WorkingDirectory=/usr/bin + ExecStart=/bin/bash -c '/usr/bin/injectived --log-level=error start' + Type=simple + Restart=always + RestartSec=5 + User=root + +[Install] + WantedBy=multi-user.target +``` + +启动和重启 systemd 服务: + +```bash +sudo systemctl daemon-reload +sudo systemctl restart injectived +sudo systemctl status injectived + +# 启用开机自启 +sudo systemctl enable injectived + +# 查看日志 +journalctl -u injectived -f +``` + +在将快照数据加载到正确目录之前应停止服务,加载后再启动。 + +```bash +# 停止节点 +sudo systemctl stop injectived + +# 启动节点 +sudo systemctl start injectived +``` + +#### 与网络同步 + +**选项 1. 状态同步** + +_即将添加_ + +**选项 2. 快照** + +**已修剪** + +1. [Polkachu](https://polkachu.com/tendermint_snapshots/injective)。 +2. [HighStakes](https://tools.highstakes.ch/files/injective.tar.gz)。 +3. [Imperator](https://www.imperator.co/services/chain-services/mainnets/injective)。 +4. [Bware Labs](https://bwarelabs.com/snapshots)。 +5. [AutoStake](https://autostake.com/networks/injective/#validator)。 + +如果 Injective `mainnet-config seeds.txt` 列表不起作用(节点无法同步区块),ChainLayer、Polkachu 和 Autostake 维护对等节点列表(可在 `config.toml` 的 `persistent_peers` 字段中使用)或地址簿(用于更快的对等节点发现)。 + +**支持** + +如有任何其他问题,你可以随时通过 [Discord](https://discord.gg/injective)、[Telegram](https://t.me/joininjective) 或[电子邮件](mailto:contact@injectivelabs.org)与 Injective 团队联系。 + + diff --git a/.gitbook/cn/infra/premium-endpoints.mdx b/.gitbook/cn/infra/premium-endpoints.mdx new file mode 100644 index 00000000..4f27cd88 --- /dev/null +++ b/.gitbook/cn/infra/premium-endpoints.mdx @@ -0,0 +1,23 @@ +--- +description: >- + 作为开发者,你可能有兴趣拥有专用节点或索引解决方案来支持你的 dApp。 +title: 高级端点 +--- + +以下是提供私有 Injective 基础设施服务的外部提供商列表。有关更多信息,请点击下方他们的网站: + +* [QuickNode](https://www.quicknode.com/chains/inj) +* [CryptoCrew](https://forms.gle/Aa2XYBB4sLxzHNzc6) +* [Imperator](https://www.imperator.co/products/dedicated-and-rpc-nodes#get-started) +* [AllNodes](https://injective.publicnode.com/) +* [NowNodes](https://nownodes.io/injective-inj) +* [RockX](https://access.rockx.com/product/injective-blockchain-api-for-web3-builders) + +| 提供商 | Chain | Indexer | +|-------------------|-------|---------| +| QuickNode | [x] | [ ] +| CryptoCrew | [x] | [x] | +| Imperator | [x] | [x] | +| AllNodes | [x] | [x] | +| NowNodes | [x] | [ ] | +| RockX | [x] | [ ] | diff --git a/.gitbook/cn/infra/public-endpoints.mdx b/.gitbook/cn/infra/public-endpoints.mdx new file mode 100644 index 00000000..a49d843e --- /dev/null +++ b/.gitbook/cn/infra/public-endpoints.mdx @@ -0,0 +1,47 @@ +--- +title: 公共端点 +--- + + +我们**不建议**在高使用量/流量的生产应用程序中使用这些端点。有数千名开发者使用公共基础设施,我们无法保证 100% 的正常运行时间和可靠性。 + + +## 主网 + +| 服务 | 地址 | +| ---------------- | ------------------------------------------------------------- | +| Chain Swagger | https://sentry.lcd.injective.network/swagger/#/ | +| Chain LCD | https://sentry.lcd.injective.network:443 | +| Chain RPC | https://sentry.tm.injective.network:443 | +| Chain WebSocket | wss://sentry.tm.injective.network:443/websocket | +| Chain Streamer | sentry.chain.stream.injective.network:443 | +| Chain gRPC | sentry.chain.grpc.injective.network:443 | +| Chain gRPC-Web | https://sentry.chain.grpc-web.injective.network:443 | +| Indexer Swagger | https://sentry.exchange.grpc-web.injective.network/swagger/#/ | +| Indexer gRPC | sentry.exchange.grpc.injective.network:443 | +| Indexer gRPC-Web | https://sentry.exchange.grpc-web.injective.network:443 | +| Indexer EventProvider | k8s.global.mainnet.events.grpc.injective.network:443 | +| Hub | https://injhub.com/ | +| Explorer | https://explorer.injective.network/ | +| Faucet | https://inj.supply/ | +| Status | https://uptime.com/statuspage/status.injective.network | + +## 测试网 + +| 服务 | 地址 | +| ---------------- | --------------------------------------------------------------------- | +| Chain Swagger | https://testnet.sentry.lcd.injective.network/swagger/ | +| Chain RPC | https://testnet.sentry.tm.injective.network:443 | +| Chain LCD | https://testnet.sentry.lcd.injective.network:443 | +| Chain WebSocket | wss://testnet.sentry.tm.injective.network:443/websocket | +| Chain Streamer | testnet.sentry.chain.stream.injective.network:443 | +| Chain gRPC | testnet.sentry.chain.grpc.injective.network:443 | +| Chain gRPC-Web | https://testnet.sentry.chain.grpc-web.injective.network:443 | +| Indexer Swagger | https://testnet.sentry.exchange.grpc-web.injective.network/swagger/#/ | +| Indexer gRPC | testnet.sentry.exchange.grpc.injective.network:443 | +| Indexer gRPC-Web | https://testnet.sentry.exchange.grpc-web.injective.network:443 | +| Indexer EventProvider | k8s.global.testnet.events.grpc.injective.network:443 | +| Hub | https://testnet.hub.injective.network/ | +| Explorer | https://testnet.explorer.injective.network/ | +| Faucet | https://testnet.faucet.injective.network/ | +| Status | https://uptime.com/statuspage/testnet.status.injective.network | diff --git a/.gitbook/cn/infra/run-node.mdx b/.gitbook/cn/infra/run-node.mdx new file mode 100644 index 00000000..7e1407ee --- /dev/null +++ b/.gitbook/cn/infra/run-node.mdx @@ -0,0 +1,56 @@ +--- +title: 运行节点 +--- + +强烈建议你在加入公共网络之前先设置本地私有网络。这将帮助你熟悉设置过程,并提供一个测试环境。 + +### **私有网络** + +* 通过在本地设置独立网络来加入 + +### **公共网络** + +* 通过公共端点使用网络;或 +* 通过运行节点加入 + +任何人都可以设置自己的节点,通过端点与 Injective 区块链通信。为方便起见,还有一些公共端点可用于查询链。这些端点推荐用于开发和测试目的。为了获得最大的控制和可靠性,建议运行自己的节点。 + +## 运行节点的准备工作 + +如果你选择运行节点(无论是设置私有网络还是加入公共网络),你必须设置密钥环。你还可以选择安装 Cosmovisor,它可以帮助进行链升级,最大限度地减少停机时间。 + +## 与节点交互 + +一旦节点启动并运行,有几种方式可以与节点交互,即使用 gRPC 端点、REST 端点或 `injectived` CLI。你可以在[与节点交互](/cn/infra/interact-node/)部分了解更多信息。 + +## 运行节点指南 + + + + 了解如何设置密钥环 + + + 了解如何加入网络 + + + 了解如何升级节点 + + diff --git a/.gitbook/cn/infra/set-up-keyring.mdx b/.gitbook/cn/infra/set-up-keyring.mdx new file mode 100644 index 00000000..f8956a6f --- /dev/null +++ b/.gitbook/cn/infra/set-up-keyring.mdx @@ -0,0 +1,96 @@ +--- +title: 设置密钥环 +--- + + +本文档描述了如何为 Injective 节点配置和使用密钥环及其各种后端。在设置密钥环之前,应先安装 `injectived`。有关更多信息,请参阅[安装 `injectived` 页面](../developers/injectived/install/)。 + + +密钥环保存用于与节点交互的私钥/公钥对。例如,在运行 Injective 节点之前需要设置验证者密钥,以便正确签署区块。私钥可以存储在不同的位置,称为"后端",例如文件或操作系统自己的密钥存储。 + +### 密钥环的可用后端 + +#### `os` 后端 + +`os` 后端依赖于操作系统特定的默认设置来安全地处理密钥存储。通常,操作系统的凭据子系统根据用户的密码策略处理密码提示、私钥存储和用户会话。以下是最流行的操作系统及其各自的密码管理器列表: + +* macOS(自 Mac OS 8.6 起):[Keychain](https://support.apple.com/en-gb/guide/keychain-access/welcome/mac) +* Windows:[Credentials Management API](https://docs.microsoft.com/en-us/windows/win32/secauthn/credentials-management) +* GNU/Linux: + * [libsecret](https://gitlab.gnome.org/GNOME/libsecret) + * [kwallet](https://api.kde.org/frameworks/kwallet/html/index.html) + +使用 GNOME 作为默认桌面环境的 GNU/Linux 发行版通常附带 [Seahorse](https://wiki.gnome.org/Apps/Seahorse)。基于 KDE 的发行版用户通常使用 [KDE Wallet Manager](https://userbase.kde.org/KDE_Wallet_Manager)。前者实际上是 `libsecret` 的便捷前端,后者是 `kwallet` 客户端。 + +`os` 是默认选项,因为操作系统的默认凭据管理器旨在满足用户最常见的需求,并在不影响安全性的情况下为他们提供舒适的体验。 + +对于无头环境,推荐的后端是 `file` 和 `pass`。 + +#### `file` 后端 + +`file` 将密钥环加密存储在应用程序的配置目录中。每次访问此密钥环时都会请求密码,这可能在单个命令中多次发生,导致重复的密码提示。如果使用 bash 脚本执行使用 `file` 选项的命令,你可能需要使用以下格式处理多个提示: + +```bash +# 假设 KEYPASSWD 已在环境中设置 +yes $KEYPASSWD | injectived keys add me +yes $KEYPASSWD | injectived keys show me +# 使用 keyring-backend 标志启动 injectived +injectived --keyring-backend=file start +``` + + +首次向空密钥环添加密钥时,系统会提示你输入两次密码。 + + +#### `pass` 后端 + +`pass` 后端使用 [pass](https://www.passwordstore.org/) 实用程序来管理密钥敏感数据和元数据的磁盘加密。密钥存储在应用程序特定目录中的 `gpg` 加密文件中。`pass` 可用于大多数流行的 UNIX 操作系统以及 GNU/Linux 发行版。有关如何下载和安装的信息,请参阅其手册页。 + + +`pass` 使用 [GnuPG](https://gnupg.org/) 进行加密。`gpg` 在执行时会自动调用 `gpg-agent` 守护进程,该守护进程处理 GnuPG 凭据的缓存。有关如何配置缓存参数(如凭据 TTL 和密码过期)的更多信息,请参阅 `gpg-agent` 手册页。 + + +在首次使用之前必须设置密码存储: + +```sh +pass init +``` + +将 `` 替换为你的 GPG 密钥 ID。你可以使用个人 GPG 密钥或专门用于加密密码存储的替代密钥。 + +#### `kwallet` 后端 + +`kwallet` 后端使用 `KDE Wallet Manager`,它默认安装在以 KDE 为默认桌面环境的 GNU/Linux 发行版上。有关更多信息,请参阅 [KWallet 手册](https://docs.kde.org/stable/en/kdeutils/kwallet/index.html)。 + +#### `test` 后端 + +`test` 后端是 `file` 后端的无密码变体。密钥以未加密的形式存储在磁盘上。 + +**仅供测试目的使用。不建议在生产环境中使用 `test` 后端**。 + +#### `memory` 后端 + +`memory` 后端将密钥存储在内存中。程序退出后密钥会立即删除。 + +**仅供测试目的使用。不建议在生产环境中使用 `memory` 后端**。 + +### 向密钥环添加密钥 + +你可以使用 `injectived keys` 获取有关 keys 命令的帮助,使用 `injectived keys [command] --help` 获取有关特定子命令的更多信息。 + + +你还可以使用 `injectived completion` 命令启用自动补全。例如,在 bash 会话开始时,运行 `. <(injectived completion)`,所有 `injectived` 子命令都将自动补全。 + + +要在密钥环中创建新密钥,请使用 `` 参数运行 `add` 子命令。在本教程中,我们将仅使用 `test` 后端,并将新密钥命名为 `my_validator`。此密钥将在下一节中使用。 + +```bash +$ injectived keys add my_validator --keyring-backend test + +# 将生成的地址放入变量中以供后续使用。 +MY_VALIDATOR_ADDRESS=$(injectived keys show my_validator -a --keyring-backend test) +``` + +此命令生成一个新的 24 个单词的助记词短语,将其持久化到相关后端,并输出有关密钥对的信息。如果此密钥对将用于持有有价值的代币,请务必将助记词短语写在安全的地方! + +默认情况下,密钥环生成 `eth_secp256k1` 密钥对。密钥环还支持 `ed25519` 密钥,可以通过传递 `--algo ed25519` 标志来创建。密钥环当然可以同时持有两种类型的密钥。 diff --git a/.gitbook/cn/infra/upgrade-node.mdx b/.gitbook/cn/infra/upgrade-node.mdx new file mode 100644 index 00000000..f20e4a64 --- /dev/null +++ b/.gitbook/cn/infra/upgrade-node.mdx @@ -0,0 +1,28 @@ +--- +title: 升级节点 +--- + +### 链升级 + +Injective 定期进行软件升级。当链升级治理提案通过时,将指定一个区块高度,届时所有节点将自动 panic 并停止运行。此时,可以安装升级后的 `injectived` 二进制文件,并重新启动节点。 + +请参阅 [InjectiveLabs/injective-chain-releases](https://github.com/InjectiveLabs/injective-chain-releases/releases) 获取最新和之前的链版本。 + +### 节点升级步骤 + +总结一下,按照以下步骤升级你的节点: + +1. 将节点同步到升级治理提案预定的区块高度。 +2. 节点将在预定的升级高度自动 panic/停止。 +3. 删除旧的二进制文件并安装新版本的二进制文件。 +4. 重新启动节点。 + +### 使用 Cosmovisor 升级 + +要管理链升级,请使用 [Cosmovisor](./cosmovisor/)。 + +### 节点维护(管理存储) + +随着 Injective 状态的增长,你的磁盘空间可能会被填满。建议你通过下载新快照定期修剪链数据。除了磁盘开销外,当链状态较小时,节点性能更好。 + +Injective 验证者每天拍摄轻量快照,你可以使用这些快照来清理链状态,链状态每天大约增长 10-15 GB。这些快照通常只有 2-3 GB 左右。我们建议每 300-400 GB 修剪一次链数据。有关快照链接以及应用快照/同步节点的说明,请参阅[加入主网](./join-a-network/)。 diff --git a/.gitbook/cn/infra/validator-mainnet/index.mdx b/.gitbook/cn/infra/validator-mainnet/index.mdx new file mode 100644 index 00000000..9121f705 --- /dev/null +++ b/.gitbook/cn/infra/validator-mainnet/index.mdx @@ -0,0 +1,154 @@ +--- +title: 主网 +--- + +节点运营商应部署裸机服务器以实现最佳性能。此外,验证者节点必须满足推荐的硬件规格,特别是 CPU 要求,以确保高正常运行时间。 + +#### 硬件要求 + +| _最低要求_ | _推荐配置_ | +| :--------------------------: | :---------------------------: | +| 内存 128GB | 内存 128GB | +| CPU 12 核 | CPU 16 核 | +| CPU 基础频率 3.7GHz | CPU 基础频率 4.2GHz | +| 存储 2TB NVMe | 存储 2TB NVMe | +| 网络 1Gbps+ | 网络 1Gbps+ | + +### 步骤 1:创建验证者账户 + +首先,使用你想要的验证者密钥名称运行 keygen 命令。 + +```bash +export VALIDATOR_KEY_NAME=[my-validator-key] +injectived keys add $VALIDATOR_KEY_NAME +``` + +这将派生一个新的私钥并将其加密存储到磁盘。确保记住你使用的密码。 + +```bash +# 示例输出 +- name: myvalidatorkey + type: local + address: inj1queq795wx8gzqc8706uz80whp07mcgg5nmpj6h + pubkey: injpub1r0mckeepqwzmrzt5af00hgc7fhve05rr0q3q6wvx4xn6k46zguzykdszg6cnu0zca4q + mnemonic: "" + threshold: 0 + pubkeys: [] + + +**重要** 请将此助记词短语写在安全的地方。 +如果你忘记密码,这是恢复账户的唯一方法。 +``` + + +**输出将包含一个以纯文本表示你密钥的助记词短语。确保将此短语保存为密钥的备份,因为没有密钥你将无法控制你的验证者。最好将短语备份在物理纸张上,将其存储在云存储中可能会在以后危及你的验证者。** + +记住以 `inj` 开头的地址,这将是你的 Injective 验证者账户地址。 + + +### 步骤 2:获取主网 INJ + +要继续下一步,你需要在主网以太坊上获取一些真实的 INJ(ERC-20 代币地址 [`0xe28b3b32b6c345a34ff64674606124dd5aceca30`](https://etherscan.io/token/0xe28b3b32b6c345a34ff64674606124dd5aceca30))。 + +### 步骤 3:将 INJ "转移"到 Injective 上的验证者账户 + +使用质押仪表板将你的主网 INJ 代币存入 Injective 上的验证者账户。你需要在我们的 [Hub](https://injhub.com/bridge) 上[连接你的钱包](https://medium.com/injective-labs/injective-hub-guide-9a14f09f6a7d),然后从以太坊主网网络存入 INJ。这将触发一个自动桥接,将代币从以太坊网络映射到 Injective。 + +几分钟后,你应该能够在 UI 上验证你的存款是否成功。或者,你可以使用以下命令通过 `injectived` CLI 查询你的账户余额: + +```bash +injectived q bank balances +``` + +### 步骤 4:创建验证者账户 + +获取你节点的 Tendermint 验证者 Bech32 编码的 PubKey 共识地址。 + +```bash +VALIDATOR_PUBKEY=$(injectived tendermint show-validator) +echo $VALIDATOR_PUBKEY + +# 示例:{"@type": "/cosmos.crypto.ed25519.PubKey", "key": "GWEJv/KSFhUUcKBWuf9TTT3Ful+3xV/1lFhchyW1TZ8="} +``` + +然后使用你的 INJ 代币创建新的验证者,并进行自委托初始化。最关键的是,你需要决定验证者质押参数的值。 + +* `--moniker` - 你的验证者名称 +* `--amount` - 你的验证者初始绑定的 INJ 数量 +* `--commission-max-change-rate` - 你的验证者最大佣金变化率百分比(每天) +* `--commission-max-rate` - 你的验证者最大佣金率百分比 +* `--commission-rate` - 你的验证者初始佣金率百分比 +* `--min-self-delegation` - 你的验证者最低自委托要求 + +一旦你决定了所需的值,按如下方式设置它们。 + +```bash +MONIKER= +AMOUNT=100000000000000000000inj # 委托 100 INJ,因为 INJ 用 18 位小数表示。 +COMMISSION_MAX_CHANGE_RATE=0.1 # 例如,每天最大变化率百分比为 10% +COMMISSION_MAX_RATE=0.1 # 例如,最大佣金率百分比为 10% +COMMISSION_RATE=0.1 # 例如,初始佣金率百分比为 10% +MIN_SELF_DELEGATION_AMOUNT=50000000000000000000 # 例如,验证者最低自委托要求为 50 INJ +``` + +然后运行以下命令创建你的验证者。 + +```bash +injectived tx staking create-validator \ +--moniker=$MONIKER \ +--amount=$AMOUNT \ +--gas-prices=500000000inj \ +--pubkey=$VALIDATOR_PUBKEY \ +--from=$VALIDATOR_KEY_NAME \ +--keyring-backend=file \ +--yes \ +--node=tcp://localhost:26657 \ +--chain-id=injective-1 +--commission-max-change-rate=$COMMISSION_MAX_CHANGE_RATE \ +--commission-max-rate=$COMMISSION_MAX_RATE \ +--commission-rate=$COMMISSION_RATE \ +--min-self-delegation=$MIN_SELF_DELEGATION_AMOUNT +``` + +额外的 `create-validator` 选项可考虑: + +``` +--identity= 可选的身份签名(例如 UPort 或 Keybase) +--pubkey= 验证者的 Bech32 编码 PubKey +--security-contact= 验证者的(可选)安全联系邮箱 +--website= 验证者的(可选)网站 +``` + +你可以通过检查 [Injective Hub 质押仪表板](https://injhub.com/stake)或输入以下 CLI 命令来检查你的验证者是否成功创建。 + +```bash +injectived q staking validators +``` + +如果你在验证者列表中看到你的验证者,那么恭喜你,你已正式成为 Injective 主网验证者!🎉 + +### 步骤 5:(可选)向验证者委托额外的 INJ + +为了更深入地了解你未来委托者将体验的用户体验,你可以通过[质押指南](https://medium.com/injective-labs/injective-hub-guide-9a14f09f6a7d)尝试委托。 + +这些步骤将允许你使用 MetaMask 交易体验委托流程。🦊 + +或者,你可以随时使用 Injective CLI 发送委托交易。 + +```bash +injectived tx staking delegate [validator-addr] [amount] --from $VALIDATOR_KEY_NAME --keyring-backend=file --yes --node=tcp://localhost:26657 +``` + +### 步骤 6:(推荐)将验证者身份与 Keybase 连接 + +通过将你的 Keybase 公钥添加到 Injective 中的验证者身份信息,你可以在 Injective Hub 和 Explorer 等客户端应用程序中自动获取你的 Keybase 公开个人资料信息。以下是如何将验证者身份与 Keybase 公钥连接: + +1. 在 [https://keybase.io/](https://keybase.io/) 创建验证者个人资料并确保完整。 +2. 将验证者身份公钥添加到 Injective: + * 发送 `MsgEditValidator` 以使用你的 Keybase 公钥更新你的 `Identity` 验证者身份。你还可以使用此消息更改你的网站、联系邮箱和其他详细信息。 + +就是这样!一旦你将验证者身份与 Keybase 连接,Injective Explorer 和 Hub 就可以自动获取你的品牌标识和其他公开个人资料信息。 + +#### 后续步骤 + +接下来,继续设置你的[以太坊桥接中继器](/cn/infra/validator-mainnet/peggo/)。这是防止验证者被惩罚的必要步骤。你应该在设置验证者后立即执行此操作。 diff --git a/.gitbook/cn/infra/validator-mainnet/peggo.mdx b/.gitbook/cn/infra/validator-mainnet/peggo.mdx new file mode 100644 index 00000000..dc23915e --- /dev/null +++ b/.gitbook/cn/infra/validator-mainnet/peggo.mdx @@ -0,0 +1,296 @@ +--- +title: Peggo +--- + +如果你在此页面,那么你可能已经成为 Injective 的验证者。恭喜!配置 `peggo` 是设置的最后一步。 + +`.env` 示例配置: + +```bash +PEGGO_ENV="local" # 指标的环境名称 (dev/test/staging/prod/local) +PEGGO_LOG_LEVEL="debug" # 日志级别深度 + +PEGGO_COSMOS_CHAIN_ID="injective-1" # Injective 网络的 chain ID +PEGGO_COSMOS_GRPC="tcp://localhost:9090" # 你的 injectived 进程的 gRPC +PEGGO_TENDERMINT_RPC="http://localhost:26657" # 你的 injectived 进程的 Tendermint RPC + +# 注意:省略 PEGGO_COSMOS_GRPC 和 PEGGO_TENDERMINT_RPC 可启用独立 peggo 模式。在此模式下, +# peggo 连接到 Injective 网络提供的负载均衡端点。这将 peggo 的连接与你的 injectived 进程解耦。 + +# Injective 配置 +PEGGO_COSMOS_FEE_DENOM="inj" # 用于在 Injective 上支付费用的代币 +PEGGO_COSMOS_GAS_PRICES="160000000inj" # 向 Injective 发送消息的默认 --gas-prices 标志值 +PEGGO_COSMOS_KEYRING="file" # 密钥环后端 ("os", "file", "kwallet", "memory", "pass", "test") +PEGGO_COSMOS_KEYRING_DIR= # 密钥环目录路径 +PEGGO_COSMOS_KEYRING_APP="peggo" # 密钥环应用程序的任意名称 +PEGGO_COSMOS_FROM= # 你的验证者(或委托的 Orchestrator)的账户地址 +PEGGO_COSMOS_FROM_PASSPHRASE= # 密钥环密码 +PEGGO_COSMOS_PK= # 你的验证者(或委托的 Orchestrator)的私钥 +PEGGO_COSMOS_USE_LEDGER=false + +# 以太坊配置 +PEGGO_ETH_KEYSTORE_DIR= # 以太坊密钥库路径 +PEGGO_ETH_FROM= # 你的以太坊地址(如果你是验证者,必须是委托的以太坊地址) +PEGGO_ETH_PASSPHRASE= # 以太坊密钥库密码 +PEGGO_ETH_PK= # 你的以太坊地址私钥 +PEGGO_ETH_GAS_PRICE_ADJUSTMENT=1.3 # 建议的以太坊 gas 价格将按此因子调整(中继器) +PEGGO_ETH_MAX_GAS_PRICE="500gwei" # 发送以太坊交易允许的最大 gas 价格(中继器) +PEGGO_ETH_CHAIN_ID=1 # 以太坊网络的 chain ID +PEGGO_ETH_RPC="http://localhost:8545" # 你的以太坊节点的 RPC +PEGGO_ETH_ALCHEMY_WS="" # 可选的 websocket 端点,用于监听 Peggy.sol 上的待处理交易 +PEGGO_ETH_USE_LEDGER=false + +# 代币资产的价格源提供者(批量创建者) +PEGGO_COINGECKO_API="https://api.coingecko.com/api/v3" + +# 中继器配置 +PEGGO_RELAY_VALSETS=true # 设置为 `true` 以中继验证者集 +PEGGO_RELAY_VALSET_OFFSET_DUR="5m" # 验证者集有资格中继前需要过期的持续时间 +PEGGO_RELAY_BATCHES=true # 设置为 `true` 以中继代币批次 +PEGGO_RELAY_BATCH_OFFSET_DUR="5m" # 代币批次有资格中继前需要过期的持续时间 +PEGGO_RELAY_PENDING_TX_WAIT_DURATION="20m" # 等待待处理交易处理的时间 + +# 批量创建者配置 +PEGGO_MIN_BATCH_FEE_USD=23.2 # 创建代币批次必须满足的最低费用金额 + +# 指标配置 +PEGGO_STATSD_PREFIX="peggo." +PEGGO_STATSD_ADDR="localhost:8125" +PEGGO_STATSD_STUCK_DUR="5m" +PEGGO_STATSD_MOCKING=false +PEGGO_STATSD_DISABLED=true +``` + + +**重要提示:** 如果你运行自己的 `injectived`(Injective 节点)和 `geth`(以太坊节点)进程,请确保它们与最新状态同步。过时的节点可能会使 `peggo` 的业务逻辑偏差,有时会显示"误报"日志。 + + +## 步骤 1:配置 .env + +```bash +# 官方 Injective 主网 .env 配置 +mkdir ~/.peggo +cp mainnet-config/10001/peggo-config.env ~/.peggo/.env +cd ~/.peggo +``` + +以太坊配置 + +首先,使用有效的以太坊 EVM RPC 端点更新 `.env` 文件中的 `PEGGO_ETH_RPC`。 + +要设置自己的以太坊全节点,请按照[此处](https://ethereum.org/en/developers/docs/nodes-and-clients/run-a-node/)的说明操作。可以使用外部以太坊 RPC 提供商(如 Alchemy 或 Infura),但请记住,Peggo 桥接中继器大量使用 `eth_getLogs` 调用,这可能会增加你的成本负担,具体取决于你的提供商。 + +## **管理 `peggo` 的以太坊密钥** + +Peggo 支持两种提供签名密钥凭据的选项 - 使用 Geth 密钥库(推荐)或提供明文以太坊私钥。 + +#### **选项 1. Geth 密钥库** + +你可以在 Geth 文档[此处](https://geth.ethereum.org/docs/interface/managing-your-accounts)找到使用密钥库安全创建新以太坊账户的说明。 + +为方便起见,下面提供了一个示例。 + +```bash +geth account new --datadir=/home/ec2-user/.peggo/data/ + +INFO [03-23|18:18:36.407] Maximum peer count ETH=50 LES=0 total=50 +Your new account is locked with a password. Please give a password. Do not forget this password. +Password: +Repeat password: + +Your new key was generated + +Public address of the key: 0x9782dc957DaE6aDc394294954B27e2118D05176C +Path of the secret key file: /home/ec2-user/.peggo/data/keystore/UTC--2021-03-23T15-18-44.284118000Z--9782dc957dae6adc394294954b27e2118d05176c + +- You can share your public address with anyone. Others need it to interact with you. +- You must NEVER share the secret key with anyone! The key controls access to your funds! +- You must BACKUP your key file! Without the key, it's impossible to access account funds! +- You must REMEMBER your password! Without the password, it's impossible to decrypt the key! +``` + +确保注意 geth 提供的警告,特别是备份密钥文件,以免意外丢失密钥。我们还建议不要在密码中使用任何引号或反引号字符,以确保 peggo 兼容性。 + +你现在应该设置以下环境变量: + +```bash +# 示例值,替换为你自己的 +PEGGO_ETH_KEYSTORE_DIR=/home/ec2-user/.peggo/data/keystore +PEGGO_ETH_FROM=0x9782dc957DaE6aDc394294954B27e2118D05176C +PEGGO_ETH_PASSPHRASE=12345678 +``` + +然后确保你的以太坊地址有足够的 ETH。 + +#### **选项 2. 以太坊私钥(不安全)** + +只需使用新账户的新以太坊私钥更新 `PEGGO_ETH_PK`。 + +然后确保你的以太坊地址有足够的 ETH。 + +## Injective 配置 + +### **创建用于发送 Injective 交易的委托 Cosmos 密钥** + +你的 peggo orchestrator 可以: + +* 使用专门用于发送验证者特定 Peggy 交易(即 `ValsetConfirm`、`BatchConfirm` 和 `SendToCosmos` 交易)的显式委托账户密钥,或 +* 简单地使用你的验证者账户密钥("你的验证者就是你的 Orchestrator") + +出于隔离目的,我们建议创建委托 Cosmos 密钥来发送 Injective 交易,而不是使用你的验证者账户密钥。 + +要创建新密钥,运行 + +```bash +injectived keys add $ORCHESTRATOR_KEY_NAME +``` + +然后确保你的 orchestrator inj 地址有 INJ 余额,以便 peggo orchestrator 可以向 Injective 发送消息。 + +要获取 orchestrator 的 inj 地址,运行 + +```bash +injectived keys list $ORCHESTRATOR_KEY_NAME +``` + +你可以使用此命令将 INJ 从验证者账户转移到 orchestrator 地址 + +```bash +injectived tx bank send $VALIDATOR_KEY_NAME $ORCHESTRATOR_INJ_ADDRESS --chain-id=injective-1 --keyring-backend=file --yes --node=tcp://localhost:26657 --gas-prices=500000000inj +``` + +示例 + +```bash +injectived tx bank send genesis inj1u3eyz8nkvym0p42h79aqgf37gckf7szreacy9e 20000000000000000000inj --chain-id=injective-1 --keyring-backend=file --yes --node=tcp://localhost:26657 --gas-prices=500000000inj +``` + +然后你可以通过运行以下命令验证 orchestrator 账户是否有 INJ 余额 + +```bash +injectived q bank balances $ORCHESTRATOR_INJ_ADDRESS +``` + +### **管理 `peggo` 的 Cosmos 账户密钥** + +Peggo 支持两种提供 Cosmos 签名密钥凭据的选项 - 使用 Cosmos 密钥环(推荐)或提供明文私钥。 + +#### **选项 1. Cosmos 密钥环** + +在 `.env` 文件中,首先指定与你的 peggo 账户签名密钥对应的 `PEGGO_COSMOS_FROM` 和 `PEGGO_COSMOS_FROM_PASSPHRASE`。 + +如果你按照上面推荐的方式使用委托账户密钥配置,这将是你的 `$ORCHESTRATOR_KEY_NAME` 和密码。否则,这应该是你的 `$VALIDATOR_KEY_NAME` 和相关的验证者密码。 + +请注意,默认密钥环后端是 `file`,因此 peggo 默认会尝试在磁盘上定位密钥。 + +要使用默认的 injectived 密钥配置,你应该将密钥环路径设置为 injectived 节点的主目录,例如 `~/.injectived`。 + +你还可以在[此处](https://docs.cosmos.network/v0.46/run-node/keyring.html)阅读更多关于 Cosmos 密钥环设置的信息。 + +#### **选项 2. Cosmos 私钥(不安全)** + +在 `.env` 文件中,指定与你的 peggo 账户签名密钥对应的 `PEGGO_COSMOS_PK`。 + +如果你按照上面推荐的方式使用委托账户密钥配置,这将是你的 orchestrator 账户的私钥。否则,这应该是你的验证者账户私钥。 + +要获取 orchestrator 的 Cosmos 私钥(如适用),运行 + +```bash +injectived keys unsafe-export-eth-key $ORCHESTRATOR_KEY_NAME +``` + +要获取验证者的 Cosmos 私钥(如适用),运行 + +```bash +injectived keys unsafe-export-eth-key $VALIDATOR_KEY_NAME +``` + +同样,此方法不太安全,不推荐使用。 + +### 步骤 2:注册你的 Orchestrator 和以太坊地址 + +你只能注册一次 orchestrator 和以太坊地址。之后**无法**更新。因此在运行以下命令之前请仔细检查。 + +```bash +injectived tx peggy set-orchestrator-address $VALIDATOR_INJ_ADDRESS $ORCHESTRATOR_INJ_ADDRESS $ETHEREUM_ADDRESS --from $VALIDATOR_KEY_NAME --chain-id=injective-1 --keyring-backend=file --yes --node=tcp://localhost:26657 --gas-prices=500000000inj + +``` + +* 要获取验证者的 inj 地址,运行 `injectived keys list $VALIDATOR_KEY_NAME` +* 要获取 orchestrator 的 inj 地址,运行 `injectived keys list $ORCHESTRATOR_KEY_NAME` + +示例: + +```bash +injectived tx peggy set-orchestrator-address inj10m247khat0esnl0x66vu9mhlanfftnvww67j9n inj1x7kvxlz2epqx3hpq6v8j8w859t29pgca4z92l2 0xf79D16a79130a07e77eE36e8067AeA783aBdA3b6 --from validator-key-name --chain-id=injective-1 --keyring-backend=file --yes --node=tcp://localhost:26657 --gas-prices=500000000inj +``` + +你可以通过在 https://lcd.injective.network/peggy/v1/valset/current 检查验证者映射的以太坊地址来验证注册是否成功。 + + +**注意:** 一旦你使用 `set-orchestrator-address` 消息注册了 Orchestrator,你就**无法**再次注册。完成此步骤后,你的 `Validator` 将绑定到提供的以太坊地址(以及你可能提供的委托地址)。换句话说,你的 peggo 必须始终使用你注册时提供的地址运行。 + + +### 步骤 3:启动中继器 + +```bash +cd ~/.peggo +peggo orchestrator +``` + +这将启动 Peggo 桥接(中继器/orchestrator)。 + +### 步骤 4:创建 Peggo systemd 服务 + +在 `/etc/systemd/system/peggo.service` 下添加包含以下内容的 `peggo.service` 文件 + +```ini +[Unit] + Description=peggo + +[Service] + WorkingDirectory=/home/ec2-user/.peggo + ExecStart=/bin/bash -c 'peggo orchestrator ' + Type=simple + Restart=always + RestartSec=1 + User=ec2-user + +[Install] + WantedBy=multi-user.target +``` + +然后使用以下命令配置环境变量、启动和停止 peggo 中继器。 + +```bash +sudo systemctl start peggo +sudo systemctl stop peggo +sudo systemctl restart peggo +sudo systemctl status peggo + +# 启用开机自启 +sudo systemctl enable peggo + +# 查看日志 +journalctl -f -u peggo +``` + +### 步骤 5:(可选)保护 Cosmos 密钥环免受未授权访问 + + +这是一个高级 DevOps 主题,请咨询你的系统管理员。 + + +在[此处](https://docs.cosmos.network/v0.46/run-node/keyring.html)了解更多关于 Cosmos 密钥环设置的信息。启动节点后,默认密钥环将以加密形式将验证者操作员密钥存储在磁盘上。通常密钥环位于节点的主目录中,即 `~/.injectived/keyring-file`。 + +Injective 质押文档的某些部分将指导你使用此密钥进行治理目的,即提交交易和设置以太坊桥接。为了保护密钥免受未授权访问,即使密钥环密码通过配置泄露,你也可以设置操作系统权限,仅允许 `injectived` / `peggo` 进程访问磁盘。 + +在 Debian、Ubuntu 和 RHEL 等 Linux 系统中,可以使用 POSIX 访问控制列表 (ACL) 实现。在开始使用 ACL 之前,必须在启用 ACL 的情况下挂载文件系统。每个发行版都有一些官方指南: + +* [Ubuntu](https://help.ubuntu.com/community/FilePermissionsACLs) +* [Debian](https://wiki.debian.org/Permissions) +* [Amazon Linux (RHEL)](https://www.redhat.com/sysadmin/linux-access-control-lists) + +### 贡献 + +如果你想检查 Peggo orchestrator 源代码并做出贡献,可以在 [https://github.com/InjectiveLabs/peggo](https://github.com/InjectiveLabs/peggo) 进行。 diff --git a/.gitbook/cn/infra/validator-testnet/index.mdx b/.gitbook/cn/infra/validator-testnet/index.mdx new file mode 100644 index 00000000..cae40172 --- /dev/null +++ b/.gitbook/cn/infra/validator-testnet/index.mdx @@ -0,0 +1,146 @@ +--- +title: 测试网 +--- + +节点运营商应部署裸机服务器以实现最佳性能。此外,验证者节点必须满足推荐的硬件规格,特别是 CPU 要求,以确保高正常运行时间。 + +#### 硬件要求 + +| _最低要求_ | _推荐配置_ | +| :--------------------------: | :---------------------------: | +| 内存 128GB | 内存 128GB | +| CPU 12 核 | CPU 16 核 | +| CPU 基础频率 3.7GHz | CPU 基础频率 4.2GHz | +| 存储 2TB NVMe | 存储 2TB NVMe | +| 网络 1Gbps+ | 网络 1Gbps+ | + +### 步骤 1:创建验证者账户 + +首先,使用你想要的验证者密钥名称运行 keygen 命令。 + +```bash +export VALIDATOR_KEY_NAME=[my-validator-key] +injectived keys add $VALIDATOR_KEY_NAME +``` + +这将派生一个新的私钥并将其加密存储到磁盘。确保记住你使用的密码。 + +```bash +# 示例输出 +- name: myvalidatorkey + type: local + address: inj1queq795wx8gzqc8706uz80whp07mcgg5nmpj6h + pubkey: injpub1r0mckeepqwzmrzt5af00hgc7fhve05rr0q3q6wvx4xn6k46zguzykdszg6cnu0zca4q + mnemonic: "" + threshold: 0 + pubkeys: [] + + +**重要** 请将此助记词短语写在安全的地方。 +如果你忘记密码,这是恢复账户的唯一方法。 +``` + + +**输出将包含一个以纯文本表示你密钥的助记词短语。确保将此短语保存为密钥的备份,因为没有密钥你将无法控制你的验证者。最好将短语备份在物理纸张上,将其存储在云存储中可能会在以后危及你的验证者。** + +记住以 `inj` 开头的地址,这将是你的 Injective 链验证者账户地址。 + + +### 步骤 2:获取 INJ + +要继续下一步,你需要在 Injective 上获取一些 INJ。 + +你可以从[测试网水龙头](https://faucet.injective.network/)请求资金。 + +几分钟后,你应该能够在 UI 上验证你的存款是否成功。或者,你可以使用以下命令通过 `injectived` CLI 查询你的账户余额: + +```bash +injectived q bank balances +``` + +### 步骤 3:创建验证者账户 + +获取你节点的 Tendermint 验证者 Bech32 编码的 PubKey 共识地址。 + +```bash +VALIDATOR_PUBKEY=$(injectived tendermint show-validator) +echo $VALIDATOR_PUBKEY + +# 示例:{"@type": "/cosmos.crypto.ed25519.PubKey", "key": "GWEJv/KSFhUUcKBWuf9TTT3Ful+3xV/1lFhchyW1TZ8="} +``` + +然后使用你的 INJ 代币创建新的验证者,并进行自委托初始化。最关键的是,你需要决定验证者质押参数的值。 + +* `--moniker` - 你的验证者名称 +* `--amount` - 你的验证者初始绑定的 INJ 数量 +* `--commission-max-change-rate` - 你的验证者最大佣金变化率百分比(每天) +* `--commission-max-rate` - 你的验证者最大佣金率百分比 +* `--commission-rate` - 你的验证者初始佣金率百分比 +* `--min-self-delegation` - 你的验证者最低自委托要求 + +一旦你决定了所需的值,按如下方式设置它们。 + +```bash +MONIKER= +AMOUNT=100000000000000000000inj # 委托 100 INJ,因为 INJ 用 18 位小数表示。 +COMMISSION_MAX_CHANGE_RATE=0.1 # 例如,每天最大变化率百分比为 10% +COMMISSION_MAX_RATE=0.1 # 例如,最大佣金率百分比为 10% +COMMISSION_RATE=0.1 # 例如,初始佣金率百分比为 10% +MIN_SELF_DELEGATION_AMOUNT=50000000000000000000 # 例如,验证者最低自委托要求为 50 INJ +``` + +然后运行以下命令创建你的验证者。 + +```bash +injectived tx staking create-validator \ +--moniker=$MONIKER \ +--amount=$AMOUNT \ +--gas-prices=500000000inj \ +--pubkey=$VALIDATOR_PUBKEY \ +--from=$VALIDATOR_KEY_NAME \ +--keyring-backend=file \ +--yes \ +--node=tcp://localhost:26657 \ +--chain-id=injective-888 +--commission-max-change-rate=$COMMISSION_MAX_CHANGE_RATE \ +--commission-max-rate=$COMMISSION_MAX_RATE \ +--commission-rate=$COMMISSION_RATE \ +--min-self-delegation=$MIN_SELF_DELEGATION_AMOUNT +``` + +额外的 `create-validator` 选项可考虑: + +``` +--identity= 可选的身份签名(例如 UPort 或 Keybase) +--pubkey= 验证者的 Bech32 编码 PubKey +--security-contact= 验证者的(可选)安全联系邮箱 +--website= 验证者的(可选)网站 +``` + +你可以通过检查[质押仪表板](https://injhub.com/stake/)并向下滚动到"验证者"部分来检查你的验证者是否成功创建。 +它看起来像这样: +![Inj Hub 质押验证者部分](/img/inj-hub-staking-validators-section.png) + +或者,输入以下 CLI 命令: + +```bash +injectived q staking validators +``` + +如果你在验证者列表中看到你的验证者,那么恭喜你,你已正式成为 Equinox 质押验证者。 + +### 步骤 4:(可选)向验证者委托额外的 INJ + +为了更深入地了解你未来委托者将体验的用户体验,你可以完成[质押指南](https://medium.com/injective-labs/injective-hub-guide-9a14f09f6a7d)中的其余步骤。 + +这些步骤将允许你使用 MetaMask 交易体验委托流程。 + +或者,你可以随时使用 Injective CLI 发送委托交易。 + +```bash +injectived tx staking delegate [validator-addr] [amount] --from $VALIDATOR_KEY_NAME --chain-id=injective-888 --keyring-backend=file --yes --node=tcp://localhost:26657 +``` + +### 后续步骤 + +接下来,继续设置你的以太坊桥接中继器。这是防止验证者被惩罚的必要步骤。你应该在设置验证者后立即执行此操作。 diff --git a/.gitbook/cn/infra/validator-testnet/peggo.mdx b/.gitbook/cn/infra/validator-testnet/peggo.mdx new file mode 100644 index 00000000..c17b3bee --- /dev/null +++ b/.gitbook/cn/infra/validator-testnet/peggo.mdx @@ -0,0 +1,177 @@ +--- +title: 测试网 Peggo +--- + +## Equinox 测试网 + +## 步骤 1:配置你的 Peggo 中继器 + +```bash +mkdir ~/.peggo +cp testnet-config/staking/40014/peggo-config.env ~/.peggo/.env +cd ~/.peggo +``` + +首先,使用有效的 Sepolia EVM RPC 端点更新 `.env` 文件中的 `PEGGO_ETH_RPC`。 + +要设置自己的 Sepolia 全节点,请按照[此处](https://ethereum.org/en/developers/docs/nodes-and-clients/run-a-node/)的说明操作。可以使用 Alchemy 或 Infura RPC,但请记住,Peggo 桥接仍在开发中,它向 RPC 发出的请求量未经优化。确保它不会在你的账户上产生高成本。 + +Peggo 还需要访问你的验证者的 Cosmos 和以太坊凭据来为相应的网络签署交易。 + +## **Cosmos 密钥** + +有两种方式提供凭据访问 - 带有加密密钥的密钥环,或明文私钥。 + +### **1. Cosmos 密钥环** + +将 `PEGGO_COSMOS_FROM` 更新为你的验证者密钥名称(或账户地址),将 `PEGGO_COSMOS_FROM_PASSPHRASE` 更新为你的 Cosmos 密钥环密码。请注意,默认密钥环后端是 `file`,它将尝试在磁盘上定位密钥。 + +如果你想重用那里的密钥,密钥环路径必须指向 injectived 节点的主目录。 + +在[此处](https://docs.cosmos.network/v0.46/run-node/keyring.html)了解更多关于密钥环设置的信息。 + +### **2. Cosmos 私钥(不安全)** + +只需使用你的验证者账户私钥更新 `PEGGO_COSMOS_PK`。 + +要获取验证者的 Cosmos 私钥,运行 `injectived keys unsafe-export-eth-key $VALIDATOR_KEY_NAME`。 + +此方法不安全,不推荐使用。 + +## **以太坊密钥** + +有两种方式提供凭据访问 - 带有加密密钥的 Geth 密钥库,或明文私钥。 + +### **1. Geth 密钥库** + +只需创建一个新的私钥存储并更新以下环境变量: + +* `PEGGO_ETH_KEYSTORE_DIR` +* `PEGGO_ETH_FROM` +* `PEGGO_ETH_PASSPHRASE` + +你可以在 Geth 文档[此处](https://geth.ethereum.org/docs/interface/managing-your-accounts)找到使用密钥库安全创建新以太坊账户的说明。 + +下面提供了示例。 + +```bash +geth account new --datadir=/home/ec2-user/.peggo/data/ + +INFO [03-23|18:18:36.407] Maximum peer count ETH=50 LES=0 total=50 +Your new account is locked with a password. Please give a password. Do not forget this password. +Password: +Repeat password: + +Your new key was generated + +Public address of the key: 0x9782dc957DaE6aDc394294954B27e2118D05176C +Path of the secret key file: /home/ec2-user/.peggo/data/keystore/UTC--2021-03-23T15-18-44.284118000Z--9782dc957dae6adc394294954b27e2118d05176c + +- You can share your public address with anyone. Others need it to interact with you. +- You must NEVER share the secret key with anyone! The key controls access to your funds! +- You must BACKUP your key file! Without the key, it's impossible to access account funds! +- You must REMEMBER your password! Without the password, it's impossible to decrypt the key! +``` + +现在,你可以这样设置环境变量: + +```ini +PEGGO_ETH_KEYSTORE_DIR=/home/ec2-user/.peggo/data/keystore +PEGGO_ETH_FROM=0x9782dc957DaE6aDc394294954B27e2118D05176C +PEGGO_ETH_PASSPHRASE=12345678 +``` + +接下来,确保你的以太坊地址有 Sepolia ETH。你可以从公共水龙头[此处](https://www.alchemy.com/faucets/ethereum-sepolia)请求 Sepolia ETH。 + +### **2. 以太坊私钥(不安全)** + +只需使用新账户的新以太坊私钥更新 `PEGGO_ETH_PK`。 + +接下来,确保你的以太坊地址有 Sepolia ETH。你可以从公共水龙头[此处](https://www.alchemy.com/faucets/ethereum-sepolia)请求 Sepolia ETH。 + +### 步骤 2:注册你的 Orchestrator 和以太坊地址 + +你只能注册一次 orchestrator 和以太坊地址。之后**无法**更新。因此在运行以下命令之前请仔细检查。 + +```bash +injectived tx peggy set-orchestrator-address $VALIDATOR_INJ_ADDRESS $ORCHESTRATOR_INJ_ADDRESS $ETHEREUM_ADDRESS --from $VALIDATOR_KEY_NAME --chain-id=injective-888 --keyring-backend=file --yes --node=tcp://localhost:26657 --gas-prices=160000000inj + +``` + +* 要获取验证者的 inj 地址,运行 `injectived keys list $VALIDATOR_KEY_NAME` +* 要获取 orchestrator 的 inj 地址,运行 `injectived keys list $ORCHESTRATOR_KEY_NAME` + +示例: + +```bash +injectived tx peggy set-orchestrator-address inj10m247khat0esnl0x66vu9mhlanfftnvww67j9n inj1x7kvxlz2epqx3hpq6v8j8w859t29pgca4z92l2 0xf79D16a79130a07e77eE36e8067AeA783aBdA3b6 --from validator-key-name --chain-id=injective-888 --keyring-backend=file --yes --node=tcp://localhost:26657 --gas-prices=160000000inj +``` + +你可以通过在 https://testnet.sentry.lcd.injective.network/peggy/v1/valset/current 检查验证者映射的以太坊地址来验证注册是否成功。 + + +**注意:** 一旦你使用 `set-orchestrator-address` 消息注册了 Orchestrator,你就**无法**再次注册。完成此步骤后,你的 `Validator` 将绑定到提供的以太坊地址(以及你可能提供的委托地址)。换句话说,你的 peggo 必须始终使用你注册时提供的地址运行。 + + +## 步骤 3:启动中继器 + +```bash +peggo orchestrator +``` + +这将启动 Peggo 桥接(中继器/orchestrator)。 + +## 步骤 4:创建 Peggo systemd 服务 + +在 `/etc/systemd/system/peggo.service` 下添加包含以下内容的 `peggo.service` 文件 + +```ini +[Unit] + Description=peggo + +[Service] + WorkingDirectory=/home/ec2-user/.peggo + ExecStart=/bin/bash -c 'peggo orchestrator ' + Type=simple + Restart=always + RestartSec=1 + User=ec2-user + +[Install] + WantedBy=multi-user.target +``` + +然后,运行以下命令配置环境变量、启动和停止 peggo 中继器。 + +```bash +sudo systemctl start peggo +sudo systemctl stop peggo +sudo systemctl restart peggo +sudo systemctl status peggo + +# 启用开机自启 +sudo systemctl enable peggo + +# 查看日志 +journalctl -f -u peggo +``` + +## 步骤 5:(可选)保护 Cosmos 密钥环免受未授权访问 + + +这是一个高级 DevOps 主题,请咨询你的系统管理员。 + + +在[此处](https://docs.cosmos.network/v0.46/run-node/keyring.html)了解更多关于 Cosmos 密钥环设置的信息。启动节点后,默认密钥环将以加密形式将验证者操作员密钥存储在磁盘上。通常,密钥环位于节点的主目录中,即 `~/.injectived/keyring-file`。 + +Injective 质押文档的某些部分将指导你使用此密钥进行治理目的,即提交交易和设置以太坊桥接。为了保护密钥免受未授权访问,即使密钥环密码通过配置泄露,你也可以设置操作系统权限,仅允许 `injectived` / `peggo` 进程访问磁盘。 + +在 Debian、Ubuntu 和 RHEL 等 Linux 系统中,可以使用 POSIX 访问控制列表 (ACL) 实现。在开始使用 ACL 之前,必须在启用 ACL 的情况下挂载文件系统。每个发行版都有一些官方指南: + +* [Ubuntu](https://help.ubuntu.com/community/FilePermissionsACLs) +* [Debian](https://wiki.debian.org/Permissions) +* [Amazon Linux (RHEL)](https://www.redhat.com/sysadmin/linux-access-control-lists) + +## 贡献 + +如果你想检查 Peggo orchestrator 源代码并做出贡献,可以在 [https://github.com/InjectiveLabs/peggo](https://github.com/InjectiveLabs/peggo) 进行。 diff --git a/.gitbook/docs.json b/.gitbook/docs.json index 24a6c52b..1c5d94f7 100644 --- a/.gitbook/docs.json +++ b/.gitbook/docs.json @@ -736,6 +736,47 @@ "cn/developers-evm/evm-integrations-cheat-sheet", "cn/developers-evm/evm-integrations-faq" ] + }, + { + "group": "基础设施", + "icon": "network-wired", + "expanded": false, + "pages": [ + "cn/infra/index", + { + "group": "与节点交互", + "expanded": false, + "pages": [ + "cn/infra/interact-node/index", + "cn/infra/interact-node/command-line", + "cn/infra/interact-node/grpc", + "cn/infra/interact-node/go", + "cn/infra/interact-node/rest" + ] + }, + "cn/infra/run-node", + "cn/infra/set-up-keyring", + "cn/infra/join-a-network", + "cn/infra/cosmovisor", + "cn/infra/upgrade-node", + { + "group": "主网验证者", + "pages": [ + "cn/infra/validator-mainnet/index", + "cn/infra/validator-mainnet/peggo" + ] + }, + { + "group": "测试网验证者", + "pages": [ + "cn/infra/validator-testnet/index", + "cn/infra/validator-testnet/peggo" + ] + }, + "cn/infra/public-endpoints", + "cn/infra/premium-endpoints", + "cn/infra/archival-setup" + ] } ] }