earlytxid scriptpubkey vout enabled
validation enabled
This commit is contained in:
@@ -318,6 +318,10 @@ static bool ValidateAddFundingTx(struct CCcontract_info *cp, Eval *eval, const C
|
|||||||
if (MakeCC1vout(cp->evalcode, addfundingtx.vout[1].nValue, pricespk) != addfundingtx.vout[1])
|
if (MakeCC1vout(cp->evalcode, addfundingtx.vout[1].nValue, pricespk) != addfundingtx.vout[1])
|
||||||
return eval->Invalid("cannot validate vout1 in add funding tx with global pk");
|
return eval->Invalid("cannot validate vout1 in add funding tx with global pk");
|
||||||
|
|
||||||
|
// This should be all you need to verify it, maybe also check amount?
|
||||||
|
if (addfundingtx.vout[2].scriptPubKey != KOMODO_EARLYTXID_SCRIPTPUB)
|
||||||
|
return eval->Invalid("the fee was paid to wrong address.");
|
||||||
|
|
||||||
int64_t betamount = addfundingtx.vout[2].nValue;
|
int64_t betamount = addfundingtx.vout[2].nValue;
|
||||||
if (betamount != PRICES_SUBREVSHAREFEE(amount)) {
|
if (betamount != PRICES_SUBREVSHAREFEE(amount)) {
|
||||||
return eval->Invalid("invalid position size in the opreturn");
|
return eval->Invalid("invalid position size in the opreturn");
|
||||||
@@ -455,7 +459,7 @@ bool PricesValidate(struct CCcontract_info *cp,Eval* eval,const CTransaction &tx
|
|||||||
vscript_t firstVinTxOpret;
|
vscript_t firstVinTxOpret;
|
||||||
bool foundFirst = false;
|
bool foundFirst = false;
|
||||||
int32_t ccVinCount = 0;
|
int32_t ccVinCount = 0;
|
||||||
uint32_t prevoutN = 0;
|
uint32_t prevCCoutN = 0;
|
||||||
|
|
||||||
// check basic rules:
|
// check basic rules:
|
||||||
|
|
||||||
@@ -474,13 +478,13 @@ bool PricesValidate(struct CCcontract_info *cp,Eval* eval,const CTransaction &tx
|
|||||||
std::cerr << "PricesValidate() " << "cannot find prices opret in vintx" << std::endl;
|
std::cerr << "PricesValidate() " << "cannot find prices opret in vintx" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!IS_CHARINSTR(funcId, "FR") && vintxOpret.begin()[1] == 'B' && prevoutN == 1) {
|
if (!IS_CHARINSTR(funcId, "FR") && vintxOpret.begin()[1] == 'B' && prevCCoutN == 1) {
|
||||||
//return eval->Invalid("cannot spend bet marker");
|
//return eval->Invalid("cannot spend bet marker");
|
||||||
std::cerr << "PricesValidate() " << " non-final tx cannot spend cc marker vout=" << prevoutN << std::endl;
|
std::cerr << "PricesValidate() " << " non-final tx cannot spend cc marker vout=" << prevCCoutN << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!foundFirst) {
|
if (!foundFirst) {
|
||||||
prevoutN = vin.prevout.n;
|
prevCCoutN = vin.prevout.n;
|
||||||
firstVinTx = vintx;
|
firstVinTx = vintx;
|
||||||
firstVinTxOpret = vintxOpret;
|
firstVinTxOpret = vintxOpret;
|
||||||
foundFirst = true;
|
foundFirst = true;
|
||||||
@@ -503,23 +507,20 @@ bool PricesValidate(struct CCcontract_info *cp,Eval* eval,const CTransaction &tx
|
|||||||
case 'A': // add funding
|
case 'A': // add funding
|
||||||
// check tx structure:
|
// check tx structure:
|
||||||
if (!ValidateAddFundingTx(cp, eval, tx, firstVinTx)) {
|
if (!ValidateAddFundingTx(cp, eval, tx, firstVinTx)) {
|
||||||
//return false; // invalid state is already set in the func
|
|
||||||
std::cerr << "PricesValidate() " << "ValidateAddFundingTx = false " << eval->state.GetRejectReason() << std::endl;
|
std::cerr << "PricesValidate() " << "ValidateAddFundingTx = false " << eval->state.GetRejectReason() << std::endl;
|
||||||
|
return false; // invalid state is already set in the func
|
||||||
}
|
}
|
||||||
|
|
||||||
if (firstVinTxOpret.begin()[1] == 'B') {
|
if (firstVinTxOpret.begin()[1] == 'B') {
|
||||||
if (!ValidateBetTx(cp, eval, firstVinTx)) {// check tx structure
|
if (!ValidateBetTx(cp, eval, firstVinTx)) {// check tx structure
|
||||||
// return false;
|
|
||||||
std::cerr << "PricesValidate() " << "funcId=A ValidatebetTx = false " << eval->state.GetRejectReason() << std::endl;
|
std::cerr << "PricesValidate() " << "funcId=A ValidatebetTx = false " << eval->state.GetRejectReason() << std::endl;
|
||||||
|
return false; // invalid state is already set in the func
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (firstVinTxOpret.begin()[1] == 'A') {
|
|
||||||
// no need to validate the previous addfunding tx (it was validated when added)
|
|
||||||
}
|
|
||||||
|
|
||||||
if (prevoutN != 0) { // check spending rules
|
if (prevCCoutN != 0) { // check spending rules
|
||||||
// return eval->Invalid("incorrect vintx vout to spend");
|
std::cerr << "PricesValidate() " << "addfunding tx incorrect vout to spend=" << prevCCoutN << std::endl;
|
||||||
std::cerr << "PricesValidate() " << "addfunding tx incorrect vout to spend=" << prevoutN << std::endl;
|
return eval->Invalid("incorrect vintx vout to spend");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -543,16 +544,16 @@ bool PricesValidate(struct CCcontract_info *cp,Eval* eval,const CTransaction &tx
|
|||||||
case 'F': // final tx
|
case 'F': // final tx
|
||||||
case 'R':
|
case 'R':
|
||||||
if (!ValidateFinalTx(cp, eval, tx, firstVinTx)) {
|
if (!ValidateFinalTx(cp, eval, tx, firstVinTx)) {
|
||||||
///return false;
|
|
||||||
std::cerr << "PricesValidate() " << "ValidateFinalTx=false " << eval->state.GetRejectReason() << std::endl;
|
std::cerr << "PricesValidate() " << "ValidateFinalTx=false " << eval->state.GetRejectReason() << std::endl;
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
if (!ValidateBetTx(cp, eval, firstVinTx)) {
|
if (!ValidateBetTx(cp, eval, firstVinTx)) {
|
||||||
// return false;
|
|
||||||
std::cerr << "PricesValidate() " << "ValidateBetTx=false " << eval->state.GetRejectReason() << std::endl;
|
std::cerr << "PricesValidate() " << "ValidateBetTx=false " << eval->state.GetRejectReason() << std::endl;
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
if (prevoutN != 1) { // check spending rules
|
if (prevCCoutN != 1) { // check spending rules
|
||||||
// return eval->Invalid("incorrect vout to spend");
|
std::cerr << "PricesValidate() "<< "final tx incorrect vout to spend=" << prevCCoutN << std::endl;
|
||||||
std::cerr << "PricesValidate() "<< "final tx incorrect vout to spend=" << prevoutN << std::endl;
|
return eval->Invalid("incorrect vout to spend");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1476,15 +1477,15 @@ UniValue PricesBet(int64_t txfee, int64_t amount, int16_t leverage, std::vector<
|
|||||||
mtx.vout.push_back(MakeCC1vout(cp->evalcode, txfee, pricespk)); // vout1 cc marker (NVOUT_CCMARKER)
|
mtx.vout.push_back(MakeCC1vout(cp->evalcode, txfee, pricespk)); // vout1 cc marker (NVOUT_CCMARKER)
|
||||||
mtx.vout.push_back(MakeCC1vout(cp->evalcode, betamount, pricespk)); // vout2 betamount
|
mtx.vout.push_back(MakeCC1vout(cp->evalcode, betamount, pricespk)); // vout2 betamount
|
||||||
mtx.vout.push_back(CTxOut(txfee, CScript() << ParseHex(HexStr(pricespk)) << OP_CHECKSIG)); // vout3 normal marker NVOUT_NORMALMARKER - TODO: remove it as we have cc marker now, when move to the new chain
|
mtx.vout.push_back(CTxOut(txfee, CScript() << ParseHex(HexStr(pricespk)) << OP_CHECKSIG)); // vout3 normal marker NVOUT_NORMALMARKER - TODO: remove it as we have cc marker now, when move to the new chain
|
||||||
/*if ( ASSETCHAINS_EARLYTXIDCONTRACT == EVAL_PRICES && KOMODO_EARLYTXID_SCRIPTPUB.size() == 0 )
|
if ( ASSETCHAINS_EARLYTXIDCONTRACT == EVAL_PRICES && KOMODO_EARLYTXID_SCRIPTPUB.size() == 0 )
|
||||||
{
|
{
|
||||||
// Lock here, as in validation we cannot call lock in the function itself.
|
// Lock here, as in validation we cannot call lock in the function itself.
|
||||||
// may not be needed as the validation call to update the global, is called in a LOCK already, and it can only update there and here.
|
// may not be needed as the validation call to update the global, is called in a LOCK already, and it can only update there and here.
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
GetKomodoEarlytxidScriptPub();
|
GetKomodoEarlytxidScriptPub();
|
||||||
}
|
}
|
||||||
mtx.vout.push_back(CTxOut(amount-betamount, KOMODO_EARLYTXID_SCRIPTPUB)); */
|
mtx.vout.push_back(CTxOut(amount-betamount, KOMODO_EARLYTXID_SCRIPTPUB));
|
||||||
mtx.vout.push_back(CTxOut(amount - betamount, CScript() << ParseHex("037c803ec82d12da939ac04379bbc1130a9065c53d8244a61eece1db942cf0efa7") << OP_CHECKSIG)); // vout4 test revshare fee
|
//test: mtx.vout.push_back(CTxOut(amount - betamount, CScript() << ParseHex("037c803ec82d12da939ac04379bbc1130a9065c53d8244a61eece1db942cf0efa7") << OP_CHECKSIG)); // vout4 test revshare fee
|
||||||
|
|
||||||
rawtx = FinalizeCCTx(0, cp, mtx, mypk, txfee, prices_betopret(mypk, nextheight - 1, amount, leverage, firstprice, vec, zeroid));
|
rawtx = FinalizeCCTx(0, cp, mtx, mypk, txfee, prices_betopret(mypk, nextheight - 1, amount, leverage, firstprice, vec, zeroid));
|
||||||
return(prices_rawtxresult(result, rawtx, 0));
|
return(prices_rawtxresult(result, rawtx, 0));
|
||||||
@@ -1546,7 +1547,16 @@ UniValue PricesAddFunding(int64_t txfee, uint256 bettxid, int64_t amount)
|
|||||||
mtx.vin.push_back(CTxIn(batontxid, 0, CScript()));
|
mtx.vin.push_back(CTxIn(batontxid, 0, CScript()));
|
||||||
mtx.vout.push_back(MakeCC1vout(cp->evalcode, txfee, mypk)); // vout0 baton for total funding
|
mtx.vout.push_back(MakeCC1vout(cp->evalcode, txfee, mypk)); // vout0 baton for total funding
|
||||||
mtx.vout.push_back(MakeCC1vout(cp->evalcode, betamount, pricespk)); // vout1 added amount
|
mtx.vout.push_back(MakeCC1vout(cp->evalcode, betamount, pricespk)); // vout1 added amount
|
||||||
mtx.vout.push_back(CTxOut(amount - betamount, CScript() << ParseHex("037c803ec82d12da939ac04379bbc1130a9065c53d8244a61eece1db942cf0efa7") << OP_CHECKSIG)); //vout2 test revshare fee
|
|
||||||
|
if (ASSETCHAINS_EARLYTXIDCONTRACT == EVAL_PRICES && KOMODO_EARLYTXID_SCRIPTPUB.size() == 0)
|
||||||
|
{
|
||||||
|
// Lock here, as in validation we cannot call lock in the function itself.
|
||||||
|
// may not be needed as the validation call to update the global, is called in a LOCK already, and it can only update there and here.
|
||||||
|
LOCK(cs_main);
|
||||||
|
GetKomodoEarlytxidScriptPub();
|
||||||
|
}
|
||||||
|
mtx.vout.push_back(CTxOut(amount - betamount, KOMODO_EARLYTXID_SCRIPTPUB));
|
||||||
|
// test: mtx.vout.push_back(CTxOut(amount - betamount, CScript() << ParseHex("037c803ec82d12da939ac04379bbc1130a9065c53d8244a61eece1db942cf0efa7") << OP_CHECKSIG)); //vout2 test revshare fee
|
||||||
|
|
||||||
rawtx = FinalizeCCTx(0, cp, mtx, mypk, txfee, prices_addopret(bettxid, mypk, amount));
|
rawtx = FinalizeCCTx(0, cp, mtx, mypk, txfee, prices_addopret(bettxid, mypk, amount));
|
||||||
return(prices_rawtxresult(result, rawtx, 0));
|
return(prices_rawtxresult(result, rawtx, 0));
|
||||||
|
|||||||
Reference in New Issue
Block a user