美文网首页EOS技术爱好者EOSEOS开发系列
EOS之发币eosio.token智能合约解析

EOS之发币eosio.token智能合约解析

作者: 樱桃小丸子zz | 来源:发表于2018-06-27 17:38 被阅读16次

    一、eosio.token.hpp文件结构

    #pragma once
    // 引入 资产(asset) 类型
    #include <eosiolib/asset.hpp>
    
    // 引入其他基础文件定义文件,包括一些其他类型,譬如account_name
    #include <eosiolib/eosio.hpp>
    
    #include <string>
    
    namespace eosiosystem{
        class system_contract;
    }
    
    namespace eosio{
        using std::string;
        
        //每个智能合约都要继承contract类
        class token : public contract{
            public:
                //类构造函数
                token( account_name self ):contract(self){}
                
                //函数声明,参数暂省略不写
                void create();//新建代币
                void issue();//发币
                void transfer();//转账
                
                //内联函数声明
                inline asset get_supply()const;
                inline asset get_balance()const;
            
            private:
                //结构体声明
                struct account{};
                struct currency_stats{};
                
                //设置mulit_index类型,存储结构体
                typedef eosio::multi_index<N(accounts), account> accounts;
                typedef eosio::multi_index<N(stat), currency_stats> stats;
                
                // 两个私有函数的声明
                void sub_balance();//资产减少
                void add_balance();//资产增加
            
            public:
                //转账参数结构体声明
                struct transfer_args{};
                
        };
        
        asset token::get_supply()const
        {
            //内联函数实现
        }
        
        asset token::get_balance()const
        {
            //内联函数实现
        }
        
    } /// namespace eosio
    

    二、eosio.token.cpp 文件结构

    #include <eosio.token/eosio.token.hpp>
    
    namespace eosio{
        
    void token::create()
    {
        //函数实现
    }
    
    void token::issue()
    {
        //函数实现
    }
    
    void token::transfer()
    {
        //函数实现
        //调用了下面两个函数 sub_balance()/add_balance()
    }
    
    void token::sub_balance()
    {
        //函数实现
    }
    
    void token::add_balance()
    {
        //函数实现
    }
    
    } /// namespace eosio
    
    //将 create issue transfer 三个共有函数声明为 action,供其他账户调用。
    EOSIO_ABI ( eosio::token, (create)(issue)(transfer) )
    

    三、eosio.token.abi 文件结构分析

    {
        "version": ***,
        
        "types":[...],
        
        //声明actions和tables的数据结构
        "structs": [...],
        
        //声明智能合约有哪些可以调用的 action
        "actions": [...],
        
        //列出智能合约中需要建立的数据表名称,以及数据表中所储存的结构体名称。
        "tables": [...],
        
        "ricardian_clauses": [...],
        
        "abi_extensions": [...]
        
    }
    

    相关文章

      网友评论

        本文标题:EOS之发币eosio.token智能合约解析

        本文链接:https://www.haomeiwen.com/subject/veriyftx.html