上一篇:【EOS快速入门】第五篇 创建EOS钱包、公私钥、合约、代币DEMO
下一篇:【EOS快速入门】第七篇 待定
简介
eosio.token是EOS官方提供了一个代币(资产)智能合约 Demo,这个示例合约给出了 EOS 官方智能合约开发的标准结构和开发方法,并且真正的 EOS 代币也会借鉴这个示例合约的逻辑,是EOS 智能合约入门的经典案例。
eosio.token 合约由三个文件(cpp,hpp,abi)文件组成,本篇文章将为大家讲解 eosio.token.hpp 文件。
源码文件地址:https://github.com/EOSIO/eos/tree/master/contracts/eosio.token
如果我们在本地有环境部署,那么通过cat contracts/eosio.token/eosio.token.hpp
命令可以找到这个文件的C++源码,见文末附完整源码。
一、预处理指令 & 头文件
代码的开头声明了头文件,主要是 eos 智能合约的 API 库。
//预处理指令,防止文件被重复包含
#pragma once
//eos 资产(asset)头文件
#include <eosiolib/asset.hpp>
//eos 智能合约 API 库
#include <eosiolib/eosio.hpp>
二、创建代币函数
声明 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 );
附完整源码:
/**
* @file
* @copyright defined in eos/LICENSE.txt
*/
#pragma once
#include <eosiolib/asset.hpp>
#include <eosiolib/eosio.hpp>
#include <string>
namespace eosiosystem {
class system_contract;
}
namespace eosio {
using std::string;
class token : public contract {
public:
token( account_name self ):contract(self){}
void create( account_name issuer,
asset maximum_supply);
void issue( account_name to, asset quantity, string memo );
void transfer( account_name from,
account_name to,
asset quantity,
string memo );
inline asset get_supply( symbol_name sym )const;
inline asset get_balance( account_name owner, symbol_name sym )const;
private:
struct account {
asset balance;
uint64_t primary_key()const { return balance.symbol.name(); }
};
struct currency_stats {
asset supply;
asset max_supply;
account_name issuer;
uint64_t primary_key()const { return supply.symbol.name(); }
};
typedef eosio::multi_index<N(accounts), account> accounts;
typedef eosio::multi_index<N(stat), currency_stats> stats;
void sub_balance( account_name owner, asset value );
void add_balance( account_name owner, asset value, account_name ram_payer );
public:
struct transfer_args {
account_name from;
account_name to;
asset quantity;
string memo;
};
};
asset token::get_supply( symbol_name sym )const
{
stats statstable( _self, sym );
const auto& st = statstable.get( sym );
return st.supply;
}
asset token::get_balance( account_name owner, symbol_name sym )const
{
accounts accountstable( _self, owner );
const auto& ac = accountstable.get( sym );
return ac.balance;
}
} /// namespace eosio
开发过以太坊ERC20代币的一定熟悉,ERC20规范了totalSupply(), balanceOf(), transfer(), transferFrom()等六个方法。eosio.token也做了类似规范,只要是create(),issue(),transfer()三个方法构造的代码,就是一个发币智能合约。
上一篇:【EOS快速入门】第五篇 创建EOS钱包、公私钥、合约、代币DEMO
下一篇:【EOS快速入门】第七篇 待定
更多技术讨论,请关注我们的知识星球:

网友评论