# Ouroboros Leios将如何改变Cardano的共识

**URL:** <https://forum.cardano.org/t/ouroboros-leios-cardano/106485>\
**Category:** 教育支持\
**Created:** [24 August 2022 03:03 UTC](https://forum.cardano.org/t/ouroboros-leios-cardano/106485 "2022-08-24T03:03:27Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![Ninjis](https://sea1.discourse-cdn.com/flex023/user_avatar/forum.cardano.org/ninjis/32/89680_2.png) [@Ninjis](https://forum.cardano.org/u/Ninjis)\
**Post date:** [24 August 2022 03:03 UTC](https://forum.cardano.org/t/ouroboros-leios-cardano/106485/1 "2022-08-24T03:03:27Z")

</div>

> **[How Ouroboros Leios will change the Cardano Consensus](https://cardanians.io/en/how-ouroboros-leios-will-change-the-cardano-consensus-211)**
>
> Cardano uses PoS consensus, which at the time of writing is capable of processing 300 simple transactions per second. That's almost 50 times more than the PoW consensus that Bitcoin uses. However, for the global financial system, this is still...

Cardano使用PoS共识，在撰写本文时，它能够每秒处理300个简单交易。这几乎是比特币使用的PoW共识的50倍。然而，对于全球金融系统来说，这仍然是不够的。IOG团队正在开发一个新版本的PoS，他们将其命名为Ouroboros Leios。

区块链的三难困境  
任何区块链网络的开发者团队都要平衡三个关键特征，即安全、去中心化和可扩展性。区块链三难困境指的是一种广泛持有的信念，即去中心化网络在任何时候都只能提供三个好处中的两个。安全性是一个无条件的特征，不能被破坏。团队主要在去中心化和可扩展性之间进行平衡。然而，宁愿选择可扩展性而不是去中心化并不是最好的解决方案，因为去中心化是区块链行业的一个关键特征。此外，随着去中心化的减少，中本聪的系数也在减少，安全性也在减少。

创建一个区块链网络，在不牺牲去中心化和安全性的前提下实现高可扩展性，仍然是区块链行业的一个技术挑战。Cardano是目前最去中心化的网络之一，有超过一千名池运营商生产区块。当务之急是Cardano保持其目前的去中心化，不关闭进一步增长的大门。然而，增加可扩展性对于Cardano试图完成的使命也是至关重要的。

Ouroboros Leios是对当前PoS共识的一个重要扩展，它将大大增加可扩展性并保持当前的去中心化水平。让我们来看看目前已知的细节。

吞吐量  
区块链网络使用区块作为交易和脚本的集合，在其上发生网络共识。从网络的角度来看，在全球范围内为每一个单独的交易做出决定是没有效率的。更有效的做法是同时处理多个交易，并对整个集合做出决定（共识）。

一个区块是一个基本单位，用于过渡到账本层面的新状态。如果大多数网络认为提议的区块有效，那么新区块将永远存储在区块链中，并将成为下一个状态转换的起点。

有两个参数影响区块链网络的吞吐量。它们是区块大小和区块时间。

区块大小定义了一个区块的最大尺寸，这影响到可以容纳的交易和脚本的数量。如果区块大小是88 kB（90.112 B），而一个简单的交易有大小，比如300 B，那么300个交易可以装入区块。

区块时间定义了添加新区块的时间间隔。Cardano的区块时间设置为20秒。这意味着，在1分钟内，Cardano可以处理900个简单的交易。在10分钟内，9000笔交易，等等。

可能发生的情况是，如果想要使用网络的用户数量开始增长，网络可能无法将所有新交易插入到新区块中。因此，一些交易必须在内存池中等待下一个区块。

例如，如果400个用户想在20秒内发送一个简单的交易，就会发生这种情况，这种情况会重复一个小时。400笔交易超过了Cardano可以轻松处理的300笔。每隔20秒，就有100笔交易被遗漏在新区块之外，所以它们必须留在mem-pool中。

你可以把mem-pool想成是网络节点上交易的临时存储库。当一个区块生产者成为一个槽的领导者，即获得在一个给定的槽中创建一个新区块的权利，它从mem-pool中获取预先验证的交易并将其放入区块中。然后，它将区块传播到网络中。随着每一个新添加的区块，mem-pool空间增加，因为已经在区块链中的交易可以被取出来。然而，新的交易一直在涌入。

如果交易的数量持续高于网络可以处理的数量，就有必要防止mem-pool的填充超过所需的限制。网络被迫拒绝新的交易。用户必须等待更长的时间来结算已经在内存池中的交易。提交交易失败的用户必须再次尝试。两者都是对用户不友好的。用户期望结算时间短，网络不会有吞吐量问题。

mem-pool有能力吸收短期高峰，但它比区块大小大很多倍是没有意义的。如果mem-pool中有足够的交易，比如说提前100个区块，这意味着新提交的交易将在相对较长的时间内无法进入区块。理想情况下，mem-pool应该尽可能的小，网络应该有足够的规模，这样交易就不会因为不适合进入区块而停留在mem-pool中。

去中心化的网络能够相对快速地传播交易，理论上只受限于互联网带宽。互联网的吞吐量比区块链网络高，因为区块链受到区块大小和区块时间的限制。换句话说，区块链网络在生产区块时，目前还无法使用互联网的吞吐量。阻碍区块链网络发展的是缓慢的共识，而这种共识又受限于特定区间内的数据大小。虽然交易可以相对快速地流经区块链网络，但唯一的结果是，内存池会被填满。

有一些看似简单的解决方案，如增加区块大小或减少区块时间。两者都会导致更高的吞吐量，因为更多的交易将适合于一个区块，新的区块将更频繁地产生。不幸的是，改变这些参数可能会对安全和去中心化产生负面影响。例如，区块越大，它在点对点网络中传播的时间就越长（增加延迟）。区块大小越短，产生分叉的风险就越大，因为区块生产者可能没有及时收到最后生产的区块（并使用之前的区块）。

随着网络中节点数量的增加，数据在网络中必须通过的跳数会增加。由于每个节点在发送数据之前都要进行验证（以避免在网络上发送非有效的数据），数据的分发速度会减慢。

如何提高吞吐量  
正如我们所说，目前，区块链网络并没有使用大部分的通信带宽。大多数时候，节点只是在等待。分别是接收、验证和进一步分发新交易和脚本。对节点来说，验证新传入的交易并不是一项计算量很大的任务。他们只有在收到一个新的区块或被赋予生产一个新区块的任务时，才会有一点工作要做。

如果区块时间设置为20秒，我们可以说节点在19秒内做最小的工作，每20秒验证或创建一个新区块一次。在网络带宽的使用方面，情况也差不多。有很多小的交易一直在网络上发送，但每20秒一次需要分发一个相对较大的区块，这比交易的时间要长很多。

为了提高可扩展性，有必要使用节点的计算能力并充分运用它们。只有在产生新区块时才使用网络的计算能力和带宽是没有意义的。简单地说，区块时间越长，计算能力和网络带宽的使用就越少。

不要把PoW任务和交易验证混为一谈，PoW任务主要是为了吸引下一个区块的生产者，并确保历史被覆盖。在比特币的可扩展性方面，当矿工试图解决计算密集型的加密问题时，网络也基本上闲置了10分钟。

所以，有必要利用现有的资源。经过验证的交易和脚本应该尽快被接受并存储在区块链上。换句话说，有必要尽快将验证结果纳入区块，无论其数量如何。

如何在保持安全和去中心化的同时提高吞吐量？网络中的节点数量必须没有根本性的变化。网络必须保持开放，以便新的节点可以在任何时候加入。

该解决方案必须独立于区块大小和区块时间参数。必须利用通信链路的整个吞吐量，以便能够快速处理尽可能多的新交易和脚本。节点在等待新区块创建时可以更多地利用其计算能力。IOG团队找到了一个解决方案。

有必要将交易验证和脚本执行与区块生产分开。Ouroboros Leios将与验证和区块生产有关的任务分成两组节点。然而，每个节点都可以执行这两项任务。

输入背书人  
Cardano将时间分割成槽。一个槽的长度是一秒钟。该协议的设置是这样的：大约每20秒，一个随机选择的节点成为槽的领导者。槽的领导者有权将交易插入到新的区块并发布。赌注大小会影响一个节点成为槽口领导者的频率。被选中的槽位领导者也是一个区块生产者，如果它使用这个权利并生产一个新的区块。

在下面的图片中，你可以看到时间被分为几个槽。在第20和第40个槽中，新的槽领导者被抽出，这些是标有11和3的节点。这些节点可以生产一个新的区块并发布它。

![1*93aL7TJBvfwXn1xrOvpMVA](https://us1.discourse-cdn.com/flex023/uploads/cardano/original/3X/5/3/53fec37f1ca8b778f9dc6f26106e77daaa232157.png)

网络中有些实体（股权池运营商）是受委托人信任的，这一点可以被利用。除了区块生产者之外，还会有第二组称为输入认可者。因此，在一个档期内，不仅可以随机选择档期领导者，还可以选择一个输入背书者（理论上是多个输入背书者）。

槽主的角色不变，他们的任务是生产一个新的区块。输入认可者的任务是认可应该进入该区块的输入。我们将在后面讨论认可输入的内容。输入背书者可以被认为是第二层，在交易和脚本被随机选择的槽头插入区块之前，对它们进行预处理。

输入背书者将通过一个类似于选择槽头的机制来随机选择。不同的是，在选择槽主之前（大约每20秒），可以在每个单独的槽中选择输入背书者（每秒钟一个输入背书者）。由输入背书者准备的输入，只有在加密验证了输入背书者获得了准备输入的权利后，才会被槽主接受。

在两个区块之间，多个输入背书人将被随机选择来准备输入。一旦选择了一个槽位领导者，将有多个被认可的输入可以被插入到区块中。与其像现在这样，槽主将选定的交易和脚本插入区块中，不如将对认可的输入的引用插入区块中。

区块和认可的输入在网络中是独立分布的。每个区块可以包含0到N个认可的输入。

在下面的图片中，你可以看到时间又被分成了几个槽。大约每20秒就有一个新的槽的领导被抽出。此外，在每个槽中抽出一个输入背书者，它被赋予产生一个新输入的权利。因此，两次抽签是在同一时间内平行进行的。

![1*LOAh6GajDN5pd_Lmgw2ZdQ](https://us1.discourse-cdn.com/flex023/uploads/cardano/original/3X/3/9/39c04aa75302307572aba69b313e549898a5752c.png)

输入背书是唯一可能的，因为Cardano使用了Extended-UTXO模型。可以在本地验证交易和脚本，而不受周围环境的影响（没有全局状态）。交易验证和脚本执行发生在本地的输入背书者层面，即在仍由槽头控制的主链之外。搜索重复消费冲突的责任仍由选定的槽位领导者承担。然而，它成为一个轻量级的过程，只需要依靠检测和解决UTXO图中的冲突。

同一交易可以包含在多个背书输入中。如果输入认可者不知道之前的输入是什么样子的，就会发生这种情况。如果一个交易在区块链中多重出现，它的第一次出现将是它在账本中的典型位置。

在下面的图片中，你可以看到每秒钟都会有一个新的背书输入被创建。一旦一个新的槽头被画出来，就会有更多的背书输入准备被使用。槽头执行其验证过程，并可以将所有选定的输入插入到新的区块中。

![1*tbNhjtqjeyvgGyI8YdRQPQ](https://us1.discourse-cdn.com/flex023/uploads/cardano/original/3X/0/f/0f22a684d981d4c4cbe388d3bd635a3481f7acf3.png)

让我们看看从提交交易到将其插入区块中会发生什么。

当一个节点收到一个新的交易时，它会验证它。所有有效的交易将被插入到内存池中。如果一个节点获得了在一个给定的槽中创建一个认可的输入的权利，它将在新的输入中包括预先验证的交易。一批交易将被创建。你可以把它看作是一种新的区块。被认可的输入（区块）在点对点网络中被分配。除了用于交易的内存池，还有一个用于认可输入的内存池。节点将在专用的内存池中保留多个认可的输入，以便在他们成为槽的领导者的情况下，为生产新的区块做好准备。

节点不仅存储认可的输入，而且在本地通过Mithril证书证明其有效性，Mithril证书是对交易组的有效性的加密证明。

一旦一个新的槽位领导者被选中，它就会从内存池中选择认可的输入，并验证是否有重复消费的情况发生。然后，它将所有选定的认可输入的引用插入到新的区块中。然后，新区块被分发到网络中，其他节点以类似于现在的方式进行验证。在分发新块的过程中，节点可以从他们的内存池中取出已使用的认可输入。

在下图中，你可以看到一个节点如何从点对点网络中接收新的交易和新的认可输入。两者都存储在专用的内存池中。这个节点很幸运，被选为槽的领导者，所以它产生了一个新的区块。

![1*50N2ajjeygsqG0TYefEPvw](https://us1.discourse-cdn.com/flex023/uploads/cardano/original/3X/1/a/1a692bdae7cfe8135b025564612f7eb4c30bcf45.png)

请注意，这个概念将交易的验证和脚本的执行委托给所有的节点，在节点被选为槽位领导者的时候，并没有给它带来这方面的负担。它允许在所有节点等待新的槽位领导者的 "空闲 "时间内，利用节点的计算能力。

交易和脚本基本上一直由网络处理，所以创建一个新的区块是一个相对快速的过程。因为使用了对认可输入的引用，所以区块大小可以保持与现在相同，即使处理的数据量可以大很多倍。换句话说，每个认可的输入可以包含，例如，1000个交易。因此，区块的分布不会因为大小而减慢。然而，与此同时，节点可以访问新区块中引用的所有必要数据。

这个概念可以类似于ZK Rollups和Optimistic Rollups这样的L2解决方案，或其他解决方案，如闪电网络。然而，其优点是没有第二个网络有自己的基础设施。一切都将在Cardano网络内目前的桩池运营商的控制之下。除了更好的性能，用户不会注意到这种变化。没有必要使用桥接或不同的地址，所以用户体验不会受到负面影响。

结论  
在写这篇文章的时候，所有的粉丝都在急切地等待来自IOG团队的更多细节。对我们来说，最大的问题可能是交易和脚本将被存储在哪里以及如何存储，因为区块将只引用数据。因为Cardano的规模会更大，它也会产生更多的数据，需要存储在某个地方。理想的解决方案是通过分片，这样节点就不必存储所有的数据，而只需存储其中的一部分。让我们看看IOG团队如何解决这个问题。

声称区块链的三难问题得到解决还为时过早。然而，Ouroboros Leios将是一个重要的进步，因为网络吞吐量将不受区块大小和区块时间参数的限制。目前还不知道Cardano的可扩展性会有多高，然而，更有可能的是，我们将至少提升一个数量级。以前，有人说区块链是一个缓慢的数据库。Ouroboros Leios使这种说法失效，并可能改写网络共识的历史。
