虽然 IOTA 2.0 是一个包含各种模块的复杂协议,但其核心思想实际上非常简单。这篇文章总结了 IOTA 2.0 如何达成共识并维护账本。
数据和事务都包含在称为消息的对象中,每条消息都必须引用两到八条其他消息。因此,所有消息的集合,称为Tangle,是一个不断增长的 DAG,或称为有向无环图。
目前,Chrysalis 网络由coordinator管理,这是一个由 IOTA 基金会运行的中心化节点。coordinator说明哪些交易和数据被包含在分类账中,即所有用户的代币余额列表。为了完全去中心化,我们将在 IOTA 协议的 2.0 版中删除coordinator。在 Coordicide 项目中,我们设计了删除coordinator的新协议。
在没有coordinator决定包含哪些交易的情况下,一个有效的消息必须有一个没有任何冲突的一致历史。因此,当冲突到来时,Tangle会分叉成不同的分支。即将推出的IOTA 2.0协议必须做两件事。
- 决定哪些分支将继续存在。
- 为稍后加入网络的新节点记录此决定。
这允许 IOTA 协议保持一致的分类帐,每个人的余额始终可用。
考虑以下示例:小明 有 5 个 MIOTA。首先,通过交易 A,他将这 5 个 MIOTA 发送给 小王。然后,小明 不小心(或故意)在交易 B 中将这些相同的 5 MIOTA 发送给 小李。现在我们有两个冲突的交易 A 和 B,并且 Tangle 分叉成三个分支:分支 1 包括到 小王 的交易 A,分支 2包括对 小李 的交易 B,以及拒绝对 小王 和 小李 的交易分支 3。
协议必须在以下各项之间做出决定:
- 分支 1,包括到 小王 的交易 A,将被拒绝,给 小李 5 IOTA
- 分支 2,包括到 小李 的交易 B,将被拒绝,给 小王 5 IOTA
- 分支 1 和分支 2 以及对 小王 和 小李 的交易都将被拒绝,小明 将继续持有他的 5 IOTA
假设协议拒绝分支 1。那么分支 2 和分支 3 将继续存在,最终分支 2 将“吞下”分支 3,因为分支 3 与分支 2 不冲突。但是,攻击者可以维持分支 1。协议必须告诉新加入网络的节点,分支 1 被拒绝。
攻击者可以与复杂的依赖项产生大量冲突,从而创建一个复杂的分支网络。使用 Hans Moog(IOTA 的高级研究科学家)的“多元宇宙理论”,分支管理器模块有效地跟踪Tangle中的所有分支。无论分支的复杂程度如何,IOTA 协议总是选择单个分支,然后选择单个有效的分类帐状态。
在解释每个模块之前,我们总结了它们是如何交互的。消息通过管理访问的拥塞控制算法进入网络。节点通过我们的投票协议快速概率共识 ( FPC)对新冲突进行投票,该协议确定应拒绝哪些分支。FPC 投票通过mana保护免受攻击者的攻击,mana是一种声誉系统,可以公平地限制可以投票的人。FPC 拒绝坏分支后,从正确的分支中选择提示以供新消息参考。随着这些正确的分支获得更多消息,可以说它们的批准权重会增加。一旦分支机构获得足够的批准权重,其交易就会最终确定并记入,并且更新 mana 以确定下一个 FPC 投票者。
Mana:在每笔交易中,代币持有者向节点承诺共识mana。由于这些承诺需要代币,攻击者只能拥有这么多的法力。有关更多解释,请参阅我们的博客文章在 IOTA第 1部分和第 2部分中解释mana。
FPC 投票:当新消息进入网络时,冲突会触发投票协议Fast Probabilistic Consensus,简称 FPC。首先,节点大致根据最先到达的事务来决定它们喜欢哪些冲突事务。然后,每个节点通过直接询问其他几个节点它们喜欢哪些交易来投票。如果这些节点中有足够多的节点喜欢某个事务(其中“足够”是一个随机阈值),则该节点也喜欢该事务。然后,每个节点再次询问几个不同的节点他们的意见,重复这个过程几轮,直到所有的意见都稳定下来。
Mana 保护 FPC 投票:一个节点拥有的共识 mana 越多,其他节点就越频繁地询问其意见。数学分析和模拟表明,当攻击者拥有大量活跃的共识mana时,FPC几乎总是正确地终止,所有诚实的节点都达成了一致。
Tip选择: FPC 终止后,协议有效地选择了要拒绝的分支:任何包含 FPC 不喜欢的事务的分支都将被拒绝。创建新消息时,节点从幸存的分支中随机选择提示(未引用的消息)。
审批重量:一个分支的批准权重本质上是在该分支上发布消息的节点所持有的共识mana值。由于所有诚实的节点都将他们的新消息附在未被拒绝的分支上,这些分支的批准权重很快就会变大,而被拒绝的分支的批准权重仍然很小。
加入网络的新节点可以通过观察哪些分支足够重,哪些不够重来推断他们错过的先前 FPC 投票的结果。
终结性: 终结性衡量消息不会被孤立的概率。在 IOTA 2.0 中,当消息被足够多的消息间接引用(由其发行者的共识mana加权)时,该消息将成为最终消息,保证该消息在tangle中深入,不会被孤立。在 Nectar 原型中,这会在几秒钟内发生。
原文:点击进入