TRON DPoS 共识机制¶
概述¶
区块链作为一种分布式账本系统,拥有遍布全球的数千甚至上万个独立节点,它们各自维护一份相同的账本副本。要将新的交易数据写入这个共享账本,必须获得这些节点的普遍认可。在固有的不可信分布式环境中实现这一目标,是一个复杂的系统工程。
区块链系统能够正常运行(即所有节点能够持续维护一份一致的账本),前提是系统中绝大多数节点是诚实可靠的。为了确保诚实节点能够共同监督交易数据的写入,每个区块链系统都需要建立自己的共识机制。
共识机制就像区块链的“宪法”,它保证了即便在不可信的分布式环境下,只要绝大多数节点遵守共识规定,系统就能达成确定且可信的结果。因此,共识机制的意义在于,它使区块链中的诚实节点能够最终就账本内容达成一致。
目前主流的共识机制包括工作量证明(PoW)、权益证明(PoS)和委托权益证明(DPoS)。每种机制在不同的区块链系统中都有其独特的具体实现。本文将重点介绍 TRON 网络所采用的 DPoS 共识机制,并详细阐述其核心组件和运作原理。
DPoS 共识机制¶
DPoS 共识机制在区块链系统中的核心作用是选举出超级代表(Super Representative,简称 SR),即网络的指定区块生产者(或出块节点/Block Producer)。这些 SR 负责验证交易数据并将其记录到账本中,随后将包含新账目的区块广播至全网,并获得其他节点的认可。
在 DPoS 共识中,系统会根据节点获得的选票数量来选定一部分节点作为区块生产者。整个选举流程具体如下:
- 初始准备: 当区块链系统启动时,会发行一定数量的通证(例如 TRON 的 TRX)。
- 成为候选人: 节点可以消耗一部分通证来申请成为区块生产者候选人。
- 社区投票: 网络中任何持有通证的节点都可以为这些候选人投票。
- 计票选举: 每经过一个预设的时间周期(例如
t
),系统会统计所有候选人的得票数量,得票数排名前N
的节点将成为下一个时间周期内的区块生产者。 - 周期轮换: 时间周期结束后,系统会重新统计并选出新的区块生产者,如此循环往复。
下面将结合 TRON 网络中的具体实现进行详细说明。
核心概念定义¶
概念 | 定义 |
---|---|
TRON | TRON 区块链网络。本文不区分 TRON、TRON 区块链、TRON 区块链系统等概念。 |
TRX | 由 TRON 区块链系统发行并在系统中流通的权益通证,代号为 TRX。 |
超级代表 (SR) | TRON 网络中获得区块生产资格的节点。TRON 设定区块生产者的数量为 27 个。下文不区分区块生产者、记账人、Witness、SuperNode、SR 等概念。 |
超级代表候选人 | TRON 网络中具备成为区块生产者资格的节点。 |
超级代表合伙人(Super Representative Partner / SRP) | 得票数排名第 28 至 127 名的超级代表候选人被称为超级代表合伙人。他们不参与区块生产或交易打包,但可以获得投票奖励。投票给超级代表合伙人的选民也将获得投票奖励。 |
生产区块 / 记账 | 指验证交易并将交易记录为账目的过程。由于 TRON 中的账目由区块承载,因此记账过程也被称为生产区块,SR 也被称为区块生产者(Block Producer)。下文不区分生产区块和记账。 |
出块顺序(记账顺序) | 27 个区块生产者按照得票数量从高到低进行排序,以此确定其生产区块的顺序。 |
槽位(Slot) | 在 TRON 网络中,每 3 秒钟被计为一个槽位。正常情况下,每个生产区块的 SR 都会在对应的槽位时间内完成出块。因此,TRON 的平均出块间隔约为 3 秒。如果因故 SR 未能产块,则对应的槽位会空置,下一个 SR 会在接下来的槽位内生产区块。在维护期,产块会跳过 2 个槽位。 |
出块轮(Epoch) | TRON 设定每 6 小时为一个出块轮,称为一个 Epoch。每个出块轮的最后两个出块时间是维护期。每个出块轮的维护期将决定下一个出块轮的出块顺序。 |
维护期 | TRON 设定为 2 个区块时间,即 6 秒钟。此时间段用于统计候选人的得票数。由于 24 小时有 4 个出块轮,因此自然有 4 个维护期。维护期内不进行区块生产,主要用于确定下一个出块轮的生产顺序。 |
超级代表的产块流程¶
TRON 区块链系统中的 SR 持续执行以下流程:
- 收集交易: SR 收集区块链网络中新产生的交易。
- 验证交易: 对这些交易的合法性进行验证。
- 打包区块: 将验证通过的交易打包在一个区块中,作为新的一页账记录到账本上。
- 广播区块: 将新生成的区块在整个区块链网络中进行广播。
- 其他节点验证: 其他节点接收到新区块后,也会验证其中交易数据的合法性,并将其添加到自己的账本中。
SR 持续重复此过程,确保 TRON 系统中所有新的交易数据都被及时记录到账本中。
超级代表的选举机制¶
选票¶
在为 SR 投票之前,账户需要获得投票权,即 TRON Power (TP)。投票权通过质押 TRX 获得。除了获取带宽或能量,质押 TRX 还会同时为用户带来投票权。每质押 1 TRX,用户将获得 1 TP。
账户在解除 TRX 质押后,会失去相应数量的 TP,并且其当前进行的投票也将失效。选票每 6 小时统计一次,超级代表和超级代表合伙人也会每 6 小时更新一次。如果在选票统计前,一个账户进行了多次投票,TRON 网络只会记录该账户的最新一次投票,之前的投票将被覆盖。
投票过程¶
在 TRON 中,对候选人的投票被定义为一种特殊类型的交易。节点可以通过生成一笔投票交易来为候选人投票。
统计选票¶
每个维护期内,系统会统计一次所有候选人的得票数,并将获得票数最多的 27 个候选人选定为下一个出块周期的 SR。
产块机制¶
在一个出块轮中,27 个 SR 将按照产块顺序依次生产区块。每个 SR 只能在轮到自己产块时进行区块生产。
SR 将多笔验证合法的交易数据打包到每个区块中。同时,每个区块都会将上一个区块的 哈希值(hash
)作为本区块的父哈希值(parentHash
)填入。此外,SR 还会使用自己的私钥对本区块的数据进行签名,将签名结果(witness_signature
)以及 SR 的地址、区块高度、区块生成时间等数据一并填入区块。
通过这种方式,每个区块都保存了上一个区块的哈希值,从而在逻辑上将区块相互关联起来,最终形成了区块链的链式结构。典型的区块链结构示意图如下:
理想情况下,采用 DPoS 共识的区块链系统记账过程应严格按照预先计算好的记账顺序,由超级代表轮流依序产块(如下图 a)。然而,实际的区块链网络是一个分布式、不可信的复杂系统,可能出现以下情况:
- 网络延迟: 由于网络链路环境不佳,超级代表生产的区块可能无法在有效时间内被其他超级代表收到(如下图 b1、b2)。
- 节点故障: 某些超级代表可能无法始终正常运行(如下图 c)。
- 恶意行为: 少数超级代表可能恶意生产分叉区块,试图分裂主链(如下图 d)。
如前文所述,区块链系统正常运行的基础是系统中绝大部分节点是诚实可靠的。进一步探讨这个问题,区块链系统安全的首要保证是账本的安全:账本既不能被恶意写入不合法数据,账本在各个节点上保存的副本也应该保持一致。从 DPoS 共识的角度来看,记账过程由超级代表完成,因此 TRON 的安全性取决于大多数超级代表的可靠性。
TRON 设定了不可逆转区块(或称固化块)机制,同时为了抵抗少数 SR 的恶意行为,TRON 采用基于最长链原则来确认主链。
固化块原则¶
新生产出的区块初始处于未确认状态。当一个区块被至少 70%(即 27 \times 70\% \approx 19 个,向上取整)的超级代表认可后,该区块被认为是不可逆区块,通常称为固化块。此时,固化块中包含的交易已被整个区块链网络确认。
此处对未确认状态区块的“认可”方式是:其他超级代表在该区块之后生产后续区块。例如,如图 d 所示,当超级代表 C 生产了第 103 块后,超级代表 E 在第 103 块的基础上生产了第 104' 块,超级代表 G、A、B 分别生产了第 105'、106'、107' 块,这些实质上都是第 103 块的后续区块,因此也是对 C 生产的第 103 块的认可。
由此可知,当高度为 121 的区块被生产出来时,第 103 块就成为了固化块,因为它此时已经有了 19 个后续区块。需要强调的是:生产这 19 个区块的超级代表必须互不相同,并且与生产第 103 个区块的超级代表也不同。
最长链原则¶
当区块链发生分叉时,诚实的超级代表总是会选择在当前最长的分叉链上继续生产区块。
激励模型¶
为了保证 TRON 区块链系统安全高效地运行,TRON 设计了激励模型,以鼓励更多节点加入 TRON 网络,从而扩大网络规模。
- 区块生产奖励: TRON 网络每成功生产一个区块,会向该区块的生产者(即对应的超级代表)奖励 8 TRX。该超级代表在根据其设定的佣金比例扣除佣金后,会将剩余部分根据投票者的投票权重分配给支持他们的选民。
- 投票奖励: 随着每个区块的产生,TRON 网络还会向所有超级代表和超级代表合伙人额外奖励 128 TRX。这笔奖励将根据他们各自获得的投票比例进行分配。同样,超级代表和超级代表合伙人在根据其设定的佣金比例扣除佣金后,会将剩余的投票奖励根据选民的投票权重分发给对应的选民。
基于提案的参数调整¶
DPoS 的一个重要特性是,任何系统参数的调整都可以通过链上提案发起。SR 通过对提案的投票来决定提案是否生效。这种机制的好处在于,在链上调整参数时,无需进行硬分叉升级。
目前 TRON 网络的动态参数及其值,以及过往的提案记录,请参考 TRONSCAN 委员会页面。