github源码:我在这呢
简要理解
内联操作(Inline Actions)可以实现在当前合同里调用其他合同的action
授权
要实现内联操作,需要给发送内联操作的合同账户:如之前所编写智能合约所创建的账户:addressbook赋予 eosio.code 权限。
eosio.code权限是为增强安全性而实现的伪权限,并使合同能够执行内联操作
cleos set account permission addressbook active --add-code
对内部合同的内联操作
1.添加一个新的action
ACTION notify(name user, string msg);
这里用到一个新的function: require_recipient

2.实现一个专门用来发送msg的私有方法,参数含义如下
- permission_level: 权限
- code: 所调用的合约,这里调用的是自身合约,所以使用get_self()
- action: 需要调用的action
- data: 发送的数据
- send():发送
void send_summary(name user, string message) {
action(
permission_level{get_self(),name("active") },
get_self(),
name("notify"),
std::make_tuple(user, name{user}.to_string() + message)).send();
}
3.调用

对外部合同的内联操作
说明:有两个合约,分别是abcounter 和 addressbook,addressbook合约在执行action后,自动调用abcounter合约的action
对外部合同的内联操作,外部合同(这里指abcounter 合约)添加动作包装器
1.对外部合同内联操作
/**
对外部合同的内联操作
*/
void increment_counter(name user, string type) {
action(
permission_level{get_self(),name("active")},
name("abcounter"), //合约名称
name("count"), //调用的action
std::make_tuple(user, type)).send(); //传输的data
}
更多
想了解更多,请关注公众号哦!
