From 39731c231f9728311a4ac382461cd8a5fa363d68 Mon Sep 17 00:00:00 2001 From: dimxy Date: Sun, 13 Jan 2019 18:06:41 +0500 Subject: [PATCH] try to construct secod opret w/o serialization --- src/cc/CCtokens.cpp | 13 +++++++------ src/cc/heir.cpp | 15 ++++++++++----- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/cc/CCtokens.cpp b/src/cc/CCtokens.cpp index 3bd94f19d..c759f3704 100644 --- a/src/cc/CCtokens.cpp +++ b/src/cc/CCtokens.cpp @@ -71,8 +71,8 @@ CScript EncodeTokenOpRet(uint8_t tokenFuncId, uint8_t evalCodeInOpret, uint256 t opret << OP_RETURN << E_MARSHAL(ss << evalCodeInOpret << tokenFuncId << tokenid << ccType; \ if (ccType >= 1) ss << voutPubkeys[0]; \ - if (ccType == 2) ss << voutPubkeys[1]; ); // \ - // if (vpayload.size() > 0) ss << vpayload;); + if (ccType == 2) ss << voutPubkeys[1]; \ + if (vpayload.size() > 0) ss << vpayload;); // "error 64: scriptpubkey": @@ -84,10 +84,11 @@ CScript EncodeTokenOpRet(uint8_t tokenFuncId, uint8_t evalCodeInOpret, uint256 t // return opret + opretPayloadNoOpcode; // how to attach payload without re-serialization: - opret.resize(opret.size() + vpayload.size()); - CScript::iterator it = opret.begin() + opret.size(); - for (int i = 0; i < vpayload.size(); i++, it++) - *it = vpayload[i]; + // sig_aborted: + // opret.resize(opret.size() + vpayload.size()); + // CScript::iterator it = opret.begin() + opret.size(); + // for (int i = 0; i < vpayload.size(); i++, it++) + // *it = vpayload[i]; return opret; } diff --git a/src/cc/heir.cpp b/src/cc/heir.cpp index 4276fee16..bdc485c5d 100644 --- a/src/cc/heir.cpp +++ b/src/cc/heir.cpp @@ -408,18 +408,23 @@ uint8_t _DecodeHeirEitherOpret(CScript scriptPubKey, uint256 &tokenid, CPubKey& { uint8_t evalCodeTokens = 0; std::vector voutPubkeys; - std::vector vopretExtra; + std::vector vopretExtra, vopretStripped; CScript heirScript = scriptPubKey; - int32_t heirType = HEIR_COINS; if (DecodeTokenOpRet(heirScript, evalCodeTokens, tokenid, voutPubkeys, vopretExtra) != 0) { if (vopretExtra.size() > 1) { // restore the second opret: heirScript = CScript(); - std::vector vopretStripped = std::vector(vopretExtra.begin()+1, vopretExtra.end()); //strip string size - heirScript << OP_RETURN << E_MARSHAL(ss << vopretStripped); - heirType = HEIR_TOKENS; + + E_UNMARSHAL(vopretExtra, { ss >> vopretStripped; }); // std::vector(vopretExtra.begin()+1, vopretExtra.end()); //strip string size + + heirScript << OP_RETURN; + uint32_t i = heirScript.size(); + heirScript << E_MARSHAL(ss << vopretStripped); + for (uint32_t iStripped = 0; iStripped < vopretStripped.size(); iStripped++) + heirScript[i] = vopretStripped[iStripped]; + heirScript.resize(heirScript.size()-1); } else { return (uint8_t)0;