Cardano提议移除Plutus作用域检查
CIP-0205将移除在脚本执行前进行的一项单独检查,通过一项需要新语言版本和硬分叉的更改来减少验证工作。
By SongMarketCap
Updated:
Cardano提案CIP-0205将取消为执行Plutus脚本做准备所用的一个步骤。作者Jacco Krijnen提议在执行期间处理未绑定变量错误,而不是事先检查整个程序。该提案于9月25日提交,目前仍在审查中。
准备Plutus脚本的成本
在执行脚本之前,节点会检查其变量是否在程序中被正确定义。此过程称为作用域检查,发生在交易验证的第二阶段。
该提案引用的早期基准测试发现,该检查约占脚本准备时间的20%,其中包括解码和版本检查。在完整验证的基准测试中,它约占总验证时间的3%。这些数字衡量的是该检查在那些测试工作负载中的处理时间占比。
移除该步骤将减少符合条件脚本的处理工作。提案称,由此导致的交易手续费是否下降取决于随后对费用参数的调整。
Plutus将如何处理变量错误
Plutus Core是用于在Cardano上执行智能合约脚本的语言。其执行引擎CEK机器已经能够处理尝试使用未绑定值的变量的情况。
在该提案的评审讨论中,开发者Seungheon Oh指出,CEK并不依赖预先的作用域检查。尝试求值未绑定变量会导致一次普通的执行失败。
根据拟议规则,如果未绑定变量只出现在从未被执行的代码中,程序仍可能成功。作用域正确的程序将保持相同的执行结果。
提案指出,包括Aiken、Plinth和Plutarch在内的开发语言,已经在脚本上链之前通过其类型检查器强制执行变量作用域。
新的语言版本与硬分叉
该草案将此更改绑定到Plutus Core语言版本1.2.0,这将需要一次硬分叉。实施将包括对规范、执行代码、形式化模型和一致性测试的更新。
该提案于9月29日获得编号CIP-0205。CIP编辑Robert Phair表示,鉴于更改范围广泛,在评审继续之前应在各工作组中更广泛传播。
根据当前草案,使用语言版本1.0.0和1.1.0的现有脚本将保持其行为不变。激活后,新声明使用1.2.0版本的脚本可在没有单独的预先作用域检查的情况下执行。