验证器任务
本指南重点介绍作为验证器运行 Sui 节点软件的相关步骤。
要求
为了运行 Sui 验证器,需要具备以下配置的机器:
- CPU:24 个物理核心(或 48 个虚拟核心)
- 内存:128 GB
- 存储:4 TB NVME
- 网络:1 Gbps
部署
你可以以多种方式部署 Sui 节点。
Docker Hub 上提供了预构建的容器镜像。
并且在 S3 上有预构建的 linux/amd64
二进制文件,你可以使用以下其中一种方法进行获取:
wget https://releases.sui.io/$SUI_SHA/sui-node
curl https://releases.sui.io/$SUI_SHA/sui-node -o sui-node
直接从源代码构建:
git clone https://github.com/MystenLabs/sui.git && cd sui
git checkout [SHA|BRANCH|TAG]
cargo build --release --bin sui-node
配置和指南可用于以下部署选项:
配置
Sui 节点通过提供的单一配置文件作为参数来运行,例如:
./sui-node --config-path /opt/sui/config/validator.yaml
.
查看 Validator 获取配置模板。
连接
Sui 节点默认使用以下端口:
protocol/port | reachability | purpose |
---|---|---|
TCP/8080 | inbound | protocol/transaction interface |
UDP/8081 | inbound/outbound | narwhal primary interface |
UDP/8082 | inbound/outbound | narwhal worker interface |
TCP/8083 | localhost | sui -> narwhal interface |
UDP/8084 | inbound/outbound | peer to peer state sync interface |
TCP/8443 | outbound | metrics pushing |
TCP/9184 | localhost | metrics scraping |
要成功运行验证器,关键的是确保端口 8080-8084 如文档中所述是开放的,包括指定的协议(TCP/UDP)。
存储
所有与 Sui 节点相关的数据默认存储在 /opt/sui/db/
下。这在 Sui 节点配置文件中进行控制。
$ cat /opt/sui/config/validator.yaml | grep db-path
db-path: /opt/sui/db/authorities_db
db-path: /opt/sui/db/consensus_db
确保你已经挂载了适当大小的磁盘供数据库写入。
- 若要检查本地 Sui 节点数据库的大小:
du -sh /opt/sui/db/
du -sh /opt/sui/db/authorities_db
du -sh /opt/sui/db/consensus_db
- 删除本地 Sui 节点数据库:
sudo systemctl stop sui-node
sudo rm -rf /opt/sui/db/authorities_db /opt/sui/db/consensus_db
密钥管理
Sui 节点使用以下键:
key | scheme | purpose |
---|---|---|
protocol.key | bls12381 | transactions, narwhal consensus |
account.key | ed25519 | controls assets for staking |
network.key | ed25519 | narwhal primary, sui state sync |
worker.key | ed25519 | validate narwhal workers |
这些配置在Sui节点配置文件中进行了设置。
监控
指标
Sui 节点通过本地 HTTP 接口公开指标。这些指标可以被抓取以在中央监控系统中使用,也可以直接从节点中查看。
- 查看所有指标:
curl -s http://localhost:9184/metrics
- Search for a particular metric:
curl http://localhost:9184/metrics | grep <METRIC>
Sui 节点还将指标推送到中央的 Sui 指标代理。
日志
使用 RUST_LOG
环境变量控制日志。
RUST_LOG_JSON=1
环境变量可以选择设置为启用以 JSON 结构化格式记录日志。
根据部署方法的不同,这些配置在以下位置进行设置:
要查看并跟踪 Sui 节点日志:
journalctl -u sui-node -f
搜索特定匹配项
journalctl -u sui-node -g <SEARCH_TERM>
- 如果使用 Docker Compose,请查看 README 中的示例。
在节点运行时,可以使用管理界面更改日志配置。
要查看当前配置的日志数值:
curl localhost:1337/logging
要更改当前配置的日志记录值:
curl localhost:1337/logging -d "info"
仪表板
用于全网可见性的公共仪表板:
软件更新
当需要更新 Sui 节点软件时,可以使用以下流程。根据部署类型,按照相关的 Systemd 或 Docker Compose 操作手册进行操作。在大多数情况下,你可能不希望重新启动并清除数据库。
状态同步
Sui 中的检查点包含网络的永久历史。它们类似于其他区块链中的区块,但有一个重要的区别,即它们滞后而不是领先。所有交易都是最终的,并在包含在检查点之前执行。
这些检查点通过专用的点对点状态同步接口在验证器和全节点之间同步。
验证器之间的状态同步始终是允许的,但有可用的控制来限制全节点从特定验证器同步的内容。
默认和推荐的 max-concurrent-connections: 0
配置不会影响验证器之间的状态同步,但会限制所有全节点的同步。可以修改 Sui 节点的 配置 以允许已知的全节点从验证器同步:
p2p-config:
anemo-config:
max-concurrent-connections: 0
seed-peers:
- address: <multiaddr> # The p2p address of the fullnode
peer-id: <peer-id> # hex encoded network public key of the node
- address: ... # another permitted peer
peer-id: ...
链操作
以下链操作使用 sui
命令行工具执行。该二进制文件与 sui-node
一样构建并作为一个发布版本提供,示例:
wget https://releases.sui.io/$SUI_SHA/sui
chmod +x sui
curl https://releases.sui.io/$SUI_SHA/sui -o sui
chmod +x sui
强烈建议并经常要求 sui
二进制版本与已部署网络的版本匹配。
更新链上元数据
你可以利用 Validator 工具 来执行以下大部分任务。
活跃/待定的验证器可以通过提交交易来更新其链上元数据。一些元数据的更改会立即生效,包括:
- 名称
- 描述
- 图像 URL
- 项目 URL
其他元数据(密钥、地址等)只有在下一个纪元生效。
要更新元数据,验证器会进行一次 MoveCall 交易,与 System 对象进行交互。例如:
- 要将名称更新为
new_validator_name
,可以使用 Sui 客户端 CLI 调用sui_system::update_validator_name
:
sui client call --package 0x3 --module sui_system --function update_validator_name --args 0x5 \"new_validator_name\" --gas-budget 10000
- 要从下一个纪元开始将 p2p 地址更新为
/ip4/192.168.1.1
,可以使用 Sui 客户端 CLI 调用sui_system::update_validator_next_epoch_p2p_address
:
sui client call --package 0x3 --module sui_system --function update_validator_next_epoch_p2p_address --args 0x5 "[4, 192, 168, 1, 1]" --gas-budget 10000
查看 full list of metadata update functions here.
操作能力
为了避免频繁更改帐户密钥并允许其离线存储,验证器可以将操作能力委派给另一个地址。然后,该地址可以代表验证器更新参考气价和计分规则。
在创建 Validator
时,同时创建了一个 UnverifiedValidatorOperationCap
并转移到验证器地址。因此,拥有此 Cap
对象(简称“Capability”)的用户可以代表此验证器执行操作。为了授权另一个地址执行这些操作,验证器将该对象转移到其控制的另一个地址。此转移可以使用 Sui 客户端 CLI 完成:sui client transfer
。
为了轮换被委派的地址或撤销授权,拥有当前 Cap
的用户将其转移到另一个地址。在密钥被破坏或丢失的情况下,验证器可以创建一个新的 Cap
对象来使现有的无效。这通过调用 sui_system::rotate_operation_cap
完成:
sui client call --package 0x3 --module sui_system --function rotate_operation_cap --args 0x5 --gas-budget 10000
默认情况下,新的 Cap
对象被转移到验证器地址,然后可以转移到新的被委派地址。此时,旧的 Cap
就会失效,不再表示资格。
要获取验证器的当前有效 Cap
对象的 ID,请在将持有者设置为活动地址后使用 Sui 客户端 CLI 的 sui client objects
命令。或者前往 explorer 并查找该验证器在 validators
模块中的 operation_cap_id
。
更新气价调查引用
要更新验证器的气价调查引用,该引用用于在纪元结束时计算参考气价,发送者需要持有有效的 UnverifiedValidatorOperationCap
。发送者可以是验证器本身或受信任的受托人。为此,请调用 sui_system::request_set_gas_price
:
sui client call --package 0x3 --module sui_system --function request_set_gas_price --args 0x5 {cap_object_id} {new_gas_price} --gas-budget 10000
上报/取消上报验证器
要上报验证器或撤销现有的上报,发送者需要持有有效的 UnverifiedValidatorOperationCap
。发送者可以是验证器本身或受信任的受托人。为此,请调用 sui_system::report_validator/undo_report_validator
:
sui client call --package 0x3 --module sui_system --function report_validator/undo_report_validator --args 0x5 {cap_object_id} {reportee_address} --gas-budget 10000
当一个验证器被2f + 1
其他验证器以投票权力进行投票上报后,其质押奖励将被削减。
加入验证器集
为了使一个 Sui 地址加入验证器集,他们首先需要作为验证器候选人注册,通过调用 sui_system::request_add_validator_candidate
提供他们的元数据和初始配置:
sui client call --package 0x3 --module sui_system --function request_add_validator_candidate --args 0x5 {protocol_pubkey_bytes} {network_pubkey_bytes} {worker_pubkey_bytes} {proof_of_possession} {name} {description} {image_url} {project_url} {net_address} {p2p_address} {primary_address} {worker_address} {gas_price} {commission_rate} --gas-budget 10000
当一个地址成为验证器候选人后,任何地址(包括候选地址本身)都可以开始使用候选的质押池进行质押。有关质押工作原理,请参阅我们专门的质押 FAQ。一旦候选的质押池积累了至少 sui_system::MIN_VALIDATOR_JOINING_STAKE
数量的质押,候选者可以调用 sui_system::request_add_validator
正式将自己添加到下一个纪元的活跃验证器集中:
sui client call --package 0x3 --module sui_system --function request_add_validator --args 0x5 --gas-budget 10000000
离开验证器集
要在下一个纪元开始离开验证器集,发送者需要是当前纪元的活跃验证器,并应调用 sui_system::request_remove_validator
:
sui client call --package 0x3 --module sui_system --function request_remove_validator --args 0x5 --gas-budget 10000
在下一个纪元更改时移除验证器后,质押池将变为不活跃状态,只能从不活跃的池中提取质押。
私有安全修复
可能存在需要在公开宣布存在之前立即推出紧急安全修复的情况(影响活跃性、SUI 供应的不变性、治理等问题)。为了不被积极利用,Mysten Labs 将发布包含这些修复的签名安全二进制文件,延迟发布源代码,直到我们的大多数验证器已经修补了漏洞。
此发布流程与通常不同,我们预计会在其他方式宣布此类二进制文件的目录。 我们用于验证这些二进制文件的公钥将存储在这里。
还提供了一个脚本,该脚本可下载所有必要的签名二进制文件和包含安全修复的 Docker 构件。
用法
./download_private.sh <directory-name>
你还可以使用 download_and_verify_private_binary.sh
脚本下载和验证上述脚本未包含的特定二进制文件。
用法:
./download_and_verify_private_binary.sh <directory-name> <binary-name>
·