理解 Cardano UTxO 模型中 Extended 的含义

https://cexplorer.io/article/understanding-the-meaning-of-extended-in-cardano-s-utxo-model

比特币采用UTxO记账模型。 对于 IOG 团队来说,这个模型不足以完成 Cardano 任务,因此他们对其进行了扩展。 Cardano 使用扩展 UTxO 模型。 在本文中,我们将解释“扩展”的含义。

不仅仅是付款
比特币网络是为支付而设计的。 比特币的UTxO模型的可编程性表达能力有限。 Cardano 是一个智能合约平台,允许开发人员进行更广泛的与价值相关的操作,即使用 UTxO。

UTxO 模型的扩展涉及以下属性:

维持合约状态的能力。
能够为一系列交易重用合约代码。 该团队称之为连续性。
支持多资产的能力。
能够支持智能合约(脚本)更高的表达能力和可编程性。
比特币无法提供这些属性,或者只能在非常有限的程度上提供这些属性。 比特币被设计为一个交易网络,本质上只是验证密钥以验证支出条件。 比特币不适合更复杂的金融操作,即智能合约的执行。

比特币UTxO和脚本的能力
在比特币中,地址是通过哈希公钥生成的。 此过程称为“锁定公钥”。 当有人将 BTC 发送到某个地址时,他们实际上是将其锁定到与该地址关联的公钥。

要使用锁定到特定地址的 BTC,该地址的所有者必须通过提供数字签名来解锁它。 该签名是使用与地址的公钥关联的私钥生成的。 使用私钥签署交易的行为有效地解锁了 BTC,从而可以使用它。

在比特币中,地址可以与脚本关联,但以特定的方式关联。 比特币有几种不同的脚本,其中最流行的是支付到公钥哈希(P2PKH)。

比特币脚本(代码/小程序)嵌入在交易的输入和输出部分。 当您创建交易时,您实际上是在编写脚本(操作码规定了支出条件)。 要部署脚本,您可以将其合并到比特币交易中。

您通常会遇到这些脚本:

scriptPubKey 是一个锁定脚本,需要满足某些条件才能让接收者花费 BTC
scriptSig 是解锁脚本,满足 scriptPubKey 输出上设置的条件,并且允许使用 BTC
脚本是用脚本编写的。 比特币脚本是一种基于堆栈的编程语言,用于构建比特币交易。 比特币脚本缺乏常见编程语言的许多功能。 它不是图灵完备的,这意味着它缺乏一些逻辑功能。

因此,虽然比特币地址可以与脚本相关联,但它们通常被锁定到特定的公钥,并且不包含(智能)脚本形式的任意逻辑。 脚本主要用于密钥验证。

脚本不会单独存储在区块链上以供重复使用。 相反,每笔交易都包含自己的脚本。

因此,虽然您当然可以在多个事务中使用相同的脚本,但脚本的每个实例都作为其各自事务的一部分单独存储。 没有一种机制可以将脚本存储在区块链上一次,然后在多个交易中引用它。

比特币脚本没有状态的概念。 所有需要的信息都包含在锁定和解锁脚本中。 这意味着脚本是无状态的,并且在执行之间不存储任何信息。 脚本几乎专门用于锁定和解锁 BTC。

在比特币中,UTxO 用于存储和交易 BTC 价值。 每个 UTxO 代表已发送到特定地址的一定数量的 BTC。 不可能创建一个新的 UTxO(仅)代表具有自己的值的自定义令牌。

您可能听说过比特币可以在第一层拥有代币。 第一次出现了所谓的彩色硬币。 它是将特定的聪与自定义代币相关联。 这有效地将它们变成了可以用来代表任何东西的代币。 应该指出的是,这些并不是真正意义上的代币。

可能有一个包含 1000 聪的 UTXO,其中 10 聪被着色为代币 X。如果您只想发送一个代币 X,则必须创建一个新的 UTxO。 这个概念不可行。

序数的概念有点类似于彩色硬币的概念,但有一些关键的区别。 序数是经过排序并刻有一条信息(例如文本或图像)的聪。 这条信息使 sat 变得独一无二,并将其转变为事实上的不可替代代币(NFT)。

比特币可以简单地描述为单一资产账本。 比特币脚本是无状态的,主要用于验证签名(密钥)。 脚本在交易中传输,无法存储在区块链中并重复使用。

扩展的 UTxO 模型
在扩展 UTxO 模型中,“地址”的概念得到了概括。 EUTxO 模型中的地址可以(间接)包含脚本形式的任意逻辑,而不是将锁限制为公钥和签名密钥。

这意味着卡尔达诺中的地址不仅仅是公钥的哈希版本,还可以通过地址中包含的脚本哈希与脚本关联。 这允许更复杂的交易和交互,例如智能合约所需的交易和交互。

地址可以包含脚本的哈希值,用于识别已存储在区块链中的脚本。

因此,在卡尔达诺中,交易既可以包含脚本也可以引用脚本。 比特币无法引用脚本。 因此,脚本必须始终包含在事务中。

卡尔达诺可以参考脚本。 这些引用的脚本附加到输出,可用于满足验证期间的脚本要求。 这意味着使用通用脚本的交易可以小得多。 使用该脚本的事务根本不需要提供它,只要它引用包含该脚本的输出即可。

参考脚本的概念与卡尔达诺扩展 UTXO 模型的连续性有关。 合约连续性确保相同的合约代码可以用于一系列交易。

Plutus 平台允许开发人员编写与卡尔达诺区块链交互的应用程序(脚本)。 Plutus 编程语言是从 Haskell 发展而来的。 Plutus 脚本是实现具有 True 或 False 输出的纯函数的代码片段。 它们用于验证操作。

在扩展 UTxO 模型中,验证器脚本传递三个参数:

数据:这是附加到脚本锁定的输出 UTxO 的一段数据。 这通常用于携带状态。
救赎者:这是附加到支出输入UTxO的一段数据。 这通常用于从支出者向脚本提供输入。
上下文:这是一段数据,表示有关支出交易的信息。 这用于对输出 UTxO 的使用方式做出断言。
Cardano 的 EUTXO 模型允许开发人员通过使用这些原语编写有状态脚本。

Datum 可用于跟踪脚本的状态。 数据在使用来自脚本地址的输出 UTxO 以及将其发送到脚本地址方面起着至关重要的作用。 因此,在卡尔达诺中,您可以使用数据将状态与脚本关联起来。

Plutus 脚本的表现力和可编程性允许开发人员实现广泛的逻辑。 例如,一个简单的验证器脚本可以检查特定密钥是否签署了支出交易(这类似于比特币脚本)。 然而,通过一些仔细的扩展,开发人员可以使用脚本来表达更复杂的逻辑。

Datum 和 Redeemer 的使用进一步增强了这些脚本的功能,使它们能够携带状态并接受来自消费者的输入。 该脚本可以获取 Datum 和 Redeemer 值,执行计算或比较,然后输出一个布尔值(决定花费的可能性)。

卡尔达诺的分类账旨在支持多种资产。 它被称为多资产分类账。 它允许卡尔达诺使用不止一种类型的资产(原生 ADA 币)进行记账或交易。

当铸造代币时,就会创建新的 UTxO。 当用户铸造代币时,他们本质上是在创建持有这些代币的新 UTxO。 然后,这些 UTxO 可以用于交易,就像使用 ADA 币的 UTxO 一样。

Plutus 脚本可以像 ADA 一样使用代币。

卡尔达诺可以简单地描述为一个多资产账本。 铸造代币是新的 UTxO,与 ADA 币具有相似的属性。 Plutus 脚本是有状态的。 脚本与 Datum、Redeemer 和事务上下文配合使用,允许开发人员创建更复杂的逻辑(超出密钥验证)。 脚本可以存储在账本中并重复引用。

结论
UTxO模型还有一个文中未提及的重要含义。 即为了更高的可扩展性的可能性。 UTxO 本质上是独立于周围环境的对象。 与 UTxO 的交易可以被验证,而与其他 UTxO 无关(即基本上与其他用户的交易无关)。 换句话说,UTxO模型支持的另一个特性是并行性。 此功能将被称为输入背书器的增强功能所利用。

比特币 UTxO 和卡尔达诺 UTxO 之间的最大区别可能是添加 Datum(即任意数据)的能力。 尽管所描述的许多差异在某种程度上与 UTxO 有关,但它们的不同主要是由于两个项目的不同理念和设计造成的。 如果可以将数据(Datum)添加到比特币UTxO中,则有必要进一步扩展比特币脚本。 如果可以比较,存储的数据会更有用.某些东西,最好是一些交易输入(救赎者)。 铸造新 UTxO 的能力是比特币故意没有的功能。 此类考虑可以进一步继续。

区块链由多个组件组成,这些组件的属性构成一个整体。 UTxO 只是这些组件之一。 会计模型潜力的发挥取决于其他组成部分。 扩展 UTxO 的潜力与 Plutus 平台、交易、账本功能等有关。