资讯专栏INFORMATION COLUMN

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

forsigner / 3178人阅读

摘要:构造函数为空,参数为智能合约账户名。每个智能合约类都要继承类类构造函数创建代币函数声明函数,这个函数用来新建一种代币,并输入代币的各种属性,同时函数也是一个。

详解 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 
//eos 智能合约 API 库
#include 
构造函数

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

   //每个智能合约类都要继承 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 来获得代币。

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

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

                        //发送账户
         void transfer( account_name from,
                        //接收账户
                        account_name to,
                        //代币数量
                        asset        quantity,
                        //memo
                        string       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 accounts;
         //设置一个multi_index类型,存储 currency_stats 结构体
         typedef eosio::multi_index 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://www.ucloud.cn/yun/24420.html

相关文章

  • 晓笛EOS 智能合约案例解析(3)

    摘要:文件地址智能合约文件由部分组成定义类型的别名各个类型的数据结构智能合约的数据结构体李嘉图条款注格式不支持注释,上面的双斜线大家理解就好。是李嘉图合约,刚刚被加入到智能合约中,官方还没有进一步说明。 详解 EOS 智能合约的 abi 文件 这次向大家介绍 eosio.token 智能合约的最后一个文件 —— abi文件。ABI 全称 Application Binary Interfac...

    philadelphia 评论0 收藏0
  • 晓笛EOS 智能合约案例解析(2)

    摘要:相关文章和视频推荐许晓笛智能合约案例解析许晓笛智能合约案例解析圆方圆学院汇集大批区块链名师,打造精品的区块链技术课程。 详解 EOS 智能合约的 cpp 文件 之前的文章介绍了 eosio.token 智能合约的 hpp 文件,这次向大家介绍 eosio.token.cpp 文件,cpp 文件即 C++ 代码文件,智能合约所有的业务逻辑内容都是在 cpp 文件中实现的。 eosio.t...

    mengbo 评论0 收藏0
  • 晓笛】49行代码就能发币?而且EOS连例子都给你了

    摘要:相关文章和视频推荐许晓笛智能合约案例解析圆方圆学院汇集大批区块链名师,打造精品的区块链技术课程。 Daniel Larimer 在他的博客介绍了EOS新的智能合约架构(EOS团队的开发速度实在是太吓人,根本追不上)。他给出了最简单的一个新币种的智能合约代码,仅有49行就能完成一个新币种的开发,一个新的爱息欧就诞生了。让我们一步一步实现吧。 首先实现私有成员,建立一个 account 结...

    Freeman 评论0 收藏0
  • 晓笛】深入理解 EOS 账户权限映射

    摘要:为了解决这个问题,采取了三步用户账户自定义分级权限。用户权限与智能合约之间的映射。图中不难看出,权限是账户最高权限,可以执行权限。如果没有发现任何符合的映射,会直接检查本次执行是否满足了权限,若不足,会检查。 到底什么叫智能合约? 名词解释:本篇文章出现很多 Action 和 Active,Action (动作)为 EOS 中账户可以接受的动作,也就是别人可以对你做什么;Active ...

    zacklee 评论0 收藏0
  • 晓笛EOS 新增的 WebAssembly 解释器,是什么鬼?

    摘要:对于很多没有中间语言的字节码的编程语言来说,根本不存在解释执行与编译执行的选项,比如传统只能编译执行,直接将代码编译成为可执行的二进制机器码,我们电脑上文件就是编译的成果。 Daniel Larimer 在最近的博客中透露,EOS 新增了官方的 WebAssembly 解释器,用来解释执行 WebAssembly 智能合约,加上之前的编译执行,EOS 智能合约有了两种执行方式。 对于很...

    SunZhaopeng 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<