一、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": [...]
}