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