目前不清退的交易所推荐:
1、全球第二大交易所OKX欧意
国区邀请链接: https://www.mnftinqq.com/zh-hans/join/1837888 币种多,交易量大!
国际邀请链接:https://www.okx.com/join/1837888 注册简单,交易不需要实名,新用户能开合约,币种多,交易量大!
2、老牌交易所比特儿现改名叫芝麻开门 :https://www.gate.win/signup/649183
全球最大交易所币安,国区邀请链接:https://accounts.binance.com/zh-CN/register?ref=16003031 币安注册不了IP地址用香港,居住地选香港,认证照旧,邮箱推荐如gmail、outlook。支持币种多,交易安全!
买好币上KuCoin:https://www.kucoin.com/r/af/1f7w3 CoinMarketCap前五的交易所,注册友好操简单快捷!
全节点
本文档的目的是提供为 TON 区块链设置完整节点的分步说明。我们假设您对 TON 区块链 Lite 客户端有一定的了解,至少在入门中解释的范围内。
请注意,您需要一台具有公共 IP 地址和高带宽网络连接的机器来运行 TON 区块链完整节点。通常,您需要在具有良好网络连接的数据中心中拥有足够强大的服务器,使用至少 1 Gbit/s 的连接来可靠地适应峰值负载(平均负载预计约为 100 Mbit/s)。我们推荐双处理器服务器,每个处理器至少有 8 个内核、至少 256 MiB RAM、至少 8 TB 传统 HDD 存储和至少 512 GB 更快的 SSD 存储。在您的家用计算机上运行完整节点是一个坏主意;相反,您可以在远程服务器上运行完整节点,并使用 TON Blockchain Lite 客户端从家里连接到它。
0.下载和编译
完整的 TON 区块链库和验证器软件的下载和编译与 Lite 客户端类似。入门页面中概述了此过程。最重要的区别是您必须从公共 GitHub 存储库https://github.com/newton-blockchain/ton下载完整的源代码(例如,通过运行git clone https://github.com/newton-blockchain/ton
和git submodule update --init
之后),而不是下载较小的 Lite Client 源代码存档。您还应该构建定义的所有目标CMakeLists.txt
(例如,通过运行cmake <path-to-source-directory>
和make
在您的构建目录中),不仅是与 Lite 客户端特别相关的那些(也包含在更大的发行版中;您不必单独下载和构建它)。我们强烈建议通过在首次运行期间传递-DCMAKE_BUILD_TYPE=Release
或-DCMAKE_BUILD_TYPE=RelWithDebInfo
作为额外参数来构建 TON 区块链库的“发布”或“带有调试信息的发布”版本,尤其是验证器/完整节点(如果您忘记这样做,cmake
您可以稍后从构建目录中删除文件并使用适当的选项CMakeCache.txt
重新运行)。cmake
1. 全节点二进制文件
源代码编译成功后,您应该获得可执行文件validator-engine/validator-engine
并validator-engine-console/validator-engine-console
在您的构建目录中。这些是运行 TON 区块链完整节点(甚至是验证器)并控制它所需的最重要文件。您可能希望将它们安装到您的/usr/bin
或类似的目录中。在安装过程中您也可能需要该generate-random-id
实用程序。
2. Full Node的工作目录
全节点(也称为“验证器引擎”)将其数据存储在其工作目录的子目录中,例如/var/ton-work/db
. 它需要对该目录的写访问权。如果要使用另一个目录作为 Full Node 的工作目录,可以使用命令行选项--db <path-to-work-dir>
:
$ validator-engine --db ${DB_ROOT}
where ${DB_ROOT}
is/var/ton-work/db
或验证器引擎具有写入权限的任何其他目录。
3.工作目录布局
TON区块链全节点软件的工作目录大致布局如下:
${DB_ROOT}/config.json
— 自动生成的配置文件。在某些情况下,它会由验证器引擎自动重新生成。当验证器引擎未运行时,您可以在文本编辑器中编辑此文件,因为它是 JSON 文件。${DB_ROOT}/static
— 包含无法从网络下载的文件的目录,例如主链和活动工作链的“零状态”(对应其他区块链架构的创世区块)。通常你不必初始化这个目录,除非你想运行你自己的 TON 区块链实例(例如,用于测试或开发目的)。TON 区块链现有实例的完整节点(例如“测试网”和“主网”)将能够从已经运行的完整节点下载所有必需的文件。${DB_ROOT}/keyring
— 存储验证器引擎已知的公钥和私钥。例如,如果您的完整节点作为某些 TON 区块链分片链的验证器运行,则验证器块签名密钥将保存在这里。您可能希望为此目录设置更多限制性权限,例如 0700(在 *nix 系统中),以便只有运行验证器引擎的用户才能访问此目录。${DB_ROOT}/error
— 验证器引擎复制与严重错误条件(例如,无效块候选)相关的文件以供进一步研究的目录。它通常是空的,validator-engine 永远不会从这个目录中删除文件。${DB_ROOT}/archive
— 保存旧的和很少使用的块直到其存储期到期的目录。您可以在此目录中挂载一个更大但速度较慢的磁盘分区,或者使此目录成为此类分区中目录的符号链接。我们建议将剩余部分${DB_ROOT}
放在 SSD 等快速存储设备中。${DB_ROOT}/etc
— (非自动)配置文件可以保存在这里,或者保存在验证器引擎可以读取的任何其他目录中。- 的其他子目录
${DB_ROOT}
用于保存 ADNL 缓存数据、最近的块和状态等。它们与本文档的目的无关。
4. TON 区块链的全局配置
为了设置您的完整节点,您需要一个名为“全局配置(文件)”的特殊 JSON 文件。之所以这样称呼,是因为它对于所有完整节点都是相同的,甚至参与 TON 区块链不同实例的节点(例如,“testnet”与“mainnet”)共享几乎相同的全局配置。
“主网”全局配置可以在https://newton-blockchain.github.io/global.config.json下载,如下:
$ wget https://newton-blockchain.github.io/global.config.json
您可能希望将此文件放入/var/ton-work/etc/ton-global.config.json
.
稍后我们将更详细地讨论这个文件的结构。现在,让我们注意一下,该文件的大部分内容包含启动 TON 网络所需的已知 TON DHT 节点列表。该文件末尾附近的一小部分描述了我们希望连接的 TON 区块链的特定实例。
TON 区块链的所有实例都使用相同的“全球”TON 网络(即,TON 网络不会为每个区块链实例分割成多个实例)。虽然全局网络配置因此独立于所选的特定 TON 区块链实例,但属于不同实例的完整节点稍后将连接到 TON 网络内的不同覆盖子网。
重要的是区分这个“全局配置文件”,用于设置 TON 区块链完整节点,以及“本地”或“自动配置文件”,由验证器引擎自动更新,通常存储在${DB_ROOT}/config.json
. 全局配置用于生成初始自动配置文件,随后由验证器引擎本身更新(例如,通过添加新的 DHT 节点或存储新主链块的哈希)。
5.初始化本地配置
下载全局配置文件后,可用于在${DB_ROOT}/config.json
. 为此,请执行一次验证器引擎:
$ validator-engine -C /var/ton-work/etc/ton-global.config.json --db /var/ton-work/db/ --ip <IP>:<PORT> -l /var/ton-work/log
这/var/ton-work/log
是 的日志目录validator-engine
,它将在其中创建其日志文件。-C
命令行选项的参数是如上所述从https://newton-blockchain.github.io//var/ton-work/db/
下载的全局配置文件,并且是工作目录${DB_ROOT}
。最后<IP>:<PORT>
是这个全节点的全局IP地址(这里需要标明公网IPv4地址)和用于运行ADNL、RLDP等TON网络协议的UDP端口。确保您的防火墙配置为<IP>:<PORT>
至少为validator-engine
二进制传递带有源或目标的 UDP 数据包。
当validator-engine 像上面那样被调用并且${DB_ROOT}/config.json
不存在时,它会${DB_ROOT}/config.json
使用来自全局配置文件和命令行选项的信息来创建一个新的本地配置文件--ip
,然后退出。如果${DB_ROOT}/config.json
已经存在,则不重写;相反,validator-engine 使用本地和全局配置作为守护进程启动。
如果之后需要更改本地配置,则需要删除此文件并从全局配置中重新生成它(可能会忘记本地配置中积累的其他重要信息),或者在文本编辑器中编辑本地配置(当验证器引擎未运行)。
6.设置远程控制CLI
您几乎肯定希望在本地配置中启用验证器引擎控制台,以便能够在运行时控制您的完整节点(即验证器引擎守护程序)。为此,您需要生成两个密钥对,一个用于服务器(validator-engine),一个用于客户端(validator-engine-console)。在下面的示例中,我们假设验证器引擎控制台在同一台机器上运行并通过环回网络接口连接到验证器引擎。(不一定如此;您也可以使用验证器引擎控制台进行远程控制。)
第一步,使用generate-random-id
可执行文件创建两个密钥对,一个用于服务器(在运行的机器上validator-engine
),一个用于客户端(在运行的机器上validator-engine-console
):
$ ./generate-random-id -m keys -n server
6E9FD109F76E08B5710445C72D2C5FEDE04A96357DAA4EC0DDAEA025ED3AC3F7 bp/RCfduCLVxBEXHLSxf7eBKljV9qk7A3a6gJe06w/c=
此实用程序生成一个新的密钥对并将私钥保存到文件server
中,将公钥保存到server.pub
. 公钥的十六进制 ( 6E9F...F7
) 和 base64 ( ) 表示形式显示在标准输出中,以后将用于标识此密钥。bp/RC...6wc/=
我们必须将私钥安装server
到完整节点(验证器引擎)的密钥环中:
$ mv server /var/ton-work/db/keyring/6E9FD109F76E08B5710445C72D2C5FEDE04A96357DAA4EC0DDAEA025ED3AC3F7
请注意,在密钥环中存储此私钥的文件名等于此密钥的十六进制标识符(本质上是公钥的哈希)。
接下来,我们生成客户端密钥对:
$ ./generate-random-id -m keys -n client
8BBA4F8FCD7CC4EF573B9FF48DC63B212A8E9292B81FC0359B5DBB8719C44656 i7pPj818xO9XO5/0jcY7ISqOkpK4H8A1m127hxnERlY=
我们获得一个客户端密钥对,保存到文件client
和client.pub
. 第二个操作应该在客户端的工作目录(validator-engine-console)中运行,可能在另一台机器上。
现在我们必须在服务器的本地配置文件中列出客户端的公钥${DB_ROOT}/config.json
。为此,请在文本编辑器中打开本地配置文件(如果它正在运行,则在终止验证器引擎之后)并找到空白control
部分:
"control": [
]
将其替换为以下内容:
"control" : [
{ "id" : "bp/RCfduCLVxBEXHLSxf7eBKljV9qk7A3a6gJe06w/c=",
"port" : <CONSOLE-PORT>,
"allowed" : [
{ "id" : "i7pPj818xO9XO5/0jcY7ISqOkpK4H8A1m127hxnERlY=",
"permissions" : 15
}
]
}
],
control.0.id
设置为服务器公钥control.0.allowed.0.id
的base64标识符,是客户端公钥的base64标识符。<CONSOLE-PORT>
是服务器将侦听控制台命令的 TCP 端口。
7. 运行全节点
要运行完整节点,只需在控制台中运行验证器引擎二进制文件:
$ validator-engine --db ${DB_ROOT} -C /var/ton-work/etc/ton-global.config.json -l /var/ton-work/log
它将从 读取全局配置,从 读取/var/ton-work/etc/ton-global.config.json
本地配置${DB_ROOT}/config.json
,并继续静默运行。您应该编写合适的脚本来调用验证器引擎作为守护程序(这样它不会在控制台关闭时终止),但为了简单起见,我们将跳过这些注意事项。(在大多数 *nix 系统上,validator-engine 的命令行选项-d
应该足够了。)
如果配置无效,验证器引擎将立即终止,并且在大多数情况下,不输出任何内容。您必须研究下的日志文件/var/ton-work/log
以找出问题所在。否则,验证器引擎将继续静默工作。同样,您可以通过检查日志文件和查看目录的子目录来了解发生了什么${DB_ROOT}
。
如果一切正常,验证器引擎将定位参与同一 TON 区块链实例的其他完整节点,并下载主链和所有分片链的最新块。(您实际上可以控制要下载的最近块的数量,甚至可以从零状态开始下载它们——但这个主题超出了本文档的范围;尝试使用命令行选项运行验证器引擎-h
以找出所有可用选项的列表以及简要说明)。
8. 使用控制台 CLI
如果验证器引擎控制台已按照第 6 节中的说明进行设置,您可以使用它连接到正在运行的验证器引擎(即您的完整节点)并运行简单的状态和密钥管理查询:
$ ./validator-engine-console -k client -p server.pub -a <IP>:<CLIENT-PORT>
connecting to [<IP>:<CLIENT-PORT>]
local key: 8BBA4F8FCD7CC4EF573B9FF48DC63B212A8E9292B81FC0359B5DBB8719C44656
remote key: 6E9FD109F76E08B5710445C72D2C5FEDE04A96357DAA4EC0DDAEA025ED3AC3F7
conn ready
> gettime
received validator time: time=1566568904
该gettime
命令在验证器处获取当前的 Unix 时间。如果一切都已正确配置,您将看到与上述类似的输出。请注意,您需要客户端的私钥 ( client
) 和服务器的公钥 ( server.pub
) 才能使控制台正常工作。您可能希望将它们(尤其是客户端的私钥)移动到具有适当权限的单独目录中。
验证器引擎控制台中提供了其他控制台命令。例如,help
显示带有简短描述的所有控制台命令的列表。特别是,它们用于将完整节点设置为 TON 区块链的验证器,如单独的验证器页面中所述。
9. 将完整节点设置为 Lite 服务器
您可以将完整节点设置为 Lite 服务器,以便您可以使用 Lite 客户端从同一主机或远程主机连接到它。例如,last
在连接到您的完整节点的 Lite 客户端中发送命令将显示您的完整节点已知的最新主链块的标识符,以便您可以检查块下载的进度。您还可以检查所有智能合约的状态、发送外部消息(例如,钱包查询)等,如分步页面中所述。
为了将您的完整节点设置为轻量服务器,您必须生成另一个密钥对并将私钥安装到服务器的密钥环中,类似于我们启用远程控制台的操作:
$ utils/generate-random-id -m keys -n liteserver
BDFEA84525ADB3B16D0192488837C04883C10FF1F4031BB6DEECDD17544F5347 vf6oRSWts7FtAZJIiDfASIPBD/H0Axu23uzdF1RPU0c=
mv liteserver ${DB_ROOT}/keyring/BDFEA84525ADB3B16D0192488837C04883C10FF1F4031BB6DEECDD17544F5347
之后,如果验证器引擎正在运行,请停止它并 ${TON_DB}/config.json
在文本编辑器中打开本地配置文件。找到空白部分
"liteservers" : [
]
并将其替换为包含用于侦听入站 Lite 客户端连接和 lite 服务器公钥的 TCP 端口的记录:
"liteservers" : [
{
"id" : "vf6oRSWts7FtAZJIiDfASIPBD/H0Axu23uzdF1RPU0c=",
"port" : <TCP-PORT>
}
],
现在重新开始validator-engine
。如果它没有立即终止,则很可能您已正确重新配置它。现在您可以使用 lite-client 二进制文件(通常位于lite-client/lite-client
构建目录中)连接到作为完整节点的一部分运行的 Lite 服务器:
$ lite-client -a <IP>:<TCP-PORT> -p liteserver.pub
同样,help
列出 Lite Client 中可用的所有命令。Step-by-Step 页面包含一些使用 Lite Client 可以完成的操作的示例。