EOS 智能合约源代码解读 (14)system合约“exchange_state.hpp”
生活随笔
收集整理的這篇文章主要介紹了
EOS 智能合约源代码解读 (14)system合约“exchange_state.hpp”
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1. 使用bancor數(shù)學(xué)創(chuàng)建一個在兩種資產(chǎn)類型中的50/50的中繼
namespace eosiosystem {using eosio::asset;using eosio::symbol;typedef double real_type;// 使用Bancor算法在兩種不同資產(chǎn)類型中間創(chuàng)造一個50對50的中繼。bancor交易所的狀態(tài)完全包含在這個結(jié)構(gòu)體中。使用此API沒有任何副作用。struct [[eosio::table, eosio::contract("eosio.system")]] exchange_state {asset supply; // 資產(chǎn)供應(yīng)struct connector { // 連接器asset balance; // 資產(chǎn)余額double weight = .5; // 權(quán)重EOSLIB_SERIALIZE( connector, (balance)(weight) )};connector base; // 基本連接器connector quote; // 引用連接器uint64_t primary_key()const { return supply.symbol.raw(); } // 該table主鍵asset convert_to_exchange( connector& c, asset in ); // 通過連接器c將輸入資產(chǎn)in轉(zhuǎn)換為發(fā)行資產(chǎn)issued。asset convert_from_exchange( connector& c, asset in ); // 通過連接器c將輸入資產(chǎn)in轉(zhuǎn)換為輸出資產(chǎn)outasset convert( asset from, const symbol& to ); // 核心功能:將一種資產(chǎn)轉(zhuǎn)為另一種符號的等價資產(chǎn)。例如將10 SYS的資產(chǎn)轉(zhuǎn)為EOS是20 EOS,幣幣交易。EOSLIB_SERIALIZE( exchange_state, (supply)(base)(quote) )};// 內(nèi)存市場狀態(tài)表typedef eosio::multi_index< "rammarket"_n, exchange_state > rammarket; }convert函數(shù)是exchange最重要的功能,它實(shí)現(xiàn)了完全按照boncor市場機(jī)制交換token。具體實(shí)現(xiàn)源碼的機(jī)制如下: asset exchange_state::convert(asset from, const symbol &to) {auto sell_symbol = from.symbol; // 原來的符號,作為賣出幣auto ex_symbol = supply.symbol; // 中轉(zhuǎn)幣的符號auto base_symbol = base.balance.symbol; // base連接器資產(chǎn)的符號auto quote_symbol = quote.balance.symbol; // quote連接器資產(chǎn)的符號if (sell_symbol != ex_symbol){ // 如果賣出幣不是中轉(zhuǎn)幣if (sell_symbol == base_symbol){ // 如果賣出幣等于base連接器資產(chǎn)from = convert_to_exchange(base, from); // 通過base連接器轉(zhuǎn)換賣出幣}else if (sell_symbol == quote_symbol){ // 如果賣出幣等于quote連接器資產(chǎn)from = convert_to_exchange(quote, from); // 通過quote連接器轉(zhuǎn)換賣出幣}else{ // 其他賣出幣無任何連接器的情況視為無效幣幣兌換行為。eosio_assert(false, "invalid sell");}}else{ // 如果賣出幣是中轉(zhuǎn)幣if (to == base_symbol) // 如果買入幣等于base連接器資產(chǎn){from = convert_from_exchange(base, from); // 通過base連接器轉(zhuǎn)換賣出幣}else if (to == quote_symbol) // 如果買入幣等于quote連接器資產(chǎn){from = convert_from_exchange(quote, from); // 通過quote連接器轉(zhuǎn)換賣出幣}else{ // 其他賣出幣無任何連接器的情況視為無效幣幣兌換行為。eosio_assert(false, "invalid conversion");}}if (to != from.symbol) // 如果經(jīng)過一輪轉(zhuǎn)換以后,from和to資產(chǎn)仍舊沒有統(tǒng)一符號,則再次調(diào)一遍轉(zhuǎn)換。return convert(from, to);return from; // 最后成功得到轉(zhuǎn)換為等價的to幣 }總結(jié)
以上是生活随笔為你收集整理的EOS 智能合约源代码解读 (14)system合约“exchange_state.hpp”的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ Primer 5th笔记(cha
- 下一篇: C++ Primer 5th笔记(cha