You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在形式化验证模型中为conserves-mass属性排除创世铸造函数?

问题:将创世铸造函数排除在conserves-mass属性校验范围外

需求说明

我需要在形式化验证模型中,把创世铸造相关的函数(比如示例里的transfer-create)排除在conserves-mass属性的校验范围之外。

现有代码示例

(module account GOVERNANCE 
@doc "Account doc"  
@model
[ (defproperty conserves-mass
    (= (column-delta ledger 'balance ) 0.0))]
...
(defun transfer-create:string
    ( sender:string
      receiver:string
      receiver-guard:guard
      amount:decimal )
@doc "create account when transfer doc"
@model [ (property conserves-mass)] <- 我想在这里排除铸造相关逻辑

...

参考示例困惑

我看到过一段使用except逻辑的代码,但无法理解其工作机制,也没能成功实现,且官方文档中无相关说明:

@model
[
...
 ; every function should conserve mass except for the admin fund-account,
 ; and debit / credit which should be private
 (property conserves-mass
   {'except: [fund-account, debit, credit]})
...
]

解决方案

正确的实现方式是在模块级的@model定义中使用except参数,而非在函数级@model中添加属性,具体操作如下:

修改模块级的defproperty定义,将需要排除的创世铸造函数(如transfer-create)加入except列表:

(module account GOVERNANCE 
@doc "Account doc"  
@model
[ (defproperty conserves-mass
    (= (column-delta ledger 'balance ) 0.0)
    {'except: [transfer-create]})] ; 在此添加需排除的函数名
...
(defun transfer-create:string
    ( sender:string
      receiver:string
      receiver-guard:guard
      amount:decimal )
@doc "create account when transfer doc"
@model [] ; 移除此处的conserves-mass属性,或留空即可

...

逻辑说明

  • 模块级的defproperty默认会对所有带@model注解的函数生效
  • {'except: [函数名列表]}参数用于指定无需应用该属性校验的函数
  • 如果在函数级@model中手动添加(property conserves-mass),会覆盖模块级的排除规则,因此必须移除函数级的该属性

内容的提问来源于stack exchange,提问作者slaanesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 09:20:34