From 1dee00acbf0676cb40894efa1edee85e7f14ece9 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 22 Sep 2018 02:12:17 -1100 Subject: [PATCH 01/17] Test --- src/cc/CCinclude.h | 1 + src/cc/gateways.cpp | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/cc/CCinclude.h b/src/cc/CCinclude.h index 4beb722a1..7ac0bfb98 100644 --- a/src/cc/CCinclude.h +++ b/src/cc/CCinclude.h @@ -138,6 +138,7 @@ uint256 Parseuint256(char *hexstr); CPubKey pubkey2pk(std::vector pubkey); int64_t CCfullsupply(uint256 tokenid); int64_t CCtoken_balance(char *destaddr,uint256 tokenid); +int64_t CCtoken_balance2(char *destaddr,uint256 tokenid); bool _GetCCaddress(char *destaddr,uint8_t evalcode,CPubKey pk); bool GetCCaddress(struct CCcontract_info *cp,char *destaddr,CPubKey pk); bool GetCCaddress1of2(struct CCcontract_info *cp,char *destaddr,CPubKey pk,CPubKey pk2); diff --git a/src/cc/gateways.cpp b/src/cc/gateways.cpp index 976cd1971..cf9f3ff27 100644 --- a/src/cc/gateways.cpp +++ b/src/cc/gateways.cpp @@ -501,9 +501,9 @@ std::string GatewaysBind(uint64_t txfee,std::string coin,uint256 tokenid,int64_t fprintf(stderr,"Gateway bind.%s (%s) globaladdr.%s totalsupply %.8f != fullsupply %.8f\n",coin.c_str(),uint256_str(str,tokenid),cp->unspendableCCaddr,(double)totalsupply/COIN,(double)fullsupply/COIN); return(""); } - if ( CCtoken_balance(destaddr,tokenid) != totalsupply ) + if ( CCtoken_balance2(destaddr,tokenid) != totalsupply ) { - fprintf(stderr,"Gateway bind.%s (%s) globaladdr.%s token balance %.8f != %.8f\n",coin.c_str(),uint256_str(str,tokenid),cp->unspendableCCaddr,(double)CCtoken_balance(destaddr,tokenid)/COIN,(double)totalsupply/COIN); + fprintf(stderr,"Gateway bind.%s (%s) destaddr.%s globaladdr.%s token balance %.8f != %.8f\n",coin.c_str(),uint256_str(str,tokenid),destaddr,cp->unspendableCCaddr,(double)CCtoken_balance2(destaddr,tokenid)/COIN,(double)totalsupply/COIN); return(""); } if ( GetTransaction(oracletxid,oracletx,hashBlock,false) == 0 || (numvouts= oracletx.vout.size()) <= 0 ) From 93f31c97304180c162c6ee9458932b63b4cd7d04 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 22 Sep 2018 02:13:52 -1100 Subject: [PATCH 02/17] Test --- src/cc/gateways.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cc/gateways.cpp b/src/cc/gateways.cpp index cf9f3ff27..de01d9995 100644 --- a/src/cc/gateways.cpp +++ b/src/cc/gateways.cpp @@ -501,9 +501,9 @@ std::string GatewaysBind(uint64_t txfee,std::string coin,uint256 tokenid,int64_t fprintf(stderr,"Gateway bind.%s (%s) globaladdr.%s totalsupply %.8f != fullsupply %.8f\n",coin.c_str(),uint256_str(str,tokenid),cp->unspendableCCaddr,(double)totalsupply/COIN,(double)fullsupply/COIN); return(""); } - if ( CCtoken_balance2(destaddr,tokenid) != totalsupply ) + if ( CCtoken_balance(destaddr,tokenid) != totalsupply ) { - fprintf(stderr,"Gateway bind.%s (%s) destaddr.%s globaladdr.%s token balance %.8f != %.8f\n",coin.c_str(),uint256_str(str,tokenid),destaddr,cp->unspendableCCaddr,(double)CCtoken_balance2(destaddr,tokenid)/COIN,(double)totalsupply/COIN); + fprintf(stderr,"Gateway bind.%s (%s) destaddr.%s globaladdr.%s token balance %.8f != %.8f\n",coin.c_str(),uint256_str(str,tokenid),destaddr,cp->unspendableCCaddr,(double)CCtoken_balance(destaddr,tokenid)/COIN,(double)totalsupply/COIN); return(""); } if ( GetTransaction(oracletxid,oracletx,hashBlock,false) == 0 || (numvouts= oracletx.vout.size()) <= 0 ) From f2f9d6aaf9846afe79075bd1384e871bb38ff8f3 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 22 Sep 2018 02:28:53 -1100 Subject: [PATCH 03/17] +print --- src/cc/CCtx.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cc/CCtx.cpp b/src/cc/CCtx.cpp index d651537cf..21f5a9cc9 100644 --- a/src/cc/CCtx.cpp +++ b/src/cc/CCtx.cpp @@ -258,6 +258,7 @@ int64_t CCtoken_balance(char *coinaddr,uint256 tokenid) txid = it->first.txhash; if ( GetTransaction(txid,tx,hashBlock,false) != 0 && (numvouts= tx.vout.size()) > 0 ) { + fprintf(stderr,"check %s %.8f\n",uint256_str(str,txid),(double)it->second.satoshis/COIN); if ( DecodeAssetOpRet(tx.vout[numvouts-1].scriptPubKey,assetid,assetid2,price,origpubkey) != 0 && assetid == tokenid ) { sum += it->second.satoshis; From cd40321aaf6c1cfbc3775f194c232a0070761059 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 22 Sep 2018 02:31:17 -1100 Subject: [PATCH 04/17] Test --- src/cc/CCtx.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cc/CCtx.cpp b/src/cc/CCtx.cpp index 21f5a9cc9..a9d3f68e7 100644 --- a/src/cc/CCtx.cpp +++ b/src/cc/CCtx.cpp @@ -258,7 +258,7 @@ int64_t CCtoken_balance(char *coinaddr,uint256 tokenid) txid = it->first.txhash; if ( GetTransaction(txid,tx,hashBlock,false) != 0 && (numvouts= tx.vout.size()) > 0 ) { - fprintf(stderr,"check %s %.8f\n",uint256_str(str,txid),(double)it->second.satoshis/COIN); + char str[65]; fprintf(stderr,"check %s %.8f\n",uint256_str(str,txid),(double)it->second.satoshis/COIN); if ( DecodeAssetOpRet(tx.vout[numvouts-1].scriptPubKey,assetid,assetid2,price,origpubkey) != 0 && assetid == tokenid ) { sum += it->second.satoshis; From b07000b7fd60e2017af9d91f7f85d4cef774101c Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 22 Sep 2018 03:09:55 -1100 Subject: [PATCH 05/17] syntax --- src/cc/dapps/oraclefeed.c | 22 ++++++++++++---------- src/cc/gateways.cpp | 2 +- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index be7b14b81..4a1ece19d 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -543,7 +543,6 @@ void importaddress(char *refcoin,char *acname,char *depositaddr) fprintf(stderr,"importaddress.(%s) %s error.(%s)\n",refcoin,acname,retstr); free(retstr); } - return(0); } cJSON *getinputarray(int64_t *totalp,cJSON *unspents,int64_t required) @@ -563,7 +562,7 @@ cJSON *getinputarray(int64_t *totalp,cJSON *unspents,int64_t required) vin = cJSON_CreateObject(); jaddbits256(vin,"txid",txid); jaddnum(vin,"vout",v); - jadd(vins,vin); + jaddi(vins,vin); *totalp += satoshis; if ( (*totalp) >= required ) break; @@ -581,34 +580,37 @@ char *createmultisig(char *refcoin,char *acname,char *depositaddr,char *signerad else txfee = 10000; if ( satoshis < txfee ) { - printf("createmultisig satoshis %.8f < txfee %.8f\n",(double)satoshis/SATOSHIDEN,(double)txfee/SATOSHIS); + printf("createmultisig satoshis %.8f < txfee %.8f\n",(double)satoshis/SATOSHIDEN,(double)txfee/SATOSHIDEN); return(0); } satoshis -= txfee; sprintf(array,"[\"%s\"]",depositaddr); - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"listunspent",1,99999999,array,"")) != 0 ) + if ( (retjson= get_komodocli(refcoin,&retstr,acname,"listunspent","1","99999999",array,"")) != 0 ) { //createrawtransaction [{"txid":"id","vout":n},...] {"address":amount,...} if ( (vins= getinputarray(&total,retjson,satoshis)) != 0 ) { if ( total >= satoshis ) { - vouts = cJSON_CreatObject(); - jaddstr(vouts,withdrawaddr,(double)satoshis/SATOSHIDEN); + vouts = cJSON_CreateObject(); + jaddnum(vouts,withdrawaddr,(double)satoshis/SATOSHIDEN); if ( total > satoshis+txfee ) { change = (total - satoshis); - jaddstr(vouts,depositaddr,(double)change/SATOSHIDEN); + jaddnum(vouts,depositaddr,(double)change/SATOSHIDEN); } - if ( (retjson2= get_komodocli(refcoin,&txstr,acname,"createrawtransaction",jprint(vins,0),jprint(vouts,0),"","")) != 0 ) + char *argA,*argB; + argA = jprint(vins,1); + argB = jprint(vouts,1); + if ( (retjson2= get_komodocli(refcoin,&txstr,acname,"createrawtransaction",argA,argB,"","")) != 0 ) { printf("createmultisig: unexpected JSON2.(%s)\n",jprint(retjson2,0)); free_json(retjson2); } else if ( txstr == 0 ) printf("createmultisig: null txstr and JSON2\n"); - free_json(vins); - free_json(vouts); + free(argA); + free(argB); } } } diff --git a/src/cc/gateways.cpp b/src/cc/gateways.cpp index de01d9995..283ba91a1 100644 --- a/src/cc/gateways.cpp +++ b/src/cc/gateways.cpp @@ -136,7 +136,7 @@ Care must be taken so that tokens are not lost and can be converted back. - This changes the usage to require tokenconvert before doing the bind and also tokenconvert before doing a withdraw. EVAL_GATEWAYS has evalcode of 251 + This changes the usage to require tokenconvert before doing the bind and also tokenconvert before doing a withdraw. EVAL_GATEWAYS has evalcode of 241 The gatewaysclaim automatically converts the deposit amount of tokens back to EVAL_ASSETS. From e2d84d81a710c950b31ae338dc5343f1f0701cbf Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 22 Sep 2018 03:11:46 -1100 Subject: [PATCH 06/17] Test --- src/cc/dapps/oraclefeed.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index 4a1ece19d..3d395e91d 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -585,7 +585,7 @@ char *createmultisig(char *refcoin,char *acname,char *depositaddr,char *signerad } satoshis -= txfee; sprintf(array,"[\"%s\"]",depositaddr); - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"listunspent","1","99999999",array,"")) != 0 ) + if ( (retjson= get_komodocli(refcoin,&retstr,acname,"listunspent","1","99999999",array)) != 0 ) { //createrawtransaction [{"txid":"id","vout":n},...] {"address":amount,...} if ( (vins= getinputarray(&total,retjson,satoshis)) != 0 ) @@ -602,7 +602,7 @@ char *createmultisig(char *refcoin,char *acname,char *depositaddr,char *signerad char *argA,*argB; argA = jprint(vins,1); argB = jprint(vouts,1); - if ( (retjson2= get_komodocli(refcoin,&txstr,acname,"createrawtransaction",argA,argB,"","")) != 0 ) + if ( (retjson2= get_komodocli(refcoin,&txstr,acname,"createrawtransaction",argA,argB,"")) != 0 ) { printf("createmultisig: unexpected JSON2.(%s)\n",jprint(retjson2,0)); free_json(retjson2); @@ -626,13 +626,13 @@ char *createmultisig(char *refcoin,char *acname,char *depositaddr,char *signerad 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 ( (retjson= get_komodocli(refcoin,&retstr,acname,"signrawtransaction",rawtx,"","")) != 0 ) { if ( jint(retjson,"complete") != 0 ) return(retjson); else if ( (hexstr= jstr(retjson,"hex")) != 0 && strlen(hexstr) > strlen(rawtx) ) { - jadd(retjson,"partialtx",1)' + jaddnum(retjson,"partialtx",1); return(retjson); } free_json(retjson); From b72cac5111f92cf3b4ebe3e1dceeb5e519995ba5 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 22 Sep 2018 03:12:21 -1100 Subject: [PATCH 07/17] 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 3d395e91d..ee31709dc 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -643,7 +643,7 @@ cJSON *addmultisignature(char *refcoin,char *acname,char *signeraddr,char *rawtx char *get_gatewaysmultisig(char *refcoin,char *acname,char *bindtxidstr,char *withtxidstr,char *txidaddr) { char *retstr,*hexstr,*hex=0; cJSON *retjson; - if ( (retjson= get_komodocli("KMD",&retstr,acname,"gatewaysmultisig",bindtxidstr,refcoin,withtxidstr,txidstr)) != 0 ) + if ( (retjson= get_komodocli("KMD",&retstr,acname,"gatewaysmultisig",bindtxidstr,refcoin,withtxidstr,txidaddr)) != 0 ) { if ( (hexstr= jstr(retjson,"hex")) != 0 ) hex = clonestr(hexstr); From 2fe210a8802759c9a5d9dd19c9fd905a3f5442b9 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 22 Sep 2018 03:14:37 -1100 Subject: [PATCH 08/17] Test --- src/cc/dapps/oraclefeed.c | 42 +++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index ee31709dc..673b841b6 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -310,7 +310,7 @@ uint64_t get_btcusd() char *REFCOIN_CLI; -cJSON *get_komodocli(char *refcoin,char **retstrp,char *acname,char *method,char *arg0,char *arg1,char *arg2) +cJSON *get_komodocli(char *refcoin,char **retstrp,char *acname,char *method,char *arg0,char *arg1,char *arg2,char *arg3) { long fsize; cJSON *retjson = 0; char cmdstr[32768],*jsonstr,fname[256]; sprintf(fname,"/tmp/oraclefeed.%s",method); @@ -318,13 +318,13 @@ cJSON *get_komodocli(char *refcoin,char **retstrp,char *acname,char *method,char { if ( refcoin[0] != 0 && strcmp(refcoin,"KMD") != 0 ) printf("unexpected: refcoin.(%s) acname.(%s)\n",refcoin,acname); - sprintf(cmdstr,"./komodo-cli -ac_name=%s %s %s %s %s > %s\n",acname,method,arg0,arg1,arg2,fname); + sprintf(cmdstr,"./komodo-cli -ac_name=%s %s %s %s %s %s > %s\n",acname,method,arg0,arg1,arg2,arg3,fname); } else if ( strcmp(refcoin,"KMD") == 0 ) - sprintf(cmdstr,"./komodo-cli %s %s %s %s > %s\n",method,arg0,arg1,arg2,fname); + sprintf(cmdstr,"./komodo-cli %s %s %s %s %s > %s\n",method,arg0,arg1,arg2,arg3,fname); else if ( REFCOIN_CLI != 0 && REFCOIN_CLI[0] != 0 ) { - sprintf(cmdstr,"%s %s %s %s %s > %s\n",REFCOIN_CLI,method,arg0,arg1,arg2,fname); + sprintf(cmdstr,"%s %s %s %s %s %s > %s\n",REFCOIN_CLI,method,arg0,arg1,arg2,arg3,fname); printf("ref.(%s) REFCOIN_CLI (%s)\n",refcoin,cmdstr); } system(cmdstr); @@ -345,7 +345,7 @@ bits256 komodobroadcast(char *refcoin,char *acname,cJSON *hexjson) memset(txid.bytes,0,sizeof(txid)); if ( (hexstr= jstr(hexjson,"hex")) != 0 ) { - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"sendrawtransaction",hexstr,"","")) != 0 ) + if ( (retjson= get_komodocli(refcoin,&retstr,acname,"sendrawtransaction",hexstr,"","","")) != 0 ) { //fprintf(stderr,"broadcast.(%s)\n",jprint(retjson,0)); free_json(retjson); @@ -369,7 +369,7 @@ bits256 sendtoaddress(char *refcoin,char *acname,char *destaddr,int64_t satoshis char numstr[32],*retstr,str[65]; cJSON *retjson; bits256 txid; memset(txid.bytes,0,sizeof(txid)); sprintf(numstr,"%.8f",(double)satoshis/SATOSHIDEN); - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"sendtoaddress",destaddr,numstr,"")) != 0 ) + if ( (retjson= get_komodocli(refcoin,&retstr,acname,"sendtoaddress",destaddr,numstr,"","")) != 0 ) { fprintf(stderr,"unexpected sendrawtransaction json.(%s)\n",jprint(retjson,0)); free_json(retjson); @@ -390,7 +390,7 @@ bits256 sendtoaddress(char *refcoin,char *acname,char *destaddr,int64_t satoshis int32_t get_coinheight(char *refcoin,char *acname) { cJSON *retjson; char *retstr; int32_t height=0; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"getblockchaininfo","","","")) != 0 ) + if ( (retjson= get_komodocli(refcoin,&retstr,acname,"getblockchaininfo","","","","")) != 0 ) { height = jint(retjson,"blocks"); free_json(retjson); @@ -408,7 +408,7 @@ bits256 get_coinblockhash(char *refcoin,char *acname,int32_t height) cJSON *retjson; char *retstr,heightstr[32]; bits256 hash; memset(hash.bytes,0,sizeof(hash)); sprintf(heightstr,"%d",height); - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"getblockhash",heightstr,"","")) != 0 ) + if ( (retjson= get_komodocli(refcoin,&retstr,acname,"getblockhash",heightstr,"","","")) != 0 ) { fprintf(stderr,"unexpected blockhash json.(%s)\n",jprint(retjson,0)); free_json(retjson); @@ -429,7 +429,7 @@ bits256 get_coinmerkleroot(char *refcoin,char *acname,bits256 blockhash) { cJSON *retjson; char *retstr,str[65]; bits256 merkleroot; memset(merkleroot.bytes,0,sizeof(merkleroot)); - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"getblockheader",bits256_str(str,blockhash),"","")) != 0 ) + if ( (retjson= get_komodocli(refcoin,&retstr,acname,"getblockheader",bits256_str(str,blockhash),"","","")) != 0 ) { merkleroot = jbits256(retjson,"merkleroot"); //fprintf(stderr,"got merkleroot.(%s)\n",bits256_str(str,merkleroot)); @@ -467,7 +467,7 @@ int32_t get_coinheader(char *refcoin,char *acname,bits256 *blockhashp,bits256 *m cJSON *get_gatewayspending(char *refcoin,char *acname,char *oraclestxidstr) { cJSON *retjson; char *retstr; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"gatewayspending",oraclestxidstr,refcoin,"")) != 0 ) + if ( (retjson= get_komodocli(refcoin,&retstr,acname,"gatewayspending",oraclestxidstr,refcoin,"","")) != 0 ) { //printf("pending.(%s)\n",jprint(retjson,0)); return(retjson); @@ -483,7 +483,7 @@ cJSON *get_gatewayspending(char *refcoin,char *acname,char *oraclestxidstr) cJSON *get_rawmempool(char *refcoin,char *acname) { cJSON *retjson; char *retstr; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"getrawmempool","","","")) != 0 ) + if ( (retjson= get_komodocli(refcoin,&retstr,acname,"getrawmempool","","","","")) != 0 ) { //printf("mempool.(%s)\n",jprint(retjson,0)); return(retjson); @@ -502,7 +502,7 @@ cJSON *get_addressutxos(char *refcoin,char *acname,char *coinaddr) if ( refcoin[0] != 0 && strcmp(refcoin,"KMD") != 0 ) printf("warning: assumes %s has addressindex enabled\n",refcoin); sprintf(jsonbuf,"{\\\"addresses\\\":[\\\"%s\\\"]}",coinaddr); - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"getaddressutxos",jsonbuf,"","")) != 0 ) + if ( (retjson= get_komodocli(refcoin,&retstr,acname,"getaddressutxos",jsonbuf,"","","")) != 0 ) { //printf("addressutxos.(%s)\n",jprint(retjson,0)); return(retjson); @@ -518,7 +518,7 @@ cJSON *get_addressutxos(char *refcoin,char *acname,char *coinaddr) cJSON *get_rawtransaction(char *refcoin,char *acname,bits256 txid) { cJSON *retjson; char *retstr,str[65]; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"getrawtransaction",bits256_str(str,txid),"1","")) != 0 ) + if ( (retjson= get_komodocli(refcoin,&retstr,acname,"getrawtransaction",bits256_str(str,txid),"1","","")) != 0 ) { return(retjson); } @@ -533,7 +533,7 @@ cJSON *get_rawtransaction(char *refcoin,char *acname,bits256 txid) void importaddress(char *refcoin,char *acname,char *depositaddr) { cJSON *retjson; char *retstr; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"importaddress",depositaddr,"","")) != 0 ) + if ( (retjson= get_komodocli(refcoin,&retstr,acname,"importaddress",depositaddr,"","","")) != 0 ) { printf("importaddress.(%s)\n",jprint(retjson,0)); free_json(retjson); @@ -585,7 +585,7 @@ char *createmultisig(char *refcoin,char *acname,char *depositaddr,char *signerad } satoshis -= txfee; sprintf(array,"[\"%s\"]",depositaddr); - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"listunspent","1","99999999",array)) != 0 ) + if ( (retjson= get_komodocli(refcoin,&retstr,acname,"listunspent","1","99999999",array,"")) != 0 ) { //createrawtransaction [{"txid":"id","vout":n},...] {"address":amount,...} if ( (vins= getinputarray(&total,retjson,satoshis)) != 0 ) @@ -602,7 +602,7 @@ char *createmultisig(char *refcoin,char *acname,char *depositaddr,char *signerad char *argA,*argB; argA = jprint(vins,1); argB = jprint(vouts,1); - if ( (retjson2= get_komodocli(refcoin,&txstr,acname,"createrawtransaction",argA,argB,"")) != 0 ) + if ( (retjson2= get_komodocli(refcoin,&txstr,acname,"createrawtransaction",argA,argB,"","")) != 0 ) { printf("createmultisig: unexpected JSON2.(%s)\n",jprint(retjson2,0)); free_json(retjson2); @@ -626,7 +626,7 @@ char *createmultisig(char *refcoin,char *acname,char *depositaddr,char *signerad 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 ( (retjson= get_komodocli(refcoin,&retstr,acname,"signrawtransaction",rawtx,"","","")) != 0 ) { if ( jint(retjson,"complete") != 0 ) return(retjson); @@ -656,7 +656,7 @@ void gatewaysmarkdone(char *refcoin,char *acname,bits256 withtxid,char *coin,bit { char str[65],str2[65],*retstr; cJSON *retjson; printf("spend %s %s/v2 as marker\n",acname,bits256_str(str,withtxid)); - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"gatewaysmarkdone",bits256_str(str,withtxid),coin,bits256_str(str2,cointxid))) != 0 ) + if ( (retjson= get_komodocli(refcoin,&retstr,acname,"gatewaysmarkdone",bits256_str(str,withtxid),coin,bits256_str(str2,cointxid),"")) != 0 ) { komodobroadcast(refcoin,acname,retjson); free_json(retjson); @@ -671,7 +671,7 @@ 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 *oracle,*retstr,*name,*deposit; cJSON *retjson; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"gatewaysinfo",bindtxidstr,"","")) != 0 ) + if ( (retjson= get_komodocli(refcoin,&retstr,acname,"gatewaysinfo",bindtxidstr,"","","")) != 0 ) { if ( (oracle= jstr(retjson,"oracletxid")) != 0 && strcmp(oracle,oraclestr) == 0 ) { @@ -933,7 +933,7 @@ int32_t main(int32_t argc,char **argv) while ( 1 ) { retstr = 0; - if ( (refcoin[0] == 0 || prevheight < (get_coinheight(refcoin,"") - 10)) && (clijson= get_komodocli("KMD",&retstr,acname,"oraclesinfo",oraclestr,"","")) != 0 ) + if ( (refcoin[0] == 0 || prevheight < (get_coinheight(refcoin,"") - 10)) && (clijson= get_komodocli("KMD",&retstr,acname,"oraclesinfo",oraclestr,"","","")) != 0 ) { if ( refcoin[0] == 0 && jstr(clijson,"name") != 0 ) { @@ -960,7 +960,7 @@ int32_t main(int32_t argc,char **argv) { if ( (height= get_oracledata(refcoin,"",prevheight,hexstr,sizeof(hexstr),"Ihh")) != 0 ) { - if ( (clijson2= get_komodocli("KMD",&retstr2,acname,"oraclesdata",oraclestr,hexstr,"")) != 0 ) + if ( (clijson2= get_komodocli("KMD",&retstr2,acname,"oraclesdata",oraclestr,hexstr,"","")) != 0 ) { //printf("data.(%s)\n",jprint(clijson2,0)); txid = komodobroadcast("KMD",acname,clijson2); From 7d46fc67440bd128e263de0cbde0d34c33e2a934 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 22 Sep 2018 03:34:42 -1100 Subject: [PATCH 09/17] Test --- 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 673b841b6..fb32820e9 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -533,7 +533,7 @@ cJSON *get_rawtransaction(char *refcoin,char *acname,bits256 txid) void importaddress(char *refcoin,char *acname,char *depositaddr) { cJSON *retjson; char *retstr; - if ( (retjson= get_komodocli(refcoin,&retstr,acname,"importaddress",depositaddr,"","","")) != 0 ) + if ( (retjson= get_komodocli(refcoin,&retstr,acname,"importaddress",depositaddr,"","true","")) != 0 ) { printf("importaddress.(%s)\n",jprint(retjson,0)); free_json(retjson); From 3a9b6817573d3e949b09a8d929b106df4e6fea5b Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 22 Sep 2018 03:39:18 -1100 Subject: [PATCH 10/17] Test --- src/cc/dapps/oraclefeed.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/cc/dapps/oraclefeed.c b/src/cc/dapps/oraclefeed.c index fb32820e9..297b92a01 100644 --- a/src/cc/dapps/oraclefeed.c +++ b/src/cc/dapps/oraclefeed.c @@ -673,13 +673,13 @@ int32_t get_gatewaysinfo(char *refcoin,char *acname,char *depositaddr,int32_t *M char *oracle,*retstr,*name,*deposit; cJSON *retjson; if ( (retjson= get_komodocli(refcoin,&retstr,acname,"gatewaysinfo",bindtxidstr,"","","")) != 0 ) { - if ( (oracle= jstr(retjson,"oracletxid")) != 0 && strcmp(oracle,oraclestr) == 0 ) + if ( (oracle= jstr(retjson,"oracletxid")) != 0 && strcmp(oracle,oraclestr) == 0 && (deposit= jstr(retjson,"deposit")) != 0 ) { - if ( jstr(retjson,"coin") != 0 && strcmp(jstr(retjson,"coin"),coin) == 0 && jint(retjson,"N") >= 1 && (deposit= jstr(retjson,"deposit")) != 0 ) + strcpy(depositaddr,deposit); + if ( jstr(retjson,"coin") != 0 && strcmp(jstr(retjson,"coin"),coin) == 0 && jint(retjson,"N") >= 1 ) { *Mp = jint(retjson,"M"); *Np = jint(retjson,"N"); - strcpy(depositaddr,deposit); //printf("(%s)\n",jprint(retjson,0)); } else printf("coin.%s vs %s\n",jstr(retjson,"coin"),coin); } else printf("%s != %s\n",oracle,oraclestr); From ca865ad2d471c87091ef130406a9dfa411586cd5 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 23 Sep 2018 00:40:14 -1100 Subject: [PATCH 11/17] -prints --- src/main.cpp | 2 +- src/wallet/wallet.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index a256e0f36..0fdf80892 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1118,7 +1118,7 @@ bool CheckTransactionWithoutProofVerification(const CTransaction& tx, CValidatio } if ( ASSETCHAINS_PRIVATE != 0 ) { - fprintf(stderr,"private chain nValue %.8f iscoinbase.%d\n",(double)txout.nValue/COIN,iscoinbase); + //fprintf(stderr,"private chain nValue %.8f iscoinbase.%d\n",(double)txout.nValue/COIN,iscoinbase); if ( (txout.nValue > 0 && iscoinbase == 0) || tx.GetJoinSplitValueOut() > 0 ) { if ( txout.scriptPubKey.size() == 35 && komodo_isnotaryvout((uint8_t *)txout.scriptPubKey.data()) == 0 ) diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index 70375e663..47c93545b 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -2121,7 +2121,7 @@ std::vector CWallet::ResendWalletTransactionsBefore(int64_t nTime) { if ( wtx.nLockTime >= LOCKTIME_THRESHOLD && wtx.nLockTime < now-KOMODO_MAXMEMPOOLTIME ) { - LogPrintf("skip Relaying wtx %s nLockTime %u vs now.%u\n", wtx.GetHash().ToString(),(uint32_t)wtx.nLockTime,now); + //LogPrintf("skip Relaying wtx %s nLockTime %u vs now.%u\n", wtx.GetHash().ToString(),(uint32_t)wtx.nLockTime,now); continue; } } From 3372f7893c56e47d291780d8e594ba6f75ca83df Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 23 Sep 2018 03:55:08 -1100 Subject: [PATCH 12/17] Test --- src/wallet/rpcwallet.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 5a14370c4..306ae36c8 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -459,7 +459,7 @@ UniValue sendtoaddress(const UniValue& params, bool fHelp) + HelpExampleRpc("sendtoaddress", "\"RD6GgnrMpPaTSMn8vai6yiGA7mN4QGPV\", 0.1, \"donation\", \"seans outpost\"") ); - if ( ASSETCHAINS_PRIVATE != 0 && AmountFromValue(params[1]) > 0 ) + if ( 0 && ASSETCHAINS_PRIVATE != 0 && AmountFromValue(params[1]) > 0 ) throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid " + strprintf("%s",komodo_chainname()) + " address"); LOCK2(cs_main, pwalletMain->cs_wallet); From a7e86f3a813b1e732c416276200d517816afb91d Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 23 Sep 2018 04:28:04 -1100 Subject: [PATCH 13/17] Revert --- src/wallet/rpcwallet.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wallet/rpcwallet.cpp b/src/wallet/rpcwallet.cpp index 306ae36c8..5a14370c4 100644 --- a/src/wallet/rpcwallet.cpp +++ b/src/wallet/rpcwallet.cpp @@ -459,7 +459,7 @@ UniValue sendtoaddress(const UniValue& params, bool fHelp) + HelpExampleRpc("sendtoaddress", "\"RD6GgnrMpPaTSMn8vai6yiGA7mN4QGPV\", 0.1, \"donation\", \"seans outpost\"") ); - if ( 0 && ASSETCHAINS_PRIVATE != 0 && AmountFromValue(params[1]) > 0 ) + if ( ASSETCHAINS_PRIVATE != 0 && AmountFromValue(params[1]) > 0 ) throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid " + strprintf("%s",komodo_chainname()) + " address"); LOCK2(cs_main, pwalletMain->cs_wallet); From 3a36ff17764be80774984a8daa786566c64f9d42 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 23 Sep 2018 05:47:33 -1100 Subject: [PATCH 14/17] Test --- src/cc/CCutils.cpp | 8 ++++++++ src/komodo_globals.h | 1 + src/komodo_notary.h | 14 +++++++++----- src/main.cpp | 7 +++++-- 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/cc/CCutils.cpp b/src/cc/CCutils.cpp index 01e9d35ab..e03564971 100644 --- a/src/cc/CCutils.cpp +++ b/src/cc/CCutils.cpp @@ -198,6 +198,14 @@ bool Getscriptaddress(char *destaddr,const CScript &scriptPubKey) return(false); } +bool pubkey2addr(char *destaddr,uint8_t *pubkey33) +{ + std::vectorpk; int32_t i; + for (i=0; i<33; i++) + pk.push_back(pubkey33[i]); + return(Getscriptaddress(destaddr,CScript() << pk << OP_CHECKSIG)); +} + CPubKey CCtxidaddr(char *txidaddr,uint256 txid) { uint8_t buf33[33]; CPubKey pk; diff --git a/src/komodo_globals.h b/src/komodo_globals.h index cc5104d12..f352b5333 100644 --- a/src/komodo_globals.h +++ b/src/komodo_globals.h @@ -29,6 +29,7 @@ uint64_t komodo_paxtotal(); int32_t komodo_longestchain(); uint64_t komodo_maxallowed(int32_t baseid); int32_t komodo_bannedset(int32_t *indallvoutsp,uint256 *array,int32_t max); +bool pubkey2addr(char *destaddr,uint8_t *pubkey33); pthread_mutex_t komodo_mutex; diff --git a/src/komodo_notary.h b/src/komodo_notary.h index 7a6fb8a6b..2f23bfbf7 100644 --- a/src/komodo_notary.h +++ b/src/komodo_notary.h @@ -199,20 +199,24 @@ const char *Notaries_elected1[][2] = }; #define CRYPTO777_PUBSECPSTR "020e46e79a2a8d12b9b5d12c7a91adb4e454edfae43c0a0cb805427d2ac7613fd9" -int32_t komodo_isnotaryvout(uint8_t *script) // from ac_private chains only +int32_t komodo_isnotaryvout(char *coinaddr) // from ac_private chains only { - uint8_t pubkey33[33]; int32_t i; - if ( script[0] == 33 && script[34] == 0xac ) + static int32_t didinit; static char notaryaddrs[65][64]; + if ( didinit == 0 ) { + uint8_t pubkey33[33]; for (i=0; i<=sizeof(Notaries_elected1)/sizeof(*Notaries_elected1); i++) { if ( i < sizeof(Notaries_elected1)/sizeof(*Notaries_elected1) ) decode_hex(pubkey33,33,(char *)Notaries_elected1[i][1]); else decode_hex(pubkey33,33,(char *)CRYPTO777_PUBSECPSTR); - if ( memcmp(script+1,pubkey33,33) == 0 ) - return(1); + pubkey2addr(notaryaddrs[i],pubkey33); } + didinit = 1; } + for (i=0; i<=sizeof(Notaries_elected1)/sizeof(*Notaries_elected1); i++) + if ( strcmp(coinaddr,notaryaddrs[i]) == 0 ) + return(1); return(0); } diff --git a/src/main.cpp b/src/main.cpp index 0fdf80892..dd3a054d1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -60,7 +60,8 @@ extern int32_t KOMODO_LOADINGBLOCKS,KOMODO_LONGESTCHAIN,KOMODO_INSYNC,KOMODO_CON int32_t KOMODO_NEWBLOCKS; int32_t komodo_block2pubkey33(uint8_t *pubkey33,CBlock *block); void komodo_broadcast(CBlock *pblock,int32_t limit); -int32_t komodo_isnotaryvout(CScript scriptPubKey); +int32_t komodo_isnotaryvout(char *destaddr); +bool Getscriptaddress(char *destaddr,const CScript &scriptPubKey); BlockMap mapBlockIndex; CChain chainActive; @@ -1121,7 +1122,9 @@ bool CheckTransactionWithoutProofVerification(const CTransaction& tx, CValidatio //fprintf(stderr,"private chain nValue %.8f iscoinbase.%d\n",(double)txout.nValue/COIN,iscoinbase); if ( (txout.nValue > 0 && iscoinbase == 0) || tx.GetJoinSplitValueOut() > 0 ) { - if ( txout.scriptPubKey.size() == 35 && komodo_isnotaryvout((uint8_t *)txout.scriptPubKey.data()) == 0 ) + char destaddr[65]; + Getscriptaddress(destaddr,txout.scriptPubKey); + if ( komodo_isnotaryvout(destaddr) == 0 ) return state.DoS(100, error("CheckTransaction(): this is a private chain, no public allowed"),REJECT_INVALID, "bad-txns-acprivacy-chain"); } } From 569bb55b5f039b8b006535c17b01b12ca2ce1926 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 23 Sep 2018 05:48:40 -1100 Subject: [PATCH 15/17] Test --- src/komodo_notary.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/komodo_notary.h b/src/komodo_notary.h index 2f23bfbf7..2b929549f 100644 --- a/src/komodo_notary.h +++ b/src/komodo_notary.h @@ -201,7 +201,8 @@ const char *Notaries_elected1[][2] = int32_t komodo_isnotaryvout(char *coinaddr) // from ac_private chains only { - static int32_t didinit; static char notaryaddrs[65][64]; + static int32_t didinit; static char notaryaddrs[sizeof(Notaries_elected1)/sizeof(*Notaries_elected1) + 1][64]; + int32_t i; if ( didinit == 0 ) { uint8_t pubkey33[33]; From a8c6526acff093ac93d55c9fa1b4944683d16147 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 23 Sep 2018 05:51:51 -1100 Subject: [PATCH 16/17] Test --- src/komodo_notary.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_notary.h b/src/komodo_notary.h index 2b929549f..1bef3f8c6 100644 --- a/src/komodo_notary.h +++ b/src/komodo_notary.h @@ -211,7 +211,7 @@ int32_t komodo_isnotaryvout(char *coinaddr) // from ac_private chains only if ( i < sizeof(Notaries_elected1)/sizeof(*Notaries_elected1) ) decode_hex(pubkey33,33,(char *)Notaries_elected1[i][1]); else decode_hex(pubkey33,33,(char *)CRYPTO777_PUBSECPSTR); - pubkey2addr(notaryaddrs[i],pubkey33); + pubkey2addr((char *)notaryaddrs[i],(uint8_t *)pubkey33); } didinit = 1; } From a2e2291e265e5f3bcb6e5bfecfcf9876dd23b008 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 23 Sep 2018 05:53:54 -1100 Subject: [PATCH 17/17] Test --- src/komodo_notary.h | 22 ---------------------- src/main.cpp | 23 ++++++++++++++++++++++- 2 files changed, 22 insertions(+), 23 deletions(-) diff --git a/src/komodo_notary.h b/src/komodo_notary.h index 1bef3f8c6..04fd30d5f 100644 --- a/src/komodo_notary.h +++ b/src/komodo_notary.h @@ -199,28 +199,6 @@ const char *Notaries_elected1[][2] = }; #define CRYPTO777_PUBSECPSTR "020e46e79a2a8d12b9b5d12c7a91adb4e454edfae43c0a0cb805427d2ac7613fd9" -int32_t komodo_isnotaryvout(char *coinaddr) // from ac_private chains only -{ - static int32_t didinit; static char notaryaddrs[sizeof(Notaries_elected1)/sizeof(*Notaries_elected1) + 1][64]; - int32_t i; - if ( didinit == 0 ) - { - uint8_t pubkey33[33]; - for (i=0; i<=sizeof(Notaries_elected1)/sizeof(*Notaries_elected1); i++) - { - if ( i < sizeof(Notaries_elected1)/sizeof(*Notaries_elected1) ) - decode_hex(pubkey33,33,(char *)Notaries_elected1[i][1]); - else decode_hex(pubkey33,33,(char *)CRYPTO777_PUBSECPSTR); - pubkey2addr((char *)notaryaddrs[i],(uint8_t *)pubkey33); - } - didinit = 1; - } - for (i=0; i<=sizeof(Notaries_elected1)/sizeof(*Notaries_elected1); i++) - if ( strcmp(coinaddr,notaryaddrs[i]) == 0 ) - return(1); - return(0); -} - int32_t komodo_notaries(uint8_t pubkeys[64][33],int32_t height,uint32_t timestamp) { static uint8_t elected_pubkeys0[64][33],elected_pubkeys1[64][33],did0,did1; static int32_t n0,n1; diff --git a/src/main.cpp b/src/main.cpp index dd3a054d1..8908e811e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -60,7 +60,6 @@ extern int32_t KOMODO_LOADINGBLOCKS,KOMODO_LONGESTCHAIN,KOMODO_INSYNC,KOMODO_CON int32_t KOMODO_NEWBLOCKS; int32_t komodo_block2pubkey33(uint8_t *pubkey33,CBlock *block); void komodo_broadcast(CBlock *pblock,int32_t limit); -int32_t komodo_isnotaryvout(char *destaddr); bool Getscriptaddress(char *destaddr,const CScript &scriptPubKey); BlockMap mapBlockIndex; @@ -1043,6 +1042,28 @@ bool CheckTransaction(const CTransaction& tx, CValidationState &state, } } +int32_t komodo_isnotaryvout(char *coinaddr) // from ac_private chains only +{ + static int32_t didinit; static char notaryaddrs[sizeof(Notaries_elected1)/sizeof(*Notaries_elected1) + 1][64]; + int32_t i; + if ( didinit == 0 ) + { + uint8_t pubkey33[33]; + for (i=0; i<=sizeof(Notaries_elected1)/sizeof(*Notaries_elected1); i++) + { + if ( i < sizeof(Notaries_elected1)/sizeof(*Notaries_elected1) ) + decode_hex(pubkey33,33,(char *)Notaries_elected1[i][1]); + else decode_hex(pubkey33,33,(char *)CRYPTO777_PUBSECPSTR); + pubkey2addr((char *)notaryaddrs[i],(uint8_t *)pubkey33); + } + didinit = 1; + } + for (i=0; i<=sizeof(Notaries_elected1)/sizeof(*Notaries_elected1); i++) + if ( strcmp(coinaddr,notaryaddrs[i]) == 0 ) + return(1); + return(0); +} + bool CheckTransactionWithoutProofVerification(const CTransaction& tx, CValidationState &state) { // Basic checks that don't depend on any context