1. eosio.token.hpp

作者: furnace | 来源:发表于2019-05-29 16:31 被阅读0次

eosio.token.hpp

1. 整体评注

EOS 的代币智能合约 eosio.token,用于代币相关的所有操作,包括:创建新代币、释放代币、代币转移等。

智能合约的开发严重依赖于 eosio.cdt 中的相关代码,并通过 eosiolib 中的头文件进行引用,最新版是从 eosio 中引用所有头文件。

合约 eosio.token 中创建了两个重要的数据结构:account, currency_stats。其中:account 描述了账户当前的余额,currency_stats 描述了代币的基础信息,如:issuer, supply, max_supploy 等。

合约 eosio.token 中创建了两个存储结构:accounts, stats。其中:accounts 存储了所有的 account 信息,stats 存储了所有的 currency_stats 信息。这些数据结构都是基于 boost::multi_index 数据结构来进行存储和索引的。

2. 源代码及注释

/**
 *  @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 [[eosio::contract("eosio.token")]] token : public contract {
      public:
         using contract::contract;

         [[eosio::action]]
         void create( name   issuer,
                      asset  maximum_supply);

         [[eosio::action]]
         void issue( name to, asset quantity, string memo );

         [[eosio::action]]
         void retire( asset quantity, string memo );

         [[eosio::action]]
         void transfer( name    from,
                        name    to,
                        asset   quantity,
                        string  memo );

         [[eosio::action]]
         void open( name owner, const symbol& symbol, name ram_payer );

         [[eosio::action]]
         void close( name owner, const symbol& symbol );

         static asset get_supply( name token_contract_account, symbol_code sym_code )
         {
            stats statstable( token_contract_account, sym_code.raw() );
            const auto& st = statstable.get( sym_code.raw() );
            return st.supply;
         }

         static asset get_balance( name token_contract_account, name owner, symbol_code sym_code )
         {
            accounts accountstable( token_contract_account, owner.value );
            const auto& ac = accountstable.get( sym_code.raw() );
            return ac.balance;
         }

         using create_action = eosio::action_wrapper<"create"_n, &token::create>;
         using issue_action = eosio::action_wrapper<"issue"_n, &token::issue>;
         using retire_action = eosio::action_wrapper<"retire"_n, &token::retire>;
         using transfer_action = eosio::action_wrapper<"transfer"_n, &token::transfer>;
         using open_action = eosio::action_wrapper<"open"_n, &token::open>;
         using close_action = eosio::action_wrapper<"close"_n, &token::close>;
      private:
         struct [[eosio::table]] account {
            asset    balance;

            uint64_t primary_key()const { return balance.symbol.code().raw(); }
         };

         struct [[eosio::table]] currency_stats {
            asset    supply;
            asset    max_supply;
            name     issuer;

            uint64_t primary_key()const { return supply.symbol.code().raw(); }
         };

         typedef eosio::multi_index< "accounts"_n, account > accounts;
         typedef eosio::multi_index< "stat"_n, currency_stats > stats;

         void sub_balance( name owner, asset value );
         void add_balance( name owner, asset value, name ram_payer );
   };

} /// namespace eosio


Reference

  1. https://github.com/EOSIO/eosio.contracts

Contributor

  1. Windstamp, https://github.com/windstamp

相关文章

  • 1. eosio.token.hpp

    eosio.token.hpp 1. 整体评注 EOS 的代币智能合约 eosio.token,用于代币相关的所有...

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

    一、eosio.token.hpp文件结构 二、eosio.token.cpp 文件结构 三、eosio.toke...

  • 1.

    午间的太阳晒得尤其刺热,菜市场上的楼房也显得闷热无比。 保罗的余光瞄见一个老妇,老妇登着载满废食的三轮车,充满...

  • 1.

    “好了,校会到此结束,请各班有序带回,开始班会。” 正在台下打盹的白子含被后面的同学叫醒,“子含,校会结束了。”...

  • 1.

    最随和、最友好、最善解人意的人,往往是最受伤、最抑郁的人。

  • 1.

    风决定要走 云怎么挽留 情缘似流水 覆水总难收

  • 1.

    清晨的第一缕阳光有点刺痛了屠然的眼睛,星期一再不起来就要迟到的闹铃成功的惊醒她,顶着宿醉的头痛微微坐起了身,...

  • 【1.】

    赵伊萱走在路上,她回想一下今天发生的事…… - 今天看见谭柯校草了 他在向我们班的班长表白了… 班长好像答应他了...

  • 1.

    九月份开学季,可这一年的我已经不是去年那个懵懂无知的大一萌新了,因为我变成大二小学姐啦!哈哈哈哈哈哈。 按照规定新...

  • 1.

    写给我最爱的人 我们认识快三个月了,认识第一天就决定在一起。这个决定都是我们最勇敢的一次决定,所以希望我们可以一直...

网友评论

    本文标题:1. eosio.token.hpp

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