运行全节点
要安装和管理您自己的节点,请使用TON基金会开发的MyTonCtrl开源工具。大多数TON节点都通过MyTonCtrl进行了可靠和测试。
MyTonCtrl是一个控制台应用程序,它是fift、lite-client和validator-engine-console的方便包装器。它专门开发用于简化在Linux操作系统上的钱包、域和验证者管理任务。
我们正在积极寻求关于安装过程的反馈。如果您有任何问题或建议,请联系我们。
必要条件
我们强烈建议使用支持的操作系统安装MyTonCtrl:
- Ubuntu 20.04
- Ubuntu 22.04
- Debian 11
请使用具有sudo权限的非root用户来安装和运行MyTonCtrl。
硬件要求
这些要求适用于带验证者的全节点。如果您想运行没有验证者的全节点(例如liteserver),您可以使用较低配置的机器。
- 16核CPU
- 64 GB RAM
- 1TB NVME SSD 或者 预置64+k IOPS存储
- 1 Gbit/s 网络连接
- 固定公网IP地址
- 高峰期每月16TB流量
您需要一台具有固定IP地址和高带宽网络连接的机器来运行TON区块链全节点。
通常,您需要在数据中心使用至少1 Gbit/s的连接的功能强大的服务器,以可靠地适应高峰负载(预计平均负载约为100 Mbit/s)。
推荐供应商
TON基金会推荐以下供应商运行验证者:
AWS
- 实例类型:
m5.4xlarge
- CPU:
16 vCPUs
- RAM:
64 GB
- 存储:
1 TB NVMe SSD
- 网络:
高达10 Gbps
- 公网IP:
关联一个弹性IP以获得固定IP地址。
- 流量:
每月16 TB
GCP (谷歌云平台)
- 机器类型:
n2-standard-16
- CPU:
16 vCPUs
- RAM:
64 GB
- 存储:
1 TB NVMe SSD持久性磁盘
- 网络:
16 Gbps
- 公网IP:
预留一个静态外部IP地址。
- 流量:
每月16 TB
阿里巴巴云
- 实例类型:
ecs.g6.4xlarge
- CPU:
16 vCPUs
- RAM:
64 GB
- 存储:
1 TB NVMe SSD磁盘
- 网络:
高达10 Gbps
- 公网IP:
绑定一个弹性IP以获得固定IP地址。
- 流量:
每月16 TB
腾讯云
- 实例类型:
M5.4XLARGE
- CPU:
16 vCPUs
- RAM:
64 GB
- 存储:
1 TB NVMe SSD云磁盘
- 网络:
高达10 Gbps
- 公网IP:
关联一个弹性IP以获得固定IP地址。
- 流量:
每月16 TB
Vultr
实例类型:
裸金属 Intel E-2388G
CPU: `8
核心 / 16 线程`
RAM:
128 GB
存储:
1.92TB NVMe SSD
网络:
10 Gbps
公网IP:
实例包含固定IP地址。
流量:
每月16 TB
DigitalOcean
- 实例类型:
通用型高级 Intel
- CPU:
16 vCPUs
- RAM:
64 GB
- 存储:
1TB NVMe SSD
- 网络:
10 Gbps
- 公网IP:
实例包含固定IP地址。
- 流量:
每月16 TB
Latitude
- 实例类型:
c3.medium.x86
- CPU:
16 核心 / 32 线程
- RAM:
128 GB
- 存储:
1.9TB NVMe SSD
- 网络:
10 Gbps
- 公网IP:
实例包含固定IP地址。
- 流量:
每月16 TB
注意: 价格、配置和可用性可能会有所变化。在做出任何决定之前,建议始终检查相应云提供商的官方文档和定价页面。
如何运行节点?(视频)
请查看此视频逐步教程,以快速开始:
逐步指导
必要条件
以具有sudo权限的非root用户身份登录您的服务器。
如果您没有非root用户,请以root身份登录并创建一个:
sudo adduser <username>
- 将您的用户添加到sudo组:
sudo usermod -aG sudo <username>
- 切换到您的非root用户:
su - <username>
安装MyTonCtrl
从具有sudo权限的非root用户帐户下载并运行安装脚本。选择您的Linux发行版:
- Ubuntu
- Debian
wget https://raw.githubusercontent.com/ton-blockchain/mytonctrl/master/scripts/install.sh
sudo bash install.sh -m full -d
wget https://raw.githubusercontent.com/ton-blockchain/mytonctrl/master/scripts/install.sh
su root -c 'bash install.sh -m full -d'
-m full
- 全节点安装模式。-d
- mytonctrl 将下载最新区块链状态的转储。 这将减少同步时间数倍。-c <path>
- 如果您想使用非公共liteservers进行同步。(不是必需的)
运行mytonctrl
从第1步中用于安装的本地用户账户运行MyTonCtrl控制台:
sudo mytonctrl
使用
status
命令检查MyTonCtrl状态:status
以下状态应该显示:
- mytoncore状态:应为绿色。
- 本地验证者状态:也应为绿色。
- 本地验证者未同步:最初显示一个大数字。一旦新创建的验证者与其他验证者连接,数字将在250k左右。随着同步的进行,这个数字会减少。当它降至20以下时,验证者已同步。
status命令输出的示例:
等到Local validator out of sync
变为少于20秒。
成为验证者
查看钱包列表
使用wl
命令在MyTonCtrl控制台中查看可用钱包的列表:
wl
在安装mytonctrl期间,将创建validator_wallet_001钱包:
激活钱包
- 向钱包发送必要数量的coins并激活它。
最近(在2023年底),大致数字为最低质押代币约340K TON,最高约1M TON。
查看tonscan.com以了解所需coins数量。
阅读更多关于如何计算最大和最小质押代币。
- 使用
vas
命令显示转账历史:
vas
- 使用
aw
命令激活钱包
aw [wallet name]
您的验证者现已准备就绪
mytoncore 将自动加入选举。它将钱包余额分为两部分,并使用它们作为质押代币参加选举。您也可以手动设置质押代币大小:
set stake 50000
set stake 50000
— 这将质押代币大小设置为50k coins。如果质押代币被接受并且我们的节点成为验证者,那么质押代币只能在第二次选举中提取(根据选民的规则)。
启用Liteserver模式
在全节点中激活端点时,节点将承担Liteserver的角色。这种节点类型可以处理并响应来自轻客户端的请求,允许与TON区块链无缝互动。
硬件要求
与验证者相比,liteserver模式需要较少的资源。然而,仍建议使用功能强大的机器运行liteserver。
- 至少16核CPU
- 至少64 GB RAM
- 至少1TB GB NVMe SSD 或者 预置32+k IOPS存储
- 1 Gbit/s网络连接
- 高峰期每月16 TB流量
- 固定公网IP地址
推荐供应商
请随意使用推荐供应商部分中列出的云提供商。
Hetzner和OVH被禁止运行验证者,但您可以使用它们运行liteserver:
- Hetzner:EX101, AX102
- OVH:RISE-4
安装liteserver
完成前面的步骤以安装MyTonCtrl。
创建配置文件
MyTonCtrl> installer clcf
本地配置文件已创建:/usr/bin/ton/local.config.json
- 这个文件将帮助您连接到您的liteserver。将位于指定路径的配置文件复制到您的目录以保存它。
cp /usr/bin/ton/local.config.json ~/config.json
- 在您的本地机器上创建一个空的
config.json
文件。
- 将控制台中的内容复制到您本地机器的
config.json
文件。
cat ~/config.json
检查防火墙设置
首先,验证您config.json
文件中指定的Liteserver端口。这个端口会随着每次新安装MyTonCtrl
而改变。它位于port
字段:
{
...
"liteservers": [
{
"ip": 1605600994,
"port": LITESERVER_PORT
...
}
]
}
如果您使用的是云提供商,您需要在防火墙设置中打开此端口。例如,如果您使用的是AWS,您需要在安全组中打开端口。
以下是在裸机服务器防火墙中打开端口的示例。
在防火墙中打开端口
我们将使用ufw
实用程序(速查表)。您可以使用您喜欢的一个。
- 如果未安装
ufw
,请安装:
sudo apt update
sudo apt install ufw
- 允许ssh连接:
sudo ufw allow ssh
- 允许
config.json
文件中指定的端口:
sudo ufw allow <port>
- 检查防火墙状态。运行此命令后,您可以通过检查UFW状态来验证规则是否已成功添加:
sudo ufw status
- 启用防火墙:
sudo ufw enable
这样,您就可以在服务器的防火墙设置中打开端口。
与Liteserver互动
在您的机器上创建一个空项目,并将
config.js
粘贴到项目目录中。安装库。
- JavaScript
- Python
- Golang
npm i --save ton-core ton-lite-client
pip install pytonlib
go get github.com/xssnick/tonutils-go
go get github.com/xssnick/tonutils-go/liteclient
go get github.com/xssnick/tonutils-go/ton
- 初始化客户端并请求主链信息以确保liteserver正在运行。
- JavaScript
- Python
- Golang
将项目类型更改为module
在您的package.json
文件:
import { LiteSingleEngine } from 'ton-lite-client/dist/engines/single.js'
import { LiteRoundRobinEngine } from 'ton-lite-client/dist/engines/roundRobin.js'
import { LiteClient } from 'ton-lite-client/dist/client.js'
import config from './config.json' assert {type: 'json'};
function intToIP(int ) {
var part1 = int & 255;
var part2 = ((int >> 8) & 255);
var part3 = ((int >> 16) & 255);
var part4 = ((int >> 24) & 255);
return part4 + "." + part3 + "." + part2 + "." + part1;
}
let server = config.liteservers[0];
async function main() {
const engines = [];
engines.push(new LiteSingleEngine({
host: `tcp://${intToIP(server.ip)}:${server.port}`,
publicKey: Buffer.from(server.id.key, 'base64'),
}));
const engine = new LiteRoundRobinEngine(engines);
const client = new LiteClient({ engine });
const master = await client.getMasterchainInfo()
console.log('master', master)
}
main()
import asyncio
from pytonlib import TonlibClient
from pathlib import Path
import json
async def get_client() -> TonlibClient:
with open('config.json', 'r') as f:
config = json.loads(f.read())
keystore_dir = '/tmp/ton_keystore'
Path(keystore_dir).mkdir(parents=True, exist_ok=True)
client = TonlibClient(ls_index=0, config=config, keystore=keystore_dir, tonlib_timeout=10)
await client.init()
return client
async def test_client():
client = await get_client()
print(await client.get_masterchain_info())
await client.close()
if __name__ == '__main__':
asyncio.run(test_client())
package main
import (
"context"
"encoding/json"
"io/ioutil"
"log"
"github.com/xssnick/tonutils-go/liteclient"
"github.com/xssnick/tonutils-go/ton"
)
func main() {
client := liteclient.NewConnectionPool()
content, err := ioutil.ReadFile("./config.json")
if err != nil {
log.Fatal("Error when opening file: ", err)
}
config := liteclient.GlobalConfig{}
err = json.Unmarshal(content, &config)
if err != nil {
log.Fatal("Error during Unmarshal(): ", err)
}
err = client.AddConnectionsFromConfig(context.Background(), &config)
if err != nil {
log.Fatalln("connection err: ", err.Error())
return
}
// initialize ton API lite connection wrapper
api := ton.NewAPIClient(client)
master, err := api.GetMasterchainInfo(context.Background())
if err != nil {
log.Fatalln("get masterchain info err: ", err.Error())
return
}
log.Println(master)
}
- 现在您可以与您自己的liteserver互动。
参阅
小贴士和技巧
可用命令列表
- 您可以使用
help
获取可用命令列表:
检查日志
- 要检查mytoncrl日志,请打开本地用户的
~/.local/share/mytoncore/mytoncore.log
,或者Root的/usr/local/bin/mytoncore/mytoncore.log
。
故障排除
本节包含有关运行节点的最常见问题的答案。
Error 651是什么意思?
[Error : 651 : no nodes]
表示您的节点无法在TON区块链内找到另一个节点。
有时,这个过程可能需要长达24小时。但是,如果您已经连续几天收到此错误,这意味着您的节点无法通过当前网络连接进行同步。
您需要检查防火墙设置,包括任何NAT设置(如果存在)。
它应该允许在一个特定端口上的传入连接和从任何端口的传出连接。
验证者控制台未设置
如果您遇到 Validator console is not settings
错误,这表示您正在以一个非安装时使用的用户身份运行 MyTonCtrl
。
以您安装它的用户(非root sudo用户)运行MyTonCtrl
。
sudo mytonctrl
"block is not applied"是什么意思?
问: 有时我们对各种请求得到block is not applied
或block is not ready
的回应 - 这正常吗?
答: 这是正常的,通常这意味着您试图检索尚未到达您请求的节点的区块。
问: 如果比较频繁出现,是否意味着某处存在问题?
答: 不。您需要检查mytonctrl中的“Local validator out of sync”值。如果它少于60秒,那么一切正常。
但是您需要记住,节点不断同步。有时,您可能会试图接收尚未到达您请求的节点的区块。
您需要稍作延迟重复请求。
使用-d标志的同步问题
如果您在使用-d
标志下载MyTonCtrl
后遇到out of sync
等于时间戳的问题,可能是转储没有正确安装(或已经过时)。
推荐的解决方案是再次使用新转储重新安装MyTonCtrl
。
如果同步花费异常长的时间,可能是转储出现了问题。请联系我们寻求帮助。
请以您安装的用户身份运行mytonctrl
。
命令<...>在3秒后超时的错误
此错误意味着本地节点尚未同步(out of sync小于20秒)并且正在使用公共节点。 公共节点不总是响应,并最终导致超时错误。
解决问题的办法是等待本地节点同步或多次执行相同命令。
Status命令未显示本地节点部分
如果节点状态中没有本地节点部分,通常意味着安装过程中出了问题,跳过了创建/分配验证者钱包的步骤。 还要检查是否指定了验证者钱包。
直接检查以下内容:
mytonctrl> get validatorWalletName
如果validatorWalletName为空,则执行以下操作:
mytonctrl> set validatorWalletName validator_wallet_001
在新服务器上转移验证者
将所有密钥和配置从旧节点转移到工作节点并启动它。如果新节点出现问题,原来的节点仍然保留着所有已设置的内容。
最好的方法(当暂时不验证的罚款很小时,可以不间断地进行):
在新服务器上使用
mytonctrl
进行干净的安装,并等待一切同步。在两台机器上停止
mytoncore
和验证者服务
,在源和新的上进行备份:
- 2.1
/usr/local/bin/mytoncore/...
- 2.2
/home/${user}/.local/share/mytoncore/...
- 2.3
/var/ton-work/db/config.json
- 2.4
/var/ton-work/db/config.json.backup
- 2.5
/var/ton-work/db/keyring
- 2.6
/var/ton-work/keys
- 从源头转移到新的(替换内容):
- 3.1
/usr/local/bin/mytoncore/...
- 3.2
/home/${user}/.local/share/mytoncore/...
- 3.3
/var/ton-work/db/config.json
- 3.4
/var/ton-work/db/keyring
- 3.5
/var/ton-work/keys
在
/var/ton-work/db/config.json
中编辑addrs[0].ip
为当前的IP地址,安装后可在备份/ton-work/db/config.json.backup
中看到检查所有替换文件的权限
在新的服务器上启动
mytoncore
和validator
服务,检查节点是否同步并验证在新的服务器上进行备份:
cp var/ton-work/db/config.json var/ton-work/db/config.json.backup