From d6214fc9941848f768caac673e8f2ec4983ea727 Mon Sep 17 00:00:00 2001 From: dimxy Date: Sun, 13 Jan 2019 00:12:23 +0500 Subject: [PATCH] corr second opret building/parsing --- src/cc/CCtokens.cpp | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/cc/CCtokens.cpp b/src/cc/CCtokens.cpp index f5716d866..98199687f 100644 --- a/src/cc/CCtokens.cpp +++ b/src/cc/CCtokens.cpp @@ -62,14 +62,16 @@ CScript EncodeTokenOpRet(uint8_t tokenFuncId, uint8_t evalCodeInOpret, uint256 t tokenid = revuint256(tokenid); //uint8_t tokenFuncId = (isTransferrable) ? (uint8_t)'t' : (uint8_t)'l'; - std::vector vpayload; - GetOpReturnData(payload, vpayload); + //std::vector vpayload; + //GetOpReturnData(payload, vpayload); //opret << OP_RETURN << E_MARSHAL(ss << evalCodeInOpret << tokenFuncId << tokenid << payload); opret << OP_RETURN << E_MARSHAL(ss << evalCodeInOpret << tokenFuncId << tokenid << ccType; \ - if(ccType >= 1) ss << voutPubkeys[0]; \ - if(ccType == 2) ss << voutPubkeys[1]; \ - if(payload.size() > 0) ss << vpayload); + if (ccType >= 1) ss << voutPubkeys[0]; \ + if (ccType == 2) ss << voutPubkeys[1];); + + if (payload.size() > 0) + opret << payload; return(opret); } @@ -365,26 +367,26 @@ int64_t IsTokensvout(bool goDeeper, bool checkPubkeys, struct CCcontract_info *c // moved opret checking to this new reusable func (dimxy): std::vector voutPubkeys; - std::vector vcontractOpret, vcontractOpret2; - const uint8_t funcId = ValidateTokenOpret(tx, v, reftokenid, voutPubkeys, vcontractOpret); + std::vector vopretExtra, vcontractOpret; + const uint8_t funcId = ValidateTokenOpret(tx, v, reftokenid, voutPubkeys, vopretExtra); std::cerr << indentStr << "IsTokensvout() ValidateTokenOpret returned=" << (char)(funcId?funcId:' ') << " for txid=" << tx.GetHash().GetHex() << " for tokenid=" << reftokenid.GetHex() << std::endl; if (funcId != 0) { std::cerr << indentStr << "IsTokensvout() ValidateTokenOpret returned not-null" << " for txid=" << tx.GetHash().GetHex() << " for tokenid=" << reftokenid.GetHex() << std::endl; if (checkPubkeys && funcId != 'c') { // verify that the vout is token's (for 'c' there is no pubkeys!): - CScript contractScript = CScript(vcontractOpret); - GetOpReturnData(contractScript, vcontractOpret2); + CScript contractScript = CScript(vopretExtra); + GetOpReturnData(contractScript, vcontractOpret); - std::cerr << "IsTokensvout() vcontractOpret=" << HexStr( vcontractOpret ); - std::cerr << "IsTokensvout() vcontractOpret2=" << HexStr(vcontractOpret2); + std::cerr << "IsTokensvout() vcontractOpret=" << HexStr(vopretExtra) << std::endl; + std::cerr << "IsTokensvout() vcontractOpret2=" << HexStr(vcontractOpret) << std::endl;; - if (vcontractOpret2.size() == 0) { + if (vcontractOpret.size() == 0) { std::cerr << "IsTokensvout() empty contract opret" << std::endl; return 0; } - uint8_t evalCodeInOpret = vcontractOpret2.begin()[0]; + uint8_t evalCodeInOpret = vcontractOpret.begin()[0]; if (voutPubkeys.size() >= 1 && voutPubkeys.size() <= 2) { CTxOut testVout;