一、EOS token合约
此合约允许创建许多不同的token,这些token全部在同一合同上运行,但可能由不同的用户管理。
1.1 创建账户
$ cleos create account eosio eosio.token
1.2 部署合约
$ cleos set contract eosio.token build/contracts/eosio.token -p eosio.token@active
Reading WAST...
Assembling WASM...
Publishing contract...
executed transaction: 52
1.3 创建token
(1)创建过程
/**
*共有函数,即为action
*/
void token::create( account_name issuer,
asset maximum_supply )
{
//首先经过认证授权 cleos push action 须有-p参数
require_auth( _self );
//sym:最大资产的token,symbol represents a token and contains precision and name: "4,EOS"
auto sym = maximum_supply.symbol;
eosio_assert( sym.is_valid(), "invalid symbol name" );
eosio_assert( maximum_supply.is_valid(), "invalid supply");
eosio_assert( maximum_supply.amount > 0, "max-supply must be positive");
/*创建多索引表stats in eosio.token.hpp:typedef eosio::multi_index<N(stat), currency_stats> stats;
*建立一个 stats 类型的数据表,用来与数据库交互(存储当前代币状态信息)
*/
stats statstable( _self, sym.name() );
//在表中搜索相同名称的代币
auto existing = statstable.find( sym.name() );
//校验,是否已经存在相同名称的代币
eosio_assert( existing == statstable.end(), "token with symbol already exists" );
//使用 emplace 方法,[在数据表中增加一项](https://developers.eos.io/eosio-cpp/reference#emplace)
statstable.emplace( _self, [&]( auto& s ) {
s.supply.symbol = maximum_supply.symbol;
s.max_supply = maximum_supply;
s.issuer = issuer;
});
}
(2)调用方法
$ cleos push action eosio.token create '[ "eosio", "1000000000.0000 SYS"]' \