主页 > 老版本imtoken > 实现比特币10000倍扩容,麻省理工和斯坦福创建的新协议Prism是什么?

实现比特币10000倍扩容,麻省理工和斯坦福创建的新协议Prism是什么?

老版本imtoken 2023-10-04 05:09:55

注:本文为麻省理工大学雷洋演讲斯坦福区块链周演讲实录,题目为《棱镜:比特币的10000倍扩容》。

大家好。 我很高兴能在这里谈论我们对 Prism 共识协议的实施和评估,该协议的性能优于比特币 10,000 倍。 这是麻省理工学院、斯坦福大学和其他几所大学合作的成果。 我要感谢我的合作者,包括我的导师和其他参与者。

bitcoin

我们都知道比特币具有很强的安全性,但就性能而言,就没有那么多了。 它每秒只能处理 7 笔交易,每笔交易都需要数小时才能确认。 比特币连接性能和安全性。 比特币将这些参数与一个设计参数联系在一起:挖矿率。

如果我们要提高性能,我们将在安全方面遭受很多损失,反之亦然。 Prism 所要做的就是断开该链接。

我们对 Nakamoto 共识协议进行了自然扩展。 我们解构它并扩展每个部分。 棱镜协议是一个非常自然和美丽的协议。 它非常简单,我们在短短 6 个月内用 10,000 行 Rust 代码实现了它。

就在演讲之前,我在 AWS 上启动了 100 个虚拟机实例。 我将在每个虚拟机上分发一个 Prism 实例。 代码在github上是开源的。

在这次演讲中,我将讨论 Prism 共识协议,然后我将讨论系统部署,然后我们将进行评估。

让我们快速回顾一下比特币共识协议,它使用最长链规则,每个矿工都试图扩展和挖掘最长的链。 当分叉发生时,当两个区块不小心连接到同一个父区块时,矿工会选择最长的分叉。 他们总是选择最长的链条。

这里涉及到一个叫挖矿率的参数,它定义了矿工挖出新区块的平均速度。 在比特币中,这个速率是每 10 分钟 1 个区块。

比特币共识协议_比特币转错到比特币现金地址了_比特币分叉会影响比特币价格吗

比特币协议的一个重要部分是交易确认。 一笔交易出现,我们可以立即确认,但有一个问题。 攻击者可能在挖私有链,因为挖矿过程是随机的,是泊松过程。 有可能这个矿工很幸运,能够更快地挖掘前几个区块,当这种情况发生时,攻击者释放了他自己的私有链,突然间我们的交易不再来自真正最长的链。

中本聪提出了一个解决方案,与其马上确认交易,还不如等到确认已经在最长链上。 即使攻击者幸运地获得了前几个区块,从长远来看,攻击者获胜的可能性也不大。 中本聪在他的白皮书中进行了计算。 所以你必须等待一定数量的块才能获得不可变的可能性。

吞吐量是比特币确认交易的平均速度,在一段时间内可以确认多少笔交易,计算方法是乘以区块大小,每个区块有多少笔交易,以及挖矿率(我们挖这些块的速度有多快快速地)。 然后是延迟比特币共识协议,即确认交易需要多长时间。 该计算可以通过确定深度并除以挖掘率来完成。

为了提高性能,我们可以提高挖矿率以获得更高的吞吐量和更低的延迟。 我们还可以增加块大小以获得更高的吞吐量。 然而,由于分叉,这不起作用,如果我们提高挖矿率或增加块大小,我们只会得到更多的分叉。 这是因为当网络上的两个节点无法足够快地相互传播消息以致于它们不小心在同一个父块上挖矿时,就会发生分叉。 如果我们提高挖矿率,更有可能在短时间内两个节点意外挖到一个新区块。 如果我们增加块大小,块将需要更长的时间在整个网络中传播,这将导致分叉率增加。 分叉是不好的,因为它会损害安全性。 叉子降低了诚实开采的能力。

解构棱镜

现在让我们谈谈棱镜。 我们取消性能和安全性的链接以提高性能。 在比特币中,一个区块实际上有两个目的:第一个是新区块会向账本中添加一些交易,第二个更隐含,新区块也会向所有间接和直接区块添加一些交易。 认证。 这就好比说证明某条链是最长的链。

因此,第一个影响与吞吐量直接相关。 提交的交易越快,分类帐可以包含的交易越多。 第二个角色与确认延迟有关:我们投票的速度越快,您对交易的信心就越大。

1.吞吐量

在比特币中,我们已经看到由于分叉而导致的吞吐量有限。 如果存在一个根本没有分叉概念的结构怎么办? 这就是我们引入“交易区块”的原因。

比特币共识协议_比特币分叉会影响比特币价格吗_比特币转错到比特币现金地址了

“交易区块”由矿工以高挖矿率挖出,但交易区块之间没有链式结构。 所以我们可以非常快速地挖掘它们而不会导致分叉,因为在这个设计中根本没有分叉。

然后我们将这些“交易块”带到“提议者块”。 这些是仅包含指向这些事务块的哈希指针的轻量级块。 “申请者区块”将以比特币的速度被挖掘出来,并在比特币最长的链条上链接在一起。 因为我们挖的很慢,区块很小,不管你提高多少吞吐量,都不会造成分叉的增加。

这就是 Prism 可以在底层网络的物理限制内工作而不会牺牲安全性的原因。 Prism 基于最长链和工作量证明。

矿工将同时开采两种类型的区块。 他们将使用区块的哈希值来决定它成为哪种类型的区块:交易或申请人。

2.延迟

为了处理延迟,我们首先注意到,即使我们引入了申请链,投票率也不会增加,因为只有一个申请链在投票。 那么我们再做一次解构,把投票块和申请块分开。

我们将申请人块分成两部分。 一个包含指向交易块的哈希指针,另一个是选民块,它只包含指向申请人块的投票指针。 我们不再使用申请人区块中的最长链结构。 相反,我们假设投票区块之间存在类似比特币的最长链结构。

到目前为止,我们还没有改善确认延迟,因为我们仍然只有一个选民链,而且这条选民链的安全非常重要,所以我们仍然需要等待 25 次确认,否则攻击者可以像攻击比特一样攻击选民链就像一枚硬币。

现在我们已经将申请者和投票工作分开了,我们可以引入很多选民链,比如 1000 个选民链。 一个有趣的发现是,既然我们有 1000 个选民链,我们不需要他们中的每个人都是安全的。 即使攻击者能够攻击一条投票链的概率是 30%,攻击者同时攻击 500 条投票链的概率仍然很低。 这就是为什么我们可以在不牺牲安全性的情况下减少 Prism 中的确认延迟。

比特币转错到比特币现金地址了_比特币分叉会影响比特币价格吗_比特币共识协议

3.性能

我们在 2019 年发表的一篇论文中,通过数学证明,只要对手的算力低于 50%,Prism 就可以像比特币一样保证安全性、活性和一致性。 对于吞吐量,Prism 提供 1 - beta 乘以 c,其中 beta 是对手的能力,c 是底层网络吞吐量。 关于确认延迟,Prism的确认延迟与底层网络延迟d成正比,与确认可靠性成正比,与投票链数成反比。

这看起来很有希望,但让我们看看它在现实世界中的表现如何。 这是理论无法告诉我们的。 首先,我们必须承认这个协议比比特币复杂一点。 其次,在理论上,我们假设了一个简化的网络模型。 请记住,当我们描述 Prism 的确认延迟时,我们使用了大 O 表示法,因此它是成比例的,我们不知道这里的常数; 说到底,网络肯定还有其他瓶颈比特币共识协议,那么那些瓶颈是什么?

这就是我们进行系统部署的原因。

部署棱镜

我们通过 10,000 行 Rust 代码实现了 Prism 的部署,它基于 UTXO 模型和 pay-to-pubkey 交易。 该代码是开源的。

Prism 可以实现每秒 70,000 个事务和 10 秒的延迟。

区块链客户端的作用是: 1)参与共识。 它接收新块,将它们连接成一条链,并挖掘新块。 2)同样重要的是它可以获取块和生成交易的顺序。

Prism 共识协议的核心作用是对交易进行排序。 与比特币不同,我们允许双花交易。 只要每个人都同意这个顺序,那么他们就可以自己计算 UTXO 集并删除无效或双花交易。 这就是账本记录模块的工作,按照交易的先后顺序依次执行,生成最终更新的UTXO集。

比特币分叉会影响比特币价格吗_比特币共识协议_比特币转错到比特币现金地址了

部署后,我们了解到 Prism 能够将区块链的瓶颈从共识转移到账本记录。 这个瓶颈在于 UTXO 集的存储。 为了实现高吞吐量,您必须并行处理共识和簿记。

我们做了一些优化。 我们做了“记分板”(Scoreboarding)来保持账户并行。 我们制作的分类帐保持异步一致,以便我们可以实现并行共识。 我们还在客户端引入了功能设计模式,并禁用了交易广播以提高网络效率。

现代 CPU 设计中使用记分板来执行并行指令。 假设我们有两个 CPU,希望同时执行两个事务。 如果第二笔交易开始,那么第二笔交易会通过,但是第一笔交易会失败,因为那是违反交易顺序的,这是不正确的。

记分板技术引入了一种非常简单的形式。 在我们执行一笔交易之前,我们会记录下这笔交易会触及哪些币种,会使用哪些币种,会产生哪些币种。 在执行另一笔交易之前,我们将查看记分牌,看看记分牌中是否已经存在我们将要生产或花费的任何硬币。 在开始第一笔交易之前,我们会在记分牌上标出a和c。 如果在后续的交易中再次遇到a币,就会发生冲突。 然后执行不同的事务,我们发现它们可以同时完成。 对于其余的交易,我们发现它们之间没有冲突,所以它们也可以一起执行,我们得到了正确的结果。

经过优化,客户端在CPU核数上实现了近乎线性的扩展,即达到8核,SSD和数据库在此基础上为性能设定了上限。

另一个重要的优化是我们基于共识执行异步帐户。 我们注意到,在 Prism 中,与挖掘区块的速度相比,分类帐更新的频率非常低,因为我们有 1000 个选民链。 与比特币不同,每个选民链和每个单独的选民区块都不太可能触发一些新交易得到确认,比特币中每个新区块都会触发一些交易得到确认。 因此,我们不是在每次收到块时都记录下来,而是将其置于共识逻辑的异步循环中,以便它在自己的循环中运行。 我们能够去除共识逻辑中的大量锁,并且我们的共识逻辑是全局无锁的,因此它可以使用多线程和多 CPU 内核并行处理即将到来的区块,从而保持较高的区块出块率。

部署评估

最后,我将展示我的评估结果。 我们使用 100 到 1000 个 AWS EC2 实例,这些都是轻量级实例,不如我目前的笔记本电脑好。 我们将节点连接到拓扑中——每个节点连接到 4 个随机节点。 我们在每个节点之间引入了 120 毫秒的传播延迟。 对于每个节点,我们设置了 400mbps 的入口和出口带宽限制器来模拟真实的互联网。

我们将我们的部署与比特币和 bitcoin-ng 进行了比较,并测试了 Pism 是否可以扩展到更多节点(比如这里的 1000 个节点),并评估我们的部署在 CPU 或带宽利用率方面是否有效。 最后,我们评估了“棱镜”在不同类型攻击下的表现。

比特币共识协议_比特币分叉会影响比特币价格吗_比特币转错到比特币现金地址了

Prism 每秒处理 70,000 个事务。 我们可以看到,最长链协议结合了性能和安全性,所以如果想增加区块大小以获得更高的吞吐量,就必须降低挖矿率从而获得更高的延迟。 这是一个权衡曲线,如果你增加延迟,那么你也可以增加吞吐量,但如果你想要低延迟,那么你必须为吞吐量买单。

我们的参数在最长的链协议中,所以它比今天的比特币快得多。 但是,我们的确认延迟仍然不能低于 100 秒,吞吐量不能超过每秒 10,000 个事务。

我们通过修改代码部署到 bitcoin-ng 上,我们看到 bitcoin-ng 实现了更好的吞吐量,但延迟仍然像比特币或最长链协议,因为它本质上使用最长链协议投票和确认。

最后,我们与 Algorand 进行比较。 我们在相同的 AWS 拓扑设置中运行公开可用的 Algorand 代码,我们发现它的吞吐量限制为每秒 1000 个事务。

然后,我们在不同的安全设置下评估了该协议。 我们发现我们只为 Prism 的确认延迟付出了很小的代价,而且我们没有损失任何吞吐量,因为在 Prism 中我们将吞吐量与安全性分离了。

最后,我们还测试了具有更高安全设置的 Prism。

我们的部署非常高效。 超过 75% 的 CPU 功率用于基本任务,例如检查签名和更新 UTXO 集。 对于带宽,由于我们使用了 1000 个选民链,这可能看起来效率低下,但实际上超过 99.5% 的数据是实际有用的数据,只有不到 0.4% 是选民区块。

Prism解构的方法是将比特币中的一个区块解构为一个申请者和一个投票者,并对每一部分进行缩放以逼近性能极限。 我们发现,为了实现高吞吐量,我们必须并行化所有内容——共识和分类账客户端。

我们发现 Prism 能够将瓶颈从共识转移到账本、SSD 和数据库。 此外,Prism 是中本聪共识的自然延伸。

原文:scripts/stanford-blockchain-conference/2020/prism/