added totals to PriceGetOrderbook
This commit is contained in:
@@ -62,6 +62,7 @@ typedef struct OneBetData {
|
|||||||
} onebetdata;
|
} onebetdata;
|
||||||
|
|
||||||
typedef struct BetInfo {
|
typedef struct BetInfo {
|
||||||
|
uint256 txid;
|
||||||
int64_t averageCostbasis, firstprice, lastprice, liquidationprice, equity;
|
int64_t averageCostbasis, firstprice, lastprice, liquidationprice, equity;
|
||||||
int64_t rektfee;
|
int64_t rektfee;
|
||||||
int32_t lastheight;
|
int32_t lastheight;
|
||||||
@@ -69,7 +70,7 @@ typedef struct BetInfo {
|
|||||||
bool isOpen, isRekt;
|
bool isOpen, isRekt;
|
||||||
uint256 tokenid;
|
uint256 tokenid;
|
||||||
|
|
||||||
std::vector<uint16_t> parsed;
|
std::vector<uint16_t> vecparsed;
|
||||||
std::vector<onebetdata> bets;
|
std::vector<onebetdata> bets;
|
||||||
CPubKey pk;
|
CPubKey pk;
|
||||||
|
|
||||||
@@ -1599,13 +1600,13 @@ int32_t prices_getbetinfo(uint256 bettxid, BetInfo &betinfo)
|
|||||||
return -2;
|
return -2;
|
||||||
|
|
||||||
OneBetData bet1;
|
OneBetData bet1;
|
||||||
if (prices_betopretdecode(bettx.vout.back().scriptPubKey, betinfo.pk, bet1.firstheight, bet1.positionsize, betinfo.leverage, betinfo.firstprice, betinfo.parsed, betinfo.tokenid) == 'B')
|
if (prices_betopretdecode(bettx.vout.back().scriptPubKey, betinfo.pk, bet1.firstheight, bet1.positionsize, betinfo.leverage, betinfo.firstprice, betinfo.vecparsed, betinfo.tokenid) == 'B')
|
||||||
{
|
{
|
||||||
uint256 finaltxid;
|
uint256 finaltxid;
|
||||||
int32_t vini;
|
int32_t vini;
|
||||||
int32_t finaltxheight; //, endheight;
|
int32_t finaltxheight; //, endheight;
|
||||||
//std::vector<OneBetData> bets;
|
//std::vector<OneBetData> bets;
|
||||||
|
betinfo.txid = bettxid;
|
||||||
|
|
||||||
if (CCgetspenttxid(finaltxid, vini, finaltxheight, bettxid, NVOUT_CCMARKER) == 0)
|
if (CCgetspenttxid(finaltxid, vini, finaltxheight, bettxid, NVOUT_CCMARKER) == 0)
|
||||||
betinfo.isOpen = false;
|
betinfo.isOpen = false;
|
||||||
@@ -1618,7 +1619,7 @@ int32_t prices_getbetinfo(uint256 bettxid, BetInfo &betinfo)
|
|||||||
|
|
||||||
prices_enumaddedbets(batontxid, betinfo.bets, bettxid);
|
prices_enumaddedbets(batontxid, betinfo.bets, bettxid);
|
||||||
|
|
||||||
if (prices_scanchain(betinfo.bets, betinfo.leverage, betinfo.parsed, betinfo.lastprice, betinfo.lastheight) < 0) {
|
if (prices_scanchain(betinfo.bets, betinfo.leverage, betinfo.vecparsed, betinfo.lastprice, betinfo.lastheight) < 0) {
|
||||||
return -4;
|
return -4;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1921,7 +1922,7 @@ UniValue PricesInfo(uint256 bettxid, int32_t refheight)
|
|||||||
result.push_back(Pair("rektheight", betinfo.lastheight));
|
result.push_back(Pair("rektheight", betinfo.lastheight));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string expr = prices_getsourceexpression(betinfo.parsed);
|
std::string expr = prices_getsourceexpression(betinfo.vecparsed);
|
||||||
result.push_back(Pair("expression", expr));
|
result.push_back(Pair("expression", expr));
|
||||||
result.push_back(Pair("reduced", prices_getreducedexpr(expr)));
|
result.push_back(Pair("reduced", prices_getreducedexpr(expr)));
|
||||||
// result.push_back(Pair("batontxid", batontxid.GetHex()));
|
// result.push_back(Pair("batontxid", batontxid.GetHex()));
|
||||||
@@ -2002,11 +2003,52 @@ UniValue PricesList(uint32_t filter, CPubKey mypk)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void prices_addbookentry(uint256 txid)
|
static bool prices_addbookentry(uint256 txid, std::vector<BetInfo> &book)
|
||||||
{
|
{
|
||||||
BetInfo betinfo;
|
BetInfo betinfo;
|
||||||
//if( prices_getbetinfo(txid, betinfo) == 0 )
|
if (prices_getbetinfo(txid, betinfo) == 0) {
|
||||||
|
book.push_back(betinfo);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
static bool prices_isopposite(BetInfo p1, BetInfo p2) {
|
||||||
|
if (p1.vecparsed.size() <= 3 && p2.vecparsed.size() <= 3) { // simple synthetic exp
|
||||||
|
|
||||||
|
uint16_t opcode1 = p1.vecparsed[0];
|
||||||
|
uint16_t opcode2 = p2.vecparsed[0];
|
||||||
|
|
||||||
|
int32_t value1 = (opcode1 & (KOMODO_MAXPRICES - 1)); // index or weight
|
||||||
|
int32_t value2 = (opcode2 & (KOMODO_MAXPRICES - 1)); // index or weight
|
||||||
|
|
||||||
|
if ( (opcode1 & KOMODO_PRICEMASK) && (opcode2 & KOMODO_PRICEMASK) ) {
|
||||||
|
char name1[65];
|
||||||
|
char name2[65];
|
||||||
|
if (komodo_pricename(name1, value1) && komodo_pricename(name2, value2)) {
|
||||||
|
|
||||||
|
std::string upperquote1, bottomquote1, upperquote2, bottomquote2;
|
||||||
|
prices_splitpair(std::string(name1), upperquote1, bottomquote1);
|
||||||
|
prices_splitpair(std::string(name2), upperquote2, bottomquote2);
|
||||||
|
|
||||||
|
if (upperquote == "BTC")
|
||||||
|
isTop = true;
|
||||||
|
else if (bottomquote == "BTC")
|
||||||
|
isTop = false;
|
||||||
|
else
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!bottomquote.empty()) {
|
||||||
|
|
||||||
|
for (int j = i + 1; j < book.size(); j++) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
// walk through uxtos on the global address
|
// walk through uxtos on the global address
|
||||||
// calculate the balance:
|
// calculate the balance:
|
||||||
@@ -2016,16 +2058,50 @@ void prices_addbookentry(uint256 txid)
|
|||||||
UniValue PricesGetOrderbook()
|
UniValue PricesGetOrderbook()
|
||||||
{
|
{
|
||||||
UniValue result(UniValue::VARR);
|
UniValue result(UniValue::VARR);
|
||||||
std::vector<std::pair<CAddressIndexKey, CAmount> > addressIndex, addressIndexCC;
|
std::vector<BetInfo> book, opposits;
|
||||||
|
std::vector<std::pair<CAddressIndexKey, CAmount> > addressIndex;
|
||||||
struct CCcontract_info *cp, C;
|
struct CCcontract_info *cp, C;
|
||||||
|
|
||||||
cp = CCinit(&C, EVAL_PRICES);
|
cp = CCinit(&C, EVAL_PRICES);
|
||||||
|
|
||||||
|
// add all bets:
|
||||||
SetCCtxids(addressIndex, cp->normaladdr, false); // old normal marker
|
SetCCtxids(addressIndex, cp->normaladdr, false); // old normal marker
|
||||||
for (std::vector<std::pair<CAddressIndexKey, CAmount> >::const_iterator it = addressIndex.begin(); it != addressIndex.end(); it++)
|
for (std::vector<std::pair<CAddressIndexKey, CAmount> >::const_iterator it = addressIndex.begin(); it != addressIndex.end(); it++)
|
||||||
{
|
{
|
||||||
if (it->first.txindex == NVOUT_NORMALMARKER)
|
if (it->first.txindex == NVOUT_NORMALMARKER)
|
||||||
prices_addbookentry(it->first.txhash);
|
prices_addbookentry(it->first.txhash, book);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// calc total fund amount
|
||||||
|
int64_t totalfund = 0;
|
||||||
|
std::vector<std::pair<CAddressUnspentKey, CAddressUnspentValue> > addressCCunspents;
|
||||||
|
SetCCunspents(addressCCunspents, cp->unspendableCCaddr, true); // cc marker
|
||||||
|
for (std::vector<std::pair<CAddressUnspentKey, CAddressUnspentValue> >::const_iterator it = addressCCunspents.begin(); it != addressCCunspents.end(); it++)
|
||||||
|
{
|
||||||
|
totalfund += it->second.satoshis;
|
||||||
|
}
|
||||||
|
|
||||||
|
// extract out opposit bets:
|
||||||
|
int lastbtcpos = -1;
|
||||||
|
int lastleverage = 0;
|
||||||
|
for (int i = 0; i < book.size() - 1; i++) {
|
||||||
|
for (int j = 0; j < book.size(); j++) {
|
||||||
|
if (book[i].isOpen && book[j].isOpen) {
|
||||||
|
//if (prices_isopposite(book[i], book[j])) {
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int64_t totalliabilities = 0;
|
||||||
|
for (int i = 0; i < book.size() - 1; i++) {
|
||||||
|
if (book[i].isOpen) {
|
||||||
|
totalliabilities += book[i].equity;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result.push_back(Pair("TotalFund", ValueFromAmount(totalfund)));
|
||||||
|
result.push_back(Pair("TotalLiabilities", ValueFromAmount(totalliabilities)));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user