【三胖聊区块链-EOS】(七)EOS入门系列-智能合约之内联操作

847 阅读1分钟

github源码:我在这呢

上一篇:【三胖聊区块链-EOS】(六)EOS入门系列-智能合约数据持久化之二级索引

简要理解

内联操作(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
    }

更多

想了解更多,请关注公众号哦!