Cardano的EUTXO输出能带数据吗?地址逻辑与附加数据如何扩展UTXO

能。在Cardano的扩展UTXO(EUTXO)模型中,输出除了携带地址和金额,还可以携带(几乎)任意的数据;同时,地址也不再局限于公钥,而可以包含以脚本形式表达的任意逻辑。按Cardano官方文档的口径,EUTXO正是在这两处对普通UTXO模型做了延伸:一是把“地址”的概念一般化,二是让输出附带自定义数据。

输出带数据、地址含脚本、逻辑可扩展
本文涉及的概念与核对环节。

先看普通UTXO的边界。UTXO模型维护一份所有当前未花费交易输出的记录,技术上称为链状态(chainstate),存放在每个节点的数据目录中。新区块加入链上时,链状态随之更新:区块里列出最新交易,既记录被花费的UTXO,也记录自上次更新以来新建的UTXO。每个节点各存一份完全相同的链状态副本。在这个模型里,地址对应公钥,解锁依赖签名,输出本身只承载地址与值。

EUTXO的第一项扩展落在地址上。官方文档用锁与钥匙的类比来解释:普通UTXO把锁限制为公钥、把钥匙限制为签名;EUTXO的地址则可以包含以脚本形式表达的任意逻辑。节点验证交易时,要判断这笔交易能否把某个输出当作输入使用,就会查找该输出地址所提供的脚本,并在条件满足时执行它。也就是说,解锁条件从“一把私钥对应一个签名”扩展为一段可被验证执行的规则。

第二项扩展落在输出本身:输出可以在地址和值之外携带(几乎)任意数据。官方文档指出,这使脚本能力显著增强,因为脚本可以借输出携带状态信息。两项扩展合起来看,EUTXO既允许输出地址包含复杂逻辑来决定哪些交易能解锁它,也允许所有输出附加自定义数据。验证时的信息上下文由此变得完整:文档说明,脚本在验证地址时可以访问三类信息——输出所携带的数据、正在被验证的交易本身,以及交易为每个输入提供的附加数据(redeemer,常译作“赎回器”)。凭这些信息,脚本足以在相当复杂的情形下给出“是”或“否”的答案。这里只涉及验证机制本身,不展开DApp开发层面的设计细节。

需要说明适用范围与前提。以上表述依据Cardano官方文档对EUTXO的解释,描述的是模型层面的规则,不构成对任何具体版本、参数或时间点的承诺。以下为说明性假设,而非真实链上案例:若某笔交易试图使用一个带脚本地址的输出,按文档口径,节点会查找该地址的脚本并执行,脚本再结合输出数据、交易内容和redeemer作出判断。另外,UTXO的图结构与某些基于账户模型的智能合约链存在根本差异,为账户模型编写的DApp设计模式不能直接照搬到Cardano,需要新的设计模式;这一点只作为模型差异陈述,不涉及开发实践。

回到最初的问题:EUTXO的输出确实能带数据,地址也确实能带逻辑。前者让脚本可以携带状态信息,后者让解锁条件从签名扩展为脚本,两者共同把UTXO从“地址加金额”的记录,扩展为可被脚本按上下文检验的输出。

原始资料

docs.cardano.org

上一篇 转入Cardano自定义代币时,地址里为什么必须同时有ada?