Cardano 使用 UTxO 模型,仅在链上验证小脚本。 以太坊采用基于账户的模型,所有应用逻辑都在智能合约中实现。 让我们探讨这些不同的方法如何影响可扩展性选项。
可扩展性与资源有关
可扩展性是指支持网络运行的计算机资源。 区块链平台是由大量志愿者运营的节点组成的全球去中心化网络。 这些是网络可用的唯一计算资源。 如果要实现高可扩展性,就必须尽可能有效地使用这些资源。 成本和回报的主题可以分开讨论。
平台不仅可以实现价值转移,还可以执行复杂的操作(智能合约)。 在设计平台时,需要考虑如何实现网络的各个功能,使其消耗尽可能少的资源。
区块链网络需要以下资源:
用于执行计算和执行指令的处理能力 (CPU)。 常规交易通常比执行智能合约消耗更少的处理能力。
存储空间对于存储数据和信息非常重要。 有必要永久存储整个区块链。 节点还需要临时存储用于验证交易和执行智能合约的数据(例如,UTxO 集、权益分配、活动证书列表等)。
带宽,是系统中数据传输或通信的速率。
区块链的可扩展性受到上述资源的可用性、效率和利用率的影响。 可扩展的网络可以增加或优化其资源以容纳更多的用户、交易或应用程序,而不会降低其性能和质量。
各个应用程序在处理能力、存储和带宽要求方面可能存在显着差异。 重要的不仅是平台的设计,还有设计和实现应用程序的团队。
网络设计应该允许通过提供更多资源来实现增量可扩展性,但这有其局限性。 区块链网络需要高可扩展性,这意味着每秒能够处理更多交易(TPS),但它们必须保持安全性、去中心化和功能性。 这对于团队来说是一个很大的挑战。
例如,增加区块大小或减少出块时间可以提高TPS,但同时也会增加节点的存储和带宽需求,以及分叉和孤立区块的风险。 增加节点数量可以提高网络的安全性和去中心化性,但同时也会增加共识机制的延迟和复杂性。
团队必须仔细平衡区块链网络的所有重要功能,同时牢记项目的使命和社区的要求。
团队不得为了可扩展性而牺牲安全性和去中心化。 然而,对于某些项目来说,可扩展性可能比去中心化更重要。
社区期望分布式网络带来去中心化、透明性和弹性等好处,但这些功能带来了网络延迟、复杂性和协调等限制,这些都不利于可扩展性。
可扩展性主要受区块链网络的设计(包括智能合约的执行)和记账模型的影响。 我们将处理这两个问题。
在本文中,我们将讨论 Cardano 作为使用 UTxO 模型的平台和用于验证脚本的 Plutus 平台。 以太坊是使用基于账户的模型和以太坊虚拟机(EVM)来执行智能合约的代表性平台。
大多数使用基于账户的模型和 EVM 的平台可能会遇到与以太坊类似的问题。 然而,例如,如果团队设法实现分片,他们的扩展能力可能会比以太坊更好。 本文的目的不是详细比较 SC 平台,而是引起人们对设计差异的关注。
会计模型之间的差异
UTXO模型就像一个验证系统,其中每笔交易输出(UTxO)代表一个可以被其所有者花费的数字资产。
UTxO模型的优点之一是它允许更多的并行性,这意味着交易可以由网络中的不同节点独立并发地处理,只要它们不花费相同的UTxO。
这可以提高网络的可扩展性和吞吐量,因为可以在给定时间内验证和确认更多交易。 UTxO 模型还减少了节点之间同步和协调的需求,因为每个节点只需要跟踪与其交易相关的 UTxO。
UTxO模型简单且安全,因为它不需要复杂的逻辑或智能合约来执行交易行动。 它只涉及简单的算术运算和密码检查来验证交易的有效性和真实性。
UTxO 模型的缺点是它更容易出现碎片,因为它创建了许多小型 UTxO,这些 UTxO 可能分布在不同的地址上(卡尔达诺和比特币用户通常在多个地址中拥有资金)。 这可能会增加交易的数量和规模,因为可能需要更多的输入和输出来满足支出请求。
UTxO 模型还增加了节点的存储和带宽要求,因为它们需要存储和传输与其交易相关的所有 UTxO。
基于账户的模型更像是一个数据库系统,每个账户都有一个可以通过交易更新的余额。 它需要节点之间更多的同步和协调,因为交易需要更新账户的全局状态。
全局状态是网络上所有账户余额和状态的集合,随着时间的推移而增长,需要所有节点进行存储和验证。
基于账户的模型允许较少的并行性,因为交易可能依赖于或影响其他交易的状态。 这会降低网络的可扩展性和吞吐量,因为事务需要按顺序执行,并且不能由不同节点独立或并发处理。
全局状态消耗大量处理能力,因为它需要由每个节点计算和验证。 这尤其适用于复杂或大型交易或复杂智能合约的执行。 我将在下一节中讨论转移代币和执行智能合约。
使用 UTxO 模型的区块链(至少在理论上)可以比基于账户的模型实现更高的可扩展性和吞吐量,因为交易可以并行验证。 使用基于账户的模型的区块链可能由于其全局状态依赖性而面临瓶颈或拥塞。 当然,即使使用基于账户的模型的区块链也可以很好地扩展。 第二层(rollups、侧链等)更适合于此。
并行性有利于可扩展性,因为它可以通过在多个节点之间分配工作负载来提高系统的性能和质量(更好地利用资源,因为节点不需要空闲)。 它可以提高系统的速度、吞吐量和容量,并实现更多功能和可编程性。
然而,并行性也带来了新的挑战,例如协调和同步。 工作负载可以分布到多个节点,但网络必须保证系统的一致性和正确性。 即使交易在不同节点上相互独立地验证,也不能发生双重支出。
基于帐户的模型可能看起来是一种更安全的方法(节点之间的协调和同步较少),但代价是效率低下(很难实现高可扩展性)。 问题是必须解决效率低下的问题,这最终会导致复杂性(分片)。
平台设计差异
当卡尔达诺需要执行智能合约来验证交易时,通常只是简单脚本的验证。 验证器脚本通常只包含几个简单的条件(最好只有一个),其结果只是 True 或 False 返回值(True 值启用 UTxO 支出)。 脚本并不旨在执行复杂的操作,例如调用其他合约或进行复杂的计算。
卡尔达诺上的智能合约由链上(验证器脚本)和链下逻辑组成。 所有复杂的智能合约操作都是离线执行的,不消耗分布式网络资源。 为了执行链下逻辑,需要消耗用户(钱包)或服务器(云)的资源。 应用程序是可组合的,因为团队在交互方面不受平台功能的限制。
这种方法在权力下放的背景下可能有缺点。 卡尔达诺生态系统中的许多去中心化交易所都使用批处理程序。 然而,合约的链下部分的去中心化是可能的。
在多少情况下需要执行智能合约也很重要。 卡尔达诺拥有原生资产,这意味着代币的转移由卡尔达诺协议直接确保,无需执行智能合约(或脚本)。
卡尔达诺的高效之处还在于,可以在一笔交易中将多个代币转移给多个接收者。 这主要节省存储和带宽。 DEX 可以创建一笔包含多个交换的大型交易。
以太坊没有原生资产。 所有代币都是通过智能合约创建的,每次与代币的交互都必须执行智能合约,包括从一个账户到另一个账户的转账。 与本机资产相比,这对网络计算资源的要求更高。
以太坊上的 rt 合约主要包含所有应用逻辑。 因此,它们的执行对网络资源的要求非常高。 与交易一样,智能合约必须按顺序执行。
以太坊所做的几乎所有事情都需要执行智能合约,但转账 ETH 除外。
如果我们谈论如何更好地扩展的可能性,有必要从资源利用率的角度来看待它。 资源总是有限的,目标是最大化其使用意义,利用给定的资源量达到最大的TPS。
向网络添加新资源并不意味着它将得到有效利用。
如果网络中有数百个节点,但一次只有一个节点可以处理一个区块,那么效率就会很低。 向网络添加新的区块生产者节点(新资源)会增加去中心化,但不一定会增加吞吐量和容量(协调甚至可能会更慢)。 这是卡尔达诺(以及比特币和许多其他区块链)的当前状态。
多个节点参与以太坊网络中新区块的创建,但这不是并行化。 一个节点提出一个区块,其他节点预先批准它。 这会增加块的最终确定,但不会增加网络吞吐量和容量。
输入背书者
基于 UTxO 的模型和基于帐户的模型之间的差异可以通过查看输入背书者 (IE) 功能 (Ouroboros Leios) 得到很好的解释。 IE是提高Cardano可扩展性的一种方式。 我们将展示 IE 如何提高 Cardano 的可扩展性,以及为什么在基于账户的模型中无法实现类似的功能。
通过将交易选择与区块生产分离,可以提高卡尔达诺的可扩展性和效率。 在插入区块之前,网络可以对交易进行预处理(预先验证)。 交易可以由输入背书者(基于权益随机选择的节点)选择和背书。 然后,背书的交易通过网络传播并由其他节点处理,然后块生产者将它们捆绑到块中。 这些块仅包含对已背书交易的引用。
请注意,当交易包含在一个块中时,它们会得到来自多个节点的确认。 这提高了交易的最终性。
IE 减少了区块传播时间的延迟和可变性,因为交易可以持续流式传输,而无需等待共识。 这也提高了网络的速度和响应能力。
交易在被包含到区块之前可以由不同的节点并行处理,因此增加了网络的吞吐量和容量。 卡尔达诺将能够处理更多交易(而且它们可能更复杂)。
IE 利用 UTXO 模型,更准确地说是并行性。
IE 与分片不同,分片是另一种扩展区块链网络的技术。 IE 不需要跨分片通信或同步,因为所有节点在将交易包含在块中之前都会处理相同的背书交易。
IE 是分片的补充,因为它可以提高网络每个分片或层的可扩展性和效率。 因此,一旦IE实现,Cardano就可以进行分片。
IE 可能不太容易适用于基于帐户的模型。
每笔交易的验证取决于所有先前交易的验证,即全局状态。 以太坊节点在不知道(未来)全局状态的情况下无法(提前)验证交易。 基于账户的模型需要节点之间更多的同步和协调,因为交易需要更新账户的全局状态。
换句话说,以太坊节点无法获取一部分交易并独立于其他交易来验证它们。 问题在于,全局状态仅在网络中的一个位置(区块生产者)发生变化,所有其他节点都会等待,直到它们可以验证新区块。 所以他们在闲置(他们只能预先批准一个新区块)。
分片
以太坊本来应该有分片,但团队放弃了这个意图,现在更倾向于第二层。 让我们考虑一下基于帐户的模型上的分片是什么样子的。
分片是一种将区块链分成更小的部分(称为分片)的技术,可以并行处理交易。 分片可以提高网络的可扩展性和吞吐量,但它也带来了新的挑战和权衡。
关于全局状态的挑战之一是如何确保跨分片交易的一致性和安全性,这些交易涉及不同分片上的账户或合约。 跨分片交易需要分片之间的协调和通信,这可能会带来延迟和复杂性。
此外,跨分片交易可能面临双花或重新排序攻击的风险,其中恶意行为者试图操纵交易的顺序或有效性。
行动。
每个分片都有自己的全局状态,并且状态必须在所有分片之间同步。 每个分片都可以有自己的独立状态,这意味着一组独特的账户余额和智能合约。 网络的全局状态(所有分片在一起)不会是固定状态。 它必须是一个动态且不断发展的状态,取决于分片之间的相互作用和共识。
如果网络在任何给定时间都处于一种状态,那么它的效率可能会非常低,并且需要大量的通信和同步。
即使以太坊有分片,它仍然会受到与全局状态相关的低效率的影响。 每个分片都有自己的全局状态。 在每个分片中,将独立于其他分片(这是并行化的一种形式)生成一个新块,但效率同样低下。 也就是说,在每一轮中,总是有一个块生产者用交易填充块,而一堆其他节点除了等待这个块以便验证它之外什么也不做。 同步所有分片的全局状态的需要只会使一切变得复杂。 来自不同分片的节点必须相互通信以就有效的全局状态达成一致。 原因是一个网络的用户和资产位于不同的分片中。
在卡尔达诺上实施分片也将是一个巨大的挑战。 但是,它比基于帐户的模型更简单。 一旦输入认可者功能准备就绪,就可以考虑它。
由于天然的并行性,EUTxO 模型在分片实施方面比基于账户的模型具有一些优势。
多个节点可以同时主动参与分片。 IE 会帮忙解决。 交易可以持续流式传输,无需等待共识,因此可以减少跨分片交易的延迟和复杂性。
与基于账户的模型类似,分片需要跨分片的节点之间更多的同步和协调。 然而,IE 将显着改善卡尔达诺上分片的功能,因为它将加速分片内的共识。
节点不仅必须了解其分片(例如其自己的 UTxO 集),而且至少部分了解周围的分片。 可能需要实现某种(动态且不断发展的)网络全局状态(所有分片在一起)。
在基于账户或基于 UTxO 的模型上实现分片并不是一项简单的任务。 虽然对于 UTxO 模型来说这可能更容易(主要归功于并行性),但它肯定不是一个容易的目标。
结论
区块链(和平台)的可扩展性受到记账模型、网络设计、优化和其他因素的影响。 例如,Mithril 将支持创建无状态客户端,这些客户端不存储区块链的整个状态,而仅使用加密证明来验证交易。
在我看来,可扩展性主要是指以最佳方式智能地使用计算资源以及添加资源的能力。 但这有其局限性(与中心化网络不同),团队必须在重要的网络属性之间进行平衡。
即使基于 UTxO 的模型似乎在可扩展性方面更有优势,但它可能不是该平台提供的特定用例的最佳解决方案。
项目的最佳资产是一个能够使项目适应市场条件或社区愿望并提供在特定时刻采用所需的解决方案的团队。 低可扩展性是阻碍更广泛采用的障碍。 有些项目(据称)在第一层有数千 TPS,但它们并未进入前 10 名。