corr final opret
This commit is contained in:
@@ -92,7 +92,7 @@ typedef struct OneBetData {
|
||||
typedef struct BetInfo {
|
||||
uint256 txid;
|
||||
int64_t averageCostbasis, firstprice, lastprice, liquidationprice, equity;
|
||||
int64_t rektfee;
|
||||
int64_t exitfee;
|
||||
int32_t lastheight;
|
||||
int16_t leverage;
|
||||
bool isOpen, isRekt;
|
||||
@@ -108,7 +108,7 @@ typedef struct BetInfo {
|
||||
averageCostbasis = firstprice = lastprice = liquidationprice = equity = 0;
|
||||
lastheight = 0;
|
||||
leverage = 0;
|
||||
rektfee = 0;
|
||||
exitfee = 0;
|
||||
isOpen = isRekt = isUp = false;
|
||||
}
|
||||
} BetInfo;
|
||||
@@ -201,18 +201,18 @@ uint8_t prices_costbasisopretdecode(CScript scriptPubKey,uint256 &bettxid,CPubKe
|
||||
return(0);
|
||||
}
|
||||
|
||||
CScript prices_finalopret(uint256 bettxid,int64_t profits,int32_t height,CPubKey mypk,int64_t firstprice,int64_t costbasis,int64_t addedbets,int64_t positionsize,int16_t leverage)
|
||||
CScript prices_finalopret(bool isRekt, uint256 bettxid, CPubKey pk, int32_t lastheight, int64_t costbasis, int64_t lastprice, int64_t liquidationprice, int64_t equity, int64_t exitfee)
|
||||
{
|
||||
CScript opret;
|
||||
opret << OP_RETURN << E_MARSHAL(ss << EVAL_PRICES << 'F' << bettxid << profits << height << mypk << firstprice << costbasis << addedbets << positionsize << leverage);
|
||||
opret << OP_RETURN << E_MARSHAL(ss << EVAL_PRICES << (isRekt ? 'F' : 'R') << bettxid << pk << lastheight << costbasis << lastprice << liquidationprice << equity << exitfee);
|
||||
return(opret);
|
||||
}
|
||||
|
||||
uint8_t prices_finalopretdecode(CScript scriptPubKey,uint256 &bettxid,int64_t &profits,int32_t &height,CPubKey &pk,int64_t &firstprice,int64_t &costbasis,int64_t &addedbets,int64_t &positionsize,int16_t &leverage)
|
||||
uint8_t prices_finalopretdecode(CScript scriptPubKey, uint256 &bettxid, CPubKey &pk, int32_t &lastheight, int64_t &costbasis, int64_t &lastprice, int64_t &liquidationprice, int64_t &equity, int64_t &exitfee)
|
||||
{
|
||||
std::vector<uint8_t> vopret; uint8_t e,f;
|
||||
GetOpReturnData(scriptPubKey,vopret);
|
||||
if ( vopret.size() > 2 && E_UNMARSHAL(vopret,ss >> e; ss >> f; ss >> bettxid; ss >> profits; ss >> height; ss >> pk; ss >> firstprice; ss >> costbasis; ss >> addedbets; ss >> positionsize; ss >> leverage) != 0 && e == EVAL_PRICES && f == 'F' )
|
||||
if (vopret.size() > 2 && E_UNMARSHAL(vopret, ss >> e; ss >> f; ss >> bettxid; ss >> pk; ss >> lastheight; ss >> costbasis; ss >> lastprice; ss >> liquidationprice; ss >> equity; ss >> exitfee) != 0 && e == EVAL_PRICES && (f == 'F' || f == 'R'))
|
||||
{
|
||||
return(f);
|
||||
}
|
||||
@@ -381,8 +381,8 @@ static bool ValidateFinalTx(struct CCcontract_info *cp, Eval *eval, const CTrans
|
||||
int64_t amount;
|
||||
CPubKey pk, pricespk;
|
||||
int64_t profits;
|
||||
int32_t height;
|
||||
int64_t firstprice, costbasis, addedbets, positionsize;
|
||||
int32_t lastheight;
|
||||
int64_t firstprice, costbasis, lastprice, liquidationprice, equity, fee;
|
||||
int16_t leverage;
|
||||
|
||||
if (finaltx.vout.size() < 3 || finaltx.vout.size() > 4) {
|
||||
@@ -391,7 +391,7 @@ static bool ValidateFinalTx(struct CCcontract_info *cp, Eval *eval, const CTrans
|
||||
}
|
||||
|
||||
vscript_t opret;
|
||||
if (prices_finalopretdecode(finaltx.vout.back().scriptPubKey, bettxid, profits, height, pk, firstprice, costbasis, addedbets, positionsize, leverage) != 'F')
|
||||
if (prices_finalopretdecode(finaltx.vout.back().scriptPubKey, bettxid, pk, lastheight, costbasis, lastprice, liquidationprice, equity, fee) == 0)
|
||||
return eval->Invalid("cannot decode opreturn for final tx");
|
||||
|
||||
if (bettx.GetHash() != bettxid)
|
||||
@@ -1679,13 +1679,19 @@ int32_t prices_getbetinfo(uint256 bettxid, BetInfo &betinfo)
|
||||
|
||||
prices_enumaddedbets(batontxid, betinfo.bets, bettxid);
|
||||
|
||||
/*if (!betinfo.isOpen) {
|
||||
if (!betinfo.isOpen) {
|
||||
CTransaction finaltx;
|
||||
uint256 hashBlock;
|
||||
if (myGetTransaction(finaltxid, finaltx, hashBlock) && finaltx.vout.size() > 0 && prices_finalopretdecode)
|
||||
{
|
||||
vscript_t vopret;
|
||||
if (myGetTransaction(finaltxid, finaltx, hashBlock) && finaltx.vout.size() > 0 && PricesCheckOpret(finaltx, vopret) != 0) {
|
||||
uint8_t funcId = prices_finalopretdecode(finaltx.vout.back().scriptPubKey, betinfo.txid, betinfo.pk, betinfo.lastheight, betinfo.averageCostbasis, betinfo.lastprice, betinfo.liquidationprice, betinfo.equity, betinfo.exitfee);
|
||||
betinfo.isRekt = (funcId == 'R');
|
||||
|
||||
return 0;
|
||||
}
|
||||
}*/
|
||||
else
|
||||
return -6;
|
||||
}
|
||||
|
||||
|
||||
if (prices_scanchain(betinfo.bets, betinfo.leverage, betinfo.vecparsed, betinfo.lastprice, betinfo.lastheight) < 0) {
|
||||
@@ -1756,7 +1762,7 @@ int32_t prices_getbetinfo(uint256 bettxid, BetInfo &betinfo)
|
||||
else
|
||||
{
|
||||
betinfo.isRekt = true;
|
||||
betinfo.rektfee = totalbets / 500;
|
||||
betinfo.exitfee = totalbets / 500;
|
||||
}
|
||||
|
||||
mpz_clear(mpzTotalbets);
|
||||
@@ -1776,18 +1782,13 @@ UniValue PricesRekt(int64_t txfee, uint256 bettxid, int32_t rektheight)
|
||||
CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), nextheight); UniValue result(UniValue::VOBJ);
|
||||
struct CCcontract_info *cp, C;
|
||||
CTransaction bettx;
|
||||
/* uint256 hashBlock, tokenid, batontxid;
|
||||
int64_t firstprice, lastprice = 0, positionsize;
|
||||
int32_t firstheight;
|
||||
int16_t leverage;
|
||||
std::vector<uint16_t> vec; */
|
||||
int64_t myfee = 0;
|
||||
CPubKey pk, mypk, pricespk;
|
||||
std::string rawtx;
|
||||
char destaddr[64];
|
||||
|
||||
cp = CCinit(&C, EVAL_PRICES);
|
||||
if (txfee == 0) // TODO: what did we want tot do with txfee in prices?
|
||||
if (txfee == 0) // TODO: what did we want to do with txfee in prices?
|
||||
txfee = PRICES_TXFEE;
|
||||
mypk = pubkey2pk(Mypubkey());
|
||||
pricespk = GetUnspendable(cp, 0);
|
||||
@@ -1834,7 +1835,7 @@ UniValue PricesRekt(int64_t txfee, uint256 bettxid, int32_t rektheight)
|
||||
prices_betjson(result, betinfo.bets, betinfo.leverage, betinfo.lastheight, betinfo.lastprice); // fill output
|
||||
if (betinfo.isRekt)
|
||||
{
|
||||
myfee = betinfo.rektfee; // consolation fee for loss
|
||||
myfee = betinfo.exitfee; // consolation fee for loss
|
||||
}
|
||||
if (myfee != 0)
|
||||
{
|
||||
@@ -1848,7 +1849,7 @@ UniValue PricesRekt(int64_t txfee, uint256 bettxid, int32_t rektheight)
|
||||
mtx.vout.push_back(MakeCC1vout(cp->evalcode, CCchange, pricespk));
|
||||
|
||||
/// mtx.vout.push_back(MakeCC1vout(cp->evalcode, bettx.vout[2].nValue - myfee - txfee, pricespk)); // change
|
||||
rawtx = FinalizeCCTx(0, cp, mtx, mypk, txfee, prices_finalopret(bettxid, totalprofits, rektheight, mypk, betinfo.firstprice, betinfo.averageCostbasis, totalbets, 0, betinfo.leverage));
|
||||
rawtx = FinalizeCCTx(0, cp, mtx, mypk, txfee, prices_finalopret(false, bettxid, mypk, betinfo.lastheight, betinfo.averageCostbasis, betinfo.lastprice, betinfo.liquidationprice, betinfo.equity, myfee));
|
||||
return(prices_rawtxresult(result, rawtx, 0));
|
||||
}
|
||||
else
|
||||
@@ -1866,12 +1867,6 @@ UniValue PricesCashout(int64_t txfee, uint256 bettxid)
|
||||
CMutableTransaction mtx = CreateNewContextualCMutableTransaction(Params().GetConsensus(), nextheight);
|
||||
UniValue result(UniValue::VOBJ);
|
||||
struct CCcontract_info *cp, C; char destaddr[64];
|
||||
/* CTransaction bettx;
|
||||
uint256 hashBlock, batontxid, tokenid;
|
||||
int64_t positionsize, firstprice, lastprice = 0;
|
||||
int32_t firstheight;
|
||||
int16_t leverage;
|
||||
std::vector<uint16_t> vec;*/
|
||||
int64_t CCchange = 0, inputsum;
|
||||
CPubKey pk, mypk, pricespk;
|
||||
std::string rawtx;
|
||||
@@ -1938,7 +1933,7 @@ UniValue PricesCashout(int64_t txfee, uint256 bettxid)
|
||||
if (CCchange >= txfee)
|
||||
mtx.vout.push_back(MakeCC1vout(cp->evalcode, CCchange, pricespk));
|
||||
// TODO: what should the opret param be:
|
||||
rawtx = FinalizeCCTx(0, cp, mtx, mypk, txfee, prices_finalopret(bettxid, totalprofits, nextheight - 1, mypk, betinfo.firstprice, betinfo.averageCostbasis, totalbets, 0, betinfo.leverage));
|
||||
rawtx = FinalizeCCTx(0, cp, mtx, mypk, txfee, prices_finalopret(false, bettxid, mypk, nextheight-1, betinfo.averageCostbasis, betinfo.lastprice, betinfo.liquidationprice, betinfo.equity, txfee));
|
||||
return(prices_rawtxresult(result, rawtx, 0));
|
||||
|
||||
}
|
||||
@@ -1985,7 +1980,7 @@ UniValue PricesInfo(uint256 bettxid, int32_t refheight)
|
||||
else
|
||||
{
|
||||
result.push_back(Pair("rekt", (int64_t)1));
|
||||
result.push_back(Pair("rektfee", betinfo.rektfee));
|
||||
result.push_back(Pair("rektfee", betinfo.exitfee));
|
||||
result.push_back(Pair("rektheight", betinfo.lastheight));
|
||||
}
|
||||
|
||||
@@ -2104,26 +2099,30 @@ static bool prices_ispositionup(const std::vector<uint16_t> &vecparsed, int16_t
|
||||
uint16_t opcode1 = vecparsed[1];
|
||||
bool isInverted = ((opcode1 & KOMODO_PRICEMASK) == PRICES_INV);
|
||||
|
||||
std::cerr << "prices_ispositionup upperquote=" << upperquote << " bottomquote=" << bottomquote << " opcode1=" << opcode1 << " (opcode1 & KOMODO_PRICEMASK)=" << (opcode1 & KOMODO_PRICEMASK) << std::endl;
|
||||
//std::cerr << "prices_ispositionup upperquote=" << upperquote << " bottomquote=" << bottomquote << " opcode1=" << opcode1 << " (opcode1 & KOMODO_PRICEMASK)=" << (opcode1 & KOMODO_PRICEMASK) << std::endl;
|
||||
|
||||
if (upperquote == "BTC" || bottomquote == "BTC") { // it is relatively btc
|
||||
if (upperquote == "BTC" && (leverage > 0 && !isInverted || leverage < 0 && isInverted) ||
|
||||
bottomquote == "BTC" && (leverage < 0 && !isInverted || leverage > 0 && isInverted)) {
|
||||
std::cerr << "prices_ispositionup return true for BTC for expr=" << prices_getsourceexpression(vecparsed) << std::endl;
|
||||
std::cerr << "prices_ispositionup returns true for BTC for expr=" << prices_getsourceexpression(vecparsed) << std::endl;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
else {
|
||||
std::cerr << "prices_ispositionup returns false for BTC for expr=" << prices_getsourceexpression(vecparsed) << std::endl;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (upperquote == "USD" || bottomquote == "USD") { // it is relatively usd
|
||||
if (upperquote == "USD" && (leverage > 0 && !isInverted || leverage < 0 && isInverted) ||
|
||||
bottomquote == "USD" && (leverage < 0 && !isInverted || leverage > 0 && isInverted)) {
|
||||
std::cerr << "prices_ispositionup return true for USD for expr=" << prices_getsourceexpression(vecparsed) << std::endl;
|
||||
std::cerr << "prices_ispositionup returns true for USD for expr=" << prices_getsourceexpression(vecparsed) << std::endl;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
else {
|
||||
std::cerr << "prices_ispositionup returns false for USD for expr=" << prices_getsourceexpression(vecparsed) << std::endl;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2252,7 +2251,7 @@ void prices_getorderbook(std::map<std::string, std::vector<BetInfo> > & bookmatc
|
||||
}
|
||||
}
|
||||
else {
|
||||
fundTotals.totalRekt += (betspos - book[0].rektfee);
|
||||
fundTotals.totalRekt += (betspos - book[0].exitfee);
|
||||
//TODO: store rekt
|
||||
}
|
||||
book.erase(book.begin());
|
||||
|
||||
Reference in New Issue
Block a user