DSL1.当事人生成规则
笔记软件在2023/3/29 20:49:12推送该笔记
两种类型语法规则
// 变量定义
BtPerson:
'person' name=ID
// //当事人的属性可以有一般属性和资产属性
(attributes+=Attribute|personAsset+=PersonAsset)*;
单行
ConstructorOrInit.Init.BtPerson.push({
"name": element.name,
"model":"Single",
"value": generateExpression(element.value, ctx)
})
多行
ConstructorOrInit.Constructor.BtPerson.push({
"name": element.name,
"model":"multi",
"value": generateExpression(element.value, ctx)
})
生成规则
-
如果当事人为单行规则(无属性),采用定义一个{id:address}的当事人结构体
-
如果当事人为多行规则(有属性),为当事人进行构造函数定义,在多行规则里,当事人的初始化或赋值,只能选择一种
-
不论是单行还是多行都会
-
生成
map(address=>number) pendingReturns
变量支持用户实现退款 (提供_asyncWithdraw(person,money)函数) -
如果当事人被初始化,为该当事人创建实例(只有合约创建者可以进行初始化)
-
如果当事人被赋值
- 如果是被赋值为_caller或_anyone,那么指代将_caller = msg.sender(没有必要)
- 其他情况,在构造函数内部,进行构造说明
-
如果当事人有资产存在,为该资产添加owner属性,并对该资产的所有变量进行初始化操作,且仅允许该当事人对资产进行添加和更改
-
标准语法:
当事人:person name [Attribute] [PersonAsset]