1 #ifndef _MASTERCOIN_DEX
2 #define _MASTERCOIN_DEX 1
7 #define STR_SELLOFFER_ADDR_PROP_COMBO(x) ( x + "-" + strprintf("%d", prop))
8 #define STR_ACCEPT_ADDR_PROP_ADDR_COMBO( _seller , _buyer ) ( _seller + "-" + strprintf("%d", prop) + "+" + _buyer)
9 #define STR_PAYMENT_SUBKEY_TXID_PAYMENT_COMBO(txidStr) ( txidStr + "-" + strprintf("%d", paymentNumber))
10 #define STR_REF_SUBKEY_TXID_REF_COMBO(txidStr) ( txidStr + strprintf("%d", refNumber))
12 #define DISPLAY_PRECISION_LEN 50
13 #define INTERNAL_PRECISION_LEN 50
15 #include <boost/multiprecision/cpp_dec_float.hpp>
16 using boost::multiprecision::cpp_dec_float_100;
41 CMPOffer():offerBlock(0),offer_amount_original(0),property(0),BTC_desired_original(0),min_fee(0),blocktimelimit(0),txid(0)
45 CMPOffer(
int b, uint64_t a,
unsigned int cu, uint64_t d, uint64_t fee,
unsigned char btl,
const uint256 &tx)
46 :offerBlock(b),offer_amount_original(a),property(cu),BTC_desired_original(d),min_fee(fee),blocktimelimit(btl),txid(tx)
48 if (
msc_debug_dex) file_log(
"%s(%lu): %s , line %d, file: %s\n", __FUNCTION__, a, txid.
GetHex(), __LINE__, __FILE__);
51 void Set(uint64_t d, uint64_t fee,
unsigned char btl,
unsigned char suba)
53 BTC_desired_original = d;
59 void saveOffer(ofstream &file, SHA256_CTX *shaCtx,
string const &addr )
const {
65 % offer_amount_original
67 % BTC_desired_original
74 SHA256_Update(shaCtx, lineOut.c_str(), lineOut.length());
77 file << lineOut << endl;
110 CMPAccept(uint64_t a,
int b,
unsigned char blt,
unsigned int c, uint64_t o, uint64_t btc,
const uint256 &txid):accept_amount_remaining(a),blocktimelimit(blt),property(c),
111 offer_amount_original(o), BTC_desired_original(btc),offer_txid(txid),block(b)
114 file_log(
"%s(%lu), line %d, file: %s\n", __FUNCTION__, a, __LINE__, __FILE__);
117 CMPAccept(uint64_t origA, uint64_t remA,
int b,
unsigned char blt,
unsigned int c, uint64_t o, uint64_t btc,
const uint256 &txid):accept_amount_original(origA),accept_amount_remaining(remA),blocktimelimit(blt),property(c),
118 offer_amount_original(o), BTC_desired_original(btc),offer_txid(txid),block(b)
120 file_log(
"%s(%lu[%lu]), line %d, file: %s\n", __FUNCTION__, remA, origA, __LINE__, __FILE__);
125 file_log(
"buying: %12.8lf (originally= %12.8lf) in block# %d\n",
126 (
double)accept_amount_remaining/(
double)
COIN, (
double)accept_amount_original/(
double)COIN, block);
131 file_log(
"%s(); buyer still wants = %lu, line %d, file: %s\n", __FUNCTION__, accept_amount_remaining, __LINE__, __FILE__);
141 if (really_purchased >= accept_amount_remaining) bRet =
true;
143 accept_amount_remaining -= really_purchased;
148 void saveAccept(ofstream &file, SHA256_CTX *shaCtx,
string const &addr,
string const &buyer )
const {
151 string lineOut = (
boost::format(
"%s,%d,%s,%d,%d,%d,%d,%d,%d,%s")
156 % accept_amount_remaining
157 % accept_amount_original
158 % (
int)blocktimelimit
159 % offer_amount_original
160 % BTC_desired_original
164 SHA256_Update(shaCtx, lineOut.c_str(), lineOut.length());
167 file << lineOut << endl;
208 file_log(
"%s(%ld %s):%s\n", __FUNCTION__, ao, label,
ToString());
214 file_log(
"%s(%ld %s):%s\n", __FUNCTION__, ad, label,
ToString());
229 CMPMetaDEx():block(0),txid(0),idx(0),property(0),amount_forsale(0),desired_property(0),amount_desired(0),still_left_forsale(0),subaction(0)
231 still_left_forsale = 0;
235 CMPMetaDEx(
const string &,
int,
unsigned int, uint64_t,
unsigned int, uint64_t,
const uint256 &,
unsigned int,
unsigned char, uint64_t lfors = 0);
237 void Set(
const string &,
int,
unsigned int, uint64_t,
unsigned int, uint64_t,
const uint256 &,
unsigned int,
unsigned char);
248 return (effective_price);
251 void saveOffer(ofstream &file, SHA256_CTX *shaCtx)
const;
274 typedef std::set < CMPMetaDEx , MetaDEx_compare >
md_Set;
280 extern md_PropertiesMap
metadex;
287 int DEx_offerCreate(
string seller_addr,
unsigned int, uint64_t nValue,
int block, uint64_t amount_desired, uint64_t fee,
unsigned char btl,
const uint256 &txid, uint64_t *nAmended = NULL);
289 int DEx_offerUpdate(
const string &seller_addr,
unsigned int, uint64_t nValue,
int block, uint64_t desired, uint64_t fee,
unsigned char btl,
const uint256 &txid, uint64_t *nAmended = NULL);
290 int DEx_acceptCreate(
const string &buyer,
const string &seller,
int, uint64_t nValue,
int block, uint64_t fee_paid, uint64_t *nAmended = NULL);
291 int DEx_acceptDestroy(
const string &buyer,
const string &seller,
int,
bool bForceErase =
false);
292 int DEx_payment(
uint256 txid,
unsigned int vout,
string seller,
string buyer, uint64_t BTC_paid,
int blockNow, uint64_t *nAmended = NULL);
294 int MetaDEx_ADD(
const string &sender_addr,
unsigned int, uint64_t,
int block,
unsigned int property_desired, uint64_t amount_desired,
const uint256 &txid,
unsigned int idx);
304 #endif // #ifndef _MASTERCOIN_DEX
uint64_t offer_amount_original
int DEx_offerCreate(string seller_addr, unsigned int, uint64_t nValue, int block, uint64_t amount_desired, uint64_t fee, unsigned char btl, const uint256 &txid, uint64_t *nAmended=NULL)
void saveAccept(ofstream &file, SHA256_CTX *shaCtx, string const &addr, string const &buyer) const
bool DEx_offerExists(const string &seller_addr, unsigned int)
md_PricesMap * get_Prices(unsigned int prop)
CMPOffer * DEx_getOffer(const string &seller_addr, unsigned int)
int MetaDEx_CANCEL_AT_PRICE(const uint256, unsigned int, const string &, unsigned int, uint64_t, unsigned int, uint64_t)
uint64_t accept_amount_original
cpp_dec_float_100 XDOUBLE
unsigned char blocktimelimit
uint64_t getOfferAmountOriginal() const
uint64_t accept_amount_remaining
void Set(uint64_t d, uint64_t fee, unsigned char btl, unsigned char suba)
int MetaDEx_ADD(const string &sender_addr, unsigned int, uint64_t, int block, unsigned int property_desired, uint64_t amount_desired, const uint256 &txid, unsigned int idx)
std::map< string, CMPOffer > OfferMap
uint64_t getBTCDesiredOriginal()
CMPAccept * DEx_getAccept(const string &seller_addr, unsigned int, const string &buyer_addr)
CChain chainActive
The currently-connected chain of blocks.
unsigned char getSubaction() const
unsigned char getBlockTimeLimit()
std::pair< uint64_t, uint64_t > MetaDExTypePrice
int MetaDEx_CANCEL_ALL_FOR_PAIR(const uint256, unsigned int, const string &, unsigned int, unsigned int)
uint64_t getOfferAmountOriginal()
unsigned int eraseExpiredAccepts(int blockNow)
uint64_t getAcceptAmountRemaining() const
int DEx_payment(uint256 txid, unsigned int vout, string seller, string buyer, uint64_t BTC_paid, int blockNow, uint64_t *nAmended=NULL)
uint64_t getBTCDesiredOriginal() const
uint64_t getMinFee() const
bool reduceAcceptAmountRemaining_andIsZero(const uint64_t really_purchased)
#define OMNI_PROPERTY_BTC
void MetaDEx_debug_print(bool bShowPriceLevel=false, bool bDisplay=false)
int MetaDEx_CANCEL_EVERYTHING(const uint256, unsigned int, const string &)
std::map< XDOUBLE, md_Set > md_PricesMap
int DEx_acceptCreate(const string &buyer, const string &seller, int, uint64_t nValue, int block, uint64_t fee_paid, uint64_t *nAmended=NULL)
int DEx_offerUpdate(const string &seller_addr, unsigned int, uint64_t nValue, int block, uint64_t desired, uint64_t fee, unsigned char btl, const uint256 &txid, uint64_t *nAmended=NULL)
unsigned int getProperty() const
std::string GetHex() const
int DEx_offerDestroy(const string &seller_addr, unsigned int)
static const int64_t COIN
std::set< CMPMetaDEx, MetaDEx_compare > md_Set
void saveOffer(ofstream &file, SHA256_CTX *shaCtx, string const &addr) const
The block chain is a tree shaped structure starting with the genesis block at the root...
unsigned char getBlockTimeLimit() const
unsigned char blocktimelimit
std::string ToString() const
unsigned int getProperty() const
int DEx_acceptDestroy(const string &buyer, const string &seller, int, bool bForceErase=false)
md_Set * get_Indexes(md_PricesMap *p, XDOUBLE price)
uint64_t BTC_desired_original
int64_t GetBlockTime() const
uint64_t BTC_desired_original
CMPOffer(int b, uint64_t a, unsigned int cu, uint64_t d, uint64_t fee, unsigned char btl, const uint256 &tx)
CMPAccept(uint64_t a, int b, unsigned char blt, unsigned int c, uint64_t o, uint64_t btc, const uint256 &txid)
std::map< unsigned int, md_PricesMap > md_PropertiesMap
std::map< string, CMPAccept > AcceptMap
uint64_t offer_amount_original
CMPAccept(uint64_t origA, uint64_t remA, int b, unsigned char blt, unsigned int c, uint64_t o, uint64_t btc, const uint256 &txid)