智能合约语言(eDSL)—— 合约函数形式

       

在智能合约中,一般是需要两类函数。初始化函数——init,调用合约——invoke;

初始化函数主要作用是为了初始化当前合约的状态,一般在创建合约的时候执行一次;

调用函数是在合约初始化之后,用户用来获取或者更新合约的函数;对于获取状态的函数,其实有两种方式,

1、用户直接获取节点本地的数据库,即不上链的操作;2、用户获取状态的交易,通过共识,在链上留痕;

实现:

我们还是使用rust的过程宏,来实现;将普通函数标记为我们合约的函数;

形式:

参数与返回值

#[derive(Serialize, SchemaType)]
struct Address {
    address : AccountAddress,
}

#[derive(Serialize, SchemaType)]
struct Balance {
    balance: u64,
}

init函数格式

#[init(contract="erc20", parameter="Address", result="Balance", payable,  event)]

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语言进行改造,形成我们自己的智能合约语言规范,如果有新的需求你可以继续添加新的属性与功能;

猜你喜欢

转载自blog.csdn.net/xq723310/article/details/123253933
今日推荐