Skip to main content

Sui全节点配置

info

这些说明适用于高级用户。如果你只需要一个本地开发环境,你应该按照创建本地Sui网络中的说明创建本地全节点、验证器和水龙头。

Sui全节点验证区块链活动,包括交易、检查点和时期更改。每个全节点都存储并为区块链状态和历史提供查询服务。

此角色使验证器能够专注于为服务和处理交易。当验证器提交一组新的交易(或交易块)时,验证器将该块推送到所有连接的全节点,然后这些全节点将为客户端的查询提供服务。

特性

Sui全节点:

  • 跟踪并验证区块链的状态,独立并在本地进行。
  • 为客户端提供读取请求服务。

状态同步

Sui全节点与验证器同步以接收网络上的新交易。

一笔交易需要与2f+1个验证器进行几轮通信,以形成交易证书(TxCert)。

此同步过程包括:

  1. 跟随2f+1个验证器并监听新提交的交易。
  2. 确保2f+1个验证器认识该交易并且它达到最终性。
  3. 在本地执行交易并更新本地数据库。

此同步过程要求至少听取2f+1个验证器,以确保全节点已正确处理所有新交易。Sui将通过引入检查点和与其他全节点同步的能力来改进同步过程。

架构

Sui全节点本质上是网络状态的只读视图。与验证器节点不同,全节点无法签署交易,尽管它们可以通过重新执行先前由验证器半数提交的交易来验证链的完整性。

目前,Sui全节点保留链的完整历史。

验证器节点仅存储对象图前沿上的最新交易(例如,具有>0未花费输出对象的交易)。

全节点设置

按照这里的说明运行你自己的Sui全节点。

硬件要求

运行Sui全节点的建议最低硬件要求:

  • CPU:8个物理核心/16个虚拟核心
  • RAM:128 GB
  • 存储(SSD):4 TB NVMe驱动器

软件要求

Sui建议在Linux上运行Sui全节点。Sui支持Ubuntu和Debian发行版。你也可以在macOS上运行Sui全节点。

确保更新Rust

使用以下命令安装额外的Linux依赖项。

sudo apt-get update \
&& sudo apt-get install -y --no-install-recommends \
tzdata \
libprotobuf-dev \
ca-certificates \
build-essential \
libssl-dev \
libclang-dev \
pkg-config \
openssl \
protobuf-compiler \
git \
clang \
cmake

配置全节点

你可以通过使用Docker或从源代码构建来配置Sui全节点。

使用Docker Compose

按照Full node Docker Readme中的说明来运行Sui全节点,包括重置环境

设置本地Sui存储库

你必须从Sui GitHub存储库获取最新的源文件。

  1. 设置Sui存储库的分支:
    1. 转到GitHub上的Sui存储库,并单击屏幕右上角的Fork按钮。
    2. 将Sui存储库的个人分支克隆到本地计算机(确保将你的GitHub用户名插入到URL中): git clone https://github.com/<YOUR-GITHUB-USERNAME>/sui.git
  2. 进入你的sui存储库: cd sui
  3. 将Sui存储库设置为git远程: git remote add upstream https://github.com/MystenLabs/sui
  4. 同步你的分支: git fetch upstream
  5. 检出与你想要运行的网络版本相关联的分支(例如,使用devnet来运行Devnet全节点): git checkout --track upstream/<BRANCH-NAME>

从源代码设置全节点

打开终端或控制台,转到你在前面步骤中下载的sui目录,完成以下步骤:

  1. 安装所需的先决条件。
  2. 复制Full node YAML模板cp crates/sui-config/data/fullnode-template.yaml fullnode.yaml
  3. 下载要使用的网络的创世块:
    • Devnet创世块curl -fLJO https://github.com/MystenLabs/sui-genesis/raw/main/devnet/genesis.blob
    • Testnet创世块curl -fLJO https://github.com/MystenLabs/sui-genesis/raw/main/testnet/genesis.blob
    • Mainnet创世块curl -fLJO https://github.com/MystenLabs/sui-genesis/raw/main/mainnet/genesis.blob
  4. 仅适用于Testnet全节点:编辑fullnode.yaml文件以包含状态同步的对等节点。在当前配置的末尾追加以下内容:
    p2p-config:
    seed-peers:
    - peer-id: df8a8d128051c249e224f95fcc463f518a0ebed8986bbdcc11ed751181fecd38
    address: /dns/lax-tnt-ssfn-00.testnet.sui.io/udp/8084
    - peer-id: f9a72a0a6c17eed09c27898eab389add704777c03e135846da2428f516a0c11d
    address: /dns/lhr-tnt-ssfn-00.testnet.sui.io/udp/8084
    - peer-id: 9393d6056bb9c9d8475a3cf3525c747257f17c6a698a7062cbbd1875bc6ef71e
    address: /dns/mel-tnt-ssfn-00.testnet.sui.io/udp/8084
  5. 可选:跳过此步骤以接受资源的默认路径。编辑fullnode.yaml文件以使用自定义路径。
  6. 使用Full节点数据库路径更新db-path字段。 db-path: "/db-files/sui-fullnode"
  7. 使用创世块路径更新genesis-file-location
    genesis:
    genesis-file-location: "/sui-fullnode/genesis.blob"

启动服务

此时,你的Sui全节点已准备好连接到Sui网络。

  1. 打开终端或控制台,进入sui目录。
  2. 启动Sui全节点: cargo run --release --bin sui-node -- --config-path fullnode.yaml
  3. 可选:通过JSON-RPC通过websocket发布/订阅通知。

如果你的设置成功,你的Sui全节点现在已连接到适当的网络。

你的全节点为Sui JSON-RPC API的读取端点提供服务:http://127.0.0.1:9000

故障排除

如果收到cannot find -lpq错误,则缺少libpq库。在Linux上使用sudo apt-get install libpq-dev进行安装,或在macOS上使用brew install libpq。在macOS上安装后,请使用brew link --force libpq创建Homebrew链接。有关更多上下文,请参考Stack Overflow上的问题

如果收到以下错误:

panicked at error binding to 0.0.0.0:9184: error creating server listener: Address already in use (os error 98)

然后,将你的fullnode.yaml文件中的指标地址更新为使用端口9180

metrics-address: "0.0.0.0:9180"

使用你的全节点的Sui Explorer

Sui Explorer支持连接到自定义RPC URL和本地网络。你可以将Explorer指向你的本地全节点,查看它从网络同步的交易。

  1. 打开浏览器并转到:https://suiexplorer.com/
  2. 在右上角的网络下拉

菜单(或较小屏幕上的三条杠)中点击Mainnet,选择Local以连接到本地网络,或选择Custom RPC URL,然后输入URL。

Sui Explorer显示有关所选网络的信息。

监控

使用Logging、Tracing、Metrics和Observability中的说明监视你的全节点。

默认的度量端口是9184。要更改端口,请编辑你的fullnode.yaml文件。

更新你的全节点

每当Sui发布新版本时,你必须使用发布更新你的全节点,以确保其与连接的网络兼容。例如,如果你使用Sui Testnet,则应安装运行在Sui Testnet上的Sui版本。

使用Docker Compose进行更新

按照重置环境的说明进行更新,即通过运行以下命令:

docker-compose down --volumes

从源代码更新

如果你按照从源代码构建的说明进行操作,请使用以下步骤更新你的完整节点:

  1. 关闭正在运行的完整节点。
  2. 进入你的本地Sui存储库所在的目录:
    cd sui
  3. 删除数据库和“genesis.blob”文件:
    rm -r suidb genesis.blob
  4. 从最新版本获取源代码:
    git fetch upstream
  5. 重置你的分支:
    git checkout -B <BRANCH-NAME> --track upstream/<BRANCH-NAME>
  6. 下载最新的创世 blob:
    • Devnet genesis blob:
      curl -fLJO https://github.com/MystenLabs/sui-genesis/raw/main/devnet/genesis.blob
    • Testnet genesis blob:
      curl -fLJO https://github.com/MystenLabs/sui-genesis/raw/main/testnet/genesis.blob
  7. 如果需要,请更新 fullnode.yaml 配置文件。
  8. 重新启动 Sui 全节点:
    cargo run --release --bin sui-node -- --config-path fullnode.yaml

你的全节点开始于: http://127.0.0.1:9000.

对象修剪

Sui在事务执行的过程中向数据库添加新的对象版本。这使得以前的版本可以进行垃圾收集。然而,如果不进行修剪,这可能导致数据库性能下降并且需要大量的存储空间。Sui在每个检查点中识别出适合进行修剪的对象,然后在后台执行修剪。

你可以通过在 fullnode.yaml 文件中添加 authority-store-pruning-config 配置来启用Sui节点的修剪:

authority-store-pruning-config:
# Number of epoch dbs to keep
# Not relevant for object pruning
num-latest-epoch-dbs-to-retain: 3
# The amount of time, in seconds, between running the object pruning task.
# Not relevant for object pruning
epoch-db-pruning-period-secs: 3600
# Number of epochs to wait before performing object pruning.
# When set to 0, Sui prunes old object versions as soon
# as possible. This is also called *aggressive pruning*, and results in the most effective
# garbage collection method with the lowest disk usage possible.
# This is the recommended setting for Sui Validator nodes since older object versions aren't
# necessary to execute transactions.
# When set to1, Sui prunes only object versions from transaction checkpoints
# previous to the current epoch. In general, when set to N (where N >= 1), Sui prunes
# only object versions from checkpoints up to `current - N` epoch.
# It is therefore possible to have multiple versions of an object present
# in the database. This setting is recommended for Sui Full nodes as they might need to serve
# RPC requests that require looking up objects by ID and Version (rather than just latest
# version). However, if your Full node does not serve RPC requests you should then also enable
# aggressive pruning.
num-epochs-to-retain: 0
# Advanced setting: Maximum number of checkpoints to prune in a batch. The default
# settings are appropriate for most use cases.
max-checkpoints-in-batch: 10
# Advanced setting: Maximum number of transactions in one batch of pruning run. The default
# settings are appropriate for most use cases.
max-transactions-in-batch: 1000

事务修剪

事务修剪会从数据库中删除先前的事务和影响。Sui周期性地创建检查点。每个检查点包含在检查点期间发生的事务及其相关的影响。

Sui在检查点完成后后台执行事务修剪。

你可以通过将 num-epochs-to-retain-for-checkpoints 添加到节点的 authority-store-pruning-config 配置来启用 Full 节点或 Validator 节点的事务修剪:

authority-store-pruning-config:
num-latest-epoch-dbs-to-retain: 3
epoch-db-pruning-period-secs: 3600
num-epochs-to-retain: 0
max-checkpoints-in-batch: 10
max-transactions-in-batch: 1000
# Number of epochs to wait before performing transaction pruning.
# When this is N (where N >= 2), Sui prunes transactions and effects from
# checkpoints up to the `current - N` epoch. Sui never prunes transactions and effects from the current and
# immediately prior epoch. N = 2 is a recommended setting for Sui Validator nodes and Sui Full nodes that don't
# serve RPC requests.
num-epochs-to-retain-for-checkpoints: 2
# Ensures that individual database files periodically go through the compaction process.
# This helps reclaim disk space and avoid fragmentation issues
periodic-compaction-threshold-days: 1
info

如果你修剪事务,归档节点可以帮助确保滞后的对等节点不会丢失任何信息。有关更多信息,请参阅 Sui Archives