Skip to content

Commit

Permalink
UI: Improve metadex handling
Browse files Browse the repository at this point in the history
  • Loading branch information
zathras-crypto committed May 12, 2015
1 parent 66ab1d4 commit ebd4322
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 35 deletions.
66 changes: 53 additions & 13 deletions src/mastercore_mdex.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ static MatchReturnType x_Trade(CMPMetaDEx* newo)
md_Set::iterator iitt;
for (iitt = indexes->begin(); iitt != indexes->end();) { // specific price, check all properties
p_older = &(*iitt);
assert(p_older->unitPrice() == sellers_price);
//assert(p_older->unitPrice() == sellers_price);

if (msc_debug_metadex1) file_log("Looking at existing: %s (its prop= %u, its des prop= %u) = %s\n",
xToString(sellers_price), p_older->getProperty(), p_older->getDesProperty(), p_older->ToString());
Expand Down Expand Up @@ -178,12 +178,16 @@ static MatchReturnType x_Trade(CMPMetaDEx* newo)
seller_replacement.setAmountRemaining(seller_amountLeft, "seller_replacement");

// transfer the payment property from buyer to seller
assert(update_tally_map(newo->getAddr(), newo->getProperty(), -seller_amountGot, BALANCE));
assert(update_tally_map(p_older->getAddr(), p_older->getDesProperty(), seller_amountGot, BALANCE));
//assert(update_tally_map(newo->getAddr(), newo->getProperty(), -seller_amountGot, BALANCE));
//assert(update_tally_map(p_older->getAddr(), p_older->getDesProperty(), seller_amountGot, BALANCE));
update_tally_map(newo->getAddr(), newo->getProperty(), -seller_amountGot, BALANCE);
update_tally_map(p_older->getAddr(), p_older->getDesProperty(), seller_amountGot, BALANCE);

// transfer the market (the one being sold) property from seller to buyer
assert(update_tally_map(p_older->getAddr(), p_older->getProperty(), -buyer_amountGot, METADEX_RESERVE));
assert(update_tally_map(newo->getAddr(), newo->getDesProperty(), buyer_amountGot, BALANCE));
//assert(update_tally_map(p_older->getAddr(), p_older->getProperty(), -buyer_amountGot, METADEX_RESERVE));
//assert(update_tally_map(newo->getAddr(), newo->getDesProperty(), buyer_amountGot, BALANCE));
update_tally_map(p_older->getAddr(), p_older->getProperty(), -buyer_amountGot, METADEX_RESERVE);
update_tally_map(newo->getAddr(), newo->getDesProperty(), buyer_amountGot, BALANCE);

NewReturn = TRADED;

Expand Down Expand Up @@ -233,6 +237,34 @@ static MatchReturnType x_Trade(CMPMetaDEx* newo)
return NewReturn;
}

std::string CMPMetaDEx::displayUnitPrice() const
{
XDOUBLE tmpUnitPrice = unitPrice();
bool divByCoin = false;
if (desired_property == OMNI_PROPERTY_MSC || desired_property == OMNI_PROPERTY_TMSC) {
if (!isPropertyDivisible(property)) divByCoin = true;
} else {
if (!isPropertyDivisible(desired_property)) divByCoin = true;
}
if (divByCoin) tmpUnitPrice = tmpUnitPrice / COIN;
std::string displayValue = tmpUnitPrice.str(DISPLAY_PRECISION_LEN, std::ios_base::fixed);
return displayValue;
}

std::string CMPMetaDEx::displayInversePrice() const
{
XDOUBLE tmpInversePrice = inversePrice();
bool divByCoin = false;
if (desired_property == OMNI_PROPERTY_MSC || desired_property == OMNI_PROPERTY_TMSC) {
if (!isPropertyDivisible(property)) divByCoin = true;
} else {
if (!isPropertyDivisible(desired_property)) divByCoin = true;
}
if (divByCoin) tmpInversePrice = tmpInversePrice / COIN;
std::string displayValue = tmpInversePrice.str(DISPLAY_PRECISION_LEN, std::ios_base::fixed);
return displayValue;
}

XDOUBLE CMPMetaDEx::unitPrice() const
{
XDOUBLE effective_price = 0;
Expand Down Expand Up @@ -383,8 +415,10 @@ int mastercore::MetaDEx_ADD(const std::string& sender_addr, uint32_t prop, int64
return METADEX_ERROR -70;
} else {
// move tokens into reserve
assert(update_tally_map(sender_addr, prop, -new_mdex.getAmountRemaining(), BALANCE));
assert(update_tally_map(sender_addr, prop, new_mdex.getAmountRemaining(), METADEX_RESERVE));
//assert(update_tally_map(sender_addr, prop, -new_mdex.getAmountRemaining(), BALANCE));
//assert(update_tally_map(sender_addr, prop, new_mdex.getAmountRemaining(), METADEX_RESERVE));
update_tally_map(sender_addr, prop, -new_mdex.getAmountRemaining(), BALANCE);
update_tally_map(sender_addr, prop, new_mdex.getAmountRemaining(), METADEX_RESERVE);

if (msc_debug_metadex1) file_log("==== INSERTED: %s= %s\n", xToString(new_mdex.unitPrice()), new_mdex.ToString());
if (msc_debug_metadex3) MetaDEx_debug_print();
Expand Down Expand Up @@ -433,8 +467,10 @@ int mastercore::MetaDEx_CANCEL_AT_PRICE(const uint256& txid, unsigned int block,
file_log("%s(): REMOVING %s\n", __FUNCTION__, p_mdex->ToString());

// move from reserve to main
assert(update_tally_map(p_mdex->getAddr(), p_mdex->getProperty(), -p_mdex->getAmountRemaining(), METADEX_RESERVE));
assert(update_tally_map(p_mdex->getAddr(), p_mdex->getProperty(), p_mdex->getAmountRemaining(), BALANCE));
//assert(update_tally_map(p_mdex->getAddr(), p_mdex->getProperty(), -p_mdex->getAmountRemaining(), METADEX_RESERVE));
//assert(update_tally_map(p_mdex->getAddr(), p_mdex->getProperty(), p_mdex->getAmountRemaining(), BALANCE));
update_tally_map(p_mdex->getAddr(), p_mdex->getProperty(), -p_mdex->getAmountRemaining(), METADEX_RESERVE);
update_tally_map(p_mdex->getAddr(), p_mdex->getProperty(), p_mdex->getAmountRemaining(), BALANCE);

// record the cancellation
bool bValid = true;
Expand Down Expand Up @@ -482,8 +518,10 @@ int mastercore::MetaDEx_CANCEL_ALL_FOR_PAIR(const uint256& txid, unsigned int bl
file_log("%s(): REMOVING %s\n", __FUNCTION__, p_mdex->ToString());

// move from reserve to main
assert(update_tally_map(p_mdex->getAddr(), p_mdex->getProperty(), -p_mdex->getAmountRemaining(), METADEX_RESERVE));
assert(update_tally_map(p_mdex->getAddr(), p_mdex->getProperty(), p_mdex->getAmountRemaining(), BALANCE));
//assert(update_tally_map(p_mdex->getAddr(), p_mdex->getProperty(), -p_mdex->getAmountRemaining(), METADEX_RESERVE));
//assert(update_tally_map(p_mdex->getAddr(), p_mdex->getProperty(), p_mdex->getAmountRemaining(), BALANCE));
update_tally_map(p_mdex->getAddr(), p_mdex->getProperty(), -p_mdex->getAmountRemaining(), METADEX_RESERVE);
update_tally_map(p_mdex->getAddr(), p_mdex->getProperty(), p_mdex->getAmountRemaining(), BALANCE);

// record the cancellation
bool bValid = true;
Expand Down Expand Up @@ -539,8 +577,10 @@ int mastercore::MetaDEx_CANCEL_EVERYTHING(const uint256& txid, unsigned int bloc
file_log("%s(): REMOVING %s\n", __FUNCTION__, it->ToString());

// move from reserve to balance
assert(update_tally_map(it->getAddr(), it->getProperty(), -it->getAmountRemaining(), METADEX_RESERVE));
assert(update_tally_map(it->getAddr(), it->getProperty(), it->getAmountRemaining(), BALANCE));
//assert(update_tally_map(it->getAddr(), it->getProperty(), -it->getAmountRemaining(), METADEX_RESERVE));
//assert(update_tally_map(it->getAddr(), it->getProperty(), it->getAmountRemaining(), BALANCE));
update_tally_map(it->getAddr(), it->getProperty(), -it->getAmountRemaining(), METADEX_RESERVE);
update_tally_map(it->getAddr(), it->getProperty(), it->getAmountRemaining(), BALANCE);

// record the cancellation
bool bValid = true;
Expand Down
3 changes: 3 additions & 0 deletions src/mastercore_mdex.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,9 @@ class CMPMetaDEx
XDOUBLE unitPrice() const;
XDOUBLE inversePrice() const;

std::string displayUnitPrice() const;
std::string displayInversePrice() const;

void saveOffer(std::ofstream& file, SHA256_CTX* shaCtx) const;
};

Expand Down
8 changes: 4 additions & 4 deletions src/qt/forms/metadexdialog.ui
Original file line number Diff line number Diff line change
Expand Up @@ -378,7 +378,7 @@
</font>
</property>
<property name="text">
<string>SELL OFFERS</string>
<string>BUY OFFERS</string>
</property>
</widget>
</item>
Expand All @@ -398,7 +398,7 @@
</layout>
</item>
<item>
<widget class="QTableWidget" name="sellList">
<widget class="QTableWidget" name="buyList">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
Expand Down Expand Up @@ -619,7 +619,7 @@
</font>
</property>
<property name="text">
<string>BUY OFFERS</string>
<string>SELL OFFERS</string>
</property>
</widget>
</item>
Expand All @@ -639,7 +639,7 @@
</layout>
</item>
<item>
<widget class="QTableWidget" name="buyList"/>
<widget class="QTableWidget" name="sellList"/>
</item>
</layout>
</widget>
Expand Down
34 changes: 16 additions & 18 deletions src/qt/metadexdialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -216,9 +216,6 @@ void MetaDExDialog::AddRow(bool useBuyList, bool includesMe, const string& price
QTableWidgetItem *priceCell = new QTableWidgetItem(QString::fromStdString(price));
QTableWidgetItem *availableCell = new QTableWidgetItem(QString::fromStdString(available));
QTableWidgetItem *totalCell = new QTableWidgetItem(QString::fromStdString(total));
priceCell->setTextAlignment(Qt::AlignRight + Qt::AlignVCenter);
availableCell->setTextAlignment(Qt::AlignRight + Qt::AlignVCenter);
totalCell->setTextAlignment(Qt::AlignRight + Qt::AlignVCenter);
if(includesMe) {
QFont font;
font.setBold(true);
Expand All @@ -227,10 +224,16 @@ void MetaDExDialog::AddRow(bool useBuyList, bool includesMe, const string& price
totalCell->setFont(font);
}
if (useBuyList) {
ui->buyList->setItem(workingRow, 0, priceCell);
priceCell->setTextAlignment(Qt::AlignRight + Qt::AlignVCenter);
availableCell->setTextAlignment(Qt::AlignRight + Qt::AlignVCenter);
totalCell->setTextAlignment(Qt::AlignRight + Qt::AlignVCenter);
ui->buyList->setItem(workingRow, 0, totalCell);
ui->buyList->setItem(workingRow, 1, availableCell);
ui->buyList->setItem(workingRow, 2, totalCell);
ui->buyList->setItem(workingRow, 2, priceCell);
} else {
priceCell->setTextAlignment(Qt::AlignLeft + Qt::AlignVCenter);
availableCell->setTextAlignment(Qt::AlignLeft + Qt::AlignVCenter);
totalCell->setTextAlignment(Qt::AlignLeft + Qt::AlignVCenter);
ui->sellList->setItem(workingRow, 0, priceCell);
ui->sellList->setItem(workingRow, 1, availableCell);
ui->sellList->setItem(workingRow, 2, totalCell);
Expand All @@ -248,9 +251,8 @@ void MetaDExDialog::UpdateOffers()
if ((useBuyList) && (((!testeco) && (my_it->first != OMNI_PROPERTY_MSC)) || ((testeco) && (my_it->first != OMNI_PROPERTY_TMSC)))) continue;
md_PricesMap & prices = my_it->second;
for (md_PricesMap::iterator it = prices.begin(); it != prices.end(); ++it) { // loop through the sell prices for the property
XDOUBLE unitPrice;
XDOUBLE inversePrice;
string unitPriceStr;
std::string unitPriceStr;
std::string inversePriceStr;
int64_t available = 0, total = 0;
bool includesMe = false;
md_Set & indexes = (it->second);
Expand All @@ -269,20 +271,16 @@ void MetaDExDialog::UpdateOffers()
if(IsMyAddress(obj.getAddr())) includesMe = true;
}
}
unitPrice = obj.unitPrice(); // could be set multiple times but always a same price level
inversePrice = obj.inversePrice();
unitPriceStr = obj.displayUnitPrice();
inversePriceStr = obj.displayInversePrice();
}
if ((available > 0) && (total > 0)) { // if there are any available at this price, add to the sell list
string strAvail;
if (isPropertyDivisible(global_metadex_market)) { strAvail = FormatDivisibleShortMP(available); } else { strAvail = FormatIndivisibleMP(available); }

if ((!isPropertyDivisible(global_metadex_market)) && (useBuyList)) { inversePrice = inversePrice/COIN; }
if ((!isPropertyDivisible(global_metadex_market)) && (!useBuyList)) { unitPrice = unitPrice/COIN; }

if (useBuyList) {
AddRow(useBuyList, includesMe, StripTrailingZeros(inversePrice.str(DISPLAY_PRECISION_LEN, std::ios_base::fixed)), strAvail, FormatDivisibleShortMP(total));
AddRow(useBuyList, includesMe, StripTrailingZeros(inversePriceStr), strAvail, FormatDivisibleShortMP(total));
} else {
AddRow(useBuyList, includesMe, StripTrailingZeros(unitPrice.str(DISPLAY_PRECISION_LEN, std::ios_base::fixed)), strAvail, FormatDivisibleShortMP(total));
AddRow(useBuyList, includesMe, StripTrailingZeros(unitPriceStr), strAvail, FormatDivisibleShortMP(total));
}
}
}
Expand Down Expand Up @@ -344,9 +342,9 @@ void MetaDExDialog::FullRefresh()
ui->sellTotalLabel->setText("0.00000000 " + QString::fromStdString(primaryToken));
ui->sellTM->setText(QString::fromStdString(primaryToken));
ui->buyTM->setText(QString::fromStdString(primaryToken));
ui->buyList->setHorizontalHeaderItem(0, new QTableWidgetItem("Unit Price (" + QString::fromStdString(primaryToken) + ")"));
ui->buyList->setHorizontalHeaderItem(0, new QTableWidgetItem("Total " + QString::fromStdString(primaryToken)));
ui->buyList->setHorizontalHeaderItem(1, new QTableWidgetItem("Total SP#" + QString::fromStdString(FormatIndivisibleMP(global_metadex_market))));
ui->buyList->setHorizontalHeaderItem(2, new QTableWidgetItem("Total " + QString::fromStdString(primaryToken)));
ui->buyList->setHorizontalHeaderItem(2, new QTableWidgetItem("Unit Price (" + QString::fromStdString(primaryToken) + ")"));
ui->sellList->setHorizontalHeaderItem(0, new QTableWidgetItem("Unit Price (" + QString::fromStdString(primaryToken) + ")"));
ui->sellList->setHorizontalHeaderItem(1, new QTableWidgetItem("Total SP#" + QString::fromStdString(FormatIndivisibleMP(global_metadex_market))));
ui->sellList->setHorizontalHeaderItem(2, new QTableWidgetItem("Total " + QString::fromStdString(primaryToken)));
Expand Down

0 comments on commit ebd4322

Please sign in to comment.