From b7341671fa97623020bf8e4781549761775f05cf Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 13 Jan 2019 02:45:51 -1100 Subject: [PATCH] CC baton for credit loop --- src/cc/marmara.cpp | 73 +++++++++++++++++++++++++++++----------------- 1 file changed, 47 insertions(+), 26 deletions(-) diff --git a/src/cc/marmara.cpp b/src/cc/marmara.cpp index ba4e4b005..75f9e0ee4 100644 --- a/src/cc/marmara.cpp +++ b/src/cc/marmara.cpp @@ -87,25 +87,6 @@ int32_t MarmaraUnlockht(int32_t height) return(height + MarmaraRandomize(ind)); } -CScript EncodeMarmaraCoinbaseOpRet(uint8_t funcid,CPubKey pk,int32_t ht) -{ - CScript opret; int32_t unlockht; uint8_t evalcode = EVAL_MARMARA; - unlockht = MarmaraUnlockht(ht); - opret << OP_RETURN << E_MARSHAL(ss << evalcode << funcid << pk << ht << unlockht); - if ( 0 ) - { - std::vector vopret; uint8_t *script,i; - GetOpReturnData(opret,vopret); - script = (uint8_t *)vopret.data(); - { - for (i=0; i vopret; uint8_t *script,e,f,funcid; @@ -131,6 +112,32 @@ uint8_t DecodeMaramaraCoinbaseOpRet(const CScript scriptPubKey,CPubKey &pk,int32 return(0); } +CScript EncodeMarmaraCoinbaseOpRet(uint8_t funcid,CPubKey pk,int32_t ht) +{ + CScript opret; int32_t unlockht; uint8_t evalcode = EVAL_MARMARA; + unlockht = MarmaraUnlockht(ht); + opret << OP_RETURN << E_MARSHAL(ss << evalcode << funcid << pk << ht << unlockht); + if ( 0 ) + { + std::vector vopret; uint8_t *script,i; + GetOpReturnData(opret,vopret); + script = (uint8_t *)vopret.data(); + { + for (i=0; i 0 ) + if ( currency != "MARMARA" ) + errorstr = "for now, only MARMARA loops are supported"; + else if ( amount < txfee ) + errorstr = "amount must be for more than txfee"; + else if ( matures <= chainActive.LastTip->GetHeight() ) + errorstr = "it must mature in the future"; + if ( errorstr == 0 ) { - mtx.vout.push_back(CTxOut(txfee,CScript() << ParseHex(HexStr(senderpk)) << OP_CHECKSIG)); - rawtx = FinalizeCCTx(0,cp,mtx,mypk,txfee,MarmaraOpret('R',issuetxid,senderpk,amount,matures,currency)); - } else errorstr = "dont have enough normal inputs for 2*txfee"; + if ( AddNormalinputs(mtx,mypk,2*txfee,1) > 0 ) + { + errorstr = (char *)"couldnt finalize CCtx"; + mtx.vout.push_back(MakeCC1vout(EVAL_MARMARA,txfee,senderpk)); + rawtx = FinalizeCCTx(0,cp,mtx,mypk,txfee,MarmaraLoopOpret('R',createtxid,senderpk,amount,matures,currency)); + } else errorstr = (char *)"dont have enough normal inputs for 2*txfee"; + } if ( rawtx.size() == 0 || errorstr != 0 ) { result.push_back(Pair("result","error")); @@ -325,6 +341,11 @@ UniValue MarmaraReceive(uint64_t txfee,CPubKey senderpk,int64_t amount,std::stri { result.push_back(Pair("result",(char *)"success")); result.push_back(Pair("rawtx",rawtx)); + result.push_back(Pair("createtxid",createtxid)); + result.push_back(Pair("senderpk",senderpk)); + result.push_back(Pair("amount",ValueFromAmount(amount))); + result.push_back(Pair("matures",matures)); + result.push_back(Pair("currency",currency)); } return(result); }