1. 功能

对于许多用例,需要从合同代码向另一个合同发送新操作。这是合同之间能够积极沟通的唯一途径。它为特定智能合约代码的特定操作创建“操作模板”,然后可使用该模板来调用此操作。

第一个参数是动作名称,第二个参数是动作的方法_declaration_。

2. action_wrapper 类的定义

 template <eossys::name::raw Name, auto Action>struct action_wrapper {template <typename Code>constexpr action_wrapper(Code&& code, std::vector<eossys::permission_level>&& perms): code_name(std::forward<Code>(code)), permissions(std::move(perms)) {}template <typename Code>constexpr action_wrapper(Code&& code, const std::vector<eossys::permission_level>& perms): code_name(std::forward<Code>(code)), permissions(perms) {}template <typename Code>constexpr action_wrapper(Code&& code, eossys::permission_level&& perm): code_name(std::forward<Code>(code)), permissions({1, std::move(perm)}) {}template <typename Code>constexpr action_wrapper(Code&& code, const eossys::permission_level& perm): code_name(std::forward<Code>(code)), permissions({1, perm}) {}template <typename Code>constexpr action_wrapper(Code&& code): code_name(std::forward<Code>(code)) {}static constexpr eossys::name action_name = eossys::name(Name);eossys::text_name code_name;std::vector<eossys::permission_level> permissions;static constexpr auto get_mem_ptr() {return Action;}template <typename... Args>action to_action(Args&&... args)const {static_assert(detail::type_check<Action, Args...>());return action(permissions, code_name, action_name, detail::deduced<Action>{std::forward<Args>(args)...});}template <typename... Args>void send(Args&&... args)const {to_action(std::forward<Args>(args)...).send();}template <typename... Args>void send_context_free(Args&&... args)const {to_action(std::forward<Args>(args)...).send_context_free();}};

2.1 调用示例

#include <eosio_token/include/eosio_token.hpp>// can specify the contract to send the action to as first argument
token::transfer_action payout("eosio.token"_n, {get_self(), "active"_n});// transfer arguments are now passed as postional arguments
payout.send(get_self(), to, quantity, memo);token::transfer_action payout("eosio.token"_n, {get_self(), "active"_n});transaction t{};
t.actions.emplace_back(payout.to_action(get_self(), to, quantity, memo));
t.delay_sec = 10;
t.send(0 /* sender id */, get_self(), false);

参考:

  1. EOS系列 - WASM智能合约 - 内置方法

EOS 智能合约源代码解读 (11)wrap合约“action_wrapper类”相关推荐

  1. EOS 智能合约源代码解读 (1)总体说明

    1. 基本定义 在eos私有节点操作中,我们通常是一个合约对应一个合约账户,并且一个账户中只能部署一个智能合约.如果在同一个账户部署多个合约,那么最后部署的合约会覆盖掉之前的合约.每个帐户都至少链接到 ...

  2. EOS 智能合约源代码解读 (7)合约开发示例

    官方提供了一个工具eosiocpp,它可以按照固定的模板创建一个新的智能合约.eosiocpp可以创建2个合约文件(曾经是三个文件),它们仅仅包含了合约的框架. 1. HelloWorld合约代码如下 ...

  3. EOS 智能合约源代码解读 (6)合约之action

    1. 动作 ( action ) 是 EOS 合约的灵魂,是 EOS 的基础组成单位 1.1 一个动作就是一个公开的 ( pubic ) 的 C++ 类的成员方法 必须使用 [[eosio::acti ...

  4. EOS 智能合约源代码解读 (10)token合约“几种关键操作”

    1. create:负责创建资产 void token::create( const text_name& issuer, const asset& maximum_supply) { ...

  5. EOS 智能合约源代码解读 (5)class contract

    1. 所有合约的基类 #define CONTRACT class [[eosio::contract]] // 合约 #define ACTION [[eosio::action]] //动作 #d ...

  6. EOS 智能合约源代码解读 (3)asset.hpp

    1. 合约中关于资产的数据结构的定义 输入字符串: "10.0000 CUR" 输出:amount = 10, symbol(4,"CUR") /**asset ...

  7. EOS 智能合约源代码解读 (14)system合约“exchange_state.hpp”

    1. 使用bancor数学创建一个在两种资产类型中的50/50的中继 namespace eosiosystem {using eosio::asset;using eosio::symbol;typ ...

  8. EOS 智能合约源代码解读 (10)token合约“简介”

    1. 记录用户的token,比如有哪些代币 class [[eosio::contract("eosio.token")]] token : public contract {pu ...

  9. EOS 智能合约源代码解读 (9)boot合约

    1. 作用 激活 protocol features 性质 activating desired protocol features prior to deploying a system contr ...

最新文章

  1. 工作组环境下WPAD部署的另类解决--WINS解析
  2. python编程经典案例-精心整理!9个 Python 实用案例分享
  3. 【r语言】如何将直方图和一条曲线画在一起(叠在一张图上)
  4. 阿里云IoT百万资源,寻找极客合作伙伴
  5. 堆排序(利用最大堆)
  6. 【嵌入式】C语言高级编程-container_of宏(04)
  7. 拉卡拉2020年股东净利润9.31亿 积极布局数字人民币业务
  8. Unity-WebGL-打包流程以及遇到的各种坑
  9. matlab 菱形符号,matlab 图形符号
  10. 《徐卓-心理咨询师校园报告 》--心得
  11. 炒股从负债百万,到“睡后收入”上百万,我做了这件事!
  12. linux下如何部署本jar包并且在后台运行
  13. 关于Notion导出PDF的建议
  14. 图片全屏查看js插件
  15. 什么是闭包,原理,优缺点以及应用场景
  16. 最新《Android车载系统应用开发指南 》,Android工程师的新赛道
  17. a类论文 计算机视觉,高瓴人工智能学院师生5篇论文被CCF A类会议CVPR录用
  18. 攻防演练-紫队视角下的实战攻防演练组织
  19. 2022年智能无人系统与人工智能国际会议(SIUSAI 2022)
  20. 2018年今日头条白皮书,OPPO品牌用户粘度荣获第一!

热门文章

  1. Makefile: -I(大写i)、-L、-l
  2. map:根据 value 找 key ?
  3. 越不服务器显示异常什么原因,计算机异常问题都有哪些常见类型
  4. Android访问瓦片地图 费流量,瓦片地图注意事项
  5. 大型监控网络系统如何规划ip地址?
  6. ML之sklearn:sklearn库中的ShuffleSplit()函数和StratifiedShuffleSplit()函数的讲解
  7. Interview:算法岗位面试—10.31下午上海某银行总部公司(二面,四大行之一)之项目简介、比赛介绍、某个比赛的过程
  8. ML之Validation:机器学习中模型验证方法的简介、代码实现、案例应用之详细攻略
  9. TF之LSTM:利用基于顺序的LSTM回归算法对DIY数据集sin曲线(蓝虚)预测cos(红实)(TensorBoard可视化)
  10. OpenCV的k - means聚类 -对图片进行颜色量化