Cardano Plutus 提案旨在降低脚本执行开销
CIP-0194 为 Untyped Plutus Core 提出一种新的 Match 操作,有望降低读取复杂脚本 Data 的开销。第二项提案 CIP-0195 则为即将到来的 Plutus V4 ledger API 定义 Data 编码模型。
By SongMarketCap
Cardano 的 Plutus 开发流程新增了两项提案,聚焦智能合约如何处理 ledger 数据。CIP-0194 为 UPLC 引入内置模式匹配,而 CIP-0195 则规定 Plutus V4 中诸如 ScriptContext 和 TxInfo 等类型应如何编码为 Data。这两项提案仍在审查中。
CIP-0194 已具备可运行的实现原型,早期本地基准测试显示,在若干数据访问模式下显著降低了 CEK 执行时间。上述测量并非按链上执行单元校准,且生产环境的成本参数尚未最终确定。
CIP-0194 为 Plutus Core 增添模式匹配
Cardano 智能合约经常检查结构化 Data,包括 ScriptContext 中的交易信息。现有 UPLC 程序可通过 unConstrData、chooseData 等函数以及列表操作来拆解这些结构,而每一步都会在 CEK 求值器内增加工作量。
CIP-0194 提议引入新的 Match 操作,可直接检查嵌套值,并仅捕获脚本所需的字段。其适用于整数、字节串、列表、二元组以及结构化 Data,而现有的 Case 机制仍可用于更简单的操作。
该变更主要面向需要反复检查交易上下文的验证器,包括更复杂的 DeFi、交易与借贷逻辑。
Plutus 代码库中已存在可用原型。用于生产仍需符合性测试、校准后的成本参数、ledger 支持以及一次 Cardano 节点发布。
早期基准测试显示 CEK 执行时间更低
该 CIP 包含本地基准测试,将 Match 与现有的 Data 拆解方法进行对比。
在检索单个深度嵌套的值时,测试场景下测得的 CEK 执行速度快了 6.38 到 13.74 倍。一个包含 64 层嵌套 Data 的测试中,使用 Match 的记录为 2.297 微秒,而现有方法为 31.068 微秒。
当脚本需要捕获多个值时,性能差距缩小,依据结构与基线方法不同,测试中的改进约在 1.67 到 6.10 倍之间。
上述数值衡量的是本地 CEK 的壁钟性能,而非最终的 Cardano 执行单元。成本模型仍未校准。该提案中的初步 CPU 与内存预算在不同负载下提升了 10% 到 90%,在典型的脚本上下文场景下,初始参数下的改进大致为 40% 到 60%。
该提案将 Match 归属为 Plutus Core 语言版本 1.2.0 的一部分,脚本在主网使用之前,需要 ledger 支持并通过 Cardano 的硬分叉流程激活。
CIP-0195 定义 Plutus V4 的 Data 模型
CIP-0195 则从 Plutus 堆栈的另一侧入手,规定 Plutus V4 ledger API 类型应如何表示为 Data。
该提案涵盖 V4 的 ScriptContext 及相关结构,包括扩展后的 TxInfo。它取代了早期 Plutus 版本中较为非正式的做法,当时开发者和替代工具往往需要从实现代码中推导编码行为,而非依据专门的规范。
拟议的 V4 设计继续使用列表进行数据类型编码。CIP-0195 认为,较新的 UPLC 操作使列表访问更高效,同时避免更广泛的基于数组的模型所需的额外构造器与 ledger 集成。
CIP-0194 与 CIP-0195 可各自独立推进,但它们共同针对下一代 Plutus 如何构造与访问 ledger 数据进行规范。若获采纳,CIP-0195 将标准化 Plutus V4 暴露该数据的方式,而 CIP-0194 则为验证器提供更低开销的检查手段。两者在进入 Cardano 主网之前,仍需获得规范批准、完成成本模型校准并集成至 ledger。