From 39e950f8d87f20879829c0c94a026cb188b37104 Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Fri, 19 Oct 2018 16:17:37 +0200 Subject: [PATCH 01/54] Fix oraclefeed bugs and gatewaysmultisig rpc call --- src/cc/dapps/oraclefeed.c | 7 ++++--- src/wallet/rpcwallet.cpp | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index eaf488a34..3662b7742 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -332,6 +332,7 @@ cJSON *get_komodocli(char *refcoin,char **retstrp,char *acname,char *method,char if ( (jsonstr= filestr(&fsize,fname)) != 0 ) { //fprintf(stderr,"%s -> jsonstr.(%s)\n",cmdstr,jsonstr); + jsonstr[strlen(jsonstr)-1]='\0'; if ( (jsonstr[0] != '{' && jsonstr[0] != '[') || (retjson= cJSON_Parse(jsonstr)) == 0 ) *retstrp = jsonstr; else free(jsonstr); @@ -584,7 +585,7 @@ char *createmultisig(char *refcoin,char *acname,char *depositaddr,char *signerad return(0); } satoshis -= txfee; - sprintf(array,"[\"%s\"]",depositaddr); + sprintf(array,"\'[\"%s\"]\'",depositaddr); if ( (retjson= get_komodocli(refcoin,&retstr,acname,"listunspent","1","99999999",array,"")) != 0 ) { //createrawtransaction [{"txid":"id","vout":n},...] {"address":amount,...} @@ -628,7 +629,7 @@ cJSON *addmultisignature(char *refcoin,char *acname,char *signeraddr,char *rawtx char *retstr,*hexstr; cJSON *retjson; if ( (retjson= get_komodocli(refcoin,&retstr,acname,"signrawtransaction",rawtx,"","","")) != 0 ) { - if ( jint(retjson,"complete") != 0 ) + if ( is_cJSON_True(jobj(retjson,"complete")) != 0 ) return(retjson); else if ( (hexstr= jstr(retjson,"hex")) != 0 && strlen(hexstr) > strlen(rawtx) ) { @@ -814,7 +815,7 @@ void update_gatewayspending(char *refcoin,char *acname,char *bindtxidstr,int32_t { if ( (clijson= addmultisignature(refcoin,"",signeraddr,rawtx)) != 0 ) { - if ( jint(clijson,"complete") != 0 ) + if ( is_cJSON_True(jobj(clijson,"complete")) != 0 ) { cointxid = komodobroadcast(refcoin,"",clijson); if ( bits256_nonz(cointxid) != 0 ) diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index e7c8e2bdd..59f0b6ba7 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -5593,7 +5593,7 @@ UniValue gatewayspending(const UniValue& params, bool fHelp) UniValue gatewaysmultisig(const UniValue& params, bool fHelp) { UniValue result(UniValue::VOBJ); uint256 bindtxid,withtxid; std::string coin,hex; char *txidaddr; - if ( fHelp || params.size() != 2 ) + if ( fHelp || params.size() != 4 ) throw runtime_error("gatewaysmultisig bindtxid coin withtxid txidaddr\n"); if ( ensure_CCrequirements() < 0 ) throw runtime_error("to use CC contracts, you need to launch daemon with valid -pubkey= for an address in your wallet\n"); From 58c81292536f88491d85742fd3aa64970f40158e Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Fri, 19 Oct 2018 20:38:10 +0200 Subject: [PATCH 02/54] Another oraclefeed fix --- src/cc/dapps/oraclefeed.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index 3662b7742..aca027b07 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -601,8 +601,8 @@ char *createmultisig(char *refcoin,char *acname,char *depositaddr,char *signerad jaddnum(vouts,depositaddr,(double)change/SATOSHIDEN); } char *argA,*argB; - argA = jprint(vins,1); - argB = jprint(vouts,1); + sprintf(argA,"\'%s\'",jprint(vins,1)); + sprintf(argB,"\'%s\'",jprint(vouts,1)); if ( (retjson2= get_komodocli(refcoin,&txstr,acname,"createrawtransaction",argA,argB,"","")) != 0 ) { printf("createmultisig: unexpected JSON2.(%s)\n",jprint(retjson2,0)); From 029bd0dd5d331d21b5df5c542f9afb76a735fa66 Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Fri, 19 Oct 2018 20:58:26 +0200 Subject: [PATCH 03/54] Fix --- src/cc/dapps/oraclefeed.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index aca027b07..d9bda7309 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -600,9 +600,14 @@ char *createmultisig(char *refcoin,char *acname,char *depositaddr,char *signerad change = (total - satoshis); jaddnum(vouts,depositaddr,(double)change/SATOSHIDEN); } - char *argA,*argB; - sprintf(argA,"\'%s\'",jprint(vins,1)); - sprintf(argB,"\'%s\'",jprint(vouts,1)); + char *tmpA=jprint(vins,1); + char *tmpB=jprint(vouts,1); + char *argA=malloc(sizeof(char) * (strlen(tmpA)+3)); + char *argB=malloc(sizeof(char) * (strlen(tmpB)+3)); + sprintf(argA,"\'%s\'",tmpA); + sprintf(argB,"\'%s\'",tmpB); + printf("%s\n",argA); + printf("%s\n",argB); if ( (retjson2= get_komodocli(refcoin,&txstr,acname,"createrawtransaction",argA,argB,"","")) != 0 ) { printf("createmultisig: unexpected JSON2.(%s)\n",jprint(retjson2,0)); From 2fd999a2f674168cb34947f012f5f640871928cd Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Fri, 26 Oct 2018 13:00:16 +0200 Subject: [PATCH 04/54] Multisig withdraw fix --- src/cc/CCGateways.h | 3 +- src/cc/dapps/oraclefeed.c | 112 +++++++++++++++++++++++--------------- src/cc/gateways.cpp | 85 +++++++++++++++++++++-------- src/rpcserver.cpp | 1 + src/rpcserver.h | 1 + src/wallet/rpcwallet.cpp | 34 +++++++++--- 6 files changed, 162 insertions(+), 74 deletions(-) diff --git a/src/cc/CCGateways.h b/src/cc/CCGateways.h index b584ba5d0..70c50dcdb 100644 --- a/src/cc/CCGateways.h +++ b/src/cc/CCGateways.h @@ -27,7 +27,8 @@ std::string GatewaysClaim(uint64_t txfee,uint256 bindtxid,std::string refcoin,ui std::string GatewaysWithdraw(uint64_t txfee,uint256 bindtxid,std::string refcoin,std::vector withdrawpub,int64_t amount); UniValue GatewaysPendingWithdraws(uint256 bindtxid,std::string refcoin); std::string GatewaysMarkdone(uint64_t txfee,uint256 withdrawtxid,std::string refcoin,uint256 cointxid); -std::string GatewaysMultisig(uint64_t txfee,std::string refcoin,uint256 bindtxid,uint256 withdrawtxid,char *txidaddr); +std::string GatewaysMultisig(char *txidaddr); +std::string GatewaysPartialSign(uint64_t txfee,char* txidaddr,std::string refcoin, std::string hex); // CCcustom UniValue GatewaysInfo(uint256 bindtxid); diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index d9bda7309..e85206071 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -615,6 +615,8 @@ char *createmultisig(char *refcoin,char *acname,char *depositaddr,char *signerad } else if ( txstr == 0 ) printf("createmultisig: null txstr and JSON2\n"); + free(tmpA); + free(tmpB); free(argA); free(argB); } @@ -646,10 +648,10 @@ cJSON *addmultisignature(char *refcoin,char *acname,char *signeraddr,char *rawtx return(0); } -char *get_gatewaysmultisig(char *refcoin,char *acname,char *bindtxidstr,char *withtxidstr,char *txidaddr) +char *get_gatewaysmultisig(char *refcoin,char *acname,char *txidaddr) { char *retstr,*hexstr,*hex=0; cJSON *retjson; - if ( (retjson= get_komodocli("KMD",&retstr,acname,"gatewaysmultisig",bindtxidstr,refcoin,withtxidstr,txidaddr)) != 0 ) + if ( (retjson= get_komodocli("KMD",&retstr,acname,"gatewaysmultisig",txidaddr,"","","")) != 0 ) { if ( (hexstr= jstr(retjson,"hex")) != 0 ) hex = clonestr(hexstr); @@ -658,6 +660,21 @@ char *get_gatewaysmultisig(char *refcoin,char *acname,char *bindtxidstr,char *wi return(hex); } +int32_t gatewayspartialsign(char *refcoin,char *acname,char *txidaddr,char *hex) +{ + char str[65],str2[65],*retstr; cJSON *retjson; + if ( (retjson= get_komodocli(refcoin,&retstr,acname,"gatewayspartialsign",txidaddr,refcoin,hex,"")) != 0 ) + { + komodobroadcast(refcoin,acname,retjson); + return(jint(retjson,"rank")); + } + else if ( retstr != 0 ) + { + printf("error parsing gatewaysmarkdone.(%s)\n",retstr); + free(retstr); + } +} + void gatewaysmarkdone(char *refcoin,char *acname,bits256 withtxid,char *coin,bits256 cointxid) { char str[65],str2[65],*retstr; cJSON *retjson; @@ -733,13 +750,20 @@ int32_t tx_has_voutaddress(char *refcoin,char *acname,bits256 txid,char *coinadd return(retval); } -int32_t coinaddrexists(char *refcoin,char *acname,char *coinaddr) +int32_t sendfromthisnode(char *refcoin,char *acname,char *coinaddr) { - cJSON *array; bits256 txid; int32_t i,n,num=0; + cJSON *array,*item; bits256 txid; int32_t i,n,num=0; char *tmptxid,*retstr; if ( (array= get_addressutxos(refcoin,acname,coinaddr)) != 0 ) { - num = cJSON_GetArraySize(array); - free_json(array); + for (i=0; i","amount":0.0001},{"address":"","amount":}]' - txid = sendtoaddress("KMD",acname,txidaddr,10000); - if ( bits256_nonz(txid) != 0 && coinaddrexists("KMD",acname,txidaddr) > 0 ) + if ( (satoshis= jdouble(item,"amount")*SATOSHIDEN) != 0 && sendfromthisnode("KMD",acname,txidaddr) == 0) + { + // the actual withdraw + if ( strcmp(depositaddr,signeraddr) == 0 ) { - // the actual withdraw - if ( strcmp(depositaddr,signeraddr) == 0 ) + txid= sendtoaddress("KMD",acname,txidaddr,10000); + if (bits256_nonz(txid) != 0) { cointxid = sendtoaddress(refcoin,"",withdrawaddr,satoshis); - if ( bits256_nonz(cointxid) != 0 ) + if ( bits256_nonz(cointxid) != 0) { fprintf(stderr,"withdraw %s %s %s %.8f processed\n",refcoin,bits256_str(str,cointxid),withdrawaddr,(double)satoshis/SATOSHIDEN); gatewaysmarkdone("KMD",acname,origtxid,refcoin,cointxid); @@ -812,36 +835,39 @@ void update_gatewayspending(char *refcoin,char *acname,char *bindtxidstr,int32_t } else { - if ( (rawtx= get_gatewaysmultisig(refcoin,acname,bindtxidstr,bits256_str(str,origtxid),txidaddr)) == 0 ) - { - rawtx = createmultisig(refcoin,"",depositaddr,signeraddr,withdrawaddr,satoshis); - } - if ( rawtx != 0 ) - { - if ( (clijson= addmultisignature(refcoin,"",signeraddr,rawtx)) != 0 ) - { - if ( is_cJSON_True(jobj(clijson,"complete")) != 0 ) - { - cointxid = komodobroadcast(refcoin,"",clijson); - if ( bits256_nonz(cointxid) != 0 ) - { - fprintf(stderr,"withdraw %s M.%d N.%d %s %s %.8f processed\n",refcoin,M,N,bits256_str(str,cointxid),withdrawaddr,(double)satoshis/SATOSHIDEN); - gatewaysmarkdone("KMD",acname,origtxid,refcoin,cointxid); - } - } - else if ( jint(clijson,"partialtx") != 0 ) - { - // 10000 + ith -> txidaddr - txid = komodobroadcast("KMD",acname,clijson); - fprintf(stderr,"%s M.%d of N.%d partialtx %s sent\n",refcoin,M,N,bits256_str(str,txid)); - } - free_json(clijson); - } - processed++; - free(rawtx); - } else fprintf(stderr,"couldnt create msig rawtx\n"); + fprintf(stderr,"ERROR sending withdraw marker %s %s to %s %.8f processed\n",refcoin,bits256_str(str,cointxid),txidaddr,(double)10000/SATOSHIDEN); } } + else + { + if ( (rawtx= get_gatewaysmultisig(refcoin,acname,txidaddr)) == 0 ) + { + rawtx = createmultisig(refcoin,"",depositaddr,signeraddr,withdrawaddr,satoshis); + } + if ( rawtx != 0 ) + { + if ( (clijson= addmultisignature(refcoin,"",signeraddr,rawtx)) != 0 ) + { + if ( is_cJSON_True(jobj(clijson,"complete")) != 0 ) + { + cointxid = komodobroadcast(refcoin,"",clijson); + if ( bits256_nonz(cointxid) != 0 ) + { + fprintf(stderr,"withdraw %s M.%d N.%d %s %s %.8f processed\n",refcoin,M,N,bits256_str(str,cointxid),withdrawaddr,(double)satoshis/SATOSHIDEN); + gatewaysmarkdone("KMD",acname,origtxid,refcoin,cointxid); + } + } + else if ( jint(clijson,"partialtx") != 0 ) + { + K=gatewayspartialsign(refcoin,acname,txidaddr,jstr(retjson,"hex")); + fprintf(stderr,"%d of %d partialtx %s sent\n",K,N,bits256_str(str,txid)); + } + free_json(clijson); + } + processed++; + free(rawtx); + } else fprintf(stderr,"couldnt create msig rawtx\n"); + } } else if ( retval > 0 ) { diff --git a/src/cc/gateways.cpp b/src/cc/gateways.cpp index d2c43ad56..6d1bff5c9 100644 --- a/src/cc/gateways.cpp +++ b/src/cc/gateways.cpp @@ -178,6 +178,18 @@ uint8_t DecodeGatewaysOpRet(const CScript &scriptPubKey,std::string &coin,uint25 return(0); } +uint8_t DecodeGatewaysPartialOpRet(const CScript &scriptPubKey,int32_t &K, CPubKey &signerpk, std::string &coin,std::string &hex) +{ + std::vector vopret; uint8_t *script,e,f; + GetOpReturnData(scriptPubKey, vopret); + script = (uint8_t *)vopret.data(); + if ( vopret.size() > 2 && E_UNMARSHAL(vopret,ss >> e; ss >> f; ss >> K; ss >> signerpk; ss >> coin; ss >> hex) != 0 ) + { + return(f); + } + return(0); +} + uint8_t DecodeGatewaysBindOpRet(char *depositaddr,const CScript &scriptPubKey,std::string &coin,uint256 &tokenid,int64_t &totalsupply,uint256 &oracletxid,uint8_t &M,uint8_t &N,std::vector &pubkeys,uint8_t &taddr,uint8_t &prefix,uint8_t &prefix2) { std::vector vopret; uint8_t *script,e,f; @@ -873,31 +885,60 @@ UniValue GatewaysPendingWithdraws(uint256 bindtxid,std::string refcoin) return(result); } -std::string GatewaysMultisig(uint64_t txfee,std::string refcoin,uint256 bindtxid,uint256 withdrawtxid,char *txidaddr) +std::string GatewaysMultisig(char *txidaddr) { - UniValue result(UniValue::VOBJ); std::string coin,hex; char str[67],numstr[65],depositaddr[64],gatewaysassets[64]; uint8_t M,N; std::vector pubkeys; uint8_t taddr,prefix,prefix2; uint256 tokenid,oracletxid,hashBlock; CTransaction tx; CPubKey Gatewayspk,mypk; struct CCcontract_info *cp,C; int32_t i,n,complete,partialtx; int64_t totalsupply; - cp = CCinit(&C,EVAL_GATEWAYS); - if ( txfee == 0 ) - txfee = 10000; - complete = partialtx = 0; - mypk = pubkey2pk(Mypubkey()); - Gatewayspk = GetUnspendable(cp,0); - _GetCCaddress(gatewaysassets,EVAL_GATEWAYS,Gatewayspk); - if ( GetTransaction(bindtxid,tx,hashBlock,false) != 0 ) + std::string parthex,hex,refcoin; uint256 txid,hashBlock; CTransaction tx; int32_t i,maxK,K; CPubKey signerpk; + std::vector > unspentOutputs; + + SetCCunspents(unspentOutputs,txidaddr); + if (unspentOutputs.size()==0) return (""); + maxK=0; + for (std::vector >::const_iterator it=unspentOutputs.begin(); it!=unspentOutputs.end(); it++) { - depositaddr[0] = 0; - if ( tx.vout.size() > 0 && DecodeGatewaysBindOpRet(depositaddr,tx.vout[tx.vout.size()-1].scriptPubKey,coin,tokenid,totalsupply,oracletxid,M,N,pubkeys,taddr,prefix,prefix2) != 0 && M <= N && N > 1 && coin == refcoin ) + txid = it->first.txhash; + if (GetTransaction(txid,tx,hashBlock,false) != 0 && tx.vout.size() > 0 && DecodeGatewaysPartialOpRet(tx.vout[tx.vout.size()-1].scriptPubKey,K,signerpk,refcoin,hex) == 'P' && K>maxK ) { - // need a decentralized way to add signatures to msig tx - n = pubkeys.size(); - for (i=0; i0) return(parthex); + else return (""); +} + +std::string GatewaysPartialSign(uint64_t txfee,char* txidaddr,std::string refcoin, std::string hex) +{ + CMutableTransaction mtx; CScript opret; CPubKey mypk,gatewayspk,signerpk; struct CCcontract_info *cp,C; CTransaction tx; + std::vector > unspentOutputs; + int32_t maxK,K; uint256 txid,parttxid,hashBlock; + cp = CCinit(&C,EVAL_GATEWAYS); + if ( txfee == 0 ) + txfee = 5000; + mypk = pubkey2pk(Mypubkey()); + gatewayspk = GetUnspendable(cp,0); + SetCCunspents(unspentOutputs,txidaddr); + if (unspentOutputs.size()==0) + { + if (AddNormalinputs(mtx,mypk,2*txfee,2)==0) + fprintf(stderr,"error adding funds for partialsign\n"); + } + else + { + maxK=0; + for (std::vector >::const_iterator it=unspentOutputs.begin(); it!=unspentOutputs.end(); it++) + { + txid = it->first.txhash; + if (GetTransaction(txid,tx,hashBlock,false) != 0 && tx.vout.size() > 0 && DecodeGatewaysPartialOpRet(tx.vout[tx.vout.size()-1].scriptPubKey,K,signerpk,refcoin,hex) == 'P' && K>maxK ) + { + maxK=K; + parttxid=txid; + } + } + if (maxK>0) mtx.vin.push_back(CTxIn(parttxid,0,CScript())); + else fprintf(stderr,"Error finding previous partial tx\n"); + } + + mtx.vout.push_back(CTxOut(5000,CScript() << ParseHex(HexStr(gatewayspk)) << OP_CHECKSIG)); + opret << OP_RETURN << E_MARSHAL(ss << cp->evalcode << 'P' << K << mypk << refcoin << hex); + return(FinalizeCCTx(0,cp,mtx,mypk,txfee,opret)); } diff --git a/src/rpcserver.cpp b/src/rpcserver.cpp index 7d2eab1e3..e4dcdbbbd 100644 --- a/src/rpcserver.cpp +++ b/src/rpcserver.cpp @@ -426,6 +426,7 @@ static const CRPCCommand vRPCCommands[] = { "gateways", "gatewayspending", &gatewayspending, true }, { "gateways", "gatewaysmultisig", &gatewaysmultisig, true }, { "gateways", "gatewaysmarkdone", &gatewaysmarkdone, true }, + { "gateways", "gatewayspartialsign", &gatewayspartialsign, true }, /* dice */ { "dice", "dicelist", &dicelist, true }, diff --git a/src/rpcserver.h b/src/rpcserver.h index a78f1b6fc..cf23f6496 100644 --- a/src/rpcserver.h +++ b/src/rpcserver.h @@ -253,6 +253,7 @@ extern UniValue gatewayswithdraw(const UniValue& params, bool fHelp); extern UniValue gatewayspending(const UniValue& params, bool fHelp); extern UniValue gatewaysmarkdone(const UniValue& params, bool fHelp); extern UniValue gatewaysmultisig(const UniValue& params, bool fHelp); +extern UniValue gatewayspartialsign(const UniValue& params, bool fHelp); extern UniValue channelsinfo(const UniValue& params, bool fHelp); extern UniValue channelsopen(const UniValue& params, bool fHelp); extern UniValue channelspayment(const UniValue& params, bool fHelp); diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 59f0b6ba7..014f8973e 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -5592,18 +5592,36 @@ UniValue gatewayspending(const UniValue& params, bool fHelp) UniValue gatewaysmultisig(const UniValue& params, bool fHelp) { - UniValue result(UniValue::VOBJ); uint256 bindtxid,withtxid; std::string coin,hex; char *txidaddr; - if ( fHelp || params.size() != 4 ) - throw runtime_error("gatewaysmultisig bindtxid coin withtxid txidaddr\n"); + UniValue result(UniValue::VOBJ); std::string hex; char *txidaddr; + if ( fHelp || params.size() != 1 ) + throw runtime_error("gatewaysmultisig txidaddr\n"); if ( ensure_CCrequirements() < 0 ) throw runtime_error("to use CC contracts, you need to launch daemon with valid -pubkey= for an address in your wallet\n"); const CKeyStore& keystore = *pwalletMain; - LOCK2(cs_main, pwalletMain->cs_wallet); - bindtxid = Parseuint256((char *)params[0].get_str().c_str()); + LOCK2(cs_main, pwalletMain->cs_wallet); + txidaddr = (char *)params[0].get_str().c_str(); + hex = GatewaysMultisig(txidaddr); + if ( hex.size() > 0 ) + { + result.push_back(Pair("result", "success")); + result.push_back(Pair("hex",hex)); + } else ERR_RESULT("couldnt gatewaysmultisig"); + return(result); +} + +UniValue gatewayspartialsign(const UniValue& params, bool fHelp) +{ + UniValue result(UniValue::VOBJ); std::string coin,parthex,hex; char *txidaddr; + if ( fHelp || params.size() != 3 ) + throw runtime_error("gatewayspartialsign txidaddr refcoin\n"); + if ( ensure_CCrequirements() < 0 ) + throw runtime_error("to use CC contracts, you need to launch daemon with valid -pubkey= for an address in your wallet\n"); + const CKeyStore& keystore = *pwalletMain; + LOCK2(cs_main, pwalletMain->cs_wallet); + txidaddr = (char *)params[0].get_str().c_str(); coin = params[1].get_str(); - withtxid = Parseuint256((char *)params[2].get_str().c_str()); - txidaddr = (char *)params[3].get_str().c_str(); - hex = GatewaysMultisig(0,coin,bindtxid,withtxid,txidaddr); + coin = params[2].get_str(); + hex = GatewaysPartialSign(0,txidaddr,coin,parthex); if ( hex.size() > 0 ) { result.push_back(Pair("result", "success")); From 4dbfd427b712bc69bef7e8165490d8da192b0ece Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Fri, 26 Oct 2018 16:40:58 +0200 Subject: [PATCH 05/54] Fix --- src/cc/dapps/oraclefeed.c | 10 +++++----- src/cc/gateways.cpp | 3 ++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index e85206071..98b5664d6 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -869,11 +869,11 @@ void update_gatewayspending(char *refcoin,char *acname,char *bindtxidstr,int32_t } else fprintf(stderr,"couldnt create msig rawtx\n"); } } - else if ( retval > 0 ) - { - fprintf(stderr,"already did withdraw %s %s %.8f processed\n",refcoin,withdrawaddr,(double)satoshis/SATOSHIDEN); - gatewaysmarkdone("KMD",acname,origtxid,refcoin,zeroid); - } + // else if ( retval > 0 ) + // { + // fprintf(stderr,"already did withdraw %s %s %.8f processed\n",refcoin,withdrawaddr,(double)satoshis/SATOSHIDEN); + // gatewaysmarkdone("KMD",acname,origtxid,refcoin,zeroid); + // } } } } diff --git a/src/cc/gateways.cpp b/src/cc/gateways.cpp index 6d1bff5c9..cd892e131 100644 --- a/src/cc/gateways.cpp +++ b/src/cc/gateways.cpp @@ -801,7 +801,7 @@ std::string GatewaysWithdraw(uint64_t txfee,uint256 bindtxid,std::string refcoin CCchange = (inputs - amount); mtx.vout.push_back(MakeCC1vout(EVAL_GATEWAYS,amount,gatewayspk)); mtx.vout.push_back(CTxOut(txfee,CScript() << withdrawpub << OP_CHECKSIG)); - mtx.vout.push_back(CTxOut(txfee,CScript() << ParseHex(HexStr(gatewayspk)) << OP_CHECKSIG)); + mtx.vout.push_back(MakeCC1vout(EVAL_GATEWAYS,txfee,gatewayspk)); if ( CCchange != 0 ) mtx.vout.push_back(MakeCC1vout(EVAL_GATEWAYS,CCchange,mypk)); return(FinalizeCCTx(0,cp,mtx,mypk,txfee,EncodeAssetOpRet('t',assetid,zeroid,0,Mypubkey()))); @@ -818,6 +818,7 @@ std::string GatewaysMarkdone(uint64_t txfee,uint256 withdrawtxid,std::string ref if ( txfee == 0 ) txfee = 5000; mypk = pubkey2pk(Mypubkey()); + mtx.vin.push_back(CTxIn(withdrawtxid,2,CScript())); mtx.vout.push_back(CTxOut(5000,CScript() << ParseHex(HexStr(mypk)) << OP_CHECKSIG)); opret << OP_RETURN << E_MARSHAL(ss << cp->evalcode << 'M' << cointxid << refcoin); From 32572846ded619b882a2ac70fe621e3bb6b4963b Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Fri, 26 Oct 2018 16:55:36 +0200 Subject: [PATCH 06/54] Fix --- src/cc/gateways.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/cc/gateways.cpp b/src/cc/gateways.cpp index cd892e131..828695a2e 100644 --- a/src/cc/gateways.cpp +++ b/src/cc/gateways.cpp @@ -827,7 +827,7 @@ std::string GatewaysMarkdone(uint64_t txfee,uint256 withdrawtxid,std::string ref UniValue GatewaysPendingWithdraws(uint256 bindtxid,std::string refcoin) { - UniValue result(UniValue::VOBJ),pending(UniValue::VARR),obj(UniValue::VOBJ); CTransaction tx; std::string coin; CPubKey mypk,gatewayspk; std::vector msigpubkeys; uint256 hashBlock,assetid,txid,oracletxid; uint8_t M,N,taddr,prefix,prefix2; char depositaddr[64],withmarker[64],coinaddr[64],destaddr[64],str[65],withaddr[64],numstr[32],txidaddr[64],signeraddr[64]; int32_t i,n,numvouts,vout,numqueued,queueflag; int64_t totalsupply; struct CCcontract_info *cp,C; + UniValue result(UniValue::VOBJ),pending(UniValue::VARR); CTransaction tx; std::string coin; CPubKey mypk,gatewayspk; std::vector msigpubkeys; uint256 hashBlock,assetid,txid,oracletxid; uint8_t M,N,taddr,prefix,prefix2; char depositaddr[64],withmarker[64],coinaddr[64],destaddr[64],str[65],withaddr[64],numstr[32],txidaddr[64],signeraddr[64]; int32_t i,n,numvouts,vout,numqueued,queueflag; int64_t totalsupply; struct CCcontract_info *cp,C; std::vector > unspentOutputs; cp = CCinit(&C,EVAL_GATEWAYS); mypk = pubkey2pk(Mypubkey()); @@ -864,6 +864,7 @@ UniValue GatewaysPendingWithdraws(uint256 bindtxid,std::string refcoin) Getscriptaddress(withaddr,tx.vout[1].scriptPubKey); if ( strcmp(destaddr,coinaddr) == 0 ) { + UniValue obj(UniValue::VOBJ); obj.push_back(Pair("txid",uint256_str(str,txid))); CCtxidaddr(txidaddr,txid); obj.push_back(Pair("txidaddr",txidaddr)); From b18631ae2bd00d13c7b6a6bde39a5158834fed08 Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Fri, 26 Oct 2018 17:49:21 +0200 Subject: [PATCH 07/54] Fix --- src/cc/CCGateways.h | 2 +- src/cc/gateways.cpp | 46 +++++++++++++++++++++++++++++++++------- src/wallet/rpcwallet.cpp | 4 ++-- 3 files changed, 41 insertions(+), 11 deletions(-) diff --git a/src/cc/CCGateways.h b/src/cc/CCGateways.h index 70c50dcdb..63f572378 100644 --- a/src/cc/CCGateways.h +++ b/src/cc/CCGateways.h @@ -24,7 +24,7 @@ bool GatewaysValidate(struct CCcontract_info *cp,Eval* eval,const CTransaction & std::string GatewaysBind(uint64_t txfee,std::string coin,uint256 tokenid,int64_t totalsupply,uint256 oracletxid,uint8_t M,uint8_t N,std::vector pubkeys); std::string GatewaysDeposit(uint64_t txfee,uint256 bindtxid,int32_t height,std::string refcoin,uint256 cointxid,int32_t claimvout,std::string deposithex,std::vectorproof,CPubKey destpub,int64_t amount); std::string GatewaysClaim(uint64_t txfee,uint256 bindtxid,std::string refcoin,uint256 deposittxid,CPubKey destpub,int64_t amount); -std::string GatewaysWithdraw(uint64_t txfee,uint256 bindtxid,std::string refcoin,std::vector withdrawpub,int64_t amount); +std::string GatewaysWithdraw(uint64_t txfee,uint256 bindtxid,std::string refcoin,CPubKey withdrawpub,int64_t amount); UniValue GatewaysPendingWithdraws(uint256 bindtxid,std::string refcoin); std::string GatewaysMarkdone(uint64_t txfee,uint256 withdrawtxid,std::string refcoin,uint256 cointxid); std::string GatewaysMultisig(char *txidaddr); diff --git a/src/cc/gateways.cpp b/src/cc/gateways.cpp index 828695a2e..81ec4b40f 100644 --- a/src/cc/gateways.cpp +++ b/src/cc/gateways.cpp @@ -190,6 +190,29 @@ uint8_t DecodeGatewaysPartialOpRet(const CScript &scriptPubKey,int32_t &K, CPubK return(0); } +uint8_t DecodeGatewaysWithdrawOpRet(const CScript &scriptPubKey, uint256 &assetid, std::string &refcoin, CPubKey &withdrawpub, int64_t &amount) +{ + std::vector vopret; uint8_t *script,e,f; + GetOpReturnData(scriptPubKey, vopret); + script = (uint8_t *)vopret.data(); + if ( vopret.size() > 2 && E_UNMARSHAL(vopret,ss >> e; ss >> f; ss >> assetid; ss >> refcoin; ss >> withdrawpub; ss >> amount) != 0 ) + { + return(f); + } + return(0); +} +uint8_t DecodeGatewaysMarkdoneOpRet(const CScript &scriptPubKey, std::string &refcoin, uint256 &cointxid) +{ + std::vector vopret; uint8_t *script,e,f; + GetOpReturnData(scriptPubKey, vopret); + script = (uint8_t *)vopret.data(); + if ( vopret.size() > 2 && E_UNMARSHAL(vopret,ss >> e; ss >> f; ss >> refcoin; ss >> cointxid) != 0 ) + { + return(f); + } + return(0); +} + uint8_t DecodeGatewaysBindOpRet(char *depositaddr,const CScript &scriptPubKey,std::string &coin,uint256 &tokenid,int64_t &totalsupply,uint256 &oracletxid,uint8_t &M,uint8_t &N,std::vector &pubkeys,uint8_t &taddr,uint8_t &prefix,uint8_t &prefix2) { std::vector vopret; uint8_t *script,e,f; @@ -775,9 +798,11 @@ std::string GatewaysClaim(uint64_t txfee,uint256 bindtxid,std::string refcoin,ui return(""); } -std::string GatewaysWithdraw(uint64_t txfee,uint256 bindtxid,std::string refcoin,std::vector withdrawpub,int64_t amount) +std::string GatewaysWithdraw(uint64_t txfee,uint256 bindtxid,std::string refcoin,CPubKey withdrawpub,int64_t amount) { - CMutableTransaction mtx; CTransaction tx; CPubKey mypk,gatewayspk; struct CCcontract_info *cp,C; uint256 assetid,hashBlock,oracletxid; int32_t numvouts; int64_t totalsupply,inputs,CCchange=0; uint8_t M,N,taddr,prefix,prefix2; std::string coin; std::vector msigpubkeys; char depositaddr[64],str[65],coinaddr[64]; + CMutableTransaction mtx; CTransaction tx; CPubKey mypk,gatewayspk; struct CCcontract_info *cp,C; + uint256 assetid,hashBlock,oracletxid; int32_t numvouts; int64_t totalsupply,inputs,CCchange=0; uint8_t M,N,taddr,prefix,prefix2; std::string coin; + std::vector msigpubkeys; char depositaddr[64],str[65],coinaddr[64]; CScript opret; cp = CCinit(&C,EVAL_GATEWAYS); if ( txfee == 0 ) txfee = 10000; @@ -800,11 +825,12 @@ std::string GatewaysWithdraw(uint64_t txfee,uint256 bindtxid,std::string refcoin if ( inputs > amount ) CCchange = (inputs - amount); mtx.vout.push_back(MakeCC1vout(EVAL_GATEWAYS,amount,gatewayspk)); - mtx.vout.push_back(CTxOut(txfee,CScript() << withdrawpub << OP_CHECKSIG)); + mtx.vout.push_back(CTxOut(txfee,CScript() << ParseHex(HexStr(withdrawpub)) << OP_CHECKSIG)); mtx.vout.push_back(MakeCC1vout(EVAL_GATEWAYS,txfee,gatewayspk)); if ( CCchange != 0 ) mtx.vout.push_back(MakeCC1vout(EVAL_GATEWAYS,CCchange,mypk)); - return(FinalizeCCTx(0,cp,mtx,mypk,txfee,EncodeAssetOpRet('t',assetid,zeroid,0,Mypubkey()))); + opret << OP_RETURN << E_MARSHAL(ss << cp->evalcode << 'W' << assetid << refcoin << withdrawpub << amount); + return(FinalizeCCTx(0,cp,mtx,mypk,txfee,opret)); } } fprintf(stderr,"cant find enough inputs or mismatched total\n"); @@ -827,8 +853,12 @@ std::string GatewaysMarkdone(uint64_t txfee,uint256 withdrawtxid,std::string ref UniValue GatewaysPendingWithdraws(uint256 bindtxid,std::string refcoin) { - UniValue result(UniValue::VOBJ),pending(UniValue::VARR); CTransaction tx; std::string coin; CPubKey mypk,gatewayspk; std::vector msigpubkeys; uint256 hashBlock,assetid,txid,oracletxid; uint8_t M,N,taddr,prefix,prefix2; char depositaddr[64],withmarker[64],coinaddr[64],destaddr[64],str[65],withaddr[64],numstr[32],txidaddr[64],signeraddr[64]; int32_t i,n,numvouts,vout,numqueued,queueflag; int64_t totalsupply; struct CCcontract_info *cp,C; + UniValue result(UniValue::VOBJ),pending(UniValue::VARR); CTransaction tx; std::string coin,tmprefcoin; CPubKey mypk,gatewayspk,withdrawpub; std::vector msigpubkeys; + uint256 cointxid,hashBlock,assetid,txid,oracletxid; uint8_t M,N,taddr,prefix,prefix2; + char depositaddr[64],withmarker[64],coinaddr[64],destaddr[64],str[65],withaddr[64],numstr[32],txidaddr[64],signeraddr[64]; + int32_t i,n,numvouts,vout,numqueued,queueflag; int64_t totalsupply,amount; struct CCcontract_info *cp,C; std::vector > unspentOutputs; + cp = CCinit(&C,EVAL_GATEWAYS); mypk = pubkey2pk(Mypubkey()); gatewayspk = GetUnspendable(cp,0); @@ -851,14 +881,14 @@ UniValue GatewaysPendingWithdraws(uint256 bindtxid,std::string refcoin) queueflag = 1; break; } - Getscriptaddress(withmarker,CScript() << ParseHex(HexStr(gatewayspk)) << OP_CHECKSIG); - SetCCunspents(unspentOutputs,withmarker); + //Getscriptaddress(withmarker,CScript() << ParseHex(HexStr(gatewayspk)) << OP_CHECKSIG); + SetCCunspents(unspentOutputs,coinaddr); numqueued = 0; for (std::vector >::const_iterator it=unspentOutputs.begin(); it!=unspentOutputs.end(); it++) { txid = it->first.txhash; vout = (int32_t)it->first.index; - if ( GetTransaction(txid,tx,hashBlock,false) != 0 ) + if ( GetTransaction(txid,tx,hashBlock,false) != 0 && (numvouts=tx.vout.size())>0 && DecodeGatewaysWithdrawOpRet(tx.vout[numvouts-1].scriptPubKey,assetid,tmprefcoin,withdrawpub,amount) == 'M') { Getscriptaddress(destaddr,tx.vout[0].scriptPubKey); Getscriptaddress(withaddr,tx.vout[1].scriptPubKey); diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 014f8973e..13fb81c2d 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -5545,10 +5545,10 @@ UniValue gatewayswithdraw(const UniValue& params, bool fHelp) const CKeyStore& keystore = *pwalletMain; LOCK2(cs_main, pwalletMain->cs_wallet); bindtxid = Parseuint256((char *)params[0].get_str().c_str()); - coin = params[1].get_str(); + coin = params[1].get_str(); withdrawpub = ParseHex(params[2].get_str()); amount = atof((char *)params[3].get_str().c_str()) * COIN; - hex = GatewaysWithdraw(0,bindtxid,coin,withdrawpub,amount); + hex = GatewaysWithdraw(0,bindtxid,coin,pubkey2pk(withdrawpub),amount); if ( hex.size() > 0 ) { result.push_back(Pair("result", "success")); From 07660bb09808b2ad485f38076ffc51d60365f046 Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Fri, 26 Oct 2018 18:08:39 +0200 Subject: [PATCH 08/54] Fix --- src/cc/gateways.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/cc/gateways.cpp b/src/cc/gateways.cpp index 81ec4b40f..38062d401 100644 --- a/src/cc/gateways.cpp +++ b/src/cc/gateways.cpp @@ -856,7 +856,7 @@ UniValue GatewaysPendingWithdraws(uint256 bindtxid,std::string refcoin) UniValue result(UniValue::VOBJ),pending(UniValue::VARR); CTransaction tx; std::string coin,tmprefcoin; CPubKey mypk,gatewayspk,withdrawpub; std::vector msigpubkeys; uint256 cointxid,hashBlock,assetid,txid,oracletxid; uint8_t M,N,taddr,prefix,prefix2; char depositaddr[64],withmarker[64],coinaddr[64],destaddr[64],str[65],withaddr[64],numstr[32],txidaddr[64],signeraddr[64]; - int32_t i,n,numvouts,vout,numqueued,queueflag; int64_t totalsupply,amount; struct CCcontract_info *cp,C; + int32_t i,n,numvouts,vout,numqueued,queueflag; int64_t totalsupply,amount,nValue; struct CCcontract_info *cp,C; std::vector > unspentOutputs; cp = CCinit(&C,EVAL_GATEWAYS); @@ -888,7 +888,9 @@ UniValue GatewaysPendingWithdraws(uint256 bindtxid,std::string refcoin) { txid = it->first.txhash; vout = (int32_t)it->first.index; - if ( GetTransaction(txid,tx,hashBlock,false) != 0 && (numvouts=tx.vout.size())>0 && DecodeGatewaysWithdrawOpRet(tx.vout[numvouts-1].scriptPubKey,assetid,tmprefcoin,withdrawpub,amount) == 'M') + nValue = (int64_t)it->second.satoshis; + fprintf(stderr,"%s %d %ld\n",txid.ToString().c_str(),vout,(long)nValue); + if ( vout == 2 && nValue == 10000 && GetTransaction(txid,tx,hashBlock,false) != 0 && (numvouts= tx.vout.size()) && DecodeGatewaysWithdrawOpRet(tx.vout[numvouts-1].scriptPubKey,assetid,tmprefcoin,withdrawpub,amount) == 'W') { Getscriptaddress(destaddr,tx.vout[0].scriptPubKey); Getscriptaddress(withaddr,tx.vout[1].scriptPubKey); From f29445f03ea24d7bd124fec93c198ca7d64b2f54 Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Fri, 26 Oct 2018 21:45:52 +0200 Subject: [PATCH 09/54] Fix --- src/cc/dapps/oraclefeed.c | 6 +++--- src/cc/gateways.cpp | 2 +- src/wallet/rpcwallet.cpp | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index 98b5664d6..f6b385aa5 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -750,7 +750,7 @@ int32_t tx_has_voutaddress(char *refcoin,char *acname,bits256 txid,char *coinadd return(retval); } -int32_t sendfromthisnode(char *refcoin,char *acname,char *coinaddr) +int32_t markerfromth(char *refcoin,char *acname,char *coinaddr) { cJSON *array,*item; bits256 txid; int32_t i,n,num=0; char *tmptxid,*retstr; if ( (array= get_addressutxos(refcoin,acname,coinaddr)) != 0 ) @@ -813,7 +813,7 @@ void update_gatewayspending(char *refcoin,char *acname,char *bindtxidstr,int32_t //process item.0 {"txid":"10ec8f4dad6903df6b249b361b879ac77b0617caad7629b97e10f29fa7e99a9b","txidaddr":"RMbite4TGugVmkGmu76ytPHDEQZQGSUjxz","withdrawaddr":"RNJmgYaFF5DbnrNUX6pMYz9rcnDKC2tuAc","amount":"1.00000000","depositaddr":"RHV2As4rox97BuE3LK96vMeNY8VsGRTmBj","signeraddr":"RHV2As4rox97BuE3LK96vMeNY8VsGRTmBj"} if ( (txidaddr= jstr(item,"txidaddr")) != 0 && (withdrawaddr= jstr(item,"withdrawaddr")) != 0 && (depositaddr= jstr(item,"depositaddr")) != 0 && (signeraddr= jstr(item,"signeraddr")) != 0 ) { - if ( (satoshis= jdouble(item,"amount")*SATOSHIDEN) != 0 && sendfromthisnode("KMD",acname,txidaddr) == 0) + if ( (satoshis= jdouble(item,"amount")*SATOSHIDEN) != 0 && markerfromthisnode("KMD",acname,txidaddr) == 0) { // the actual withdraw if ( strcmp(depositaddr,signeraddr) == 0 ) @@ -859,7 +859,7 @@ void update_gatewayspending(char *refcoin,char *acname,char *bindtxidstr,int32_t } else if ( jint(clijson,"partialtx") != 0 ) { - K=gatewayspartialsign(refcoin,acname,txidaddr,jstr(retjson,"hex")); + K=gatewayspartialsign(refcoin,acname,txidaddr,jstr(clijson,"hex")); fprintf(stderr,"%d of %d partialtx %s sent\n",K,N,bits256_str(str,txid)); } free_json(clijson); diff --git a/src/cc/gateways.cpp b/src/cc/gateways.cpp index 38062d401..f993a84c3 100644 --- a/src/cc/gateways.cpp +++ b/src/cc/gateways.cpp @@ -972,7 +972,7 @@ std::string GatewaysPartialSign(uint64_t txfee,char* txidaddr,std::string refcoi else fprintf(stderr,"Error finding previous partial tx\n"); } - mtx.vout.push_back(CTxOut(5000,CScript() << ParseHex(HexStr(gatewayspk)) << OP_CHECKSIG)); + mtx.vout.push_back(CTxOut(5000,txidaddr)); opret << OP_RETURN << E_MARSHAL(ss << cp->evalcode << 'P' << K << mypk << refcoin << hex); return(FinalizeCCTx(0,cp,mtx,mypk,txfee,opret)); } diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 13fb81c2d..d7f25b50f 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -5613,7 +5613,7 @@ UniValue gatewayspartialsign(const UniValue& params, bool fHelp) { UniValue result(UniValue::VOBJ); std::string coin,parthex,hex; char *txidaddr; if ( fHelp || params.size() != 3 ) - throw runtime_error("gatewayspartialsign txidaddr refcoin\n"); + throw runtime_error("gatewayspartialsign txidaddr refcoin hex\n"); if ( ensure_CCrequirements() < 0 ) throw runtime_error("to use CC contracts, you need to launch daemon with valid -pubkey= for an address in your wallet\n"); const CKeyStore& keystore = *pwalletMain; From 8841c81404e2e71b9ff0f962308d3336b99bbb57 Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Fri, 26 Oct 2018 22:02:42 +0200 Subject: [PATCH 10/54] Fix --- src/cc/CCGateways.h | 2 +- src/cc/channels.cpp | 8 ++++---- src/cc/dapps/oraclefeed.c | 8 ++++---- src/cc/gateways.cpp | 18 +++++++++--------- src/wallet/rpcwallet.cpp | 8 ++++---- 5 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/cc/CCGateways.h b/src/cc/CCGateways.h index 63f572378..cd094fce0 100644 --- a/src/cc/CCGateways.h +++ b/src/cc/CCGateways.h @@ -28,7 +28,7 @@ std::string GatewaysWithdraw(uint64_t txfee,uint256 bindtxid,std::string refcoin UniValue GatewaysPendingWithdraws(uint256 bindtxid,std::string refcoin); std::string GatewaysMarkdone(uint64_t txfee,uint256 withdrawtxid,std::string refcoin,uint256 cointxid); std::string GatewaysMultisig(char *txidaddr); -std::string GatewaysPartialSign(uint64_t txfee,char* txidaddr,std::string refcoin, std::string hex); +std::string GatewaysPartialSign(uint64_t txfee,uint256 txidaddr,std::string refcoin, std::string hex); // CCcustom UniValue GatewaysInfo(uint256 bindtxid); diff --git a/src/cc/channels.cpp b/src/cc/channels.cpp index bd0b5bb7f..f32e9d4d1 100644 --- a/src/cc/channels.cpp +++ b/src/cc/channels.cpp @@ -64,7 +64,7 @@ Possible third iteration: int64_t IsChannelsvout(struct CCcontract_info *cp,const CTransaction& tx,CPubKey srcpub, CPubKey destpub,int32_t v) { - char destaddr[64],channeladdr[64]; + char destaddr[65],channeladdr[65]; GetCCaddress1of2(cp,channeladdr,srcpub,destpub); if ( tx.vout[v].scriptPubKey.IsPayToCryptoCondition() != 0 ) @@ -77,7 +77,7 @@ int64_t IsChannelsvout(struct CCcontract_info *cp,const CTransaction& tx,CPubKey int64_t IsChannelsMarkervout(struct CCcontract_info *cp,const CTransaction& tx,CPubKey srcpub,int32_t v) { - char destaddr[64],ccaddr[64]; + char destaddr[65],ccaddr[65]; GetCCaddress(cp,ccaddr,srcpub); if ( tx.vout[v].scriptPubKey.IsPayToCryptoCondition() != 0 ) @@ -364,7 +364,7 @@ bool ChannelsValidate(struct CCcontract_info *cp,Eval* eval,const CTransaction & int64_t AddChannelsInputs(struct CCcontract_info *cp,CMutableTransaction &mtx, CTransaction openTx, uint256 &prevtxid) { - char coinaddr[64]; int64_t param2,totalinputs = 0,numvouts; uint256 txid=zeroid,tmp_txid,hashBlock,param3; CTransaction tx; int32_t param1; + char coinaddr[65]; int64_t param2,totalinputs = 0,numvouts; uint256 txid=zeroid,tmp_txid,hashBlock,param3; CTransaction tx; int32_t param1; std::vector > unspentOutputs; CPubKey srcpub,destpub; uint8_t myprivkey[32]; @@ -692,7 +692,7 @@ std::string ChannelRefund(uint64_t txfee,uint256 opentxid,uint256 closetxid) UniValue ChannelsInfo(uint256 channeltxid) { UniValue result(UniValue::VOBJ); CTransaction tx,opentx; uint256 txid,tmp_txid,hashBlock,param3,opentxid,hashchain,prevtxid; - struct CCcontract_info *cp,C; char myCCaddr[64],addr[64],str1[256],str2[64]; int32_t vout,numvouts,param1,numpayments; + struct CCcontract_info *cp,C; char myCCaddr[65],addr[65],str1[256],str2[65]; int32_t vout,numvouts,param1,numpayments; int64_t nValue,param2,payment; CPubKey srcpub,destpub,mypk; std::vector > txids; diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index f6b385aa5..c5dea8de9 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -660,10 +660,10 @@ char *get_gatewaysmultisig(char *refcoin,char *acname,char *txidaddr) return(hex); } -int32_t gatewayspartialsign(char *refcoin,char *acname,char *txidaddr,char *hex) +int32_t gatewayspartialsign(char *refcoin,char *acname,bits256 txid,char *hex) { - char str[65],str2[65],*retstr; cJSON *retjson; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"gatewayspartialsign",txidaddr,refcoin,hex,"")) != 0 ) + char str[65],*retstr; cJSON *retjson; + if ( (retjson= get_komodocli(refcoin,&retstr,acname,"gatewayspartialsign",bits256_str(str,txid),refcoin,hex,"")) != 0 ) { komodobroadcast(refcoin,acname,retjson); return(jint(retjson,"rank")); @@ -859,7 +859,7 @@ void update_gatewayspending(char *refcoin,char *acname,char *bindtxidstr,int32_t } else if ( jint(clijson,"partialtx") != 0 ) { - K=gatewayspartialsign(refcoin,acname,txidaddr,jstr(clijson,"hex")); + K=gatewayspartialsign(refcoin,acname,origtxid,jstr(clijson,"hex")); fprintf(stderr,"%d of %d partialtx %s sent\n",K,N,bits256_str(str,txid)); } free_json(clijson); diff --git a/src/cc/gateways.cpp b/src/cc/gateways.cpp index f993a84c3..5ab78fb8e 100644 --- a/src/cc/gateways.cpp +++ b/src/cc/gateways.cpp @@ -940,16 +940,16 @@ std::string GatewaysMultisig(char *txidaddr) else return (""); } -std::string GatewaysPartialSign(uint64_t txfee,char* txidaddr,std::string refcoin, std::string hex) +std::string GatewaysPartialSign(uint64_t txfee,uint256 txid,std::string refcoin, std::string hex) { - CMutableTransaction mtx; CScript opret; CPubKey mypk,gatewayspk,signerpk; struct CCcontract_info *cp,C; CTransaction tx; - std::vector > unspentOutputs; - int32_t maxK,K; uint256 txid,parttxid,hashBlock; + CMutableTransaction mtx; CScript opret; CPubKey mypk,txidaddrpk,signerpk; struct CCcontract_info *cp,C; CTransaction tx; + std::vector > unspentOutputs; char txidaddr[65]; + int32_t maxK,K; uint256 tmptxid,parttxid,hashBlock; cp = CCinit(&C,EVAL_GATEWAYS); if ( txfee == 0 ) txfee = 5000; mypk = pubkey2pk(Mypubkey()); - gatewayspk = GetUnspendable(cp,0); + txidaddrpk=CCtxidaddr(txidaddr,txid); SetCCunspents(unspentOutputs,txidaddr); if (unspentOutputs.size()==0) { @@ -961,18 +961,18 @@ std::string GatewaysPartialSign(uint64_t txfee,char* txidaddr,std::string refcoi maxK=0; for (std::vector >::const_iterator it=unspentOutputs.begin(); it!=unspentOutputs.end(); it++) { - txid = it->first.txhash; - if (GetTransaction(txid,tx,hashBlock,false) != 0 && tx.vout.size() > 0 && DecodeGatewaysPartialOpRet(tx.vout[tx.vout.size()-1].scriptPubKey,K,signerpk,refcoin,hex) == 'P' && K>maxK ) + tmptxid = it->first.txhash; + if (GetTransaction(tmptxid,tx,hashBlock,false) != 0 && tx.vout.size() > 0 && DecodeGatewaysPartialOpRet(tx.vout[tx.vout.size()-1].scriptPubKey,K,signerpk,refcoin,hex) == 'P' && K>maxK ) { maxK=K; - parttxid=txid; + parttxid=tmptxid; } } if (maxK>0) mtx.vin.push_back(CTxIn(parttxid,0,CScript())); else fprintf(stderr,"Error finding previous partial tx\n"); } - mtx.vout.push_back(CTxOut(5000,txidaddr)); + mtx.vout.push_back(CTxOut(5000,CScript() << ParseHex(HexStr(txidaddrpk)) << OP_CHECKSIG)); opret << OP_RETURN << E_MARSHAL(ss << cp->evalcode << 'P' << K << mypk << refcoin << hex); return(FinalizeCCTx(0,cp,mtx,mypk,txfee,opret)); } diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index d7f25b50f..ca3c0bea4 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -5611,17 +5611,17 @@ UniValue gatewaysmultisig(const UniValue& params, bool fHelp) UniValue gatewayspartialsign(const UniValue& params, bool fHelp) { - UniValue result(UniValue::VOBJ); std::string coin,parthex,hex; char *txidaddr; + UniValue result(UniValue::VOBJ); std::string coin,parthex,hex; uint256 txid; if ( fHelp || params.size() != 3 ) throw runtime_error("gatewayspartialsign txidaddr refcoin hex\n"); if ( ensure_CCrequirements() < 0 ) throw runtime_error("to use CC contracts, you need to launch daemon with valid -pubkey= for an address in your wallet\n"); const CKeyStore& keystore = *pwalletMain; LOCK2(cs_main, pwalletMain->cs_wallet); - txidaddr = (char *)params[0].get_str().c_str(); + txid = Parseuint256((char *)params[0].get_str().c_str()); coin = params[1].get_str(); - coin = params[2].get_str(); - hex = GatewaysPartialSign(0,txidaddr,coin,parthex); + parthex = params[2].get_str(); + hex = GatewaysPartialSign(0,txid,coin,parthex); if ( hex.size() > 0 ) { result.push_back(Pair("result", "success")); From 0c3f76e992bb742c4dffd00c20826274c6d1e879 Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Fri, 26 Oct 2018 22:15:18 +0200 Subject: [PATCH 11/54] Fix --- src/cc/dapps/oraclefeed.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index c5dea8de9..6d3695a5f 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -750,7 +750,7 @@ int32_t tx_has_voutaddress(char *refcoin,char *acname,bits256 txid,char *coinadd return(retval); } -int32_t markerfromth(char *refcoin,char *acname,char *coinaddr) +int32_t markerfromthisnode(char *refcoin,char *acname,char *coinaddr) { cJSON *array,*item; bits256 txid; int32_t i,n,num=0; char *tmptxid,*retstr; if ( (array= get_addressutxos(refcoin,acname,coinaddr)) != 0 ) From ced164c07acb247962df17b0aed54a066979036e Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Fri, 26 Oct 2018 23:53:58 +0200 Subject: [PATCH 12/54] Fix --- src/cc/gateways.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/cc/gateways.cpp b/src/cc/gateways.cpp index 5ab78fb8e..c3d09098c 100644 --- a/src/cc/gateways.cpp +++ b/src/cc/gateways.cpp @@ -944,7 +944,7 @@ std::string GatewaysPartialSign(uint64_t txfee,uint256 txid,std::string refcoin, { CMutableTransaction mtx; CScript opret; CPubKey mypk,txidaddrpk,signerpk; struct CCcontract_info *cp,C; CTransaction tx; std::vector > unspentOutputs; char txidaddr[65]; - int32_t maxK,K; uint256 tmptxid,parttxid,hashBlock; + int32_t maxK,K=0; uint256 tmptxid,parttxid,hashBlock; cp = CCinit(&C,EVAL_GATEWAYS); if ( txfee == 0 ) txfee = 5000; @@ -953,8 +953,7 @@ std::string GatewaysPartialSign(uint64_t txfee,uint256 txid,std::string refcoin, SetCCunspents(unspentOutputs,txidaddr); if (unspentOutputs.size()==0) { - if (AddNormalinputs(mtx,mypk,2*txfee,2)==0) - fprintf(stderr,"error adding funds for partialsign\n"); + if (AddNormalinputs(mtx,mypk,2*txfee,2)==0) fprintf(stderr,"error adding funds for partialsign\n"); } else { @@ -973,6 +972,6 @@ std::string GatewaysPartialSign(uint64_t txfee,uint256 txid,std::string refcoin, } mtx.vout.push_back(CTxOut(5000,CScript() << ParseHex(HexStr(txidaddrpk)) << OP_CHECKSIG)); - opret << OP_RETURN << E_MARSHAL(ss << cp->evalcode << 'P' << K << mypk << refcoin << hex); + opret << OP_RETURN << E_MARSHAL(ss << cp->evalcode << 'P' << K+1 << mypk << refcoin << hex); return(FinalizeCCTx(0,cp,mtx,mypk,txfee,opret)); } From 71d9c82c7ab7593281f9010e4bd803065dffaac1 Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Mon, 29 Oct 2018 12:46:51 +0100 Subject: [PATCH 13/54] Check mempool for markdone in pending --- src/cc/gateways.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cc/gateways.cpp b/src/cc/gateways.cpp index c3d09098c..b49d51664 100644 --- a/src/cc/gateways.cpp +++ b/src/cc/gateways.cpp @@ -880,8 +880,7 @@ UniValue GatewaysPendingWithdraws(uint256 bindtxid,std::string refcoin) { queueflag = 1; break; - } - //Getscriptaddress(withmarker,CScript() << ParseHex(HexStr(gatewayspk)) << OP_CHECKSIG); + } SetCCunspents(unspentOutputs,coinaddr); numqueued = 0; for (std::vector >::const_iterator it=unspentOutputs.begin(); it!=unspentOutputs.end(); it++) @@ -890,7 +889,8 @@ UniValue GatewaysPendingWithdraws(uint256 bindtxid,std::string refcoin) vout = (int32_t)it->first.index; nValue = (int64_t)it->second.satoshis; fprintf(stderr,"%s %d %ld\n",txid.ToString().c_str(),vout,(long)nValue); - if ( vout == 2 && nValue == 10000 && GetTransaction(txid,tx,hashBlock,false) != 0 && (numvouts= tx.vout.size()) && DecodeGatewaysWithdrawOpRet(tx.vout[numvouts-1].scriptPubKey,assetid,tmprefcoin,withdrawpub,amount) == 'W') + if ( vout == 2 && nValue == 10000 && GetTransaction(txid,tx,hashBlock,false) != 0 && (numvouts= tx.vout.size()) && + DecodeGatewaysWithdrawOpRet(tx.vout[numvouts-1].scriptPubKey,assetid,tmprefcoin,withdrawpub,amount) == 'W' && myIsutxo_spentinmempool(txid,vout) != 0) { Getscriptaddress(destaddr,tx.vout[0].scriptPubKey); Getscriptaddress(withaddr,tx.vout[1].scriptPubKey); From a96dafc837b141e1f0a7d6c448a8048a05193eb6 Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Mon, 29 Oct 2018 13:03:24 +0100 Subject: [PATCH 14/54] Fix --- src/cc/gateways.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc/gateways.cpp b/src/cc/gateways.cpp index b49d51664..8a04a1b30 100644 --- a/src/cc/gateways.cpp +++ b/src/cc/gateways.cpp @@ -890,7 +890,7 @@ UniValue GatewaysPendingWithdraws(uint256 bindtxid,std::string refcoin) nValue = (int64_t)it->second.satoshis; fprintf(stderr,"%s %d %ld\n",txid.ToString().c_str(),vout,(long)nValue); if ( vout == 2 && nValue == 10000 && GetTransaction(txid,tx,hashBlock,false) != 0 && (numvouts= tx.vout.size()) && - DecodeGatewaysWithdrawOpRet(tx.vout[numvouts-1].scriptPubKey,assetid,tmprefcoin,withdrawpub,amount) == 'W' && myIsutxo_spentinmempool(txid,vout) != 0) + DecodeGatewaysWithdrawOpRet(tx.vout[numvouts-1].scriptPubKey,assetid,tmprefcoin,withdrawpub,amount) == 'W' && myIsutxo_spentinmempool(txid,vout) == 0) { Getscriptaddress(destaddr,tx.vout[0].scriptPubKey); Getscriptaddress(withaddr,tx.vout[1].scriptPubKey); From c57612e01bf8191673dd9f59eda36aa0e24bd02c Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Mon, 29 Oct 2018 13:24:38 +0100 Subject: [PATCH 15/54] Check mempool in Gateways Multisig --- src/cc/gateways.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/cc/gateways.cpp b/src/cc/gateways.cpp index 8a04a1b30..2f554b47a 100644 --- a/src/cc/gateways.cpp +++ b/src/cc/gateways.cpp @@ -921,7 +921,7 @@ UniValue GatewaysPendingWithdraws(uint256 bindtxid,std::string refcoin) std::string GatewaysMultisig(char *txidaddr) { - std::string parthex,hex,refcoin; uint256 txid,hashBlock; CTransaction tx; int32_t i,maxK,K; CPubKey signerpk; + std::string parthex,hex,refcoin; uint256 txid,hashBlock; CTransaction tx; int32_t i,maxK,K,numvouts; CPubKey signerpk; std::vector > unspentOutputs; SetCCunspents(unspentOutputs,txidaddr); @@ -930,12 +930,25 @@ std::string GatewaysMultisig(char *txidaddr) for (std::vector >::const_iterator it=unspentOutputs.begin(); it!=unspentOutputs.end(); it++) { txid = it->first.txhash; - if (GetTransaction(txid,tx,hashBlock,false) != 0 && tx.vout.size() > 0 && DecodeGatewaysPartialOpRet(tx.vout[tx.vout.size()-1].scriptPubKey,K,signerpk,refcoin,hex) == 'P' && K>maxK ) + if (GetTransaction(txid,tx,hashBlock,false) != 0 && (numvouts=tx.vout.size()) > 0 && DecodeGatewaysPartialOpRet(tx.vout[tx.vout.size()-1].scriptPubKey,K,signerpk,refcoin,hex) == 'P' && K>maxK ) { maxK=K; parthex=hex; } } + + BOOST_FOREACH(const CTxMemPoolEntry &e, mempool.mapTx) + { + const CTransaction &txmempool = e.GetTx(); + const uint256 &hash = txmempool.GetHash(); + + if ((numvouts=txmempool.vout.size()) > 0 && DecodeGatewaysPartialOpRet(txmempool.vout[numvouts-1].scriptPubKey,K,signerpk,refcoin,hex) == 'P' && K>maxK) + { + maxK=K; + parthex=hex; + } + } + if (maxK>0) return(parthex); else return (""); } From 94153cd13539dbd53537f38b1116b6ba11115136 Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Mon, 29 Oct 2018 16:05:32 +0100 Subject: [PATCH 16/54] Fix import of multisig address --- src/cc/dapps/oraclefeed.c | 43 ++++++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index 6d3695a5f..a1c917ca3 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -546,6 +546,24 @@ void importaddress(char *refcoin,char *acname,char *depositaddr) } } +void admultisigaddress(char *refcoin,char *acname,int32_t M, char *pubkeys,char *bindtxidstr) +{ + cJSON *retjson; char *retstr,Mstr[10]; + + printf("%d %s\n",M,pubkeys); + sprintf(Mstr,"%d",M); + if ( (retjson= get_komodocli(refcoin,&retstr,acname,"addmultisigaddress",Mstr,pubkeys,bindtxidstr,"")) != 0 ) + { + printf("addmultisigaddress.(%s)\n",jprint(retjson,0)); + free_json(retjson); + } + else if ( retstr != 0 ) + { + fprintf(stderr,"addmultisigaddress.(%s) %s error.(%s)\n",refcoin,acname,retstr); + free(retstr); + } +} + cJSON *getinputarray(int64_t *totalp,cJSON *unspents,int64_t required) { cJSON *vin,*item,*vins = cJSON_CreateArray(); int32_t i,n,v; int64_t satoshis; bits256 txid; @@ -691,9 +709,9 @@ void gatewaysmarkdone(char *refcoin,char *acname,bits256 withtxid,char *coin,bit } } -int32_t get_gatewaysinfo(char *refcoin,char *acname,char *depositaddr,int32_t *Mp,int32_t *Np,char *bindtxidstr,char *coin,char *oraclestr) +int32_t get_gatewaysinfo(char *refcoin,char *acname,char *depositaddr,int32_t *Mp,int32_t *Np,char *bindtxidstr,char *coin,char *oraclestr, char *pubkeys) { - char *oracle,*retstr,*name,*deposit; cJSON *retjson; + char *oracle,*retstr,*name,*deposit; cJSON *retjson,*pubarray; int32_t n; if ( (retjson= get_komodocli(refcoin,&retstr,acname,"gatewaysinfo",bindtxidstr,"","","")) != 0 ) { if ( (oracle= jstr(retjson,"oracletxid")) != 0 && strcmp(oracle,oraclestr) == 0 && (deposit= jstr(retjson,"deposit")) != 0 ) @@ -705,6 +723,18 @@ int32_t get_gatewaysinfo(char *refcoin,char *acname,char *depositaddr,int32_t *M *Np = jint(retjson,"N"); //printf("(%s)\n",jprint(retjson,0)); } else printf("coin.%s vs %s\n",jstr(retjson,"coin"),coin); + if (jarray(&n,retjson,"pubkeys")!=0) + { + pubkeys=malloc((sizeof(char)*70*n)+5); + sprintf(pubkeys,"\"["); + for (int i=0;i Date: Mon, 29 Oct 2018 16:09:11 +0100 Subject: [PATCH 17/54] Fix --- src/cc/dapps/oraclefeed.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index a1c917ca3..dc9a0f342 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -546,7 +546,7 @@ void importaddress(char *refcoin,char *acname,char *depositaddr) } } -void admultisigaddress(char *refcoin,char *acname,int32_t M, char *pubkeys,char *bindtxidstr) +void addmultisigaddress(char *refcoin,char *acname,int32_t M, char *pubkeys,char *bindtxidstr) { cJSON *retjson; char *retstr,Mstr[10]; @@ -969,7 +969,7 @@ oraclesdata 17a841a919c284cea8a676f34e793da002e606f19a9258a3190bed12d5aaa3ff 034 int32_t main(int32_t argc,char **argv) { - cJSON *clijson,*clijson2,*regjson,*item,*pubkeys; int32_t acheight,i,retval,M,N,n,height,prevheight = 0; char *format,*acname,*oraclestr,*bindtxidstr,*pkstr,*pubstr,*retstr,*retstr2,depositaddr[64],hexstr[4096],refcoin[64]; uint64_t price; bits256 txid; + cJSON *clijson,*clijson2,*regjson,*item; int32_t acheight,i,retval,M,N,n,height,prevheight = 0; char *pubkeys,*format,*acname,*oraclestr,*bindtxidstr,*pkstr,*pubstr,*retstr,*retstr2,depositaddr[64],hexstr[4096],refcoin[64]; uint64_t price; bits256 txid; if ( argc < 6 ) { printf("usage: oraclefeed $ACNAME $ORACLETXID $MYPUBKEY $FORMAT $BINDTXID [refcoin_cli]\n"); From 38e5f55f1c9117b0bd5cfc81893631580c40880f Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Mon, 29 Oct 2018 16:19:51 +0100 Subject: [PATCH 18/54] Add check if address exists in wallet --- src/cc/dapps/oraclefeed.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index dc9a0f342..74c47ea90 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -531,6 +531,23 @@ cJSON *get_rawtransaction(char *refcoin,char *acname,bits256 txid) return(0); } +int32_t validateaddress(char *refcoin,char *acname,char *depositaddr) +{ + cJSON *retjson; char *retstr; int32_t res=0; + if ( (retjson= get_komodocli(refcoin,&retstr,acname,"validateaddress",depositaddr,"","","")) != 0 ) + { + if (is_cJSON_True(jobj(retjson,"ismine")) != 0 ) res=1; + free_json(retjson); + } + else if ( retstr != 0 ) + { + fprintf(stderr,"validateaddress.(%s) %s error.(%s)\n",refcoin,acname,retstr); + free(retstr); + } + + return (res); +} + void importaddress(char *refcoin,char *acname,char *depositaddr) { cJSON *retjson; char *retstr; @@ -1011,8 +1028,11 @@ int32_t main(int32_t argc,char **argv) printf("cant find bindtxid.(%s)\n",bindtxidstr); exit(0); } - if (M==N==1) importaddress(refcoin,"",depositaddr); - else addmultisigaddress(refcoin,"",M,pubkeys,bindtxidstr); + if (validateaddress(refcoin,"",depositaddr)==0) + { + if (M==N==1) importaddress(refcoin,"",depositaddr); + else addmultisigaddress(refcoin,"",M,pubkeys,bindtxidstr); + } if (pubkeys!=NULL) free(pubkeys); printf("set refcoin %s <- %s [%s] M.%d of N.%d\n",depositaddr,refcoin,REFCOIN_CLI,M,N); } From e7208f084971ea03a3cf1e6bb7b5a6f8bbf1393a Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Mon, 29 Oct 2018 17:30:53 +0100 Subject: [PATCH 19/54] Fix --- src/cc/dapps/oraclefeed.c | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index 74c47ea90..12a78dd2b 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -565,11 +565,12 @@ void importaddress(char *refcoin,char *acname,char *depositaddr) void addmultisigaddress(char *refcoin,char *acname,int32_t M, char *pubkeys,char *bindtxidstr) { - cJSON *retjson; char *retstr,Mstr[10]; + cJSON *retjson; char *retstr,Mstr[10],tmp[128]; printf("%d %s\n",M,pubkeys); sprintf(Mstr,"%d",M); - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"addmultisigaddress",Mstr,pubkeys,bindtxidstr,"")) != 0 ) + sprintf(tmp,"\"%s\"",bindtxidstr); + if ( (retjson= get_komodocli(refcoin,&retstr,acname,"addmultisigaddress",Mstr,pubkeys,tmp,"")) != 0 ) { printf("addmultisigaddress.(%s)\n",jprint(retjson,0)); free_json(retjson); @@ -726,9 +727,9 @@ void gatewaysmarkdone(char *refcoin,char *acname,bits256 withtxid,char *coin,bit } } -int32_t get_gatewaysinfo(char *refcoin,char *acname,char *depositaddr,int32_t *Mp,int32_t *Np,char *bindtxidstr,char *coin,char *oraclestr, char *pubkeys) +int32_t get_gatewaysinfo(char *refcoin,char *acname,char *depositaddr,int32_t *Mp,int32_t *Np,char *bindtxidstr,char *coin,char *oraclestr, char **pubkeys) { - char *oracle,*retstr,*name,*deposit; cJSON *retjson,*pubarray; int32_t n; + char *oracle,*retstr,*name,*deposit,temp[128]; cJSON *retjson,*pubarray; int32_t n; if ( (retjson= get_komodocli(refcoin,&retstr,acname,"gatewaysinfo",bindtxidstr,"","","")) != 0 ) { if ( (oracle= jstr(retjson,"oracletxid")) != 0 && strcmp(oracle,oraclestr) == 0 && (deposit= jstr(retjson,"deposit")) != 0 ) @@ -738,21 +739,23 @@ int32_t get_gatewaysinfo(char *refcoin,char *acname,char *depositaddr,int32_t *M { *Mp = jint(retjson,"M"); *Np = jint(retjson,"N"); - //printf("(%s)\n",jprint(retjson,0)); - } else printf("coin.%s vs %s\n",jstr(retjson,"coin"),coin); - if (jarray(&n,retjson,"pubkeys")!=0) + } + else printf("coin.%s vs %s\n",jstr(retjson,"coin"),coin); + if ((pubarray=jarray(&n,retjson,"pubkeys"))!=0) { - pubkeys=malloc((sizeof(char)*70*n)+5); - sprintf(pubkeys,"\"["); + *pubkeys=malloc((sizeof(char)*70*n)+64); + sprintf(*pubkeys,"\"["); for (int i=0;i Date: Mon, 29 Oct 2018 17:35:59 +0100 Subject: [PATCH 20/54] Fix --- src/cc/dapps/oraclefeed.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index 12a78dd2b..6f921e747 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -536,7 +536,7 @@ int32_t validateaddress(char *refcoin,char *acname,char *depositaddr) cJSON *retjson; char *retstr; int32_t res=0; if ( (retjson= get_komodocli(refcoin,&retstr,acname,"validateaddress",depositaddr,"","","")) != 0 ) { - if (is_cJSON_True(jobj(retjson,"ismine")) != 0 ) res=1; + if (is_cJSON_True(jobj(retjson,"iswatchonly")) != 0 ) res=1; free_json(retjson); } else if ( retstr != 0 ) @@ -572,13 +572,13 @@ void addmultisigaddress(char *refcoin,char *acname,int32_t M, char *pubkeys,char sprintf(tmp,"\"%s\"",bindtxidstr); if ( (retjson= get_komodocli(refcoin,&retstr,acname,"addmultisigaddress",Mstr,pubkeys,tmp,"")) != 0 ) { - printf("addmultisigaddress.(%s)\n",jprint(retjson,0)); - free_json(retjson); + fprintf(stderr,"unexpected addmultisigaddress json.(%s)\n",jprint(retjson,0)); + free(retstr); } else if ( retstr != 0 ) { - fprintf(stderr,"addmultisigaddress.(%s) %s error.(%s)\n",refcoin,acname,retstr); - free(retstr); + printf("addmultisigaddress.(%s)\n",jprint(retjson,0)); + free_json(retjson); } } From a19d3e7881461b82e94c423861e08c1cec8d3af2 Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Mon, 29 Oct 2018 17:38:05 +0100 Subject: [PATCH 21/54] Fix --- src/cc/dapps/oraclefeed.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index 6f921e747..355ed1c2a 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -566,8 +566,7 @@ void importaddress(char *refcoin,char *acname,char *depositaddr) void addmultisigaddress(char *refcoin,char *acname,int32_t M, char *pubkeys,char *bindtxidstr) { cJSON *retjson; char *retstr,Mstr[10],tmp[128]; - - printf("%d %s\n",M,pubkeys); + sprintf(Mstr,"%d",M); sprintf(tmp,"\"%s\"",bindtxidstr); if ( (retjson= get_komodocli(refcoin,&retstr,acname,"addmultisigaddress",Mstr,pubkeys,tmp,"")) != 0 ) @@ -577,7 +576,7 @@ void addmultisigaddress(char *refcoin,char *acname,int32_t M, char *pubkeys,char } else if ( retstr != 0 ) { - printf("addmultisigaddress.(%s)\n",jprint(retjson,0)); + printf("addmultisigaddress.(%s)\n",retstr); free_json(retjson); } } From 6721141bc053c5f7e4c103b9d7572c25f2a81656 Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Mon, 29 Oct 2018 17:52:30 +0100 Subject: [PATCH 22/54] Fix --- src/cc/dapps/oraclefeed.c | 8 ++++---- src/cc/gateways.cpp | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index 355ed1c2a..ef05fdcff 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -683,7 +683,7 @@ cJSON *addmultisignature(char *refcoin,char *acname,char *signeraddr,char *rawtx return(0); } -char *get_gatewaysmultisig(char *refcoin,char *acname,char *txidaddr) +char *get_gatewaysmultisig(char *refcoin,char *acname,char *txidaddr,int32_t *K) { char *retstr,*hexstr,*hex=0; cJSON *retjson; if ( (retjson= get_komodocli("KMD",&retstr,acname,"gatewaysmultisig",txidaddr,"","","")) != 0 ) @@ -889,7 +889,7 @@ void update_gatewayspending(char *refcoin,char *acname,char *bindtxidstr,int32_t } else { - if ( (rawtx= get_gatewaysmultisig(refcoin,acname,txidaddr)) == 0 ) + if ( (rawtx= get_gatewaysmultisig(refcoin,acname,txidaddr,&K)) == 0 ) { rawtx = createmultisig(refcoin,"",depositaddr,signeraddr,withdrawaddr,satoshis); } @@ -908,8 +908,8 @@ void update_gatewayspending(char *refcoin,char *acname,char *bindtxidstr,int32_t } else if ( jint(clijson,"partialtx") != 0 ) { - K=gatewayspartialsign(refcoin,acname,origtxid,jstr(clijson,"hex")); - fprintf(stderr,"%d of %d partialtx %s sent\n",K,N,bits256_str(str,txid)); + gatewayspartialsign(refcoin,acname,origtxid,jstr(clijson,"hex")); + fprintf(stderr,"%d of %d partialtx %s sent\n",K+1,N,bits256_str(str,txid)); } free_json(clijson); } diff --git a/src/cc/gateways.cpp b/src/cc/gateways.cpp index 2f554b47a..5bc897e68 100644 --- a/src/cc/gateways.cpp +++ b/src/cc/gateways.cpp @@ -922,7 +922,7 @@ UniValue GatewaysPendingWithdraws(uint256 bindtxid,std::string refcoin) std::string GatewaysMultisig(char *txidaddr) { std::string parthex,hex,refcoin; uint256 txid,hashBlock; CTransaction tx; int32_t i,maxK,K,numvouts; CPubKey signerpk; - std::vector > unspentOutputs; + std::vector > unspentOutputs; UniValue result(UniValue::VOBJ); SetCCunspents(unspentOutputs,txidaddr); if (unspentOutputs.size()==0) return (""); @@ -949,15 +949,15 @@ std::string GatewaysMultisig(char *txidaddr) } } - if (maxK>0) return(parthex); - else return (""); + result.push_back(Pair("hex",parthex)); + result.push_back(Pair("number_of_signs",K)); } std::string GatewaysPartialSign(uint64_t txfee,uint256 txid,std::string refcoin, std::string hex) { CMutableTransaction mtx; CScript opret; CPubKey mypk,txidaddrpk,signerpk; struct CCcontract_info *cp,C; CTransaction tx; std::vector > unspentOutputs; char txidaddr[65]; - int32_t maxK,K=0; uint256 tmptxid,parttxid,hashBlock; + int32_t maxK,K=0; uint256 tmptxid,parttxid,hashBlock; cp = CCinit(&C,EVAL_GATEWAYS); if ( txfee == 0 ) txfee = 5000; @@ -985,6 +985,6 @@ std::string GatewaysPartialSign(uint64_t txfee,uint256 txid,std::string refcoin, } mtx.vout.push_back(CTxOut(5000,CScript() << ParseHex(HexStr(txidaddrpk)) << OP_CHECKSIG)); - opret << OP_RETURN << E_MARSHAL(ss << cp->evalcode << 'P' << K+1 << mypk << refcoin << hex); + opret << OP_RETURN << E_MARSHAL(ss << cp->evalcode << 'P' << K+1 << mypk << refcoin << hex); return(FinalizeCCTx(0,cp,mtx,mypk,txfee,opret)); } From 52bd617b1b574971c21df9c48f9a8b1e6d249866 Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Mon, 29 Oct 2018 18:17:30 +0100 Subject: [PATCH 23/54] Fix --- src/cc/dapps/oraclefeed.c | 1 + src/wallet/rpcwallet.cpp | 8 +------- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index ef05fdcff..ce075443e 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -690,6 +690,7 @@ char *get_gatewaysmultisig(char *refcoin,char *acname,char *txidaddr,int32_t *K) { if ( (hexstr= jstr(retjson,"hex")) != 0 ) hex = clonestr(hexstr); + *K=jint(retjson,"number_of_signs"); free_json(retjson); } return(hex); diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index ca3c0bea4..fdeaea2ff 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -5600,13 +5600,7 @@ UniValue gatewaysmultisig(const UniValue& params, bool fHelp) const CKeyStore& keystore = *pwalletMain; LOCK2(cs_main, pwalletMain->cs_wallet); txidaddr = (char *)params[0].get_str().c_str(); - hex = GatewaysMultisig(txidaddr); - if ( hex.size() > 0 ) - { - result.push_back(Pair("result", "success")); - result.push_back(Pair("hex",hex)); - } else ERR_RESULT("couldnt gatewaysmultisig"); - return(result); + return(GatewaysMultisig(txidaddr)); } UniValue gatewayspartialsign(const UniValue& params, bool fHelp) From edff8a648aa6c0efc8433fe40c1b5a636308d9ab Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Mon, 29 Oct 2018 18:21:14 +0100 Subject: [PATCH 24/54] Fix --- src/cc/gateways.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cc/gateways.cpp b/src/cc/gateways.cpp index 5bc897e68..4bb2d13e3 100644 --- a/src/cc/gateways.cpp +++ b/src/cc/gateways.cpp @@ -951,6 +951,7 @@ std::string GatewaysMultisig(char *txidaddr) result.push_back(Pair("hex",parthex)); result.push_back(Pair("number_of_signs",K)); + return (result); } std::string GatewaysPartialSign(uint64_t txfee,uint256 txid,std::string refcoin, std::string hex) From 41c207787054a62a71ed800d3269d3e07f36e045 Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Mon, 29 Oct 2018 18:23:27 +0100 Subject: [PATCH 25/54] Fix --- src/cc/CCGateways.h | 2 +- src/cc/gateways.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc/CCGateways.h b/src/cc/CCGateways.h index cd094fce0..e82add62b 100644 --- a/src/cc/CCGateways.h +++ b/src/cc/CCGateways.h @@ -27,7 +27,7 @@ std::string GatewaysClaim(uint64_t txfee,uint256 bindtxid,std::string refcoin,ui std::string GatewaysWithdraw(uint64_t txfee,uint256 bindtxid,std::string refcoin,CPubKey withdrawpub,int64_t amount); UniValue GatewaysPendingWithdraws(uint256 bindtxid,std::string refcoin); std::string GatewaysMarkdone(uint64_t txfee,uint256 withdrawtxid,std::string refcoin,uint256 cointxid); -std::string GatewaysMultisig(char *txidaddr); +UniValue GatewaysMultisig(char *txidaddr); std::string GatewaysPartialSign(uint64_t txfee,uint256 txidaddr,std::string refcoin, std::string hex); // CCcustom diff --git a/src/cc/gateways.cpp b/src/cc/gateways.cpp index 4bb2d13e3..2ff633a99 100644 --- a/src/cc/gateways.cpp +++ b/src/cc/gateways.cpp @@ -919,7 +919,7 @@ UniValue GatewaysPendingWithdraws(uint256 bindtxid,std::string refcoin) return(result); } -std::string GatewaysMultisig(char *txidaddr) +UniValue GatewaysMultisig(char *txidaddr) { std::string parthex,hex,refcoin; uint256 txid,hashBlock; CTransaction tx; int32_t i,maxK,K,numvouts; CPubKey signerpk; std::vector > unspentOutputs; UniValue result(UniValue::VOBJ); From a2ccb2118e359c093c30afd79bfcdf256d057ec6 Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Tue, 30 Oct 2018 10:59:12 +0100 Subject: [PATCH 26/54] Fix --- src/cc/dapps/oraclefeed.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index ce075443e..83c13e440 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -531,12 +531,12 @@ cJSON *get_rawtransaction(char *refcoin,char *acname,bits256 txid) return(0); } -int32_t validateaddress(char *refcoin,char *acname,char *depositaddr) +int32_t validateaddress(char *refcoin,char *acname,char *depositaddr, char* compare) { cJSON *retjson; char *retstr; int32_t res=0; if ( (retjson= get_komodocli(refcoin,&retstr,acname,"validateaddress",depositaddr,"","","")) != 0 ) { - if (is_cJSON_True(jobj(retjson,"iswatchonly")) != 0 ) res=1; + if (is_cJSON_True(jobj(retjson,compare)) != 0 ) res=1; free_json(retjson); } else if ( retstr != 0 ) @@ -802,16 +802,20 @@ int32_t tx_has_voutaddress(char *refcoin,char *acname,bits256 txid,char *coinadd int32_t markerfromthisnode(char *refcoin,char *acname,char *coinaddr) { - cJSON *array,*item; bits256 txid; int32_t i,n,num=0; char *tmptxid,*retstr; + cJSON *array,*item,*rawtx,*vins,*vin; bits256 txid,tmptxid; int32_t i,n,m,num=0; char *retstr; if ( (array= get_addressutxos(refcoin,acname,coinaddr)) != 0 ) { for (i=0; i Date: Tue, 30 Oct 2018 11:32:47 +0100 Subject: [PATCH 27/54] Fix --- src/cc/dapps/oraclefeed.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index 83c13e440..f506b2c28 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -805,6 +805,7 @@ int32_t markerfromthisnode(char *refcoin,char *acname,char *coinaddr) cJSON *array,*item,*rawtx,*vins,*vin; bits256 txid,tmptxid; int32_t i,n,m,num=0; char *retstr; if ( (array= get_addressutxos(refcoin,acname,coinaddr)) != 0 ) { + n=cJSON_GetArraySize(array); for (i=0; i 0 ) - // { - // fprintf(stderr,"already did withdraw %s %s %.8f processed\n",refcoin,withdrawaddr,(double)satoshis/SATOSHIDEN); - // gatewaysmarkdone("KMD",acname,origtxid,refcoin,zeroid); - // } + else if ( retval > 0 ) + { + fprintf(stderr,"already did withdraw/signing %s %s %.8f processed\n",refcoin,withdrawaddr,(double)satoshis/SATOSHIDEN); + } } } } From ee49162c75a11879a890992627356065f7849ae5 Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Tue, 30 Oct 2018 12:20:55 +0100 Subject: [PATCH 28/54] Fix --- src/cc/dapps/oraclefeed.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index f506b2c28..ff9f7920a 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -810,11 +810,10 @@ int32_t markerfromthisnode(char *refcoin,char *acname,char *coinaddr) { item = jitem(array,i); if ((bits256_nonz(tmptxid=jbits256(item,"txid")))!=0 && (rawtx=get_rawtransaction(refcoin,acname,tmptxid))!=0 && (vins=jarray(&m,rawtx,"vin"))!=0) - { - num=1; + { for (int j=0;j Date: Tue, 30 Oct 2018 12:34:11 +0100 Subject: [PATCH 29/54] Fix --- src/cc/dapps/oraclefeed.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index ff9f7920a..42a078b37 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -828,11 +828,25 @@ int32_t markerfromthisnode(char *refcoin,char *acname,char *coinaddr) for (i=0; i 0 ) - { - num = 1; - break; + if ((bits256_nonz(tmptxid=jbits256(item,"txid")))!=0 && (rawtx=get_rawtransaction(refcoin,acname,tmptxid))!=0 && (vins=jarray(&m,rawtx,"vin"))!=0) + { + for (int j=0;j 0 ) + // { + // num = 1; + // break; + // } } } free_json(array); From 124778ceff0c81078d6b152d50b4a08a9b34befb Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Tue, 30 Oct 2018 12:37:15 +0100 Subject: [PATCH 30/54] Fix --- src/cc/dapps/oraclefeed.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index 42a078b37..d4eb55c76 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -827,8 +827,8 @@ int32_t markerfromthisnode(char *refcoin,char *acname,char *coinaddr) { for (i=0; i Date: Tue, 30 Oct 2018 12:45:59 +0100 Subject: [PATCH 31/54] Fix --- src/cc/dapps/oraclefeed.c | 49 ++++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index d4eb55c76..c011229d6 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -770,12 +770,12 @@ int32_t get_gatewaysinfo(char *refcoin,char *acname,char *depositaddr,int32_t *M int32_t tx_has_voutaddress(char *refcoin,char *acname,bits256 txid,char *coinaddr) { - cJSON *txobj,*vouts,*vout,*sobj,*addresses; char *addr,str[65]; int32_t i,j,n,numvouts,retval = 0; + cJSON *txobj,*vouts,*vout,*vins,*vin,*sobj,*addresses; char *addr,str[65]; int32_t i,j,n,numarray,retval = 0, hasvout=0; if ( (txobj= get_rawtransaction(refcoin,acname,txid)) != 0 ) { - if ( (vouts= jarray(&numvouts,txobj,"vout")) != 0 ) + if ( (vouts= jarray(&numarray,txobj,"vout")) != 0 ) { - for (i=0; i 0 ) + { + num = 1; + break; } - - if (num==1) break; - // if ( tx_has_voutaddress(refcoin,acname,txid,coinaddr) > 0 ) - // { - // num = 1; - // break; - // } } } free_json(array); From 113dcd93080c0640a62442cc9b27f5db7f84c1de Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Tue, 30 Oct 2018 12:49:57 +0100 Subject: [PATCH 32/54] Fix --- src/cc/dapps/oraclefeed.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index c011229d6..09f0f67f1 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -795,7 +795,7 @@ int32_t tx_has_voutaddress(char *refcoin,char *acname,bits256 txid,char *coinadd } } } - if (vins=jarray(&numarray,txobj,"vin")!=0) + if ((vins=jarray(&numarray,txobj,"vin"))!=0) { for (int i=0;j Date: Tue, 30 Oct 2018 12:57:58 +0100 Subject: [PATCH 33/54] Fix --- src/cc/dapps/oraclefeed.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index 09f0f67f1..82c013973 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -799,7 +799,7 @@ int32_t tx_has_voutaddress(char *refcoin,char *acname,bits256 txid,char *coinadd { for (int i=0;j Date: Tue, 30 Oct 2018 13:07:00 +0100 Subject: [PATCH 34/54] Fix --- src/cc/dapps/oraclefeed.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index 82c013973..bf99af1ee 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -795,7 +795,7 @@ int32_t tx_has_voutaddress(char *refcoin,char *acname,bits256 txid,char *coinadd } } } - if ((vins=jarray(&numarray,txobj,"vin"))!=0) + if (hasvout==1 && (vins=jarray(&numarray,txobj,"vin"))!=0) { for (int i=0;j Date: Tue, 30 Oct 2018 16:33:42 +0100 Subject: [PATCH 35/54] Fix --- src/cc/dapps/oraclefeed.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index bf99af1ee..256704fe4 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -776,9 +776,8 @@ int32_t tx_has_voutaddress(char *refcoin,char *acname,bits256 txid,char *coinadd if ( (vouts= jarray(&numarray,txobj,"vout")) != 0 ) { for (i=0; i Date: Tue, 30 Oct 2018 17:03:55 +0100 Subject: [PATCH 36/54] Fix --- src/cc/dapps/oraclefeed.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index 256704fe4..d047c45a7 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -788,10 +788,12 @@ int32_t tx_has_voutaddress(char *refcoin,char *acname,bits256 txid,char *coinadd { //fprintf(stderr,"found %s in %s v%d\n",coinaddr,bits256_str(str,txid),i); hasvout = 1; + break; } } } } + if (hasvout==1) break; } } if (hasvout==1 && (vins=jarray(&numarray,txobj,"vin"))!=0) @@ -853,6 +855,7 @@ int32_t markerfromthisnode(char *refcoin,char *acname,char *coinaddr) free_json(array); } else return(-1); } + printf("NUM=%d\n",num); return(num); } From 6d1ab84a05f9d3ec363338ba14aba06db9a63197 Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Tue, 30 Oct 2018 17:06:50 +0100 Subject: [PATCH 37/54] Fix --- src/cc/dapps/oraclefeed.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index d047c45a7..6535f47ea 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -330,9 +330,9 @@ cJSON *get_komodocli(char *refcoin,char **retstrp,char *acname,char *method,char system(cmdstr); *retstrp = 0; if ( (jsonstr= filestr(&fsize,fname)) != 0 ) - { - //fprintf(stderr,"%s -> jsonstr.(%s)\n",cmdstr,jsonstr); + { jsonstr[strlen(jsonstr)-1]='\0'; + fprintf(stderr,"%s -> jsonstr.(%s)\n",cmdstr,jsonstr); if ( (jsonstr[0] != '{' && jsonstr[0] != '[') || (retjson= cJSON_Parse(jsonstr)) == 0 ) *retstrp = jsonstr; else free(jsonstr); From 49479d233ba54c7bbe0a875226d821d6a1fb78df Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Tue, 30 Oct 2018 17:18:12 +0100 Subject: [PATCH 38/54] Fix --- src/cc/dapps/oraclefeed.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index 6535f47ea..50faf5cf7 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -798,7 +798,7 @@ int32_t tx_has_voutaddress(char *refcoin,char *acname,bits256 txid,char *coinadd } if (hasvout==1 && (vins=jarray(&numarray,txobj,"vin"))!=0) { - for (int i=0;j Date: Tue, 30 Oct 2018 17:39:25 +0100 Subject: [PATCH 39/54] Fix --- src/cc/gateways.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/cc/gateways.cpp b/src/cc/gateways.cpp index 2ff633a99..7dc4234b8 100644 --- a/src/cc/gateways.cpp +++ b/src/cc/gateways.cpp @@ -924,8 +924,7 @@ UniValue GatewaysMultisig(char *txidaddr) std::string parthex,hex,refcoin; uint256 txid,hashBlock; CTransaction tx; int32_t i,maxK,K,numvouts; CPubKey signerpk; std::vector > unspentOutputs; UniValue result(UniValue::VOBJ); - SetCCunspents(unspentOutputs,txidaddr); - if (unspentOutputs.size()==0) return (""); + SetCCunspents(unspentOutputs,txidaddr); maxK=0; for (std::vector >::const_iterator it=unspentOutputs.begin(); it!=unspentOutputs.end(); it++) { From f5f90e0c6b3742061c6c7c292abe73936565003c Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Tue, 30 Oct 2018 17:51:42 +0100 Subject: [PATCH 40/54] Fix --- src/cc/dapps/oraclefeed.c | 2 +- src/cc/gateways.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index 50faf5cf7..7a906318a 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -332,7 +332,7 @@ cJSON *get_komodocli(char *refcoin,char **retstrp,char *acname,char *method,char if ( (jsonstr= filestr(&fsize,fname)) != 0 ) { jsonstr[strlen(jsonstr)-1]='\0'; - fprintf(stderr,"%s -> jsonstr.(%s)\n",cmdstr,jsonstr); + //fprintf(stderr,"%s -> jsonstr.(%s)\n",cmdstr,jsonstr); if ( (jsonstr[0] != '{' && jsonstr[0] != '[') || (retjson= cJSON_Parse(jsonstr)) == 0 ) *retstrp = jsonstr; else free(jsonstr); diff --git a/src/cc/gateways.cpp b/src/cc/gateways.cpp index 7dc4234b8..d3352a460 100644 --- a/src/cc/gateways.cpp +++ b/src/cc/gateways.cpp @@ -964,13 +964,13 @@ std::string GatewaysPartialSign(uint64_t txfee,uint256 txid,std::string refcoin, mypk = pubkey2pk(Mypubkey()); txidaddrpk=CCtxidaddr(txidaddr,txid); SetCCunspents(unspentOutputs,txidaddr); + maxK=0; if (unspentOutputs.size()==0) { if (AddNormalinputs(mtx,mypk,2*txfee,2)==0) fprintf(stderr,"error adding funds for partialsign\n"); } else { - maxK=0; for (std::vector >::const_iterator it=unspentOutputs.begin(); it!=unspentOutputs.end(); it++) { tmptxid = it->first.txhash; @@ -985,6 +985,6 @@ std::string GatewaysPartialSign(uint64_t txfee,uint256 txid,std::string refcoin, } mtx.vout.push_back(CTxOut(5000,CScript() << ParseHex(HexStr(txidaddrpk)) << OP_CHECKSIG)); - opret << OP_RETURN << E_MARSHAL(ss << cp->evalcode << 'P' << K+1 << mypk << refcoin << hex); + opret << OP_RETURN << E_MARSHAL(ss << cp->evalcode << 'P' << maxK+1 << mypk << refcoin << hex); return(FinalizeCCTx(0,cp,mtx,mypk,txfee,opret)); } From 2964ae2da6271d530e61a707f8750f342163fcd7 Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Tue, 30 Oct 2018 18:02:17 +0100 Subject: [PATCH 41/54] Fix --- src/cc/gateways.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc/gateways.cpp b/src/cc/gateways.cpp index d3352a460..2829706ff 100644 --- a/src/cc/gateways.cpp +++ b/src/cc/gateways.cpp @@ -949,7 +949,7 @@ UniValue GatewaysMultisig(char *txidaddr) } result.push_back(Pair("hex",parthex)); - result.push_back(Pair("number_of_signs",K)); + result.push_back(Pair("number_of_signs",maxK)); return (result); } From 78ab663601cc6c3610ac874ef8cf2f0dca2d0281 Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Tue, 30 Oct 2018 18:14:13 +0100 Subject: [PATCH 42/54] Fix --- src/cc/dapps/oraclefeed.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index 7a906318a..86273828e 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -796,23 +796,23 @@ int32_t tx_has_voutaddress(char *refcoin,char *acname,bits256 txid,char *coinadd if (hasvout==1) break; } } - if (hasvout==1 && (vins=jarray(&numarray,txobj,"vin"))!=0) - { - for (int i=0;i Date: Tue, 30 Oct 2018 18:16:00 +0100 Subject: [PATCH 43/54] ... --- src/cc/dapps/oraclefeed.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index 86273828e..12926a54c 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -332,7 +332,7 @@ cJSON *get_komodocli(char *refcoin,char **retstrp,char *acname,char *method,char if ( (jsonstr= filestr(&fsize,fname)) != 0 ) { jsonstr[strlen(jsonstr)-1]='\0'; - //fprintf(stderr,"%s -> jsonstr.(%s)\n",cmdstr,jsonstr); + fprintf(stderr,"%s -> jsonstr.(%s)\n",cmdstr,jsonstr); if ( (jsonstr[0] != '{' && jsonstr[0] != '[') || (retjson= cJSON_Parse(jsonstr)) == 0 ) *retstrp = jsonstr; else free(jsonstr); From 743f21e6e48294358f37d6b2f37a1b3896cfbd52 Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Tue, 30 Oct 2018 18:22:13 +0100 Subject: [PATCH 44/54] Fix --- src/cc/dapps/oraclefeed.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index 12926a54c..d6bd1f53c 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -809,7 +809,7 @@ int32_t tx_has_voutaddress(char *refcoin,char *acname,bits256 txid,char *coinadd // } free_json(txobj); } - return(retval); + return(hasvout); } int32_t markerfromthisnodeorunconfirmed(char *refcoin,char *acname,char *coinaddr) From e88f0f9dfb660106272c83b9504acaeeb2c99ea7 Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Tue, 30 Oct 2018 18:55:45 +0100 Subject: [PATCH 45/54] ... --- src/cc/dapps/oraclefeed.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index d6bd1f53c..b99954d39 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -688,8 +688,11 @@ char *get_gatewaysmultisig(char *refcoin,char *acname,char *txidaddr,int32_t *K) char *retstr,*hexstr,*hex=0; cJSON *retjson; if ( (retjson= get_komodocli("KMD",&retstr,acname,"gatewaysmultisig",txidaddr,"","","")) != 0 ) { - if ( (hexstr= jstr(retjson,"hex")) != 0 ) + if ((hexstr=jstr(retjson,"hex")) != 0 ) + { + printf("!%s!%s!%ld\n",jstr(retjson,"hex"),hexstr,strlen(hexstr)); hex = clonestr(hexstr); + } *K=jint(retjson,"number_of_signs"); free_json(retjson); } From f51ee9a916d3bf9f046e31552e4e316c4c93d014 Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Wed, 31 Oct 2018 15:58:32 +0100 Subject: [PATCH 46/54] Fix clonestr --- src/cc/dapps/oraclefeed.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index b99954d39..ed2d27304 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -139,7 +139,7 @@ long _stripwhite(char *buf,int accept) char *clonestr(char *str) { char *clone; - if ( str == 0 || str[0] == 0 ) + if ( str == 0) { printf("warning cloning nullstr.%p\n",str); //#ifdef __APPLE__ From 922dc2ba1e912dd0d402537db31911c4e0cf532e Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Wed, 31 Oct 2018 16:00:32 +0100 Subject: [PATCH 47/54] Fix --- src/cc/dapps/oraclefeed.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index ed2d27304..b59bfd8de 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -915,7 +915,7 @@ void update_gatewayspending(char *refcoin,char *acname,char *bindtxidstr,int32_t } else { - if ( (rawtx= get_gatewaysmultisig(refcoin,acname,txidaddr,&K)) == 0 ) + if ( (rawtx= get_gatewaysmultisig(refcoin,acname,txidaddr,&K)) == 0 && strlen(rawtx)>0) { rawtx = createmultisig(refcoin,"",depositaddr,signeraddr,withdrawaddr,satoshis); } From 70aaec105819ccea2ee54ce5f24b074c579cc736 Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Wed, 31 Oct 2018 16:05:24 +0100 Subject: [PATCH 48/54] Fix --- src/cc/dapps/oraclefeed.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index b59bfd8de..8a633bb01 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -139,7 +139,7 @@ long _stripwhite(char *buf,int accept) char *clonestr(char *str) { char *clone; - if ( str == 0) + if ( str == 0 || str[0]==0) { printf("warning cloning nullstr.%p\n",str); //#ifdef __APPLE__ @@ -689,9 +689,8 @@ char *get_gatewaysmultisig(char *refcoin,char *acname,char *txidaddr,int32_t *K) if ( (retjson= get_komodocli("KMD",&retstr,acname,"gatewaysmultisig",txidaddr,"","","")) != 0 ) { if ((hexstr=jstr(retjson,"hex")) != 0 ) - { - printf("!%s!%s!%ld\n",jstr(retjson,"hex"),hexstr,strlen(hexstr)); - hex = clonestr(hexstr); + { + if (strlen(hex)>0) hex = clonestr(hexstr); } *K=jint(retjson,"number_of_signs"); free_json(retjson); @@ -915,7 +914,7 @@ void update_gatewayspending(char *refcoin,char *acname,char *bindtxidstr,int32_t } else { - if ( (rawtx= get_gatewaysmultisig(refcoin,acname,txidaddr,&K)) == 0 && strlen(rawtx)>0) + if ( (rawtx= get_gatewaysmultisig(refcoin,acname,txidaddr,&K)) == 0) { rawtx = createmultisig(refcoin,"",depositaddr,signeraddr,withdrawaddr,satoshis); } From 55d887fa757f21f6f243e928ec8914f9af90b001 Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Wed, 31 Oct 2018 16:07:26 +0100 Subject: [PATCH 49/54] Fix --- src/cc/dapps/oraclefeed.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index 8a633bb01..d2809eb12 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -690,7 +690,7 @@ char *get_gatewaysmultisig(char *refcoin,char *acname,char *txidaddr,int32_t *K) { if ((hexstr=jstr(retjson,"hex")) != 0 ) { - if (strlen(hex)>0) hex = clonestr(hexstr); + if (strlen(hexstr)>0) hex = clonestr(hexstr); } *K=jint(retjson,"number_of_signs"); free_json(retjson); From 7778f46ed8c01689d9584fb7f4e475d81374f700 Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Wed, 31 Oct 2018 16:11:28 +0100 Subject: [PATCH 50/54] Fix --- src/cc/dapps/oraclefeed.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index d2809eb12..99a693e9b 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -332,7 +332,7 @@ cJSON *get_komodocli(char *refcoin,char **retstrp,char *acname,char *method,char if ( (jsonstr= filestr(&fsize,fname)) != 0 ) { jsonstr[strlen(jsonstr)-1]='\0'; - fprintf(stderr,"%s -> jsonstr.(%s)\n",cmdstr,jsonstr); + //fprintf(stderr,"%s -> jsonstr.(%s)\n",cmdstr,jsonstr); if ( (jsonstr[0] != '{' && jsonstr[0] != '[') || (retjson= cJSON_Parse(jsonstr)) == 0 ) *retstrp = jsonstr; else free(jsonstr); @@ -942,11 +942,7 @@ void update_gatewayspending(char *refcoin,char *acname,char *bindtxidstr,int32_t free(rawtx); } else fprintf(stderr,"couldnt create msig rawtx\n"); } - } - else if ( retval > 0 ) - { - fprintf(stderr,"already did withdraw/signing %s %s %.8f processed\n",refcoin,withdrawaddr,(double)satoshis/SATOSHIDEN); - } + } } } } From 725d549f6d968285305a0ef857c7a3270f16ec4b Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Wed, 31 Oct 2018 16:25:12 +0100 Subject: [PATCH 51/54] Fix --- src/cc/dapps/oraclefeed.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index 99a693e9b..60e435874 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -19,6 +19,8 @@ #include #include "cJSON.c" +bits256 zeroid; + char hexbyte(int32_t c) { c &= 0xf; @@ -698,19 +700,19 @@ char *get_gatewaysmultisig(char *refcoin,char *acname,char *txidaddr,int32_t *K) return(hex); } -int32_t gatewayspartialsign(char *refcoin,char *acname,bits256 txid,char *hex) +bits256 gatewayspartialsign(char *refcoin,char *acname,bits256 txid,char *hex) { char str[65],*retstr; cJSON *retjson; if ( (retjson= get_komodocli(refcoin,&retstr,acname,"gatewayspartialsign",bits256_str(str,txid),refcoin,hex,"")) != 0 ) { - komodobroadcast(refcoin,acname,retjson); - return(jint(retjson,"rank")); + return(komodobroadcast(refcoin,acname,retjson)); } else if ( retstr != 0 ) { - printf("error parsing gatewaysmarkdone.(%s)\n",retstr); + printf("error parsing gatewayspartialsing.(%s)\n",retstr); free(retstr); } + return (zeroid); } void gatewaysmarkdone(char *refcoin,char *acname,bits256 withtxid,char *coin,bits256 cointxid) @@ -856,8 +858,7 @@ int32_t markerfromthisnodeorunconfirmed(char *refcoin,char *acname,char *coinadd } free_json(array); } else return(-1); - } - printf("NUM=%d\n",num); + } return(num); } @@ -870,7 +871,7 @@ void update_gatewayspending(char *refcoin,char *acname,char *bindtxidstr,int32_t /// if enough sigs, sendrawtransaction and when it confirms spend marker (txid.2) /// if not enough sigs, post partially signed to acname with marker2 // monitor marker2, for the partially signed withdraws - cJSON *retjson,*pending,*item,*clijson; char str[65],*rawtx,*coinstr,*txidaddr,*signeraddr,*depositaddr,*withdrawaddr; int32_t i,j,n,K,retval,processed = 0; bits256 txid,cointxid,origtxid,zeroid; int64_t satoshis; + cJSON *retjson,*pending,*item,*clijson; char str[65],*rawtx,*coinstr,*txidaddr,*signeraddr,*depositaddr,*withdrawaddr; int32_t i,j,n,K,retval,processed = 0; bits256 txid,cointxid,origtxid; int64_t satoshis; memset(&zeroid,0,sizeof(zeroid)); if ( (retjson= get_gatewayspending("KMD",acname,bindtxidstr)) != 0 ) { @@ -933,7 +934,7 @@ void update_gatewayspending(char *refcoin,char *acname,char *bindtxidstr,int32_t } else if ( jint(clijson,"partialtx") != 0 ) { - gatewayspartialsign(refcoin,acname,origtxid,jstr(clijson,"hex")); + txid=gatewayspartialsign(refcoin,acname,origtxid,jstr(clijson,"hex")); fprintf(stderr,"%d of %d partialtx %s sent\n",K+1,N,bits256_str(str,txid)); } free_json(clijson); From 127ee64e48f304237889022f9ab5485105c25d81 Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Wed, 31 Oct 2018 16:54:18 +0100 Subject: [PATCH 52/54] Fix --- src/cc/channels.cpp | 2 +- src/cc/dapps/oraclefeed.c | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/cc/channels.cpp b/src/cc/channels.cpp index f32e9d4d1..d92186d26 100644 --- a/src/cc/channels.cpp +++ b/src/cc/channels.cpp @@ -692,7 +692,7 @@ std::string ChannelRefund(uint64_t txfee,uint256 opentxid,uint256 closetxid) UniValue ChannelsInfo(uint256 channeltxid) { UniValue result(UniValue::VOBJ); CTransaction tx,opentx; uint256 txid,tmp_txid,hashBlock,param3,opentxid,hashchain,prevtxid; - struct CCcontract_info *cp,C; char myCCaddr[65],addr[65],str1[256],str2[65]; int32_t vout,numvouts,param1,numpayments; + struct CCcontract_info *cp,C; char myCCaddr[65],addr[65],str1[256],str2[256]; int32_t vout,numvouts,param1,numpayments; int64_t nValue,param2,payment; CPubKey srcpub,destpub,mypk; std::vector > txids; diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index 60e435874..0ff12bee5 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -360,7 +360,7 @@ bits256 komodobroadcast(char *refcoin,char *acname,cJSON *hexjson) retstr[64] = 0; decode_hex(txid.bytes,32,retstr); } - fprintf(stderr,"broadcast %s txid.(%s)\n",acname,bits256_str(str,txid)); + fprintf(stderr,"broadcast %s txid.(%s)\n",strlen(acname)>0?acname:refcoin,bits256_str(str,txid)); free(retstr); } } @@ -637,14 +637,12 @@ char *createmultisig(char *refcoin,char *acname,char *depositaddr,char *signerad change = (total - satoshis); jaddnum(vouts,depositaddr,(double)change/SATOSHIDEN); } - char *tmpA=jprint(vins,1); - char *tmpB=jprint(vouts,1); + char *tmpA=jprint(vins,0); + char *tmpB=jprint(vouts,0); char *argA=malloc(sizeof(char) * (strlen(tmpA)+3)); char *argB=malloc(sizeof(char) * (strlen(tmpB)+3)); sprintf(argA,"\'%s\'",tmpA); - sprintf(argB,"\'%s\'",tmpB); - printf("%s\n",argA); - printf("%s\n",argB); + sprintf(argB,"\'%s\'",tmpB); if ( (retjson2= get_komodocli(refcoin,&txstr,acname,"createrawtransaction",argA,argB,"","")) != 0 ) { printf("createmultisig: unexpected JSON2.(%s)\n",jprint(retjson2,0)); @@ -658,6 +656,7 @@ char *createmultisig(char *refcoin,char *acname,char *depositaddr,char *signerad free(argB); } } + free_json(retjson); } else if ( retstr != 0 ) { From d988726d5ffb11a93b4315d2213dc64361b5a3b2 Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Wed, 31 Oct 2018 17:14:29 +0100 Subject: [PATCH 53/54] Fix --- src/cc/dapps/oraclefeed.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index 0ff12bee5..62f9c3254 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -637,8 +637,8 @@ char *createmultisig(char *refcoin,char *acname,char *depositaddr,char *signerad change = (total - satoshis); jaddnum(vouts,depositaddr,(double)change/SATOSHIDEN); } - char *tmpA=jprint(vins,0); - char *tmpB=jprint(vouts,0); + char *tmpA=jprint(vins,1); + char *tmpB=jprint(vouts,1); char *argA=malloc(sizeof(char) * (strlen(tmpA)+3)); char *argB=malloc(sizeof(char) * (strlen(tmpB)+3)); sprintf(argA,"\'%s\'",tmpA); From c6069e78595693ad750c8baf6c5d00b8c56d8650 Mon Sep 17 00:00:00 2001 From: Mihailo Milenkovic Date: Wed, 31 Oct 2018 17:17:37 +0100 Subject: [PATCH 54/54] Fix --- src/cc/dapps/oraclefeed.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index 62f9c3254..a0930bae4 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -1044,7 +1044,7 @@ int32_t main(int32_t argc,char **argv) printf("need to specify path to refcoin's cli as last argv\n"); exit(0); } - pubkeys=NULL; + pubkeys=0; if ( get_gatewaysinfo("KMD",acname,depositaddr,&M,&N,bindtxidstr,refcoin,oraclestr,&pubkeys) < 0 ) { printf("cant find bindtxid.(%s)\n",bindtxidstr); @@ -1055,7 +1055,7 @@ int32_t main(int32_t argc,char **argv) if (M==N==1) importaddress(refcoin,"",depositaddr); else addmultisigaddress(refcoin,"",M,pubkeys,bindtxidstr); } - if (pubkeys!=NULL) free(pubkeys); + if (pubkeys!=0) free(pubkeys); printf("set refcoin %s <- %s [%s] M.%d of N.%d\n",depositaddr,refcoin,REFCOIN_CLI,M,N); } if ( (regjson= jarray(&n,clijson,"registered")) != 0 )