2023 年 10 月 31 日,TON(原Telegram Open Network) 创造了新的世界纪录,在首次公开性能直播测试中达到了每秒 104,715 笔交易的惊人峰值,在 25 分钟内完成了总计 107,652,545 笔交易。经 Certik验证和确认,这一性能使 TON 成为世界上速度最快、可扩展性最强的区块链,超过了所有 L1 区块链和 PayPal、Visa 和 Mastercard 等著名中心化支付网络的处理速度。
TON无疑是一个令人瞩目的项目。本文将对TON白皮书进行深入解析,揭示其独特的技术特性和创新之处,为何TON能成为世界上最快的区块链。
扩容难题
在区块链技术的发展过程中,可扩展性一直是一个巨大的难题。区块链的扩容方案主要是为了提升系统的吞吐量和降低交易费用,使得区块链网络能够处理更多的交易并更好地适应大规模应用。尽管不同的公链不断尝试新的共识和架构设计,但目前的结果依然不如人意,成为区块链走向大规模应用的瓶颈,难以承载我们TG十亿用户的愿景。目前主流的扩容方案可以分为以下几类:
分片 (Sharding): 将网络分割成多个较小的部分,每个分片能够并行处理交易和智能合约,从而显著提高网络的吞吐量。 但是分片随之带来了潜在的安全性问题,因为每个分片的安全性可能低于整个网络。此外,跨分片通信也是一个技术挑战。 代表例子:曾经的Ethereum 2.0和NEAR夜影协议。
侧链 (Sidechains): 侧链是一种独立于主链运行的区块链,它可以有自己的共识机制和区块参数。通过侧链,用户可以在两个链之间转移资产,从而卸载主链的负担。代表例子:Polygon
二层方案 (Layer 2 solutions): 通过在主链上层构建另一层结构,L2能够提供更快的交易确认时间和更低的交易费用。拿较知名的L2来说, Optimism和Arbitrum: 这两个都是专门为以太坊设计的扩容解决方案。因此,Optimism和Arbitrum的部分架构位于Layer 1。随着以太坊的升级,它们的每秒交易数(TPS)上限从原来的2-4k增加到了大约2w。
zkSync 2.0: 相较于zkSync 1.0的几百TPS上限,zkSync 2.0带来了显著的提升。zkSync团队宣称其2.0版本能达到10w TPS的上限,但多数机构预测其真实上限可能在1-2w。Starknet: 在六月份完成了Quantum Leap的升级后,其TPS目前稍微超过100TPS。
Solana: Solana 使用了一种名为 Proof of History(PoH,历史证明)的创新共识算法作为其扩容方案的核心。虽然Solana自称其TPS可以达到65,000,但实际上大部分TPS是作为节点间的通信。真正的交易量可能只有6-8k TPS上限。而且,由于其中心化的共识机制设计,Solana在面对大量请求时多次出现宕机,如在NFT铸造时。此外,Solana也尚未成功实现中心节点的轮换。
TON区块链的设计者,来自于Telegram创始人及核心团队。作为全球最受欢迎的社交平台之一,Telegram拥有月活跃用户近9亿,在具备高度的安全性和隐私性的同时,也提供了稳定和流畅的用户体验,每天软件内传输数百亿条消息。web3理念已经相对家喻户晓,但实际上的加密原生用户依旧是少数者,多数人依赖中心化的交易所接触通证。世界上最流行的去中心化加密钱包Metamask目前的月活仅3000万。而TON的设计理念,从一开始基于服务数十亿用户而不仅仅只是少数web3极客。
无限分片范式
分片是一个来自数据库设计的概念。它指的是将一个大的逻辑数据集分割,然后分布到多个互不共享的数据库中,这些数据库可以分布在多个服务器上。简单来说,分片提供了水平扩展的能力,允许将数据分解为可以并行处理的独立部分。
TON并非首个将分片技术引入到区块链中的项目,例如,以太坊2.0曾经宣布了固定的64个分片后因难度太大放弃,而NEAR的夜影协议计划在明年实现100个分片,目前现行分片有4个。
与传统的分片方法不同,TON采用了无限分片的策略。
然而,TON的方法之所以被视为先进,并不是因为其拥有更多的分片,而是因为以下两个独特之处:
-
分片数量不固定:TON根据业务需求支持不断增加的分片,最大可达2^60个工作链,这个数量近乎无限。
-
分片数量具有弹性:TON可以在系统负载高时自动分割分片,并在负载降低时合并它们。这是一种非常有效的应对动态扩展需求的策略。
目前,TON 由两个工作链组成,用于同步和治理的主链(Masterchain),以及用于智能合约的工作链(Workchain)。在工作链之下是分片链(Shardchain)以及最底层的虚拟账户链(Accountchain)
工作链可以分为 N 个分片(从 1 到 256 个分片)。 每个分片都有自己的验证器组。 工作链小组负责在自己的分片中执行交易。 与此同时,它不断地从其工作链的所有其他分片下载区块。一般来说,区块链是一系列记录其状态变化的区块。对于 POS 区块链,验证者首先通过编译包含更改列表的区块来同意他们希望如何更改区块链状态。之后投票给这个区块,如果收集到足够的选票,他们就会将该区块应用于区块链状态并移动到下一个区块。
一个区块线程的吞吐能力非常有限,因为验证者必须在同意接受区块之前检查该区块中的所有交易。所以TON中有很多线程,可以简单地把它们想象成迷你微型区块链。它们并行存在的同时每个都有自己的一组验证器。
主链
主链是 TON中的主要区块线程。它用于同步所有其余的块,并重新计算验证器集。当所有线程就新块达成一致后,它们对其进行签名并将其注册到主链中。但是,主链验证器不会验证该块的有效性,它们仅检查它是否由适当的验证器签名。所以很多线程可能并行共存。来自不同线程的合约通过发送消息来相互通信。
工作链
工作链是独立的地址空间,可以按照其规则运行。例如,他们可能有不同的虚拟机或延长发布具有高gas限制的区块的时间。最重要的是,工作链必须具有相同的消息队列格式,以便它们可以交换消息。这也意味着所有工作链必须具有大致相同的安全保证。由于它们可以交换消息,因此这些消息携带网络通证。现在有两个工作链处于活动状态:主链和第一个处理工作链。工作链由地址前缀决定:-1:ax...1s2 - 主链中的账户地址。-1是主链前缀。
0:zx...123 - 第一个工作链中的账户地址。0 - 是第一个处理工作链的前缀。
分片链
处理线程或者叫分片链是处理工作链中的独立块线程。默认情况下,工作链 0 只有一个线程和一个链。该线程的验证者接受外部消息并处理他们自己发送或从其他工作链发送的内部消息。如果出现线程在最近 N 个块期间过载的情况,则该线程将被拆分:一个线程被分为两个,其中的事务并行进行。
地址以 0:00.. - 0:88.. 开头的账户现在位于线程 1 中,账户 0:88.. - 0:FF.. 位于线程 2 中。由于所有智能合约彼此异步通信,没有任何故障,而吞吐量却增加了两倍。当负载下降时,线程会在一段时间后合并回来。如果负载持续增加,两个线程可以一次又一次地拆分,以此类推。主链只有一个线程。
TON中的区块不仅仅是需要完成以实现状态更改的交易列表。 相反,一个块是:
执行事务的消息列表,将它们从传入队列中删除。消息处理后进入传出队列的新消息,然后消息处理导致智能合约状态发生变化。也就是说,为了让分片 X 的验证器维持分片 Y 的当前状态,它不需要执行分片 Y 块中的所有交易。它只是下载该块并汇总已发生的更改。 发生在消息队列和智能合约状态。
从根本上改变区块链世界不可能没有代价。 为了利用这种激进的方法,TON 智能合约开发者必须以不同的方式设计他们的合约。TON 区块链的基本原子单元是智能合约。 智能合约具有地址、代码和数据单元(持久状态)。 这种单元被称为原子单元,因为智能合约始终具有对其所有持久状态的原子同步访问。
超立方体网络路由
TON独创了智能路由机制来确保任何两个区块链之间的交易始终能够快速处理,无论系统有多大, 在 TON 区块链之间发送信息所需的时间随着链的数量只以对数方式增加,因此,就算扩展到数百万条链也能使它们以最快速度进行通信。
在TON区块链中,快速路由(Instant Hypercube Routing)和慢速路由(Slow Routing)是两种用于处理跨链交易的路由机制。
快路由(Instant Hypercube Routing):TON提出的加快消息路由速度的想法,允许跨链交易在极短的时间内完成。在传统慢立方体路由过程中,一条消息是由一个分片链沿着超立方体网络路由到目的分片链。但是在消息路由过程中,这个消息的目的分片链所属的的验证器(validator)可以选择提前处理这条消息加入区块,然后提供一个merkel证明(收据),发送回执来销毁掉这条正在传输的消息。它允许跨链交易在极短的时间内完成。快路由通过构建一个高维立方体(hypercube)的路由结构,实现了高效的跨链交互。在这种结构中,每个链都被映射到立方体的一个顶点,而链之间的距离表示为顶点之间的跳数。通过这种方法,交易可以在最短路径上快速路由,从而实现跨链交互的高效性。 快速路由可以在数秒内完成跨链交易,而无需等待区块确认。
慢速路由(Slow Routing):慢路由是一种相对传统的跨链交易处理方法,它通过将交易从源链逐步转移到目标链来实现。在这种方法中,交易首先在源链上被打包到一个区块中,然后通过中继器(relayer)将其转移到目标链。目标链的验证者会验证交易的有效性,然后将其打包到目标链的一个区块中。慢速路由相对于快速路由的优势在于它提供了更高的安全性和去中心化程度,因为跨链交易需要经过完整的区块确认过程。类似TCP/IP网络,通过目的IP地址寻址发送到目的地,能够保证消息按顺序可靠传播到目的链。对于一个规模为N的分片链超立方体网络,需要经过的中间分片链hop = log16(N)-1。因此,只需要4个路由节点(中间分片链),就能支持百万条的分片链。
为什么要这么设计?
分布式需要验证节点。如果系统非常庞大要有几万个节点,负担过重无法展开扩展。分片之后每一个分片有一个集合,shard0,shard1……又要做到跨shard通信。通信是可以跨分片的,从一个到一个分片,就意味分片和分片要有一个路由机制。连接形成一个路由,通过某些中间节点跳过去。信息每经过一次路由,相当于传输时间增加一个区块时间。
而随着分片链总数增长,这将需要大量的计算能力和网络带宽,从而限制系统的可扩展性。因此,不可能直接从任何一个分片直接传递消息到其他所有分片。相反,每个分片只与在它们(w,s)分片标识符的一个十六进制数字上不同的分片“连接”。通过这种方式,所有分片链构成一个“超立方体”图,消息沿着这个超立方体的边传递。
如果消息被发送到与当前不同的分片,当前分片标识符的一个十六进制数字(确定性地选择)将被目标分片的相应数字所取代,结果标识符将作为近似目标,成为转发消息的接受者。
超立方路由的主要优势在于区块有效性条件,创建分片链区块的验证者必须收集和处理“相邻”分片链的输出队列中的消息,否则就会失去他们的staking。通过这种方式,可以预期任何消息迟早会到达其最终目的地;消息既不会在传输过程中丢失也不会被重复传递。
超立方路由引入了一些额外的延迟和费用,因为需要通过几个中间分片链转发消息。但是,这些中间分片链的数量增长非常缓慢,与总分片链数 N 的对数 log N相关。
通信异步
TON 上的智能合约实行的是通信异步, 可以把TON 上的智能合约类比成互联网微服务。 每个微服务仅对其本地数据进行原子同步访问。 两个微服务之间的通信涉及通过网络发送异步消息。
系统架构中,更大的系统往往需要架构微服务。 这种分布式方法需要付出一些trade off才能采用,但可以带来用户体验的好处。 现代系统管理依赖于像 Kubernetes 这样的序列器来获取一组容器化微服务,并按需自动启动新实例(自动缩放),并在机器之间有效地对其进行分区。
用 Kubernetes (大规模集群管理系统)做类比,这正是 TON 所做的事情。 随着特定分片链上的负载增加,它被分成两部分。 由于智能合约是原子的,因此它们永远不会被分成两半。 这意味着曾经位于同一个分片链上的一些智能合约有一天可能会发现自己位于不同的分片链上。
TON 的虚拟机(TVM)正在将分布式微服务的概念应用到对标以太坊 EVM 的整体架构中。
状态去中心化
这是分片领域最为复杂、最具有挑战性的一种分片机制。整个数据库被分开,分别放在了不同的分片上。每个分片储存自己分片中的所有数据,而不是整个区块链的状态。
TON区块链分片中,所有服务都以智能合约的方式实现,智能合约的状态数据也只在对应的分片网络中保存,以此来实现状态分片。
不仅如此,在TON中,合约实现了一种业界绝无仅有的实现路径,每个用户都能在自己的合约管理通证状态,真正实现了从区块链状态上的去中心化。我通过案例详细探讨这种设计的原理。
首先,需要了解Wallet contract和Jetton wallet contract。Wallet contract是一个用户专属的智能合约,用于管理用户在TON区块链上的代币。Jetton(俄语:宝石) wallet contract则是一种特殊的Wallet contract,专门用于管理用户的Jetton通证。这些通证可用于支付网络费用和执行智能合约。每个用户都有自己的Wallet contract和Jetton wallet contract。这些合约充当用户的数字钱包,用于存储和管理通证。与此同时,这些合约还可以与其他用户的合约进行交互,实现去中心化的资产转移和交易。
此时假设用户A和用户B分别拥有自己的Wallet contract。用户A想要向用户B转账一定数量的通证。在这种情况下,用户A的Wallet contract会与用户B的Wallet contract进行交互,实现通证的转移。整个过程不需要依赖于一个中心化的合约,而是通过两个去中心化的合约来实现。
TON区块链的用户都拥有自己的合约来管理资产状态,这意味着不存在唯一中心化合约承担管理所有资产的风险。从而提高了系统的去中心化程度,降低了单点故障的风险。所有用户的资产状态由一个专属的合约管理,攻击者无法通过攻击单一的中心化合约来影响整个系统。用户之间的资产交易也可以通过智能合约自动执行,避免了人为操作的风险。还可以根据需求定制自己的Wallet contract和Jetton wallet contract,实现更多的功能和应用场景。这为用户提供了更大的灵活性和自主权。每个人都在自己的合约中管理资产状态,系统的可扩展性得到了提高。随着用户数量的增加,合约的数量也会相应增加,但这不会对整个系统造成过大的压力,因为每个合约都是独立运行的。
以上是我对TON区块链可扩展性以及白皮书技术架构理念的分析,感谢Dr.Awesome Doge对第一版初稿做出了编辑。感谢俄罗斯和乌克兰开发团队坚持不懈的深耕,最后感谢Telegram创始人Nikolai Durov先生在多年前的伟大设计,而这些都是为了人类心智的荣耀。