截止发稿时间为止,Ergo和Cardano均已在eUTXO模型上实现智能合约功能。Ergo于2019年7月1日主网上线之时已实现智能合约功能。Cardano于最近(即2021年9月12日)上线智能合约功能。另据国外媒体报道,许多区块链研究员认为eUTXO相当于计算机系统从8位突进到64位的重大飞跃。Ergo和Cardano两大公链均是这方面的先锋,已组成eUTXO联盟,将助力eUTXO模型释放无限潜能。
介绍
eUTXO模型为智能合约编写者提供了一个强大而灵活的智能合约构建基础。与账户模型不同,基于UTXO的智能合约没有在交易中调用函数以进行状态转换的概念(译注:截止发稿时间为止,Ergo和Cardano已在eUTXO模型上实现智能合约功能。Ergo于2019年7月1日主网上线之时已实现智能合约功能。Cardano于今年9月12日实现智能合约功能。)相反,UTXO使用一种功能性更强的方法,每次花费时,旧的UTXO都会被销毁并创建新的输出。
在这个花费UTXO的过程中,智能合约会执行以验证此交易是否有效。因此,与其将智能合约视为会行动的自治实体,将它们视为保障真实和准确执行的守卫,会有效得到多。
虽然有点违反直觉,但实际上这种区别非常有用。与其让一个试图实现“成为世界计算机”这一不可能目标的系统陷入不可扩展之混乱,我们还不如现实一点,优化智能合约的设计,使其尽可能可扩展且功能强大。
通过明确对智能合约能作什么的期望,我们还可以释放这一能力,即探索其未开发的潜能。这就是eUTXO(扩展未花费交易输出)模型带给我们的好处。
在这篇文章中,我们将涉及许多此类创新,这些创新只有基于UTXO系统上的数据输入概念才有可能实现。
UTXO合约的工作原理
在介绍部分,我们高屋建瓴地快速介绍了UTXO。如果您已经精通该领域固然很好,但是对于大多数读者来说,UTXO非常抽象,让他们费脑力理解它也非常困难。因此,让我们直击基础知识,并从那里逐步了解到新颖的创新。
UTXO指未花费交易输出。在非常高的层级上,eUTXO系统上的每个UTXO(也称为币盒)包括:
1. 里面的资产。
2. 锁定UTXO的智能合约(脚本)。(或P2SH合约的哈希)
3. 保存在币盒中与智能合约相关的链上数据。
在现有区块链(Ergo、Cardano)中,锁定UTXO的智能合约是由地址定义的。因此,如果UTXO A被发送到智能合约地址Y,则UTXO A被智能合约Y锁定。该地址通常是合约的哈希(如是P2SH地址)或合约的序列化形式(如是P2S地址)。
当智能合约地址Y的UTXO被用作交易的输入时,智能合约Y中的代码/逻辑将被执行以确定交易是否有效。在执行期间,智能合约通常会读取:
l UTXO中保存的资产。
l UTXO中的附加数据。
数据:比特币已实现价值达16933.19美元,创历史新高:Glassnode数据显示,比特币已实现价值已经达到16933.19美元,创新历史新高。[2021/3/26 19:20:19]
l 交易中其他输入的资产/数据/合约。
l 当前交易的其他上下文。
智能合约读取上面列出的数据作为输入,如果它执行到True(真)的等值,则交易有效并通过。这是基于UTXO的智能合约使用的核心工作流程。
这意味着每次您希望更新dApp(在UTXO内部)保存的数据时,您须花费原始UTXO(从而销毁它)并在同一地址创建新的UTXO并保存相同资产。然而,这个新的UTXO在其数据方面有一个新值,从而导致从旧数据值到新数据值的状态转换。
每个UTXO在它所附加的数据方面保存自己的个体状态。当数据和资产从一个UTXO移动到另一个UTXO时,它们会经历状态转换,这可能导致它们分裂、累积、被删除或与来自其他UTXO的其他资产/数据一起使用。借助多个输入UTXO和多个输出UTXO的潜力,这些高阶动作允许对更复杂的逻辑进行编码。这最终成为开发dApp的关键基本构建块之一。
基础跨合约互操作性
正如我们所见,花费UTXO是eUTXO智能合约模型的核心。所有执行都发生在UTXO被花费时。
精明的读者可能已经注意到,由于我们将状态(数据)单独附加到每个UTXO,所以每次发生状态转换时,结果都会反映在所述数据中。因此,数据通常被“预处理”,其中它已经存在并包含可被其他dApp/合约参考的信息,而无需任何进一步的执行。
作为示例,预言机数据是其他智能合约可使用的有用信息。以简单直接的方式使用UTXO中保存的此类数据将需要花费UTXO。通过使用UTXO(具有预言机数据)作为输入,您将花费它,从而为您的其他交易输入提供对其数据的访问。当您的dApp要访问锁定在其他智能合约下的UTXO中保存的数据时,就采用上述方法。
尽管如此,“须花费您希望从中读取数据的每个单一UTXO”也有一些大的问题:
l 包含数据的UTXO的智能合约须执行,从而增加计算复杂性/成本。
l UTXO须被花费,这意味着每个区块/时隙(Slot)只有一个交易可使用UTXO数据。
l 由于输出数据UTXO的非必要过度执行和重新创建,交易费用会增加。
l 每个希望通过花费允许读取访问的UTXO须在其智能合约中对逻辑进行直接编码。
l 容易遭到想破坏协议的作恶者的恶意攻击。
l 增加了交易创建和寻找最新UTXO的链下复杂性。
上述负面问题清楚地表明,需要采取新的方法来解决上述问题。在UTXO/dApp内读取数据是一种非常常见的设计模式,在实现非常复杂的协议时将需要这种模式。
数据输入是一种强大的解决方案
幸运的是,Ergo三位核心开发者Alexander Slesarenko、Alex Chepurnoy和Dmitry Meshkov在构建第一个基于UTXO的智能合约区块链时发现了一项非常有用的创新。
不再像原有基于UTXO的区块链那样强制所有交易销毁/花费所有输入,如果引入“只读输入”的概念会怎样?这些将允许任何交易引用当前在UTXO集中的任何其他币盒(UTXO)并读取其中保存的数据,而不会再出现上一部分中列出的任何问题。
这正是数据输入(data-inputs)的意义。
当币盒没有被销毁/花费时,就不会发生智能合约执行。这意味着给定UTXO可以被区块/时隙中的每个单一交易并行读取,因为它们都不消耗数据,而是共享对它的引用。由于没有合约执行,且不需要创建额外输出,交易费用则会减少。这还解决了所有进一步的负面问题,使数据输入成为所有基于UTXO的区块链都应实现的明确设计选择。
这是现实世界中资产的市场价格,DeFi dApp通过数据输入访问它。预言机池的UTXO在交易的数据输入部分中被引用,因此,数据可供我们的DeFi dApp智能合约使用。
在更新DeFi dApp状态的状态转换(花费交易)期间,我们可以看到预言机数据用于执行利率计算。原利率为3.23%,但在读取预言机池数据后,利率更新为3.53%。
这是数据输入在实践中如何工作的基本过程。在上面的示例中,我们仅展示了一个引用预言机池UTXO作为数据输入的单个dApp。然而,潜在成千上万的DeFi dApp可以在同一个区块/时隙内为自己做同样的事情(假设区块链吞吐量可以支持)。
释放数据输入的潜能
既然我们已经讨论了什么是数据输入以及它们在基础层面提供了什么样的好处,让我们浏览一下它们赋予基于UTXO的区块链的一些真正新颖的创新:
1、通过并行化链上计算来扩展dApp
UTXO系统上的数据输入提供的关键新工具之一是并发性和并行性。
与其在同一个合约/UTXO中按顺序执行dApp中的所有操作,不如让协议中的参与者完全在他们自己的UTXO中执行自己的协议部分。这意味着他们不直接依赖其他人的序列操作(如此可能会阻碍其他人操作),从而增加现有给定dApp的吞吐量。
一旦参与者完成了他们的协议部分,由此产生的UTXO就可以被花费或读取。前者允许多个复杂的协议并行执行(这些协议具有提供数据和资产的不同参与者),然后将他们的UTXO消耗回核心协议。例如,这对于众筹或链上锦标赛等情况很有用。对于锦标赛,多个用户并行进行比赛,他们的结果和质押资金在回合结束后被消耗/汇合在一起(这是一个简单但具有解释性的例子)。
另一方面,由于引入了数据输入,后者读取UTXO可以解锁更多的能力。通过读取并行生成的数据,这意味着这些数据的获取成本更低,可以被其他人重复使用,且大家可以同时访问。因此,我们释放了令人印象深刻的潜能,例如在dApp中运行多阶段智能合约子协议,这些子协议完全并行执行,但可以访问彼此的数据,以执行检查/保证一切正常。
此外,由于来自所有并行运行的UTXO的数据都可以通过数据输入访问,因此,我们可以给完全并行化的dApp状态拍“快照”。与其让这些并行化的UTXO被阻塞或在协议的核心状态中等待动作发生以便这些UTXO被进一步花费/使用,它们可以继续自己的协议部分而不会出现任何问题。之后,快照由区块链上的参与者生成,他们由dApp激励/支付以查找所有协议相关UTXO。一旦在区块链上的UTXO集中被找到,这些“累加器”将所有这些UTXO引用为数据输入,并将它们累加到代表协议当前状态的最终值中。
因此,我们在eUTXO区块链上有一个可行的并发模型,它由于数据输入而变得更加强大。
2、UTXO模型中的无缝dApp更新
通过使用代理币盒(Proxy box),数据输入还可以无缝更新多阶段基于UTXO的dApp协议。
代理币盒内保存有协议中给定阶段的计算逻辑,或者可以花费进入的下一阶段的地址,通过使用这种代理币盒,我们有了一个外包UTXO,它为我们提供了更新dApp的能力。
这个外包代理UTXO将实现一个治理方案,该方案允许更新锁定它的底层脚本,和/或其寄存器中包含后续阶段地址的数据。这可以使用多重签名方案、基于代币的投票方案或任何其他治理协议,以便向dApp发布更新。
这为拥有治理代币的dApp(通过治理协议的社区自我更新)打开了大门。如果绝大多数投票将阶段X从合约A更新为合约A',那么这将反映在代理币盒中,因此将影响dApp中所有未来的操作/状态转换。
通过代理币盒实现dApp更新的方式的灵活性要归功于数据输入为我们提供了一个外包UTXO,它包含核心dApp协议本身之外的所有逻辑。
3、高效且去信任的全局上下文声明
由于区块链上的任何人和每个人都可以访问作为数据输入的任何UTXO中存储的数据,因此我们可以去信任地对任何dApp之状态做出有效声明。
这意味着无需开发者通过编码额外逻辑(这会增加计算成本)或不必做任何额外工作来提供明确许可,区块链上的用户就可以在他们自己的合约中访问任何dApp的当前状态。
例如,我们可以声明dApp X的流动性不超过1亿美元,并悬赏任何人来反驳这种说法。这意味着,虽然我们提出这一声明的UTXO存在,但我们可以将其视为所述主张为真的不变量。然后可以将其构建为更复杂协议中的构建块。
声明核验者将不断扫描UTXO集,以验证dApp X的流动性不超过1亿美元。如果dApp X最终达到了这一点(流动性超过1亿美元),那么所有声明核验者都会急于花费声明UTXO以赚取赏金。这将表明我们的声明/不变量被反驳,因此我们有一个交互机制来为我们的dApp提供高效的全局UTXO集声明。
这是一种极其强大的机制,以前在任何其他系统中都不可能实现。它为许多有趣的用例打开了大门,例如无需许可的dApp保险,或关于整个区块链上任何dApp状态的无需许可/去信任预测市场。这些只是具有重大影响的几个有趣的可能性,但毫无疑问,还有更多有待发现。
结论
可以看出,由于基于扩展UTXO(eUTXO)的区块链上数据输入的伟大创新,巨大的潜能已被释放。上文提到的知识点旨在让大家了解一下可能的情况,而无需深入研究技术细节。
Emurgo Research的更多文章将在未来发布,其中将深入介绍所有这些创新,且可能会随着新的发现而增加更多内容。
作者:Robert Kornacki
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。