第一源码网 ??【刘文彬】【精解】EOS标准货币体系与源码实现分析(9)

电脑杂谈  发布时间:2018-12-14 00:14:01  来源:网络整理

market_state.cpp,源文件中实现了很多函数。这些函数实现了市场借贷关系,余额数量等操作处理,具体我们在exchange主库中通过具体业务进行介绍。

exchange

这是整个exchange合约的主库(通常我会将一个名字的头文件加源文件合并称为一个库,这也是C++ 的命名习惯)。

exchange.hpp

头文件,主要声明了一个类exchange,这里面包含了三个私有成员,以及七个公有函数,还有三个公有结构体,下面贴一下源码吧:

`
include <eosiolib/types.hpp>
include <eosiolib/currency.hpp>
include <boost/container/flat_map.hpp>
include <cmath>
include <exchange/market_state.hpp>
namespace eosio {
/**      这个合约可以让用户在任意一对标准货币类型之间创建一个exchange,这个exchange是基于一个在购买方和发行方双边的价值等额的条件下而创建的。为了预防舍入误差,初始化金额应该包含大量的base以及quote货币的数量,并且exchange 共享应该在最大初始化金额的100倍的数量。用户在他们通过exchange交易前,必须先存入资金到exchange。每次一个exchange创建一个新的货币时,相应的交易市场制造商也会被创建。货币供应以及货币符号必须是唯一的并且它使用currency合约的表来管理。    /
   class exchange {
      private:
         accountname      thiscontract;// 私有,账户名
         currency          excurrencies;// 货币
         exchangeaccounts accounts;// exchange的账户
  public:
     exchange( account_name self )
     :_this_contract(self),
      _excurrencies(self),
      _accounts(self)
     {}
     // 创建
     void createx( account_name    creator,
                   asset           initial_supply,
                   uint32_t        fee,
                   extended_asset  base_deposit,
                   extended_asset  quote_deposit
                 );
     // 订金
     void deposit( account_name from, extended_asset quantity );
     // 提现
     void withdraw( account_name  from, extended_asset quantity );
     // 借出
     void lend( account_name lender, symbol_type market, extended_asset quantity );
     // 不借?
     void unlend(
        account_name     lender,
        symbol_type      market,
        double           interest_shares,
        extended_symbol  interest_symbol
     );
     // 边缘覆盖结构体
     struct covermargin {
        account_name     borrower;
        symbol_type      market;
        extended_asset   cover_amount;
     };
     // 上侧边缘
     struct upmargin {
        account_name     borrower;
        symbol_type      market;
        extended_asset   delta_borrow;
        extended_asset   delta_collateral;
     };
     // 交易结构体
     struct trade {
        account_name    seller;
        symbol_type     market;
        extended_asset  sell;
        extended_asset  min_receive;
        uint32_t        expire = 0;
        uint8_t         fill_or_kill = true;
     };
     // 函数名根据参数列表方法重载,在xxx上执行exchange
     void on( const trade& t    );
     void on( const upmargin& b );
     void on( const covermargin& b );
     void on( const currency::transfer& t, account_name code );
     // 应用
     void apply( account_name contract, account_name act );
};
} // namespace eosio`
exchange.cpp


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-90843-9.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...