详解 EOS 智能合约的 hpp 文件

为了帮助大家熟悉 EOS 智能合约,EOS 官方提供了一个代币(资产)智能合约 Demo —— eosio.token。eosio.token 智能合约目前还不是特别完善,个别功能还没有完成。但这个示例合约给出了 EOS 官方智能合约开发的标准结构和开发方法,并且真正的 EOS 代币也会借鉴这个示例合约的逻辑,是 EOS 智能合约入门的经典案例。

照例,eosio.token 合约由三个文件(cpp,hpp,abi)文件组成,本篇文章将为大家讲解 eosio.token.hpp 文件。原文件地址:https://github.com/EOSIO/eos/tree/master/contracts/eosio.token

预处理指令 & 头文件

代码的开头声明了头文件,主要是 eos 智能合约的 API 库。

//预处理指令,防止文件被重复包含
#pragma once//eos 资产(asset)头文件
#include <eosiolib/asset.hpp>
//eos 智能合约 API 库
#include <eosiolib/eosio.hpp>

构造函数

智能合约的类名可以与智能合约名不同,智能合约的名字是其账户名。构造函数为空,参数为智能合约账户名。

   //每个智能合约类都要继承 contract 类class token : public contract {public://类构造函数token( account_name self ):contract(self){}

创建代币函数(action)

声明 create 函数,这个函数用来新建一种代币,并输入代币的各种属性,同时 create 函数也是一个 action。action 是 eos 智能合约的接口函数,定义外界可以对智能合约做什么动作。

                      //参数:发币者void create( account_name issuer,//资产最大数目asset        maximum_supply,//资产是否可以冻结uint8_t      issuer_can_freeze,//资产是否可以召回uint8_t      issuer_can_recall,//资产是否可以设置白名单uint8_t      issuer_can_whitelist );

增发代币函数(action)

声明 issue 函数,这个函数用来增发代币,eosio.token 合约并不是新建了代币就会得到代币,新建的代币只是存储了资料,发币者要想获取代币,需要调用 issue action 来获得代币。

         //参数:接收新代币账户,新增多少代币,memovoid issue( account_name to, asset quantity, string memo );

转账函数(action)

声明 transfer 函数,这个函数用来转账,是代币智能合约最常用的函数。

                        //发送账户void transfer( account_name from,//接收账户account_name to,//代币数量asset        quantity,//memostring       memo );

私有数据结构

智能合约需要存储每种代币的资料,还要存储每个账户持有每种代币的数量。

      private://account 结构体,单个记录账户存储单个代币的情况struct account {//资产余额asset    balance;//账户是否冻结bool     frozen    = false;//账户是否在白名单bool     whitelist = true;//设置账户主键为代币名称uint64_t primary_key()const { return balance.symbol.name(); }};//currency_stats 结构体,记录当代币状态信息struct currency_stats {//流通量asset          supply;//最大可流通量asset          max_supply;//发币者account_name   issuer;//是否可以冻结bool           can_freeze         = true;//是否可以召回bool           can_recall         = true;//是否可以设置白名单bool           can_whitelist      = true;//是否已经冻结bool           is_frozen          = false;//是否已经设置白名单bool           enforce_whitelist  = false;//设置主键为代币名称uint64_t primary_key()const { return supply.symbol.name(); }};//设置一个multi_index类型,存储 account 结构体typedef eosio::multi_index<N(accounts), account> accounts;//设置一个multi_index类型,存储 currency_stats 结构体typedef eosio::multi_index<N(stat), currency_stats> stats;

私有函数

合约公有两个私有函数,分别是给账户增加某种资产,和给账户减少某种资产。

         //增加资产函数:账户,增加数量,代币状态结构体void sub_balance( account_name owner, asset value, const currency_stats& st );//减少资产函数:账户,减少数量   ,代币状态结构体void add_balance( account_name owner, asset value, const currency_stats& st,//ram 资源支付者account_name ram_payer );

相关文章和视频推荐

【许晓笛】 EOS 智能合约案例解析(2) 【许晓笛】 EOS 智能合约案例解析(3)

圆方圆学院汇集大批区块链名师,打造精品的区块链技术课程。 在各大平台都长期有优质免费公开课,欢迎报名收看。

公开课地址:https://ke.qq.com/course/345101

转载于:https://my.oschina.net/u/4028262/blog/2877710

【许晓笛】 EOS智能合约案例解析(1) 1相关推荐

  1. 【许晓笛】 EOS智能合约案例解析(1)

    详解 EOS 智能合约的 hpp 文件 为了帮助大家熟悉 EOS 智能合约,EOS 官方提供了一个代币(资产)智能合约 Demo -- eosio.token.eosio.token 智能合约目前还不 ...

  2. 【许晓笛】 EOS 智能合约案例解析(2)

    详解 EOS 智能合约的 cpp 文件 之前的文章介绍了 eosio.token 智能合约的 hpp 文件,这次向大家介绍 eosio.token.cpp 文件,cpp 文件即 C++ 代码文件,智能 ...

  3. 【许晓笛】EOS 智能合约案例解析(2)

    详解 EOS 智能合约的 cpp 文件 之前的文章介绍了 eosio.token 智能合约的 hpp 文件,这次向大家介绍 eosio.token.cpp 文件,cpp 文件即 C++ 代码文件,智能 ...

  4. 【许晓笛】EOS智能合约案例解析(1)

    为了帮助大家熟悉 EOS 智能合约,EOS 官方提供了一个代币(资产)智能合约 Demo -- eosio.token.eosio.token 智能合约目前还不是特别完善,个别功能还没有完成.但这个示 ...

  5. EOS智能合约案例解析(下)

    这次向大家介绍 eosio.token 智能合约的最后一个文件 -- abi文件.ABI 全称 Application Binary Interface,中文名"应用程序二进制接口" ...

  6. 【许晓笛】49行代码就能发币?而且EOS连例子都给你了

    Daniel Larimer 在他的博客介绍了EOS新的智能合约架构(EOS团队的开发速度实在是太吓人,根本追不上).他给出了最简单的一个新币种的智能合约代码,仅有49行就能完成一个新币种的开发,一个 ...

  7. 【许晓笛】EOS 什么是智能合约(3)

    详解 EOS 智能合约的 abi 文件 这次向大家介绍 eosio.token 智能合约的最后一个文件 -- abi文件.ABI 全称 Application Binary Interface,中文名 ...

  8. 【许晓笛】EOS 超级节点的五个使命

    在EOS系统中,有"两股势力"是整个系统最关键的因素,那就是项目方和见证人.很多人觉得EOS这个项目"奇葩",就奇葩在项目方和见证人的关系上.EOS的项目方是B ...

  9. c++ eos智能合约开发_EOS开发完全解析(六):手摸手实现第一个EOS智能合约——Hello EOS...

    一.概述 EOS智能合约由C++编写,所以真正商业开发的时候,肯定是需要全面学习C++语法的,通过最近爆出的越来越多的合约漏洞我们就知道问题的严重性了.可以毫不客气的说,写智能合约要比写以往任何代码都 ...

最新文章

  1. 16 岁的雅虎问答,因“不再受欢迎”将永久关闭
  2. EdoGantt甘特图中间件的事件对象
  3. java程序中,数据验证,如何判断输入的文本框中的值是不是int型?
  4. 计算机历年考研复试上机基础题(一)
  5. 撒花!中文翻译仓库链接已加入 ML.NET 官方示例网站首页
  6. 如何在 ASP.NET MVC 中集成 AngularJS(2)
  7. LeetCode-46. Permutations
  8. ceph基本架构及数据分布原理
  9. 章泽天将赴英国剑桥大学读书?证件照都是这么能打...
  10. Jedis连接Redis读写基本操作
  11. 深入解析软件测试行业!它是否存在前景和出路?
  12. python单元测试教程_Python单元测试框架unittest使用方法讲解
  13. gin-控制器分组:
  14. mysql连接池满了_《MySql体系结构与存储引擎》面试腾讯前总结
  15. 论文阅读>污垢检测:Vision-Based Dirt Detection and Adaptive Tiling Scheme for Selective Area Coverage
  16. Windows 10 error code 0x80072efd
  17. 吴军《格局》读书笔记
  18. GPU驱动及CUDA安装流程介绍
  19. 如何防止表单重复提交问题
  20. 【BSP视频教程】STM32H7视频教程第3期:整体捋顺STM32H7的HAL库和LL库的框架,再配合寄存器造轮子找到更适合自己的玩法(2022-01-21)

热门文章

  1. 图解PKCS#1——第四部分 签名验签方案
  2. hdu 1757【A Simple Math Problem】
  3. 麻省理工大学线性代数1806(2)消元法及矩阵消元法 矩阵行变换、列变换 置换矩阵 逆矩阵 如沐春风、如饮甘露、醍醐灌顶的线性代数
  4. GVRP-LNP-VCMP讲解
  5. F5 Networks数据中心资源整合解决方案
  6. 华为鸿蒙与小米新系统,华为鸿蒙系统硬刚谷歌!小米也发布新系统:却选择和谷歌系统互补...
  7. 智力题、推理判断题、数量关系题(三)
  8. 帮优质粉丝脱单|【英国女】No.33|22岁,硕士,喜欢旅行爱好做饭,消费者心理学...
  9. FPS显示和修改——unity3D
  10. 网页保存mhtml格式