智能合约语⾔(eDSL)——合约函数形式
在智能合约中,⼀般是需要两类函数。初始化函数——init,调⽤合约——invoke;
初始化函数主要作⽤是为了初始化当前合约的状态,⼀般在创建合约的时候执⾏⼀次;
调⽤函数是在合约初始化之后,⽤户⽤来获取或者更新合约的函数;对于获取状态的函数,其实有两种⽅式,
1、⽤户直接获取节点本地的数据库,即不上链的操作;
2、⽤户获取状态的交易,通过共识,在链上留痕;
实现:
我们还是使⽤rust的过程宏,来实现;将普通函数标记为我们合约的函数;
形式:
参数与返回值
1#[derive(Serialize, SchemaType)]
2struct Address {
3 address : AccountAddress,
4}
5
6#[derive(Serialize, SchemaType)]
7struct Balance {
8 balance: u64,
9}
init函数格式
#[init(contract="erc20", parameter="Address", result="Balance", payable, event)]enum函数
invoke函数格式
#[invoke(contract="erc20",name="balanceof", parameter="Address", result="Balance", payable, event)]
属性:
这两种函数标记,使⽤⼀样的属性;只是init函数不需要重新给他设置函数名称。
contract:函数所属的合约名称;
name:函数名称,只有receive函数有;
parameter:函数的参数,⼀般是struct、enum类型的名称;
result:函数的返回值,⼀般是struct类型的名称;
payable:该函数执⾏时,是否可以转⼊;
event:使能函数的event功能;
通过rust的过程宏,我们就可以将rust语⾔进⾏改造,形成我们⾃⼰的智能合约语⾔规范,如果有新的需求你可以继续添加新的属性与功能;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论