From 03fb2302866337945cdf7a07d7d60bf05dda58f0 Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 31 Mar 2017 17:54:46 +0300 Subject: [PATCH 01/12] Test --- basilisk/jumblr.c | 49 ++++++++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/basilisk/jumblr.c b/basilisk/jumblr.c index 606e1c5dd..9c71c209e 100755 --- a/basilisk/jumblr.c +++ b/basilisk/jumblr.c @@ -446,56 +446,56 @@ int64_t jumblr_DEXsplit(struct supernet_info *myinfo,struct iguana_info *coin,bi return(success * total); } -double jumblr_DEXutxosize(double *targetpriceBp,double *targetpriceMp,double *targetpriceSp,int32_t isbob) +double jumblr_DEXutxosize(double *targetvolBp,double *targetvolMp,double *targetvolSp,int32_t isbob) { double fee,depositfactor = (isbob == 0) ? 1. : 1.2; fee = JUMBLR_INCR * JUMBLR_FEE; - *targetpriceBp = depositfactor * ((JUMBLR_INCR + 3*fee)*100 + 3*JUMBLR_TXFEE); - *targetpriceMp = depositfactor * ((JUMBLR_INCR + 3*fee)*10 + 3*JUMBLR_TXFEE); - *targetpriceSp = depositfactor * ((JUMBLR_INCR + 3*fee) + 3*JUMBLR_TXFEE); + *targetvolBp = depositfactor * ((JUMBLR_INCR + 3*fee)*100 + 3*JUMBLR_TXFEE); + *targetvolMp = depositfactor * ((JUMBLR_INCR + 3*fee)*10 + 3*JUMBLR_TXFEE); + *targetvolSp = depositfactor * ((JUMBLR_INCR + 3*fee) + 3*JUMBLR_TXFEE); return(depositfactor); } -int32_t jumblr_DEXutxoind(int32_t *shouldsplitp,double targetpriceB,double targetpriceM,double targetpriceS,double amount,double margin,double dexfeeratio,double esttxfee) +int32_t jumblr_DEXutxoind(int32_t *shouldsplitp,double targetvolB,double targetvolM,double targetvolS,double amount,double margin,double dexfeeratio,double esttxfee) { *shouldsplitp = 0; - if ( amount >= targetpriceB ) + if ( amount >= targetvolB ) { - if ( amount > margin * (targetpriceB + targetpriceS) ) + if ( amount > margin * (targetvolB + targetvolS) ) *shouldsplitp = 1; return(0); } else { - if ( amount >= targetpriceM ) + if ( amount >= targetvolM ) { - if ( amount > margin * (targetpriceM + targetpriceS) ) + if ( amount > margin * (targetvolM + targetvolS) ) *shouldsplitp = 1; return(1); } else { - if ( amount >= targetpriceS ) + if ( amount >= targetvolS ) { - if ( amount > margin * targetpriceS ) + if ( amount > margin * targetvolS ) *shouldsplitp = 1; return(2); } - else if ( amount >= targetpriceB/dexfeeratio ) + else if ( amount >= targetvolB/dexfeeratio ) { - if ( amount > margin * targetpriceB/dexfeeratio ) + if ( amount > margin * targetvolB/dexfeeratio ) *shouldsplitp = 1; return(3); } - else if ( amount >= targetpriceM/dexfeeratio ) + else if ( amount >= targetvolM/dexfeeratio ) { - if ( amount > margin * targetpriceM/dexfeeratio ) + if ( amount > margin * targetvolM/dexfeeratio ) *shouldsplitp = 1; return(4); } - else if ( amount >= targetpriceS/dexfeeratio ) + else if ( amount >= targetvolS/dexfeeratio ) { - if ( amount > margin * targetpriceS/dexfeeratio ) + if ( amount > margin * targetvolS/dexfeeratio ) *shouldsplitp = 1; return(5); } @@ -512,22 +512,23 @@ int32_t jumblr_DEXutxoind(int32_t *shouldsplitp,double targetpriceB,double targe int64_t jumblr_DEXutxoupdate(struct supernet_info *myinfo,struct iguana_info *coin,bits256 *splittxidp,char *coinaddr,bits256 txid,int32_t vout,uint64_t value,int32_t isbob) { - double fees[4],targetpriceB,amount,targetpriceM,targetpriceS,depositfactor,dexfeeratio,margin; int32_t ind,shouldsplit; + double fees[4],targetvolB,amount,targetvolM,targetvolS,depositfactor,dexfeeratio,margin; int32_t ind,shouldsplit; margin = 1.1; depositfactor = (isbob == 0) ? 1. : 1.2; dexfeeratio = 500.; amount = dstr(value); memset(splittxidp,0,sizeof(*splittxidp)); - depositfactor = jumblr_DEXutxosize(&targetpriceB,&targetpriceM,&targetpriceS,isbob); - fees[0] = (margin * targetpriceB) / dexfeeratio; - fees[1] = (margin * targetpriceM) / dexfeeratio; - fees[2] = (margin * targetpriceS) / dexfeeratio; + depositfactor = jumblr_DEXutxosize(&targetvolB,&targetvolM,&targetvolS,isbob); + printf("depositfactor %.8f targetvols %.8f %.8f %.8f\n",depositfactor,targetvolB,targetvolM,targetvolS); + fees[0] = (margin * targetvolB) / dexfeeratio; + fees[1] = (margin * targetvolM) / dexfeeratio; + fees[2] = (margin * targetvolS) / dexfeeratio; fees[3] = (strcmp("BTC",coin->symbol) == 0) ? 50000 : 10000; - if ( (ind= jumblr_DEXutxoind(&shouldsplit,targetpriceB,targetpriceM,targetpriceS,amount,margin,dexfeeratio,fees[3])) >= 0 ) + if ( (ind= jumblr_DEXutxoind(&shouldsplit,targetvolB,targetvolM,targetvolS,amount,margin,dexfeeratio,fees[3])) >= 0 ) { printf("shouldsplit.%d ind.%d\n",shouldsplit,ind); if ( shouldsplit != 0 ) - return(jumblr_DEXsplit(myinfo,coin,splittxidp,coinaddr,txid,vout,value,margin * targetpriceB,margin * targetpriceM,margin * targetpriceS,fees)); + return(jumblr_DEXsplit(myinfo,coin,splittxidp,coinaddr,txid,vout,value,margin * targetvolB,margin * targetvolM,margin * targetvolS,fees)); } else printf("negative ind\n"); return(0); } From bd790211469f3534f7686f72316aecf345771c97 Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 31 Mar 2017 18:17:36 +0300 Subject: [PATCH 02/12] Test --- basilisk/jumblr.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/basilisk/jumblr.c b/basilisk/jumblr.c index 9c71c209e..f515e6f35 100755 --- a/basilisk/jumblr.c +++ b/basilisk/jumblr.c @@ -446,13 +446,13 @@ int64_t jumblr_DEXsplit(struct supernet_info *myinfo,struct iguana_info *coin,bi return(success * total); } -double jumblr_DEXutxosize(double *targetvolBp,double *targetvolMp,double *targetvolSp,int32_t isbob) +double jumblr_DEXutxosize(double *targetvolBp,double *targetvolMp,double *targetvolSp,int32_t isbob,double kmdprice) { double fee,depositfactor = (isbob == 0) ? 1. : 1.2; fee = JUMBLR_INCR * JUMBLR_FEE; - *targetvolBp = depositfactor * ((JUMBLR_INCR + 3*fee)*100 + 3*JUMBLR_TXFEE); - *targetvolMp = depositfactor * ((JUMBLR_INCR + 3*fee)*10 + 3*JUMBLR_TXFEE); - *targetvolSp = depositfactor * ((JUMBLR_INCR + 3*fee) + 3*JUMBLR_TXFEE); + *targetvolBp = depositfactor * kmdprice * ((JUMBLR_INCR + 3*fee)*100 + 3*JUMBLR_TXFEE); + *targetvolMp = depositfactor * kmdprice * ((JUMBLR_INCR + 3*fee)*10 + 3*JUMBLR_TXFEE); + *targetvolSp = depositfactor * kmdprice * ((JUMBLR_INCR + 3*fee) + 3*JUMBLR_TXFEE); return(depositfactor); } @@ -510,7 +510,7 @@ int32_t jumblr_DEXutxoind(int32_t *shouldsplitp,double targetvolB,double targetv } } -int64_t jumblr_DEXutxoupdate(struct supernet_info *myinfo,struct iguana_info *coin,bits256 *splittxidp,char *coinaddr,bits256 txid,int32_t vout,uint64_t value,int32_t isbob) +int64_t jumblr_DEXutxoupdate(struct supernet_info *myinfo,struct iguana_info *coin,bits256 *splittxidp,char *coinaddr,bits256 txid,int32_t vout,uint64_t value,int32_t isbob,double kmdprice) { double fees[4],targetvolB,amount,targetvolM,targetvolS,depositfactor,dexfeeratio,margin; int32_t ind,shouldsplit; margin = 1.1; @@ -518,7 +518,7 @@ int64_t jumblr_DEXutxoupdate(struct supernet_info *myinfo,struct iguana_info *co dexfeeratio = 500.; amount = dstr(value); memset(splittxidp,0,sizeof(*splittxidp)); - depositfactor = jumblr_DEXutxosize(&targetvolB,&targetvolM,&targetvolS,isbob); + depositfactor = jumblr_DEXutxosize(&targetvolB,&targetvolM,&targetvolS,isbob,kmdprice); printf("depositfactor %.8f targetvols %.8f %.8f %.8f\n",depositfactor,targetvolB,targetvolM,targetvolS); fees[0] = (margin * targetvolB) / dexfeeratio; fees[1] = (margin * targetvolM) / dexfeeratio; @@ -589,11 +589,11 @@ void jumblr_utxoupdate(struct supernet_info *myinfo,struct iguana_info *coin,dou txid = jbits256(item,"txid"); vout = jint(item,"vout"); value = SATOSHIDEN * jdouble(item,"amount"); - printf("%llx/v%d %.8f %d of %d\n",(long long)txid.txid,vout,dstr(value),i,n); + printf("price %.8f %llx/v%d %.8f %d of %d\n",price,(long long)txid.txid,vout,dstr(value),i,n); if ( jumblr_utxotxidpending(myinfo,&splittxid,coin,txid,vout) < 0 ) { printf("call utxoupdate\n"); - jumblr_DEXutxoupdate(myinfo,coin,&splittxid,coinaddr,txid,vout,value,myinfo->IAMLP); + jumblr_DEXutxoupdate(myinfo,coin,&splittxid,coinaddr,txid,vout,value,myinfo->IAMLP,price); jumblr_utxotxidpendingadd(myinfo,coin,txid,vout,splittxid); } else printf("already have txid\n"); } From 8e95b8ef075f58a9cfb8a48a7ad4d686234c2bf6 Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 31 Mar 2017 18:46:40 +0300 Subject: [PATCH 03/12] Test --- basilisk/jumblr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/basilisk/jumblr.c b/basilisk/jumblr.c index f515e6f35..88bc0f8b6 100755 --- a/basilisk/jumblr.c +++ b/basilisk/jumblr.c @@ -382,7 +382,7 @@ bits256 jumblr_privkey(struct supernet_info *myinfo,char *coinaddr,uint8_t pubty int64_t jumblr_DEXsplit(struct supernet_info *myinfo,struct iguana_info *coin,bits256 *splittxidp,char *coinaddr,bits256 txid,int32_t vout,int64_t remaining,double bigprice,double middleprice,double smallprice,double fees[4]) { - int64_t values[4],outputs[64],value,total,estfee = 50000; int32_t i,success=0,completed,sendflag,numoutputs = 0; char *retstr; cJSON *retjson,*utxo,*item; + int64_t values[4],outputs[64],value,total,estfee = 250000; int32_t i,success=0,completed,sendflag,numoutputs = 0; char *retstr; cJSON *retjson,*utxo,*item; total = 0; memset(values,0,sizeof(values)); memset(outputs,0,sizeof(outputs)); From 08f95e75babaf5de50d46d558a986ae1f90ef998 Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 31 Mar 2017 18:50:29 +0300 Subject: [PATCH 04/12] Test --- basilisk/jumblr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/basilisk/jumblr.c b/basilisk/jumblr.c index 88bc0f8b6..96f854c8a 100755 --- a/basilisk/jumblr.c +++ b/basilisk/jumblr.c @@ -382,7 +382,7 @@ bits256 jumblr_privkey(struct supernet_info *myinfo,char *coinaddr,uint8_t pubty int64_t jumblr_DEXsplit(struct supernet_info *myinfo,struct iguana_info *coin,bits256 *splittxidp,char *coinaddr,bits256 txid,int32_t vout,int64_t remaining,double bigprice,double middleprice,double smallprice,double fees[4]) { - int64_t values[4],outputs[64],value,total,estfee = 250000; int32_t i,success=0,completed,sendflag,numoutputs = 0; char *retstr; cJSON *retjson,*utxo,*item; + int64_t values[4],outputs[64],value,total,estfee = 100000; int32_t i,success=0,completed,sendflag,numoutputs = 0; char *retstr; cJSON *retjson,*utxo,*item; total = 0; memset(values,0,sizeof(values)); memset(outputs,0,sizeof(outputs)); From 624552e76846efcece145c867c487672f16ad637 Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 31 Mar 2017 19:44:24 +0300 Subject: [PATCH 05/12] Test --- basilisk/jumblr.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/basilisk/jumblr.c b/basilisk/jumblr.c index 96f854c8a..2141ec676 100755 --- a/basilisk/jumblr.c +++ b/basilisk/jumblr.c @@ -382,7 +382,7 @@ bits256 jumblr_privkey(struct supernet_info *myinfo,char *coinaddr,uint8_t pubty int64_t jumblr_DEXsplit(struct supernet_info *myinfo,struct iguana_info *coin,bits256 *splittxidp,char *coinaddr,bits256 txid,int32_t vout,int64_t remaining,double bigprice,double middleprice,double smallprice,double fees[4]) { - int64_t values[4],outputs[64],value,total,estfee = 100000; int32_t i,success=0,completed,sendflag,numoutputs = 0; char *retstr; cJSON *retjson,*utxo,*item; + int64_t values[4],outputs[64],value,total,estfee = 100000; int32_t i,n,success=0,completed,sendflag,numoutputs = 0; char *retstr; cJSON *retjson,*utxo,*item; total = 0; memset(values,0,sizeof(values)); memset(outputs,0,sizeof(outputs)); @@ -401,12 +401,14 @@ int64_t jumblr_DEXsplit(struct supernet_info *myinfo,struct iguana_info *coin,bi { if ( (value= values[i]) != 0 ) { - while ( remaining > value+estfee && numoutputs < sizeof(outputs)/sizeof(*outputs) ) + n = 0; + while ( n < 10 && remaining > value+estfee && numoutputs < sizeof(outputs)/sizeof(*outputs) ) { outputs[numoutputs++] = value; remaining -= value; total += value; printf("%.8f ",dstr(value)); + n++; } } } From 117fa0b44d195a71d643ffd4a3f7b18baa8b4f17 Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 31 Mar 2017 20:27:14 +0300 Subject: [PATCH 06/12] Test --- basilisk/jumblr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/basilisk/jumblr.c b/basilisk/jumblr.c index 2141ec676..0933bf094 100755 --- a/basilisk/jumblr.c +++ b/basilisk/jumblr.c @@ -382,7 +382,7 @@ bits256 jumblr_privkey(struct supernet_info *myinfo,char *coinaddr,uint8_t pubty int64_t jumblr_DEXsplit(struct supernet_info *myinfo,struct iguana_info *coin,bits256 *splittxidp,char *coinaddr,bits256 txid,int32_t vout,int64_t remaining,double bigprice,double middleprice,double smallprice,double fees[4]) { - int64_t values[4],outputs[64],value,total,estfee = 100000; int32_t i,n,success=0,completed,sendflag,numoutputs = 0; char *retstr; cJSON *retjson,*utxo,*item; + int64_t values[4],outputs[64],value,total,estfee = 150000; int32_t i,n,success=0,completed,sendflag,numoutputs = 0; char *retstr; cJSON *retjson,*utxo,*item; total = 0; memset(values,0,sizeof(values)); memset(outputs,0,sizeof(outputs)); From 6143b50101122b02e74b7f95695d1b189d1b7ebf Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 31 Mar 2017 21:34:55 +0300 Subject: [PATCH 07/12] Test --- basilisk/basilisk.c | 2 +- basilisk/basilisk_bitcoin.c | 4 ++-- basilisk/jumblr.c | 28 +++++++++++++++++----------- includes/iguana_funcs.h | 2 +- 4 files changed, 21 insertions(+), 15 deletions(-) diff --git a/basilisk/basilisk.c b/basilisk/basilisk.c index 59e4480b3..fb65f069a 100755 --- a/basilisk/basilisk.c +++ b/basilisk/basilisk.c @@ -1612,7 +1612,7 @@ STRING_ARRAY_OBJ_STRING(basilisk,utxorawtx,symbol,utxos,vals,ignore) if ( destaddr != 0 && changeaddr != 0 && symbol != 0 && (coin= iguana_coinfind(symbol)) != 0 ) { txfee = jdouble(vals,"txfee") * SATOSHIDEN; - return(iguana_utxorawtx(myinfo,coin,timelock,destaddr,changeaddr,&satoshis,1,txfee,&completed,sendflag,utxos)); + return(iguana_utxorawtx(myinfo,coin,timelock,destaddr,changeaddr,&satoshis,1,txfee,&completed,sendflag,utxos,0)); } return(clonestr("{\"error\":\"invalid coin or address specified\"}")); } diff --git a/basilisk/basilisk_bitcoin.c b/basilisk/basilisk_bitcoin.c index cbe759041..48fb97254 100755 --- a/basilisk/basilisk_bitcoin.c +++ b/basilisk/basilisk_bitcoin.c @@ -658,7 +658,7 @@ int64_t iguana_verifytimelock(struct supernet_info *myinfo,struct iguana_info *c } return(-2); } -char *iguana_utxorawtx(struct supernet_info *myinfo,struct iguana_info *coin,int32_t timelock,char *destaddr,char *changeaddr,int64_t *satoshis,int32_t numoutputs,uint64_t txfee,int32_t *completedp,int32_t sendflag,cJSON *utxos) +char *iguana_utxorawtx(struct supernet_info *myinfo,struct iguana_info *coin,int32_t timelock,char *destaddr,char *changeaddr,int64_t *satoshis,int32_t numoutputs,uint64_t txfee,int32_t *completedp,int32_t sendflag,cJSON *utxos,cJSON *privkeys) { uint8_t script[35],p2shscript[128],rmd160[20],addrtype; bits256 txid; int32_t i,p2shlen,iter,spendlen; cJSON *retjson,*txcopy,*txobj=0,*vins=0; char *rawtx=0,*signedtx=0; uint32_t timelocked = 0; *completedp = 0; @@ -697,7 +697,7 @@ char *iguana_utxorawtx(struct supernet_info *myinfo,struct iguana_info *coin,int { if ( iter == 1 || txfee != 0 ) jaddstr(retjson,"rawtx",rawtx); - if ( (signedtx= iguana_signrawtx(myinfo,coin,0,&txid,completedp,vins,rawtx,0,0)) != 0 ) + if ( (signedtx= iguana_signrawtx(myinfo,coin,0,&txid,completedp,vins,rawtx,privkeys,0)) != 0 ) { if ( (iter == 1 || txfee != 0) && *completedp != 0 ) { diff --git a/basilisk/jumblr.c b/basilisk/jumblr.c index 0933bf094..130ddad8d 100755 --- a/basilisk/jumblr.c +++ b/basilisk/jumblr.c @@ -380,7 +380,7 @@ bits256 jumblr_privkey(struct supernet_info *myinfo,char *coinaddr,uint8_t pubty return(privkey); } -int64_t jumblr_DEXsplit(struct supernet_info *myinfo,struct iguana_info *coin,bits256 *splittxidp,char *coinaddr,bits256 txid,int32_t vout,int64_t remaining,double bigprice,double middleprice,double smallprice,double fees[4]) +int64_t jumblr_DEXsplit(struct supernet_info *myinfo,struct iguana_info *coin,bits256 *splittxidp,char *coinaddr,bits256 txid,int32_t vout,int64_t remaining,double bigprice,double middleprice,double smallprice,double fees[4],cJSON *privkeys) { int64_t values[4],outputs[64],value,total,estfee = 150000; int32_t i,n,success=0,completed,sendflag,numoutputs = 0; char *retstr; cJSON *retjson,*utxo,*item; total = 0; @@ -424,7 +424,7 @@ int64_t jumblr_DEXsplit(struct supernet_info *myinfo,struct iguana_info *coin,bi utxo = cJSON_CreateArray(); jaddi(utxo,item); sendflag = 0; - if ( (retstr= iguana_utxorawtx(myinfo,coin,0,coinaddr,coinaddr,outputs,numoutputs,0,&completed,sendflag,utxo)) != 0 ) + if ( (retstr= iguana_utxorawtx(myinfo,coin,0,coinaddr,coinaddr,outputs,numoutputs,0,&completed,sendflag,utxo,privkeys)) != 0 ) { if ( completed != 0 ) { @@ -512,9 +512,9 @@ int32_t jumblr_DEXutxoind(int32_t *shouldsplitp,double targetvolB,double targetv } } -int64_t jumblr_DEXutxoupdate(struct supernet_info *myinfo,struct iguana_info *coin,bits256 *splittxidp,char *coinaddr,bits256 txid,int32_t vout,uint64_t value,int32_t isbob,double kmdprice) +int64_t jumblr_DEXutxoupdate(struct supernet_info *myinfo,struct iguana_info *coin,bits256 *splittxidp,char *coinaddr,bits256 privkey,bits256 txid,int32_t vout,uint64_t value,int32_t isbob,double kmdprice) { - double fees[4],targetvolB,amount,targetvolM,targetvolS,depositfactor,dexfeeratio,margin; int32_t ind,shouldsplit; + double fees[4],targetvolB,amount,targetvolM,targetvolS,depositfactor,dexfeeratio,margin; int32_t ind,shouldsplit; cJSON *privkeys; char wifstr[128]; int64_t retval = 0; margin = 1.1; depositfactor = (isbob == 0) ? 1. : 1.2; dexfeeratio = 500.; @@ -530,9 +530,15 @@ int64_t jumblr_DEXutxoupdate(struct supernet_info *myinfo,struct iguana_info *co { printf("shouldsplit.%d ind.%d\n",shouldsplit,ind); if ( shouldsplit != 0 ) - return(jumblr_DEXsplit(myinfo,coin,splittxidp,coinaddr,txid,vout,value,margin * targetvolB,margin * targetvolM,margin * targetvolS,fees)); + { + privkeys = cJSON_CreateArray(); + bitcoin_priv2wif(wifstr,privkey,coin->chain->wiftype); + jaddistr(privkeys,wifstr); + retval = jumblr_DEXsplit(myinfo,coin,splittxidp,coinaddr,txid,vout,value,margin * targetvolB,margin * targetvolM,margin * targetvolS,fees,privkeys); + free_json(privkeys); + } } else printf("negative ind\n"); - return(0); + return(retval); } /*struct DEXcoin_info @@ -575,7 +581,7 @@ void jumblr_utxotxidpendingadd(struct supernet_info *myinfo,struct iguana_info * coin->DEXinfo.pending[coin->DEXinfo.numpending++] = pend; } -void jumblr_utxoupdate(struct supernet_info *myinfo,struct iguana_info *coin,double price,char *coinaddr) +void jumblr_utxoupdate(struct supernet_info *myinfo,struct iguana_info *coin,double price,char *coinaddr,bits256 privkey) { char *retstr; cJSON *array,*item; int32_t i,n,vout; bits256 txid,splittxid; uint64_t value; if ( (retstr= jumblr_listunspent(myinfo,coin,coinaddr)) != 0 ) @@ -595,7 +601,7 @@ void jumblr_utxoupdate(struct supernet_info *myinfo,struct iguana_info *coin,dou if ( jumblr_utxotxidpending(myinfo,&splittxid,coin,txid,vout) < 0 ) { printf("call utxoupdate\n"); - jumblr_DEXutxoupdate(myinfo,coin,&splittxid,coinaddr,txid,vout,value,myinfo->IAMLP,price); + jumblr_DEXutxoupdate(myinfo,coin,&splittxid,coinaddr,privkey,txid,vout,value,myinfo->IAMLP,price); jumblr_utxotxidpendingadd(myinfo,coin,txid,vout,splittxid); } else printf("already have txid\n"); } @@ -638,14 +644,14 @@ void jumblr_DEXupdate(struct supernet_info *myinfo,struct iguana_info *coin,char ptr->kmdprice = 1.; ptr->KMDavail = ptr->avail; if ( (btccoin= iguana_coinfind("BTC")) != 0 ) - jumblr_utxoupdate(myinfo,btccoin,ptr->btcprice,ptr->depositaddr); - jumblr_utxoupdate(myinfo,kmdcoin,1.,ptr->KMDdepositaddr); + jumblr_utxoupdate(myinfo,btccoin,ptr->btcprice,ptr->depositaddr,ptr->deposit_privkey); + jumblr_utxoupdate(myinfo,kmdcoin,1.,ptr->KMDdepositaddr,ptr->deposit_privkey); } else if ( (ptr->BTC2KMD= BTC2KMD) > SMALLVAL ) { ptr->kmdprice = ptr->btcprice / BTC2KMD; ptr->KMDavail = KMDavail; - jumblr_utxoupdate(myinfo,ptr->coin,ptr->kmdprice,ptr->depositaddr); + jumblr_utxoupdate(myinfo,ptr->coin,ptr->kmdprice,ptr->depositaddr,ptr->deposit_privkey); } ptr->lasttime = (uint32_t)time(NULL); } else printf("skip\n"); diff --git a/includes/iguana_funcs.h b/includes/iguana_funcs.h index 215596380..6be0f931a 100755 --- a/includes/iguana_funcs.h +++ b/includes/iguana_funcs.h @@ -528,7 +528,7 @@ char *basilisk_bitcoinrawtx(struct supernet_info *myinfo,struct iguana_info *coi int32_t iguana_markedunspents_find(struct iguana_info *coin,int32_t *firstslotp,bits256 txid,int32_t vout); void jumblr_opidsupdate(struct supernet_info *myinfo,struct iguana_info *coin); -char *iguana_signrawtx(struct supernet_info *myinfo,struct iguana_info *coin,int32_t height,bits256 *signedtxidp,int32_t *completedp,cJSON *vins,char *rawtx,cJSON *privkey,struct vin_info *V); +char *iguana_signrawtx(struct supernet_info *myinfo,struct iguana_info *coin,int32_t height,bits256 *signedtxidp,int32_t *completedp,cJSON *vins,char *rawtx,cJSON *privkeys,struct vin_info *V); bits256 scrypt_blockhash(const void *input); bits256 iguana_calcblockhash(char *symbol,int32_t (*hashalgo)(uint8_t *blockhashp,uint8_t *serialized,int32_t len),uint8_t *serialized,int32_t len); struct bitcoin_eventitem *instantdex_event(char *cmdstr,cJSON *argjson,cJSON *newjson,uint8_t *serdata,int32_t serdatalen); From de8c25200d911b2c3344231dc399dd43c99f6379 Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 31 Mar 2017 21:38:41 +0300 Subject: [PATCH 08/12] Test --- basilisk/basilisk_bitcoin.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/basilisk/basilisk_bitcoin.c b/basilisk/basilisk_bitcoin.c index 48fb97254..f91ca9ac3 100755 --- a/basilisk/basilisk_bitcoin.c +++ b/basilisk/basilisk_bitcoin.c @@ -705,10 +705,9 @@ char *iguana_utxorawtx(struct supernet_info *myinfo,struct iguana_info *coin,int jaddstr(retjson,"signedtx",signedtx); if ( sendflag != 0 ) { - //printf("send signedtx.(%s)\n",signedtx); txid = iguana_sendrawtransaction(myinfo,coin,signedtx); jaddbits256(retjson,"sent",txid); - } + } else printf("dont send signedtx.(%s)\n",signedtx); } } else printf("error signing raw utxorawtx tx\n"); } else printf("null rawtx from calcutxorawtx\n"); From 6891e63d0cacbc98752fe680925b0f537bf64d49 Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 31 Mar 2017 21:42:58 +0300 Subject: [PATCH 09/12] Test --- basilisk/jumblr.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/basilisk/jumblr.c b/basilisk/jumblr.c index 130ddad8d..c6ff49b75 100755 --- a/basilisk/jumblr.c +++ b/basilisk/jumblr.c @@ -514,7 +514,7 @@ int32_t jumblr_DEXutxoind(int32_t *shouldsplitp,double targetvolB,double targetv int64_t jumblr_DEXutxoupdate(struct supernet_info *myinfo,struct iguana_info *coin,bits256 *splittxidp,char *coinaddr,bits256 privkey,bits256 txid,int32_t vout,uint64_t value,int32_t isbob,double kmdprice) { - double fees[4],targetvolB,amount,targetvolM,targetvolS,depositfactor,dexfeeratio,margin; int32_t ind,shouldsplit; cJSON *privkeys; char wifstr[128]; int64_t retval = 0; + double fees[4],targetvolB,amount,targetvolM,targetvolS,depositfactor,dexfeeratio,margin; int32_t ind,i,shouldsplit; cJSON *privkeys; char wifstr[128]; int64_t retval = 0; margin = 1.1; depositfactor = (isbob == 0) ? 1. : 1.2; dexfeeratio = 500.; @@ -526,6 +526,9 @@ int64_t jumblr_DEXutxoupdate(struct supernet_info *myinfo,struct iguana_info *co fees[1] = (margin * targetvolM) / dexfeeratio; fees[2] = (margin * targetvolS) / dexfeeratio; fees[3] = (strcmp("BTC",coin->symbol) == 0) ? 50000 : 10000; + for (i=0; i<4; i++) + if ( fees[i] < 10000 ) + fees[i] = 10000; if ( (ind= jumblr_DEXutxoind(&shouldsplit,targetvolB,targetvolM,targetvolS,amount,margin,dexfeeratio,fees[3])) >= 0 ) { printf("shouldsplit.%d ind.%d\n",shouldsplit,ind); From 1841276084eca8b8905bd5ba11b7ad67b4a4e1da Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 31 Mar 2017 22:55:07 +0300 Subject: [PATCH 10/12] Test --- basilisk/jumblr.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/basilisk/jumblr.c b/basilisk/jumblr.c index c6ff49b75..f9091a904 100755 --- a/basilisk/jumblr.c +++ b/basilisk/jumblr.c @@ -424,6 +424,7 @@ int64_t jumblr_DEXsplit(struct supernet_info *myinfo,struct iguana_info *coin,bi utxo = cJSON_CreateArray(); jaddi(utxo,item); sendflag = 0; + printf("jitem.(%s)\n",jprint(utxo,0)); if ( (retstr= iguana_utxorawtx(myinfo,coin,0,coinaddr,coinaddr,outputs,numoutputs,0,&completed,sendflag,utxo,privkeys)) != 0 ) { if ( completed != 0 ) @@ -531,7 +532,7 @@ int64_t jumblr_DEXutxoupdate(struct supernet_info *myinfo,struct iguana_info *co fees[i] = 10000; if ( (ind= jumblr_DEXutxoind(&shouldsplit,targetvolB,targetvolM,targetvolS,amount,margin,dexfeeratio,fees[3])) >= 0 ) { - printf("shouldsplit.%d ind.%d\n",shouldsplit,ind); + //printf("shouldsplit.%d ind.%d\n",shouldsplit,ind); if ( shouldsplit != 0 ) { privkeys = cJSON_CreateArray(); @@ -540,7 +541,7 @@ int64_t jumblr_DEXutxoupdate(struct supernet_info *myinfo,struct iguana_info *co retval = jumblr_DEXsplit(myinfo,coin,splittxidp,coinaddr,txid,vout,value,margin * targetvolB,margin * targetvolM,margin * targetvolS,fees,privkeys); free_json(privkeys); } - } else printf("negative ind\n"); + } // else printf("negative ind\n"); return(retval); } @@ -557,25 +558,23 @@ int64_t jumblr_DEXutxoupdate(struct supernet_info *myinfo,struct iguana_info *co int32_t jumblr_utxotxidpending(struct supernet_info *myinfo,bits256 *splittxidp,struct iguana_info *coin,bits256 txid,int32_t vout) { int32_t i; - printf("jumblr_utxotxidpending\n"); memset(splittxidp,0,sizeof(*splittxidp)); for (i=0; iDEXinfo.numpending; i++) { if ( coin->DEXinfo.pending[i].vout == vout && bits256_cmp(coin->DEXinfo.pending[i].txid,txid) == 0 ) { *splittxidp = coin->DEXinfo.pending[i].splittxid; - printf("jumblr_utxotxidpending found txid in slot.%d\n",i); + // printf("jumblr_utxotxidpending found txid in slot.%d\n",i); return(i); } } - printf("jumblr_utxotxidpending cant find txid\n"); + // printf("jumblr_utxotxidpending cant find txid\n"); return(-1); } void jumblr_utxotxidpendingadd(struct supernet_info *myinfo,struct iguana_info *coin,bits256 txid,int32_t vout,bits256 splittxid) { struct jumblr_pending pend; - printf("add txid to pending\n"); memset(&pend,0,sizeof(pend)); pend.splittxid = splittxid; pend.txid = txid; @@ -603,10 +602,9 @@ void jumblr_utxoupdate(struct supernet_info *myinfo,struct iguana_info *coin,dou printf("price %.8f %llx/v%d %.8f %d of %d\n",price,(long long)txid.txid,vout,dstr(value),i,n); if ( jumblr_utxotxidpending(myinfo,&splittxid,coin,txid,vout) < 0 ) { - printf("call utxoupdate\n"); jumblr_DEXutxoupdate(myinfo,coin,&splittxid,coinaddr,privkey,txid,vout,value,myinfo->IAMLP,price); jumblr_utxotxidpendingadd(myinfo,coin,txid,vout,splittxid); - } else printf("already have txid\n"); + } //else printf("already have txid\n"); } } free_json(array); @@ -657,7 +655,7 @@ void jumblr_DEXupdate(struct supernet_info *myinfo,struct iguana_info *coin,char jumblr_utxoupdate(myinfo,ptr->coin,ptr->kmdprice,ptr->depositaddr,ptr->deposit_privkey); } ptr->lasttime = (uint32_t)time(NULL); - } else printf("skip\n"); + } // else printf("skip\n"); } void jumblr_CMCname(char *CMCname,char *symbol) From 1c5a55acff2ec4ee481eb5f8e149e1a9871c96c7 Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 31 Mar 2017 23:01:58 +0300 Subject: [PATCH 11/12] Test --- basilisk/jumblr.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/basilisk/jumblr.c b/basilisk/jumblr.c index f9091a904..be33f8905 100755 --- a/basilisk/jumblr.c +++ b/basilisk/jumblr.c @@ -418,13 +418,15 @@ int64_t jumblr_DEXsplit(struct supernet_info *myinfo,struct iguana_info *coin,bi if ( (retstr= _dex_gettxout(myinfo,coin->symbol,txid,vout)) != 0 ) { item = cJSON_Parse(retstr); + jaddbits256(item,"txid",txid); + jaddnum(item,"vout",vout); free(retstr); if ( item != 0 ) { utxo = cJSON_CreateArray(); jaddi(utxo,item); sendflag = 0; - printf("jitem.(%s)\n",jprint(utxo,0)); + ///printf("jitem.(%s)\n",jprint(utxo,0)); if ( (retstr= iguana_utxorawtx(myinfo,coin,0,coinaddr,coinaddr,outputs,numoutputs,0,&completed,sendflag,utxo,privkeys)) != 0 ) { if ( completed != 0 ) From 56a59515091eb968e9485a44383e827a96f01d18 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 1 Apr 2017 13:11:30 +0300 Subject: [PATCH 12/12] Test --- basilisk/jumblr.c | 27 ++++++++++++++++----------- iguana/tests/splitfunds | 2 +- includes/iguana_structs.h | 4 ++-- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/basilisk/jumblr.c b/basilisk/jumblr.c index be33f8905..4390f970a 100755 --- a/basilisk/jumblr.c +++ b/basilisk/jumblr.c @@ -515,9 +515,9 @@ int32_t jumblr_DEXutxoind(int32_t *shouldsplitp,double targetvolB,double targetv } } -int64_t jumblr_DEXutxoupdate(struct supernet_info *myinfo,struct iguana_info *coin,bits256 *splittxidp,char *coinaddr,bits256 privkey,bits256 txid,int32_t vout,uint64_t value,int32_t isbob,double kmdprice) +int32_t jumblr_DEXutxoupdate(struct supernet_info *myinfo,struct iguana_info *coin,bits256 *splittxidp,char *coinaddr,bits256 privkey,bits256 txid,int32_t vout,uint64_t value,int32_t isbob,double kmdprice) { - double fees[4],targetvolB,amount,targetvolM,targetvolS,depositfactor,dexfeeratio,margin; int32_t ind,i,shouldsplit; cJSON *privkeys; char wifstr[128]; int64_t retval = 0; + double fees[4],targetvolB,amount,targetvolM,targetvolS,depositfactor,dexfeeratio,margin; int32_t ind,i,shouldsplit; cJSON *privkeys; char wifstr[128]; margin = 1.1; depositfactor = (isbob == 0) ? 1. : 1.2; dexfeeratio = 500.; @@ -540,11 +540,12 @@ int64_t jumblr_DEXutxoupdate(struct supernet_info *myinfo,struct iguana_info *co privkeys = cJSON_CreateArray(); bitcoin_priv2wif(wifstr,privkey,coin->chain->wiftype); jaddistr(privkeys,wifstr); - retval = jumblr_DEXsplit(myinfo,coin,splittxidp,coinaddr,txid,vout,value,margin * targetvolB,margin * targetvolM,margin * targetvolS,fees,privkeys); + jumblr_DEXsplit(myinfo,coin,splittxidp,coinaddr,txid,vout,value,margin * targetvolB,margin * targetvolM,margin * targetvolS,fees,privkeys); free_json(privkeys); + ind = -1; } } // else printf("negative ind\n"); - return(retval); + return(ind); } /*struct DEXcoin_info @@ -557,7 +558,7 @@ int64_t jumblr_DEXutxoupdate(struct supernet_info *myinfo,struct iguana_info *co char CMCname[32],symbol[16],depositaddr[64],KMDdepositaddr[64],KMDjumblraddr[64],jumblraddr[64]; };*/ -int32_t jumblr_utxotxidpending(struct supernet_info *myinfo,bits256 *splittxidp,struct iguana_info *coin,bits256 txid,int32_t vout) +int32_t jumblr_utxotxidpending(struct supernet_info *myinfo,bits256 *splittxidp,int32_t *indp,struct iguana_info *coin,bits256 txid,int32_t vout) { int32_t i; memset(splittxidp,0,sizeof(*splittxidp)); @@ -565,6 +566,7 @@ int32_t jumblr_utxotxidpending(struct supernet_info *myinfo,bits256 *splittxidp, { if ( coin->DEXinfo.pending[i].vout == vout && bits256_cmp(coin->DEXinfo.pending[i].txid,txid) == 0 ) { + *indp = coin->DEXinfo.pending[i].ind; *splittxidp = coin->DEXinfo.pending[i].splittxid; // printf("jumblr_utxotxidpending found txid in slot.%d\n",i); return(i); @@ -574,20 +576,21 @@ int32_t jumblr_utxotxidpending(struct supernet_info *myinfo,bits256 *splittxidp, return(-1); } -void jumblr_utxotxidpendingadd(struct supernet_info *myinfo,struct iguana_info *coin,bits256 txid,int32_t vout,bits256 splittxid) +void jumblr_utxotxidpendingadd(struct supernet_info *myinfo,struct iguana_info *coin,bits256 txid,int32_t vout,bits256 splittxid,int32_t ind) { struct jumblr_pending pend; memset(&pend,0,sizeof(pend)); pend.splittxid = splittxid; pend.txid = txid; pend.vout = vout; + pend.ind = ind; coin->DEXinfo.pending = realloc(coin->DEXinfo.pending,sizeof(*coin->DEXinfo.pending) * (1 + coin->DEXinfo.numpending)); coin->DEXinfo.pending[coin->DEXinfo.numpending++] = pend; } void jumblr_utxoupdate(struct supernet_info *myinfo,struct iguana_info *coin,double price,char *coinaddr,bits256 privkey) { - char *retstr; cJSON *array,*item; int32_t i,n,vout; bits256 txid,splittxid; uint64_t value; + char *retstr; cJSON *array,*item; int32_t i,n,vout,ind; bits256 txid,splittxid; uint64_t value; if ( (retstr= jumblr_listunspent(myinfo,coin,coinaddr)) != 0 ) { printf("%s.(%s)\n",coin->symbol,retstr); @@ -602,10 +605,10 @@ void jumblr_utxoupdate(struct supernet_info *myinfo,struct iguana_info *coin,dou vout = jint(item,"vout"); value = SATOSHIDEN * jdouble(item,"amount"); printf("price %.8f %llx/v%d %.8f %d of %d\n",price,(long long)txid.txid,vout,dstr(value),i,n); - if ( jumblr_utxotxidpending(myinfo,&splittxid,coin,txid,vout) < 0 ) + if ( jumblr_utxotxidpending(myinfo,&splittxid,&ind,coin,txid,vout) < 0 ) { - jumblr_DEXutxoupdate(myinfo,coin,&splittxid,coinaddr,privkey,txid,vout,value,myinfo->IAMLP,price); - jumblr_utxotxidpendingadd(myinfo,coin,txid,vout,splittxid); + ind = jumblr_DEXutxoupdate(myinfo,coin,&splittxid,coinaddr,privkey,txid,vout,value,myinfo->IAMLP,price); + jumblr_utxotxidpendingadd(myinfo,coin,txid,vout,splittxid,ind); } //else printf("already have txid\n"); } } @@ -618,6 +621,8 @@ void jumblr_utxoupdate(struct supernet_info *myinfo,struct iguana_info *coin,dou void jumblr_DEXupdate(struct supernet_info *myinfo,struct iguana_info *coin,char *symbol,char *CMCname,double BTC2KMD,double KMDavail) { double avebid,aveask,highbid,lowask,CMC_average,changes[3]; struct iguana_info *btccoin,*kmdcoin; struct DEXcoin_info *ptr = &coin->DEXinfo; + // wait for one confirmation to clear most in mempool (ha, ha) + // deal with changing addresses, ie all pendings? if ( coin != 0 && (kmdcoin= iguana_coinfind("KMD")) != 0 && time(NULL) > ptr->lasttime+60 ) { ptr->coin = coin; @@ -671,7 +676,7 @@ void jumblr_DEXcheck(struct supernet_info *myinfo,struct iguana_info *coin) struct iguana_info *kmdcoin; if ( (kmdcoin= iguana_coinfind("KMD")) == 0 || iguana_coinfind("BTC") == 0 ) return; - printf("jumblr_DEXcheck\n"); + //printf("jumblr_DEXcheck\n"); jumblr_DEXupdate(myinfo,kmdcoin,"KMD","komodo",0.,0.); if ( strcmp(coin->symbol,"KMD") != 0 && kmdcoin->DEXinfo.btcprice > 0. ) { diff --git a/iguana/tests/splitfunds b/iguana/tests/splitfunds index da05ff6e5..75f93431e 100755 --- a/iguana/tests/splitfunds +++ b/iguana/tests/splitfunds @@ -1,2 +1,2 @@ #!/bin/bash -curl --url "http://127.0.0.1:7778" --data "{\"coin\":\"BTC\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"1000\",\"sendflag\":1,\"duplicates\":10}" +curl --url "http://127.0.0.1:7778" --data "{\"coin\":\"BTC\",\"agent\":\"iguana\",\"method\":\"splitfunds\",\"satoshis\":\"50000\",\"sendflag\":1,\"duplicates\":10}" diff --git a/includes/iguana_structs.h b/includes/iguana_structs.h index 27ea9af8f..efcc33b01 100755 --- a/includes/iguana_structs.h +++ b/includes/iguana_structs.h @@ -466,14 +466,14 @@ struct iguana_RTtxid struct hashstr_item { UT_hash_handle hh; char address[40]; }; -struct jumblr_pending { bits256 splittxid,txid; int32_t vout; }; +struct jumblr_pending { bits256 splittxid,txid; int32_t vout,ind; }; struct DEXcoin_info { bits256 deposit_privkey,jumblr_privkey; struct iguana_info *coin; double btcprice,BTC2KMD,kmdprice,USD_average,DEXpending,maxbid,minask,avail,KMDavail; - uint32_t lasttime,numpending; + uint32_t lasttime; int32_t numpending; char CMCname[32],symbol[16],depositaddr[64],KMDdepositaddr[64],KMDjumblraddr[64],jumblraddr[64]; struct jumblr_pending *pending; };