Cardano Plutus 团队完成 Dijkstra 新函数的成本模型
团队为代币值操作新增 65 个测试用例并修正了编译器行为。此外,更新还涵盖 Plutus V4 的编译以及用于检查系统的形式化模型的工具。
By SongMarketCap
Updated:
Plutus 团队已完成 keepPolicies 和 dropPolicies 的成本模型,这两项内建函数正为 Cardano 的 Dijkstra 时代开发。11 月 4 日的更新中,软件工程负责人 Ziyang Liu 还报告了新的测试、规范更新以及编译器修复。
这项工作涉及智能合约如何处理代币数值并计入执行资源。这些是为 Dijkstra 做准备的开发性更改;报告并未宣布在 Cardano 主网启用它们。
新函数按策略过滤代币
这两个函数隶属于 CIP-0168,该提案扩展了 BuiltinValue 上的操作,BuiltinValue 是在 Plutus 智能合约中用于表示资产数量的数据类型。内建函数提供由执行系统直接支持的操作。
Cardano 将原生代币按与其铸造规则关联的策略标识进行分组。keepPolicies 保留与所选标识关联的值的部分,而 dropPolicies 则将其移除。处理多组代币的合约可以使用这些函数,将与特定检查相关的资产隔离出来。
合并的更改将两者可接受的策略列表限制为最多 256 个标识。其完成的成本模型定义了如何以 CPU 与内存单位计量执行开销,这些构成智能合约的执行预算的一部分。
测试与编译器修复针对程序行为
团队为新的 Value 内建函数新增了 65 个一致性用例。这些测试将实现的输出与针对给定输入的预期结果进行对比。新函数与 multiIndexArray 也已记录在 Plutus Core 规范中,为其行为提供书面参考。
另一项修正涉及常量折叠,这是一种在编译阶段计算合适表达式而非留待执行阶段的优化。先前受影响的编译器 pass 可能以不正确的方式简化某些表达式,从而丢弃应当失败的计算。此次修复在不满足简化所需条件时保留这些计算。
该更新还更正了 Plutus V4 上下文类型的编译,这些类型描述在验证交易时脚本可用的信息。此外,lookupCoin 与 valueContains 的内存模型已与现有成本模型参数对齐。
[NEWSBREAK]
随着实现推进,形式化检查扩展
团队引入了一款工具,可基于现有一致性套件在 Agda 中生成类型检查测试。Agda 是一种编程语言与证明助理,用于表达形式化模型并检查其一致性。该工具使已用于实现的测试用例也能支持在该形式化环境中的检查。
新的内建函数也已加入元理论,即用于推理 Plutus 程序的数学描述。它们目前以公设形式出现,意味着在后续实现工作继续推进的同时,模型假定其按规范行为。另一项已合并的更改扩展了一款工具,用于检查某项编译器优化是否能保持程序行为。
剩余工作包括在形式化模型中实现数组与字节串,纠正另一项编译器优化的认证,以及改进执行 Plutus Core 程序的 CEK 机器。这些事项在 11 月 4 日的报告中仍被列为进行中。