
在过去的几个月中,世界区块链社区的所有注意力都集中在启动最大的加密货币项目之一-电报开放网络(TON)上。
TON区块链到底是什么样的? TON网络真的是去中心化的吗? 它真正的可扩展性是什么? 如何成为网络验证者?
Mercuryo项目团队试图找到这些问题和其他问题的答案,该项目自2019年9月以来一直是测试网络的积极参与者。
在2019年11月15日,Telegram服务移至testnet 2,并开始了第三阶段的测试。 我们的团队继续参与测试,成为TON之后网络上的第一批验证器。
为了参与验证过程,不仅要求用户拥有足够数量的硬币(GRAM令牌),而且要求用户不断运行的完整网络节点(TON区块链完整节点)。
从理论上讲,任何用户都可以成为验证者,但前提条件是他必须拥有主链中资产的最低必要份额(以克朗硬币为单位),但实际上,我们的团队会回答一些问题。
另外,我们想分享使用
tonlib-cli的经验, 与
HowTo中详细介绍的基本版本不同,目前几乎没有文档记录的信息
。 TON区块链
Telegram开放网络的主要组成部分是一个灵活的区块链系统,以下称为TON区块链,根据开发人员自身的说法,它每秒能够处理数百万笔交易,支持Turing完整智能合约,更新的官方区块链规范,多币种转帐,以及链下(Off-Chain)支付网络的小额支付渠道。
“ TON区块链架构之所以独特,是因为它具有特定的功能,例如“自我修复”垂直区块链机制和即时超立方体路由,这使区块链既快速又可靠可扩展和可持续的。”
如上所述,
TON区块链是去中心化网络(一组区块链)或由三种主要类型的区块链组成的2D区块链的常规名称。
主区块链或主链是一个独特的区块链,其中包含有关协议及其参数当前值的常规信息,一组验证器及其份额,一组当前活动的工作链及其“碎片”以及最后一组区块的哈希masterchains和shardchaynov。
工作中的区块链或工作链 -一组(最多232个)作为“主力”的
区块链,其中包含资产转移交易和智能合约。 同时,各个工作链可以具有自己的“规则”,账户地址格式,交易格式,用于智能合约的各种虚拟机(VM),不同的基本令牌或加密货币等。 但是所有这些都必须满足一些互操作性的基本标准,以确保它们之间相对简单的交互。 因此,TON区块链在本质上是异构的,就像EOS和Polkadot区块链一样。
分片区块链或分片链 -一组工作链中的一部分
区块链(最多260个),确保分片系统的运行,并具有与工作链相同的规则和块格式。 分片链仅包含一个帐户子集,具体取决于每个特定帐户地址的前几个(最高有效)位。 由于所有分链都具有通用的构建块格式和规则,因此TON区块链在这方面是同质的,并且符合以太坊扩展提案之一中所述的要求。

分片链的每个区块(以及主链)实际上不仅是一个区块,而且是一个小的区块链。 通常,此“区块链”或“垂直区块链”正好由一个区块组成,因此可以将其视为相应“普通”区块链(或“水平区块链”)的一个区块。 但是,如果有必要纠正不正确的块,则将新块输入“垂直块链”,其中包含对现有“水平”块的替换,或“块差异”,仅包含对先前版本中需要替换的那些块的描述。 无需硬分叉即可替换检测到的无效块的特定于TON的机制称为
2D区块
链 ,或
简称为2区块
链。共识算法和网络保护机制
TON提供了基于
无限分片范式 (
权益证明或PoS)的区块链。 根据开发人员文档:
“几乎所有使用分片的区块链实现都是基于自上而下的模型:首先我们设想一个区块链,然后我们决定如何将其分成相互交互的几个部分(分链)以提高效率和可扩展性。
TON的分片方法基于自下而上的原则,这意味着原始的区块链具有极高的可扩展性,并且每个单独的分片链仅包含一个帐户或智能合约。 在下一级别,我们有大量的“帐户链”,每个帐户链仅描述一个帐户状态之间的转换,并互相发送包含有关交易信息的消息。 同时,拥有成千上万的区块链,更新(即新区块)很少出现是不方便的,因此,为了更有效地实施,我们将这些``账户链''分组为``分链'',其中每个区块本质上都是是与该特定分片相关联的一系列帐户链的集合。 因此,“账户链”实际上只是真正存在的“分链”中的虚拟或逻辑块。 这种机制为TON区块链的许多设计决策提供了启发,我们称其为“无限分片范例”。
TON共识网络由各种类型的节点组成:
验证者,提名者,网络钓鱼者和收集者。
验证者是PoS节点和块制造商。
Fisher监视共识网络以发现错误或识别所谓的恶意共识节点,如果网络钓鱼者明确确认该节点是如此,则它将以没收此验证者部分股份的形式获得奖励。
收集者的任务是准备分片区块并将其提供给PoS节点验证,为此他们将获得一部分奖励以创建区块。 同时,归因者实质上是共识的其他参与者,因为验证者几乎总是自己生成块。
提名人将其资产(
革兰令牌)借给验证人以获取利润。 实际上,提名人不包括在验证人的基础结构中,而只是在他们之间共享资产的较大初始份额,以换取总薪酬的一定比例。 因此,被提名人获得的计划和报酬总额完全取决于验证人的工作结果,而被提名人为投票人“投票”,借给他们格拉姆令牌。 提名者可以是单独的代币持有者,也可以是管理单个TON用户资金的池,同时充当验证者,通过TON智能合约充当委托人。 在这种情况下,这种资金池的总薪酬是根据其参与者之间的贡献来分配的。
生成新块的过程如下:一定数量的验证器使用特殊算法选择适合于验证的主链块(碎片),然后按照伪随机方法确定的顺序为每个此类碎片选择较小的验证子子集,间隔约为每1024个块。
因此,对于每个块,存在伪随机选择的一组验证器,以确定其候选块具有最高优先级。 验证器和其他节点验证提议的候选块的有效性。 如果验证者自动(不是有意地)在无效的区块签名上签字,则将受到部分或全部报酬的损失或一段时间内不参与选择验证者的惩罚。
接下来,验证者需要基于BFT(拜占庭弹性协议)算法达成共识,类似于
pBFT或
Honey Badger BFT协议。 然后,在达成共识之后,创建一个新的块,同时在验证者之间分配交易费用。
应当注意,可以选择每个验证器来参与验证器的几个子集;因此,假定所有验证和共识算法都是并行运行的。
在生成链的所有新分片块或超时结束后,会出现一条消息,表明已创建主链的新块,其中包括所有验证者的pBFT共识,其中包含所有分片的最后块的哈希。
TON Testnet:电报开放网络的实践经验
自2019年9月以来,
Mercuryo项目团队一直
是测试网络的积极参与者,在测试期间,我们获得了一些经验,我们希望与您分享。
网络访问方法
与TON网络的交互以一种或另一种方式归结为使用描述如何与API交互的TL规范。 规格文件可
在此处获得 。
API分为三种:
ton_api-与全节点验证器引擎控制台交互
lite_api-用于lite-client
tonlib-有关钱包的所有信息都在这里收集,这是唯一公开可用的
tonlib-cli API钱包创作
创建钱包的最简单方法是使用Test Gram钱包,该钱包可在Windows,macOS和Linux操作系统的官方
网站上找到。


还有几种通过命令行界面进行交互的方式:基本和使用
tonlib-cli 。 不幸的是,目前它们之间没有兼容性。
在这里,我们将仅考虑TON开发人员自己提供的那些工具。 如果在
HowTo中详细记录了基本版本,则实际上缺少有关
tonlib-cli使用的信息。
如上所述,在TON中,有3个用于不同任务的API。 与钱包操作相关的功能负责
tonlib 。
要开始使用
tonlib-cli ,除了命令行界面本身之外,您还必须具有用于连接到公共TON网络liteserver的配置文件,该文件
在此处可用。
连接由团队进行
tonlib-cli -c ton-lite-client-test1.config.json -v 0其中-v 0是负责输出调试信息的参数。
命令清单:

要创建钱包地址,请使用
genkey命令和助记词短语列表,在丢失私钥的情况下,恢复该地址的访问权限可能是必需的。

钥匙清单
keys命令显示键列表。 为了在执行其他命令时进行进一步操作,必须使用其序列号,即 对于第一个键,将有
id 0 。

地址初始化
创建地址后,必须在网络上进行注册。 为此,您必须先补充它。 最初,为此使用了一种特殊的智能合约
-testgiver ,但现在,在
@test_ton_bot电报中使用特殊的bot变得更加容易和方便。
补充后,帐户状态立即定义为uninited_accountState,并且仅在从该地址发送GRM测试令牌后才会更改。
如果您的余额上已经有令牌,并且需要激活另一个钱包,则可以使用
transferf命令,然后将其与钱包补给一起初始化。

您可以使用
getstate 0命令找出钱包的状态
。
使用命令获取交易历史记录
gethistory <键数>其中<num_of_key>是键序列号

网络基础
与大多数现有区块链一样,TON基于服务器,该服务器存储了网络上曾经创建的所有区块链的完整历史记录。
要在TON测试网络中运行一个完整的节点,需要8个生产内核,4-8 GB的RAM就足够了。在编写本文时,数据占用了约50GB的硬盘,但最好有至少100GB的余量。 应该注意的是,最好使用SSD驱动器,因为 记录需要大量IOPS,否则与网络的同步将非常缓慢。
作为有效的操作系统,最好使用Ubuntu 18.04,因为 大多数社区测试都在此进行。
安装指南README.txtFullNode-HOWTO.txt验证器-HOWTO.txt验证系统
众所周知,TON区块链由分片链和主链块组成,它们由称为验证器的特殊指定节点创建和验证。 验证者因其“工作”而获得一些回报:维护TON区块链的健康,同时收入在验证者社区中按比例分配。
乍一看,一切都清楚了,但实际上,与此相关的问题很多:
始终可以使用
getconfig 17命令检查一个验证者的共享大小限制,该命令将显示允许的牛排的实际大小:

屏幕截图显示,目前最小共享大小为10,000 GRAM。 但是,如果验证者在一轮投票中获得的GRAM不超过100,000,则他无权参加选举。 同时,每个验证者的最大令牌数不能超过10,000,000 GRAM,并且要进行投票,总牛排的最小大小必须超过1,000,000 GRAM。
要申请参与验证过程,您必须至少具有10,000 GRAM。 选举过程算法在智能合约
选举人代码.fc中进行了详细描述
主网络中的合同很可能会有所不同,因此当前版本仅适用于测试网络。
共享10,000 GRAM并不意味着您可以成为验证者,因为 接收测试令牌可以通过请求测试者来轻松实现。
目前,几乎所有验证者在参加投票时都将最大因子设置为2.7,将牛排设置为120,000 GRAM,因为此类投注最多,由于其重量,最小牛排增加到120,000 / 2.7 = 45,000 GRAM(与100,000份(根据官方文档)。 但是,即使只有这么少的一块牛排,您的机会也几乎为零,因为三个顶级验证器的最大因数为2,这将最小份额提高到60,000 GRAM,这使您可以成为测试网中的验证器。
如果当前所有验证者都增加了其最大因子或减小了牛排的大小,那么假设不超过验证者的最大数量(1000个节点),则有可能成为带有最小牛排的验证者。
- 如果验证器系统是集中式的,那么整个区块链也一样吗?
没有支票,即 没有人可以集中控制验证者;提名者自己确定选择验证者时的风险。
目前没有任何信息,文档中很可能会有共识机制,因为即使不同步的节点也会在测试网中获得奖励。
为了创建TON智能合约,使用了两种特殊的编程语言:
Fift和
FunC 。 如果
Fift至少具有一般
文档 ,那么几乎不可能找到有关
FunC的信息(即使在开发
竞赛的
情况下,也表明只能通过分析其源代码才能获得它)。
在测试过程中,有可能发现
FunC代码库不是那么庞大(与
Fift相比),并且可以使您更快地学习它,因此使用
FunC比使用
Fift容易得多。
同步缓慢
https://github.com/ton-blockchain/ton/issues/100验证引擎的权限
+0 =普通的精简版客户端查询
+1 =全节点统计信息查询
+2 =完整的代码配置修改查询
+4 =潜在危险的查询(例如私钥导出或对任意字符串签名)
+8 =保留用于将来的扩展(目前不执行任何操作)
默认情况下,lite-client输出发送到stderr,因此要对其进行处理,必须首先将输出从stderr重定向到stdout:
$ lite-client 2 >>(grep ...)
https://github.com/ton-blockchain/ton/issues/76正式建议使用双处理器服务器(每个处理器至少8个内核)。 该软件对RAM的要求不是很高,因此16 GB就足够了。 您必须将SSD用作主驱动器,其最小建议大小为512 GB。 8TB HDD足以存储存档数据。
必须具有高速Internet连接:预计平均负载为100 Mbit /秒,您必须能够处理高达1Gbit /秒的峰值负载。
建议使用XFS作为文件系统,因为有关每个块的信息存储在单独的文件中。 众所周知,例如ext4在处理大量小文件时效果不佳,并且可能导致您根本没有足够的磁盘空间来使用免费的inode。
日志将完成同步消息,或者使用
Validator-engine-console -c“ getstats” unixtime和masterchainblocktime应该几乎相同。
Getconfig 16
max_validators:1000 max_main_validators:100 min_validators:5
获取配置34
先前的getconfig 32验证程序集
白皮书表明选择验证器的时间为一个月,但是这次在testnet中的时间要少得多,您可以从
getconfig 15 config中找到它
。重新启动测试网后,验证器的时间间隔已更改:
ConfigParam(15)=(validators_elected_for:65536lections_start_before:32768lections_end_before:8192take_hold_for:32768)
从中可以得出在65536秒内选择了一组验证器。
Validator-HOWTO . -,
getconfig 1 . .

result: [ 0 ], , timestamp, . , :
> runmethod -1:A4C2C7C05B093D470DE2316DBA089FA0DD775FD9B1EBFC9DC9D04B498D3A2DDA participant_list
, TON - UDP TCP. , Telegram , .. IP , . TON : , . , , Telegram , , ADNL Proxy.
10 . . 159 IP-, , :
126 DIGITAL OCEAN ( TON)
13 AMAZON
4 GOOGLE
3 HETZNER
3 ALIBABA CLOUD
2 OVH
2 SELECTEL
2 ONLINE.NET
1 LINODE
1 hosteurope.de
1 contabo.de
and 1 person possibly hosting it at home in Italy telecomitalia.it
IP- . , TON, -.
, Telegram Open Network WEB 3.0 , Telegram.
TON , « », . , :
- , ;
- - (Fift FunC), ;
- , ;
- telegram-, TON;
TON
(Infinite Sharding Paradigm) , , .. , , , , , , . TON , « » . , , TON .
, , TON , , « » , , , .
, , TON ( Gram). , , , TON PoS, , -.
PoS . , - , PoS , . PoS, , . , PoS , .
Grams Wallet — Gram
-
TON Grams Wallet , Telegram, - , Telegram FZ-LLC ( ).
, , , , , 18 , , , , Telegram FZ-LLC .
, , (. Linux). , (. 4, . 4.3), , Telegram Open Network:
« TON Blockchain ».
Our open source
Go-binding library, TON TONLIB.
Mercuryo Go, , -, .
https://github.com/mercuryoio/tonlib-gotonlib api , , :
- (//// );
- /gram/boc- ;
- ;
- ;
- Tongo ;
:
- . . tonlib;
- . ;
- tongo. - ;
- tl . ;
Telegram Open Network, Grams Wallet .