如何抑制Pact verify执行时产生的:OutputWarning:警告
问题说明
自有模块内置了属性测试、不变量等形式化验证模型,需要借助Pact的形式化验证能力完成校验。执行(verify 'my-module)命令时,由于my-module依赖coin-v4合约,控制台输出如下警告:
:OutputWarning: Unsupported operation: validate-principal: substituting True :OutputWarning: Unsupported operation: is-charset: substituting True
以上警告由依赖的coin合约触发,并非自有合约抛出,需要确认可行的警告抑制方案。
可行处理方案
- 方案一:启动验证时添加依赖警告过滤参数
执行Pact验证命令时追加--omit-deps-warn启动参数,完整命令参考:
该参数会自动过滤所有非当前待验证模块(包括第三方依赖、系统内置依赖合约)抛出的未支持操作替换警告,不会屏蔽自有模块触发的校验警告,也不会影响自有模块的验证结果准确性。pact --omit-deps-warn -e "(verify 'my-module)" - 方案二:本地验证环节为依赖合约补充验证桩
针对警告中提到的validate-principal、is-charset两个暂未被Pact验证器原生支持的函数,可以在本地测试用的coin-v4副本中补充形式化验证桩代码,示例如下:
补充桩代码后,验证器不会再对这两个函数执行默认的True替换逻辑,对应警告会直接消失。注意该操作仅修改本地验证环境的合约副本,不会影响链上正式部署的(defun validate-principal:bool (p:principal) @model [(property (principal-format-valid p))] true) (defun is-charset:bool (input:string target-charset:charset) @model [(property (string-conforms-to-charset input target-charset))] true)coin-v4合约逻辑。
注意:不要直接使用全局关闭所有验证警告的参数处理该问题,全局关闭会同时屏蔽自有模块触发的未支持操作警告,可能遗漏自有代码中的验证逻辑漏洞,导致形式化校验结果不可靠。
内容的提问来源于stack exchange,提问作者trh
相关产品推荐
相关产品推荐

