1.eosio.token.hpp

3386 ワード

eosio.token.hpp
1.全体評注
EOSのトークン知能契約eosio.tokenは、トークン関連のすべての操作に使用されます.新しいトークンの作成、トークンの解放、トークンの転送などが含まれます.
インテリジェント契約の開発はeosio.cdtの関連コードに大きく依存しています.eosiolibの頭ファイルを通じて引用します.最新版はeosioからすべてのヘッダファイルを引用します.
契約eosio.tokenの中で二つの重要なデータ構造を作成しました.account、currency_スター.内訳:accountはアカウントの現在の残高を記述しています.currency_スターはトークンの基礎情報を述べました.例えば、issuer、supply、max_supployなど
契約eosio.tokenで二つの記憶構造を作成しました.accounts、stats.その中:accountsはすべてのaccount情報を記憶しています.statsは全てのcurrency_を記憶しています.スター情報.これらのデータ構造はすべてブートに基づいています.indexデータ構造は、記憶およびインデックスのために行われる.
2.ソースコードとコメント
/**
 *  @file
 *  @copyright defined in eos/LICENSE.txt
 */
#pragma once

#include 
#include 

#include 

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;
         using issue_action = eosio::action_wrapper;
         using retire_action = eosio::action_wrapper;
         using transfer_action = eosio::action_wrapper;
         using open_action = eosio::action_wrapper;
         using close_action = eosio::action_wrapper;
      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
  • https://github.com/EOSIO/eosio.contracts
  • Conttributor
  • Windartamp、https://github.com/windstamp