corr liq price calc
This commit is contained in:
@@ -424,6 +424,9 @@ static bool ValidateFinalTx(struct CCcontract_info *cp, Eval *eval, const CTrans
|
|||||||
if( finaltx.vout.size() == 3 && MakeCC1vout(cp->evalcode, finaltx.vout[1].nValue, pricespk) != finaltx.vout[1] )
|
if( finaltx.vout.size() == 3 && MakeCC1vout(cp->evalcode, finaltx.vout[1].nValue, pricespk) != finaltx.vout[1] )
|
||||||
return eval->Invalid("cannot validate vout1 in final tx with global pk");
|
return eval->Invalid("cannot validate vout1 in final tx with global pk");
|
||||||
|
|
||||||
|
// TODO: validate exitfee for 'R'
|
||||||
|
// TODO: validate amount for 'F'
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1262,13 +1265,13 @@ int32_t prices_syntheticprofits(int64_t &costbasis, int32_t firstheight, int32_t
|
|||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (height == firstheight + COSTBASIS_PERIOD) {
|
//if (height == firstheight + COSTBASIS_PERIOD) {
|
||||||
// if costbasis not set, just set it
|
// if costbasis not set, just set it
|
||||||
//costbasis = price;
|
//costbasis = price;
|
||||||
|
|
||||||
// use calculated minmax costbasis
|
// use calculated minmax costbasis
|
||||||
//std::cerr << "prices_syntheticprofits() use permanent costbasis=" << costbasis << " at height=" << height << std::endl;
|
//std::cerr << "prices_syntheticprofits() use permanent costbasis=" << costbasis << " at height=" << height << std::endl;
|
||||||
}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
// normalize to 10,000,000 to prevent underflow
|
// normalize to 10,000,000 to prevent underflow
|
||||||
@@ -1619,7 +1622,7 @@ int32_t prices_scanchain(std::vector<OneBetData> &bets, int16_t leverage, std::v
|
|||||||
|
|
||||||
endheight = height;
|
endheight = height;
|
||||||
int64_t equity = totalposition + totalprofits;
|
int64_t equity = totalposition + totalprofits;
|
||||||
if (equity < (double)totalposition * prices_minmarginpercent(leverage))
|
if (equity <= (int64_t)((double)totalposition * prices_minmarginpercent(leverage)))
|
||||||
{ // we are in loss
|
{ // we are in loss
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1843,15 +1846,15 @@ int32_t prices_getbetinfo(uint256 bettxid, BetInfo &betinfo)
|
|||||||
|
|
||||||
betinfo.liquidationprice = 0;
|
betinfo.liquidationprice = 0;
|
||||||
if (betinfo.leverage != 0) {// prevent zero div
|
if (betinfo.leverage != 0) {// prevent zero div
|
||||||
betinfo.liquidationprice = betinfo.averageCostbasis - betinfo.averageCostbasis / betinfo.leverage;
|
betinfo.liquidationprice = betinfo.averageCostbasis - (betinfo.averageCostbasis * (1 - prices_minmarginpercent(betinfo.leverage)))/ betinfo.leverage;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (betinfo.equity >= (double)totalposition * prices_minmarginpercent(betinfo.leverage))
|
if (betinfo.equity > (int64_t)((double)totalposition * prices_minmarginpercent(betinfo.leverage)))
|
||||||
betinfo.isRekt = false;
|
betinfo.isRekt = false;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
betinfo.isRekt = true;
|
betinfo.isRekt = true;
|
||||||
betinfo.exitfee = totalposition / 500;
|
betinfo.exitfee = (totalposition - betinfo.equity) / 10; // was: totalposition / 500
|
||||||
}
|
}
|
||||||
|
|
||||||
mpz_clear(mpzTotalPosition);
|
mpz_clear(mpzTotalPosition);
|
||||||
|
|||||||
Reference in New Issue
Block a user