IOG团队并不关心是熊市还是牛市,并不断改进Cardano协议。重要的是长期愿景。这样一来,团队就能提供社区所期望的东西。让我们来看看期待已久的Vasil升级给Cardano带来了什么。
更新是未来的趋势
任何数字技术都离不开一个不时修复错误并带来重大改进的团队。区块链是一种技术,它需要被改进,因为只有提高效率、新的功能和减少用户的成本,才能带来更广泛的采用的长期成功。对于目前的IT巨头和区块链技术来说都是如此,因为区块链技术在10多年前来到这个世界,效率非常低。如果一个区块链网络有一天能被每天数以亿计的用户使用,持续的创新是必不可少的。
Cardano的设计是为了能够不间断地进行定期创新。Cardano是一个全球网络,所以不可能暂时关闭它来更新网络。该团队已经找到一种方法,在不影响网络使用的情况下进行更新。他们创建了一个硬分叉组合器工具来做到这一点。硬分叉组合器允许在不限制使用的情况下部署更新。用户甚至不会注意到这些改进已经被部署。然而,他们可以立即开始使用它们。
Vasil的升级给Cardano协议带来了重大的性能和能力提升。该升级包含在Cardano节点1.35.0版本中,网络正在为此做准备。Vasil升级中最重要的改进主要是Diffusion pipelining,这将影响更好的可扩展性。还有几个CIP(Cardano改进建议),与Plutus平台有关。
扩散管道化
扩散管道化简化了新产生的区块信息在点对点网络中的参与者之间的传播。这一改进允许在区块在一个节点上被完全验证之前分发区块信息。这使得区块验证和分发的并行化成为可能。
通过增加区块大小和减少创建新区块的时间间隔,可以使网络的吞吐量更有效率。更多的信息,例如交易,可以被插入到一个更大的区块中。区块创建的频率越高,在特定时间内处理的用户请求就越多。
由于互联网的能力,增加区块大小和减少区块时间都有限制。Cardano是一个全球网络,节点遍布世界各地。如果一个节点在例如欧洲创建了一个新的区块,该区块必须逐渐通过其他节点到达亚洲、南美洲和北美洲、澳大利亚和其他地方。每个单独的节点都要验证信息,然后才能进一步分发给其同伴。这意味着,在区块到达网络中至少95%的节点之前,会经过一些被称为Delay的时间。这个时间在Cardano网络中最多为5秒。设置为5秒的延迟是保证一个大小不超过2MB的区块的传播所需的时间。
显然,区块越大,验证它的时间就越长(CPU时间),因此分发它的时间就越长。在Cardano网络中,不仅需要验证交易,还需要验证Plutus脚本。验证脚本的计算量比验证交易的计算量要大。随着区块大小的增长,其中的脚本数量可能会增长,所以验证整个区块的时间也会增长。
请注意,区块时间必须设置为比延迟更长的时间,以便有足够的余地在网络中传播区块。在Cardano的例子中,区块时间现在被设置为20秒。如果分发区块的时间可以减少,区块时间也可以逐渐减少。这将导致更高的吞吐量。
区块的验证究竟是如何进行的?为了简单起见,你可以把每个节点看成是有三个层。最底层是网络层,它在互联网上接收和发送数据。网络层可以接收和发送块。一个区块可以被分部分处理,即作为区块头和区块体。第二层是共识层。在这一层,对块头和块体进行验证。验证区块主体比验证区块头的计算量更大。第三层是区块链,它接收有效的区块。你可以把它看作是信息从底层到顶层的移动。只有有效的区块才能进入区块链。无效的区块会被共识抛弃,所以它们不会被储存在区块链中,也不会进一步分布到网络中。
请注意,每个区块验证器必须同时验证区块头和区块体,然后才能重新分配区块。将一个区块分配到整个网络所需的总时间将通过将一个区块验证器上的平均验证时间乘以网络中的跳数来获得。
扩散管道将通过让区块验证器在验证所含数据之前向网络发送区块主体来加快网络中的区块分布。区块验证器只验证头和体之间的参考,如果它是OK的,它立即传播区块。验证器必须验证它已经收到了属于收到的头的块。与验证主体的其他部分相比,验证一个引用(头的主体哈希)只需要很短的时间。这意味着向整个网络分发块的总预算减少了单个跳数验证块体的时间。换句话说,区块主体的验证和区块分配是同时进行的。扩散流水线提高了数据可用性的速度。
请注意,只有区块生产者(槽头)在开始向网络分发时验证了区块主体。所有其他节点在只验证了区块头和区块体中的引用后分发整个区块。
不完整的区块不会在网络中分发,因为如果区块验证器没有收到带有正确引用的区块体,它将丢弃整个区块。如果区块主体中的引用是正确的,但随后对主体的验证失败,整个区块会被诚实的节点丢弃。
请注意,网络层面的变化对共识没有重大影响。所有接受区块并将其添加到区块链的必要验证都以升级前的方式进行。扩散管道增加了区块在网络中的传播速度,为增加区块大小和潜在地减少区块时间提供了机会。
让我们计算一下,如果头验证需要50毫秒,体验证需要250毫秒,那么区块从区块生产者通过4个区块验证器传播的速度有多大。我们将把块的生产算在总时间内,因为生产者必须验证主体。如果没有扩散管道,整个块的验证在每个节点上需要300毫秒。因此,从区块生产者到第四个区块验证者的传播时间需要5 * 300 ms,即1500 ms(1.5 s)。
使用扩散流水线,验证一个区块只需要验证标题(50毫秒)和验证标题和区块主体之间的参考,算5毫秒。只需要55毫秒,区块就能得到充分的验证并分发到对等体。总的区块分发时间将需要300+(4*55),即520毫秒。
下表显示了通过升级可以实现的改进。最后一行显示的是异步验证(AV)的数据。AV不是Vasil升级的一部分,是另一个可能的改进,它扩展了Diffusion流水线。
与Plutus平台有关的CIPs
让我们从CIP-32开始,它提到了Inline Datums。扩展UTXO允许用户选择性地将类似JSON格式的任意用户数据添加到UTXO中。这种数据被称为Datum。Datum将允许开发者赋予脚本类似状态的功能。用户数据可以被看作是一个本地的脚本状态。这种状态只具有本地的有效性,因为它与特定的UTXO相关。
目前,Datum的实现方式是将Datum的哈希值附加到输出上,并要求支出交易提供实际的Datum。来自支出交易的数据通过做一个哈希值来验证,这个哈希值必须与存储在Datum中的哈希值相匹配。
其优点是节省了区块链的空间,因为Datum只是数据的哈希值,数据可以是任意大的。缺点是,数据的哈希值与Datum的哈希值相同,必须在交易中提供。让我们补充一下,在理论上,数据可以是,例如,只是一个短的数字,可以比散列值小。在这种情况下,将数据直接放在Datum中比放在哈希中更方便。
一个Datum包含代表一些应用逻辑的数据。Datum中的数据是由Plutus交易创造输出的一方插入的。花费方必须了解这个应用逻辑,即必须了解Datum的内容,如果不与创建输出的一方沟通,这是不可能的。这种沟通必须在链外进行,或者通过另一种方式在链上进行。这对支出方可能是不方便的。
CIP-32建议Datum可以直接包含数据(内联数据)或数据的哈希值,就像现在这样。Plutus交易允许你选择其中一种方式。
这种新的Datum方法将使dApp开发者的工作更容易,特别是当与CIP-31结合时。
CIP-31提议创建一种新的输入,即参考输入,这将允许你在无需花费的情况下查看输出。这将允许访问以Datums形式存储在区块链中的信息,而不必花费和重新创建与Datums相关的UTXO。此外,它将有可能检查与参考输入有关的价值。
Datum本质上提供了一种在区块链上存储数据和访问数据的方式。你可以把它看成是一个信息源。不幸的是,目前对Datum中的数据的访问在很多方面都受到限制。为了访问和使用信息,你必须花费一个与Datum相关的输出。
应用程序可能需要使用这些信息,如果它想保留这些信息供将来使用,它必须用相同的信息创建一个新的输出。缺点是新的输出被创建,所以如果其他人想访问该信息,他们不能使用旧的输出,而是使用新创建的输出。然而,新的输出是在新的区块被添加后创建的。在实践中,这意味着一些应用被限制在每个块的一个操作。
此外,如果一方想要查看Datum中的信息,并被迫花费一个输出,那么就意味着必须满足花费条件,并且该方必须考虑如何处理这些资金。这是不方便的,最重要的是昂贵的。
CIP-31将改变它。交易的作者将输入指定为支出输入或参考输入。参考输入是一个交易输入,它和正常情况下的特定交易输出相联系,只是它参考输出而不是支出。
换句话说,你现在必须支付交易费才能从Datum获得信息,因为有必要花费输出。在Vasil升级后,你几乎可以在要花费其他UTXO的交易背景下免费获得信息。请注意,即使一个交易包含一个输入参考,它仍然必须花费至少一个输出。所以必须始终支付交易费用。
在平衡交易时,即在检查输入上的值是否与交易的输出上的值相同时,参考输出不被考虑在内。这意味着,参考输出的支出条件根本不被检查。参考输出仍然保留在活动的UTXO集中,供将来使用。重要的是,参考输入对脚本是可见的,所以这些参考输入的数据Datum可以作为脚本决策逻辑的输入。
脚本通过脚本上下文接收关于交易的信息。新的是,它收到了额外的信息,即可以包括参考输入的列表。这样,脚本将知道如何正确地与参考输入一起工作。
该交易有一个计划要花费的UTXO作为输入,同时也可以有一个参考输入。参考输入可以在执行Plutus脚本的过程中使用。在验证并将交易纳入区块后,UTXO被支出,但参考输入保持不变,之后可由另一方访问。因此,Datum中的信息对多个用户来说可以在较长的时间内使用。
例如,应用程序可以检查状态(Datum,或锁定值),而不必消耗输出。链上数据提供者可以在Datum中存储任意的数据,其他脚本(应用程序)可以访问这些数据。在区块链上存储数据只需支付一次费用,然后就可以让其他人使用。
CIP-33使用CIP-31和CIP-32,允许将脚本附加到输出。CIP-33引入了参考脚本,可用于满足验证期间的脚本要求。
每次要使用脚本时,要求使用脚本的事务必须提供整个脚本作为事务的一部分。这使链子变得臃肿,增加了用户的费用。如果一个交易使用多个脚本,它可能会遇到最大尺寸限制的问题。
参考输入和内联Datum通过允许脚本存储在区块链中来解决这个问题。然后它可以被反复引用。一个想花UTXO的消费交易可以引用脚本,用于验证。这意味着使用该脚本的交易不需要携带脚本的内容。它只需要引用该脚本所在的输出。
当一个事务被验证并且需要提供与脚本哈希对应的脚本时,除了事务本身提供的脚本外,还将考虑来自事务的输入所引用的输出的任何参考脚本。换句话说,将使用对脚本的引用(已经存储在区块链中)。
有了这个增强功能,应用程序就不必在每次要使用时频繁发送脚本。脚本将被存储在链上,可重复用于多个UTXO。同一个脚本可以被多方使用。
总结
我们已经描述了Vasil升级将带来的主要改进。事实上,这次升级还将包括其他几个小的改进。增加可扩展性和改进Plutus平台为开发者带来了新的可能性,也为用户带来了好处。团队已经在努力设计新的增强功能。欢迎使用Cexplorer 1,它已经为Vasil的升级做好了准备。
这次升级是为了纪念已故的Vasil St. Dabov,他是Cardano的大使,也是项目的忠实支持者,不幸在2021年去世了。