From 3e2ad201d2fb07677473bde8612423a1e242a294 Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 5 Jun 2017 18:53:45 +0300 Subject: [PATCH 001/126] Test --- src/policy/fees.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/policy/fees.cpp b/src/policy/fees.cpp index 17cac1ce6..7762a4dc6 100644 --- a/src/policy/fees.cpp +++ b/src/policy/fees.cpp @@ -59,7 +59,9 @@ unsigned int TxConfirmStats::FindBucketIndex(double val) //assert(it != bucketMap.end()); if ( it != bucketMap.end() ) { - fprintf(stderr,"FindBucketIndex violation: from val %f\n",val); + static uint32_t counter; + if ( counter++ < 10 ) + fprintf(stderr,"FindBucketIndex violation: from val %f\n",val); } return it->second; } From c87e35b4d2a2d3a5e1b2375ee6aaf5ce1ed4c57d Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 15 Jun 2017 09:47:43 +0300 Subject: [PATCH 002/126] Curl apt-get --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c785a3baf..8278748a8 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ Dependencies ``` #The following packages are needed: -sudo apt-get install build-essential pkg-config libcurl-gnutls-dev libc6-dev libevent-dev m4 g++-multilib autoconf libtool ncurses-dev unzip git python zlib1g-dev wget bsdmainutils automake libboost-all-dev libssl-dev libprotobuf-dev protobuf-compiler libqt4-dev libqrencode-dev libdb++-dev ntp ntpdate +sudo apt-get install build-essential pkg-config libcurl3-gnutls-dev libc6-dev libevent-dev m4 g++-multilib autoconf libtool ncurses-dev unzip git python zlib1g-dev wget bsdmainutils automake libboost-all-dev libssl-dev libprotobuf-dev protobuf-compiler libqt4-dev libqrencode-dev libdb++-dev ntp ntpdate ``` Komodo From daf49a7e2edfa3e37bf57e9584442173ae94e37d Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 16 Jun 2017 23:53:16 +0300 Subject: [PATCH 003/126] New assetchains from kolo --- src/assetchains | 152 ++++++++++++++++++++------------------------ src/assetchains.old | 87 +++++++++++++++++++++++++ 2 files changed, 155 insertions(+), 84 deletions(-) create mode 100755 src/assetchains.old diff --git a/src/assetchains b/src/assetchains index a85cdbe38..672039062 100755 --- a/src/assetchains +++ b/src/assetchains @@ -1,87 +1,71 @@ -#!/bin/bash -set -x -delay=10 +#!/bin/bash source pubkey.txt -echo $pubkey +args=("$@") +seed_ip='78.47.196.146' +komodo_binary='./komodod' +delay=20 -./komodod -pubkey=$pubkey -ac_name=REVS -ac_supply=1300000 -addnode=78.47.196.146 $1 -gen & -./komodod -pubkey=$pubkey -ac_name=SUPERNET -ac_supply=816061 -addnode=78.47.196.146 $1 -gen & -./komodod -pubkey=$pubkey -ac_name=DEX -ac_supply=999999 -addnode=78.47.196.146 $1 -gen & -./komodod -pubkey=$pubkey -ac_name=PANGEA -ac_supply=999999 -addnode=78.47.196.146 $1 -gen & -./komodod -pubkey=$pubkey -ac_name=JUMBLR -ac_supply=999999 -addnode=78.47.196.146 $1 -gen & -./komodod -pubkey=$pubkey -ac_name=BET -ac_supply=999999 -addnode=78.47.196.146 $1 -gen & -./komodod -pubkey=$pubkey -ac_name=CRYPTO -ac_supply=999999 -addnode=78.47.196.146 $1 -gen & -./komodod -pubkey=$pubkey -ac_name=HODL -ac_supply=9999999 -addnode=78.47.196.146 $1 -gen & -./komodod -pubkey=$pubkey -ac_name=SHARK -ac_supply=1401 -addnode=78.47.196.146 $1 -gen & -./komodod -pubkey=$pubkey -ac_name=BOTS -ac_supply=999999 -addnode=78.47.196.146 $1 -gen & -./komodod -pubkey=$pubkey -ac_name=MGW -ac_supply=999999 -addnode=78.47.196.146 $1 -gen & -./komodod -pubkey=$pubkey -ac_name=MVP -ac_supply=1000000 -addnode=78.47.196.146 $1 -gen & -./komodod -pubkey=$pubkey -ac_name=WLC -ac_supply=210000000 -addnode=148.251.190.89 $1 -gen & -./komodod -pubkey=$pubkey -ac_name=KV -ac_supply=1000000 -addnode=78.47.196.146 $1 -gen & -./komodod -pubkey=$pubkey -ac_name=CEAL -ac_supply=366666666 -addnode=78.47.196.146 $1 -gen & -./komodod -pubkey=$pubkey -ac_name=MESH -ac_supply=1000007 -addnode=78.47.196.146 $1 -gen & -sleep $delay +function komodo_asset () +{ + if [ $[RANDOM % 10] == 1 ] + then + gen=" -gen" + else + gen="" + fi -./komodod -pubkey=$pubkey -ac_name=USD -addnode=78.47.196.146 $1 & -sleep $delay -./komodod -pubkey=$pubkey -ac_name=EUR -addnode=78.47.196.146 $1 & -sleep $delay -./komodod -pubkey=$pubkey -ac_name=JPY -addnode=78.47.196.146 $1 & -sleep $delay -./komodod -pubkey=$pubkey -ac_name=GBP -addnode=78.47.196.146 $1 & -sleep $delay -./komodod -pubkey=$pubkey -ac_name=AUD -addnode=78.47.196.146 $1 & -sleep $delay -./komodod -pubkey=$pubkey -ac_name=CAD -addnode=78.47.196.146 $1 & -sleep $delay -./komodod -pubkey=$pubkey -ac_name=CHF -addnode=78.47.196.146 $1 & -sleep $delay -./komodod -pubkey=$pubkey -ac_name=NZD -addnode=78.47.196.146 $1 & -sleep $delay -./komodod -pubkey=$pubkey -ac_name=CNY -addnode=78.47.196.146 $1 & -sleep $delay -./komodod -pubkey=$pubkey -ac_name=RUB -addnode=78.47.196.146 $1 & -sleep $delay -./komodod -pubkey=$pubkey -ac_name=MXN -addnode=78.47.196.146 $1 & -sleep $delay -./komodod -pubkey=$pubkey -ac_name=BRL -addnode=78.47.196.146 $1 & -sleep $delay -./komodod -pubkey=$pubkey -ac_name=INR -addnode=78.47.196.146 $1 & -sleep $delay -./komodod -pubkey=$pubkey -ac_name=HKD -addnode=78.47.196.146 $1 & -sleep $delay -./komodod -pubkey=$pubkey -ac_name=TRY -addnode=78.47.196.146 $1 & -sleep $delay -./komodod -pubkey=$pubkey -ac_name=ZAR -addnode=78.47.196.146 $1 & -sleep $delay -./komodod -pubkey=$pubkey -ac_name=PLN -addnode=78.47.196.146 $1 & -sleep $delay -./komodod -pubkey=$pubkey -ac_name=NOK -addnode=78.47.196.146 $1 & -sleep $delay -./komodod -pubkey=$pubkey -ac_name=SEK -addnode=78.47.196.146 $1 & -sleep $delay -./komodod -pubkey=$pubkey -ac_name=DKK -addnode=78.47.196.146 $1 & -sleep $delay -./komodod -pubkey=$pubkey -ac_name=CZK -addnode=78.47.196.146 $1 & -sleep $delay -./komodod -pubkey=$pubkey -ac_name=HUF -addnode=78.47.196.146 $1 & -sleep $delay -./komodod -pubkey=$pubkey -ac_name=ILS -addnode=78.47.196.146 $1 & -sleep $delay -./komodod -pubkey=$pubkey -ac_name=KRW -addnode=78.47.196.146 $1 & -sleep $delay -./komodod -pubkey=$pubkey -ac_name=MYR -addnode=78.47.196.146 $1 & -sleep $delay -./komodod -pubkey=$pubkey -ac_name=PHP -addnode=78.47.196.146 $1 & -sleep $delay -./komodod -pubkey=$pubkey -ac_name=RON -addnode=78.47.196.146 $1 & -sleep $delay -./komodod -pubkey=$pubkey -ac_name=SGD -addnode=78.47.196.146 $1 & -sleep $delay -./komodod -pubkey=$pubkey -ac_name=THB -addnode=78.47.196.146 $1 & -sleep $delay -./komodod -pubkey=$pubkey -ac_name=BGN -addnode=78.47.196.146 $1 & -sleep $delay -./komodod -pubkey=$pubkey -ac_name=IDR -addnode=78.47.196.146 $1 & -sleep $delay -./komodod -pubkey=$pubkey -ac_name=HRK -addnode=78.47.196.146 $1 & + $komodo_binary -pubkey=$pubkey -ac_name=$1 -ac_supply=$2 -addnode=$seed_ip $gen $args & + sleep $delay +} + +#set -x + +komodo_asset REVS 1300000 +komodo_asset SUPERNET 816061 +komodo_asset DEX 999999 +komodo_asset PANGEA 999999 +komodo_asset JUMBLR 999999 +komodo_asset BET 999999 +komodo_asset CRYPTO 9999999 +komodo_asset HODL 9999999 +komodo_asset SHARK 1401 +komodo_asset BOTS 999999 +komodo_asset MGW 999999 +komodo_asset MVP 1000000 +komodo_asset WLC 210000000 +komodo_asset KV 1000000 +komodo_asset CEAL 366666666 +komodo_asset MESH 1000007 + +komodo_asset USD +komodo_asset EUR +komodo_asset JPY +komodo_asset GBP +komodo_asset AUD +komodo_asset CAD +komodo_asset CHF +komodo_asset NZD +komodo_asset CNY +komodo_asset RUB +komodo_asset MXN +komodo_asset BRL +komodo_asset INR +komodo_asset HKD +komodo_asset TRY +komodo_asset ZAR +komodo_asset PLN +komodo_asset NOK +komodo_asset SEK +komodo_asset DKK +komodo_asset CZK +komodo_asset HUF +komodo_asset ILS +komodo_asset KRW +komodo_asset MYR +komodo_asset PHP +komodo_asset RON +komodo_asset SGD +komodo_asset THB +komodo_asset BGN +komodo_asset IDR +komodo_asset HRK diff --git a/src/assetchains.old b/src/assetchains.old new file mode 100755 index 000000000..a85cdbe38 --- /dev/null +++ b/src/assetchains.old @@ -0,0 +1,87 @@ +#!/bin/bash +set -x +delay=10 +source pubkey.txt +echo $pubkey + +./komodod -pubkey=$pubkey -ac_name=REVS -ac_supply=1300000 -addnode=78.47.196.146 $1 -gen & +./komodod -pubkey=$pubkey -ac_name=SUPERNET -ac_supply=816061 -addnode=78.47.196.146 $1 -gen & +./komodod -pubkey=$pubkey -ac_name=DEX -ac_supply=999999 -addnode=78.47.196.146 $1 -gen & +./komodod -pubkey=$pubkey -ac_name=PANGEA -ac_supply=999999 -addnode=78.47.196.146 $1 -gen & +./komodod -pubkey=$pubkey -ac_name=JUMBLR -ac_supply=999999 -addnode=78.47.196.146 $1 -gen & +./komodod -pubkey=$pubkey -ac_name=BET -ac_supply=999999 -addnode=78.47.196.146 $1 -gen & +./komodod -pubkey=$pubkey -ac_name=CRYPTO -ac_supply=999999 -addnode=78.47.196.146 $1 -gen & +./komodod -pubkey=$pubkey -ac_name=HODL -ac_supply=9999999 -addnode=78.47.196.146 $1 -gen & +./komodod -pubkey=$pubkey -ac_name=SHARK -ac_supply=1401 -addnode=78.47.196.146 $1 -gen & +./komodod -pubkey=$pubkey -ac_name=BOTS -ac_supply=999999 -addnode=78.47.196.146 $1 -gen & +./komodod -pubkey=$pubkey -ac_name=MGW -ac_supply=999999 -addnode=78.47.196.146 $1 -gen & +./komodod -pubkey=$pubkey -ac_name=MVP -ac_supply=1000000 -addnode=78.47.196.146 $1 -gen & +./komodod -pubkey=$pubkey -ac_name=WLC -ac_supply=210000000 -addnode=148.251.190.89 $1 -gen & +./komodod -pubkey=$pubkey -ac_name=KV -ac_supply=1000000 -addnode=78.47.196.146 $1 -gen & +./komodod -pubkey=$pubkey -ac_name=CEAL -ac_supply=366666666 -addnode=78.47.196.146 $1 -gen & +./komodod -pubkey=$pubkey -ac_name=MESH -ac_supply=1000007 -addnode=78.47.196.146 $1 -gen & +sleep $delay + +./komodod -pubkey=$pubkey -ac_name=USD -addnode=78.47.196.146 $1 & +sleep $delay +./komodod -pubkey=$pubkey -ac_name=EUR -addnode=78.47.196.146 $1 & +sleep $delay +./komodod -pubkey=$pubkey -ac_name=JPY -addnode=78.47.196.146 $1 & +sleep $delay +./komodod -pubkey=$pubkey -ac_name=GBP -addnode=78.47.196.146 $1 & +sleep $delay +./komodod -pubkey=$pubkey -ac_name=AUD -addnode=78.47.196.146 $1 & +sleep $delay +./komodod -pubkey=$pubkey -ac_name=CAD -addnode=78.47.196.146 $1 & +sleep $delay +./komodod -pubkey=$pubkey -ac_name=CHF -addnode=78.47.196.146 $1 & +sleep $delay +./komodod -pubkey=$pubkey -ac_name=NZD -addnode=78.47.196.146 $1 & +sleep $delay +./komodod -pubkey=$pubkey -ac_name=CNY -addnode=78.47.196.146 $1 & +sleep $delay +./komodod -pubkey=$pubkey -ac_name=RUB -addnode=78.47.196.146 $1 & +sleep $delay +./komodod -pubkey=$pubkey -ac_name=MXN -addnode=78.47.196.146 $1 & +sleep $delay +./komodod -pubkey=$pubkey -ac_name=BRL -addnode=78.47.196.146 $1 & +sleep $delay +./komodod -pubkey=$pubkey -ac_name=INR -addnode=78.47.196.146 $1 & +sleep $delay +./komodod -pubkey=$pubkey -ac_name=HKD -addnode=78.47.196.146 $1 & +sleep $delay +./komodod -pubkey=$pubkey -ac_name=TRY -addnode=78.47.196.146 $1 & +sleep $delay +./komodod -pubkey=$pubkey -ac_name=ZAR -addnode=78.47.196.146 $1 & +sleep $delay +./komodod -pubkey=$pubkey -ac_name=PLN -addnode=78.47.196.146 $1 & +sleep $delay +./komodod -pubkey=$pubkey -ac_name=NOK -addnode=78.47.196.146 $1 & +sleep $delay +./komodod -pubkey=$pubkey -ac_name=SEK -addnode=78.47.196.146 $1 & +sleep $delay +./komodod -pubkey=$pubkey -ac_name=DKK -addnode=78.47.196.146 $1 & +sleep $delay +./komodod -pubkey=$pubkey -ac_name=CZK -addnode=78.47.196.146 $1 & +sleep $delay +./komodod -pubkey=$pubkey -ac_name=HUF -addnode=78.47.196.146 $1 & +sleep $delay +./komodod -pubkey=$pubkey -ac_name=ILS -addnode=78.47.196.146 $1 & +sleep $delay +./komodod -pubkey=$pubkey -ac_name=KRW -addnode=78.47.196.146 $1 & +sleep $delay +./komodod -pubkey=$pubkey -ac_name=MYR -addnode=78.47.196.146 $1 & +sleep $delay +./komodod -pubkey=$pubkey -ac_name=PHP -addnode=78.47.196.146 $1 & +sleep $delay +./komodod -pubkey=$pubkey -ac_name=RON -addnode=78.47.196.146 $1 & +sleep $delay +./komodod -pubkey=$pubkey -ac_name=SGD -addnode=78.47.196.146 $1 & +sleep $delay +./komodod -pubkey=$pubkey -ac_name=THB -addnode=78.47.196.146 $1 & +sleep $delay +./komodod -pubkey=$pubkey -ac_name=BGN -addnode=78.47.196.146 $1 & +sleep $delay +./komodod -pubkey=$pubkey -ac_name=IDR -addnode=78.47.196.146 $1 & +sleep $delay +./komodod -pubkey=$pubkey -ac_name=HRK -addnode=78.47.196.146 $1 & From cdc09f194c773660fad94b899b8a6a47cb6871f1 Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 27 Jun 2017 13:27:31 +0300 Subject: [PATCH 004/126] Test --- src/komodo_pax.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/komodo_pax.h b/src/komodo_pax.h index ed5b48436..7d696d4c7 100644 --- a/src/komodo_pax.h +++ b/src/komodo_pax.h @@ -552,7 +552,7 @@ uint64_t _komodo_paxpriceB(uint64_t seed,int32_t height,char *base,char *rel,uin for (i=0; i> 1) ) { return(0); @@ -617,7 +617,7 @@ uint64_t komodo_paxprice(uint64_t *seedp,int32_t height,char *base,char *rel,uin if ( ASSETCHAINS_SYMBOL[0] == 0 && chainActive.Tip() != 0 && height > chainActive.Tip()->nHeight ) { if ( height < 100000000 ) - printf("height.%d vs tip.%d\n",height,chainActive.Tip()->nHeight); + printf("komodo_paxprice height.%d vs tip.%d\n",height,chainActive.Tip()->nHeight); return(0); } *seedp = komodo_seed(height); @@ -655,7 +655,7 @@ uint64_t komodo_paxprice(uint64_t *seedp,int32_t height,char *base,char *rel,uin portable_mutex_unlock(&komodo_mutex); if ( nonz != 0 ) sum /= nonz; - //printf("-> %lld %s/%s i.%d ht.%d\n",(long long)sum,base,rel,i,height); +printf("-> %lld %s/%s i.%d ht.%d\n",(long long)sum,base,rel,i,height); return(sum); } From d1373b57010a893feaca035d24a6cc209da1cf97 Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 27 Jun 2017 13:47:34 +0300 Subject: [PATCH 005/126] Test --- src/komodo_pax.h | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/komodo_pax.h b/src/komodo_pax.h index 7d696d4c7..4910179c8 100644 --- a/src/komodo_pax.h +++ b/src/komodo_pax.h @@ -352,7 +352,10 @@ uint64_t komodo_paxcorrelation(uint64_t *votes,int32_t numvotes,uint64_t seed) else sum += votes[i], nonz++; } if ( nonz < (numvotes >> 2) ) + { + printf("komodo_paxcorrelation not enough votes: nonz.%d numvotes.%d\n",nonz,numvotes); return(0); + } sum /= nonz; lastprice = sum; for (i=0; i (numvotes >> 1) ) - break; - } + if ( delta <= tolerance ) + { + wt++; + if ( wt > (numvotes >> 1) ) + break; + } } } } @@ -397,9 +400,9 @@ uint64_t komodo_paxcorrelation(uint64_t *votes,int32_t numvotes,uint64_t seed) if ( densum != 0 ) sum /= densum; //sum = (sum * basevolume); - //printf("paxprice seed.%llx sum %.8f densum %.8f\n",(long long)seed,dstr(sum),dstr(densum)); +printf("paxprice seed.%llx sum %.8f densum %.8f\n",(long long)seed,dstr(sum),dstr(densum)); break; - } + } else printf("correlation k.%d not enough wt: wt.%d vs numvotes.%d\n",k,wt,numvotes); } return(sum); } @@ -552,7 +555,7 @@ uint64_t _komodo_paxpriceB(uint64_t seed,int32_t height,char *base,char *rel,uin for (i=0; i Date: Tue, 27 Jun 2017 13:53:31 +0300 Subject: [PATCH 006/126] Test --- src/komodo_pax.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/komodo_pax.h b/src/komodo_pax.h index 4910179c8..48dd658ca 100644 --- a/src/komodo_pax.h +++ b/src/komodo_pax.h @@ -402,8 +402,10 @@ uint64_t komodo_paxcorrelation(uint64_t *votes,int32_t numvotes,uint64_t seed) //sum = (sum * basevolume); printf("paxprice seed.%llx sum %.8f densum %.8f\n",(long long)seed,dstr(sum),dstr(densum)); break; - } else printf("correlation k.%d not enough wt: wt.%d vs numvotes.%d\n",k,wt,numvotes); + } else fprintf(stderr,"%d ",wt); } + if ( k == numvotes ) + printf("not enough correlation wt tolerance %lld\n",(long long)tolerance); return(sum); } From 06e6de363c228ffb2be94831a91c109a4b6a1d41 Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 27 Jun 2017 14:12:59 +0300 Subject: [PATCH 007/126] Test --- src/komodo_pax.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/komodo_pax.h b/src/komodo_pax.h index 48dd658ca..f0acef4de 100644 --- a/src/komodo_pax.h +++ b/src/komodo_pax.h @@ -364,7 +364,9 @@ uint64_t komodo_paxcorrelation(uint64_t *votes,int32_t numvotes,uint64_t seed) votes[i] = lastprice; else lastprice = votes[i]; } - tolerance = sum / 50; + // jl777 consensus change: tolerance = sum / 50; + tolerance = sum / 10; + printf("lastprice %.8f ",dstr(lastprice)); for (k=0; k Date: Tue, 27 Jun 2017 14:28:46 +0300 Subject: [PATCH 008/126] Test --- src/komodo_pax.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/komodo_pax.h b/src/komodo_pax.h index f0acef4de..c083aad01 100644 --- a/src/komodo_pax.h +++ b/src/komodo_pax.h @@ -364,8 +364,7 @@ uint64_t komodo_paxcorrelation(uint64_t *votes,int32_t numvotes,uint64_t seed) votes[i] = lastprice; else lastprice = votes[i]; } - // jl777 consensus change: tolerance = sum / 50; - tolerance = sum / 10; + tolerance = sum / 50; printf("lastprice %.8f ",dstr(lastprice)); for (k=0; k USD %llu, usdkmd %llu usdvol %llu -> %llu\n",height,(long long)kmdbtc,(long long)btcusd,(long long)baseusd,(long long)usdkmd,(long long)usdvol,(long long)(MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid]/100))); + fprintf(stderr,"ht.%d kmdbtc.%llu btcusd.%llu base -> USD %llu, usdkmd %llu usdvol %llu -> %llu\n",height,(long long)kmdbtc,(long long)btcusd,(long long)baseusd,(long long)usdkmd,(long long)usdvol,(long long)(MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid]/100))); //fprintf(stderr,"usdkmd.%llu basevolume.%llu baseusd.%llu paxvol.%llu usdvol.%llu -> %llu %llu\n",(long long)usdkmd,(long long)basevolume,(long long)baseusd,(long long)komodo_paxvol(basevolume,baseusd),(long long)usdvol,(long long)(MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid]/100)),(long long)price); //fprintf(stderr,"usdkmd.%llu basevolume.%llu baseusd.%llu paxvol.%llu usdvol.%llu -> %llu\n",(long long)usdkmd,(long long)basevolume,(long long)baseusd,(long long)komodo_paxvol(basevolume,baseusd),(long long)usdvol,(long long)(MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid]/100))); } else price = (MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid]/100)); @@ -563,6 +562,7 @@ uint64_t _komodo_paxpriceB(uint64_t seed,int32_t height,char *base,char *rel,uin } kmdbtc = komodo_paxcorrelation(kmdbtcs,numvotes,seed) * 539; btcusd = komodo_paxcorrelation(btcusds,numvotes,seed) * 539; + printf("paxpriceB: %s/%sht.%d kmdbtc %.8f btcusd %.8f\n",base,rel,height,dstr(kmdbtc),dstr(btcusd)); //komodo_kmdbtcusd(1,&kmdbtc,&btcusd,height); } for (i=nonz=0; i Date: Tue, 27 Jun 2017 14:48:13 +0300 Subject: [PATCH 009/126] Test --- src/komodo_pax.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/komodo_pax.h b/src/komodo_pax.h index c083aad01..04b19e991 100644 --- a/src/komodo_pax.h +++ b/src/komodo_pax.h @@ -447,7 +447,9 @@ uint64_t komodo_paxcalc(int32_t height,uint32_t *pvals,int32_t baseid,int32_t re { usdkmd = ((uint64_t)kmdbtc * btcusd) / 1000000000; price = ((uint64_t)10000000000 * MINDENOMS[USD] / MINDENOMS[baseid]) / komodo_paxvol(usdvol,usdkmd); - fprintf(stderr,"ht.%d kmdbtc.%llu btcusd.%llu base -> USD %llu, usdkmd %llu usdvol %llu -> %llu\n",height,(long long)kmdbtc,(long long)btcusd,(long long)baseusd,(long long)usdkmd,(long long)usdvol,(long long)(MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid]/100))); + if ( height > 380000 ) + printf("%.8f ",dstr(price)); + //fprintf(stderr,"ht.%d kmdbtc.%llu btcusd.%llu base -> USD %llu, usdkmd %llu usdvol %llu -> %llu\n",height,(long long)kmdbtc,(long long)btcusd,(long long)baseusd,(long long)usdkmd,(long long)usdvol,(long long)(MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid]/100))); //fprintf(stderr,"usdkmd.%llu basevolume.%llu baseusd.%llu paxvol.%llu usdvol.%llu -> %llu %llu\n",(long long)usdkmd,(long long)basevolume,(long long)baseusd,(long long)komodo_paxvol(basevolume,baseusd),(long long)usdvol,(long long)(MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid]/100)),(long long)price); //fprintf(stderr,"usdkmd.%llu basevolume.%llu baseusd.%llu paxvol.%llu usdvol.%llu -> %llu\n",(long long)usdkmd,(long long)basevolume,(long long)baseusd,(long long)komodo_paxvol(basevolume,baseusd),(long long)usdvol,(long long)(MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid]/100))); } else price = (MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid]/100)); @@ -562,7 +564,7 @@ uint64_t _komodo_paxpriceB(uint64_t seed,int32_t height,char *base,char *rel,uin } kmdbtc = komodo_paxcorrelation(kmdbtcs,numvotes,seed) * 539; btcusd = komodo_paxcorrelation(btcusds,numvotes,seed) * 539; - printf("paxpriceB: %s/%sht.%d kmdbtc %.8f btcusd %.8f\n",base,rel,height,dstr(kmdbtc),dstr(btcusd)); + printf("paxpriceB: %s/%s ht.%d kmdbtc %.8f btcusd %.8f\n",base,rel,height,dstr(kmdbtc),dstr(btcusd)); //komodo_kmdbtcusd(1,&kmdbtc,&btcusd,height); } for (i=nonz=0; i Date: Tue, 27 Jun 2017 14:56:14 +0300 Subject: [PATCH 010/126] Test --- src/komodo_pax.h | 26 +++++--------------------- 1 file changed, 5 insertions(+), 21 deletions(-) diff --git a/src/komodo_pax.h b/src/komodo_pax.h index 04b19e991..a1cde4402 100644 --- a/src/komodo_pax.h +++ b/src/komodo_pax.h @@ -575,12 +575,12 @@ uint64_t _komodo_paxpriceB(uint64_t seed,int32_t height,char *base,char *rel,uin { nonz++; sum += votes[numvotes-1-i]; - if ( (i % 10) == 0 ) + //if ( (i % 10) == 0 ) fprintf(stderr,"[%llu] ",(long long)votes[numvotes-1-i]); } } fprintf(stderr,"kmdbtc %llu btcusd %llu ",(long long)kmdbtc,(long long)btcusd); -fprintf(stderr,"komodo_paxprice nonz.%d of numvotes.%d seed.%llu %.8f\n",nonz,numvotes,(long long)seed,nonz!=0?dstr(1000. * (double)sum/nonz):0); +fprintf(stderr,"komodo_paxprice nonz.%d of numvotes.%d seed.%llu %.8f sum.%llu\n",nonz,numvotes,(long long)seed,nonz!=0?dstr(1000. * (double)sum/nonz):0,(long long)sum); if ( nonz <= (numvotes >> 1) ) { return(0); @@ -604,22 +604,6 @@ uint64_t komodo_paxpriceB(uint64_t seed,int32_t height,char *base,char *rel,uint } else return(_komodo_paxpriceB(seed,height,base,rel,basevolume)); } -/*uint64_t komodo_paxpriceB(uint64_t seed,int32_t height,char *base,char *rel,uint64_t basevolume) -{ - uint64_t baseusd,basekmd,usdkmd; int32_t baseid = komodo_baseid(base); - //if ( strcmp(rel,"KMD") != 0 || baseid < 0 || MINDENOMS[baseid] == MINDENOMS[USD] ) - // return(_komodo_paxpriceB(seed,height,base,rel,basevolume)); - //else - { - baseusd = _komodo_paxpriceB(seed,height,base,(char *)"USD",SATOSHIDEN); - usdkmd = _komodo_paxpriceB(seed,height,(char *)"USD",(char *)"KMD",SATOSHIDEN); - basekmd = (komodo_paxvol(basevolume,baseusd) * usdkmd) / 10000000; - if ( strcmp("KMD",base) == 0 ) - printf("baseusd.%llu usdkmd.%llu %llu\n",(long long)baseusd,(long long)usdkmd,(long long)basekmd); - return(basekmd); - } -}*/ - uint64_t komodo_paxprice(uint64_t *seedp,int32_t height,char *base,char *rel,uint64_t basevolume) { int32_t i,nonz=0; int64_t diff; uint64_t price,seed,sum = 0; @@ -637,7 +621,7 @@ uint64_t komodo_paxprice(uint64_t *seedp,int32_t height,char *base,char *rel,uin { sum += price; nonz++; - if ( 0 && i == 1 && nonz == 2 ) + /*if ( 0 && i == 1 && nonz == 2 ) { diff = (((int64_t)price - (sum >> 1)) * 10000); if ( diff < 0 ) @@ -656,7 +640,7 @@ uint64_t komodo_paxprice(uint64_t *seedp,int32_t height,char *base,char *rel,uin printf("(%llu %llu %lld).%lld ",(long long)price,(long long)(sum>>2),(long long) (((int64_t)price - (sum >> 2)) * 10000),(long long)diff); if ( diff < 20 ) break; - } + }*/ } if ( height < 165000 || height > 236000 ) break; @@ -664,7 +648,7 @@ uint64_t komodo_paxprice(uint64_t *seedp,int32_t height,char *base,char *rel,uin portable_mutex_unlock(&komodo_mutex); if ( nonz != 0 ) sum /= nonz; -printf("-> %lld %s/%s i.%d ht.%d\n",(long long)sum,base,rel,i,height); +printf("-> %lld %s/%s i.%d ht.%d nonz.%d\n",(long long)sum,base,rel,i,height,nonz); return(sum); } From 7b9c29355c3133edb256078cadcd1b17bbf961b1 Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 27 Jun 2017 15:07:22 +0300 Subject: [PATCH 011/126] Test --- src/komodo_pax.h | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/komodo_pax.h b/src/komodo_pax.h index a1cde4402..aeb04f089 100644 --- a/src/komodo_pax.h +++ b/src/komodo_pax.h @@ -443,12 +443,18 @@ uint64_t komodo_paxcalc(int32_t height,uint32_t *pvals,int32_t baseid,int32_t re baseusd = (((uint64_t)pvalb * 1000000000) / pvals[USD]); usdvol = komodo_paxvol(basevolume,baseusd); usdkmd = ((uint64_t)kmdbtc * 1000000000) / btcusd; - if ( height >= 236000-10 ) + if ( height > 380000 ) + { + usdkmd = ((uint64_t)kmdbtc * btcusd) / 1000000000; + if ( baseid == USD ) + price = usdkmd; + else price = 1000 * ((uint64_t)10000000 * MINDENOMS[USD] / MINDENOMS[baseid]) / komodo_paxvol(usdvol,usdkmd); + fprintf(stderr,"%.8f ht.%d kmdbtc.%llu btcusd.%llu base -> USD %llu, usdkmd %llu usdvol %llu -> %llu\n",dstr(price),height,(long long)kmdbtc,(long long)btcusd,(long long)baseusd,(long long)usdkmd,(long long)usdvol,(long long)(MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid]/100))); + } + else if ( height >= 236000-10 ) { usdkmd = ((uint64_t)kmdbtc * btcusd) / 1000000000; price = ((uint64_t)10000000000 * MINDENOMS[USD] / MINDENOMS[baseid]) / komodo_paxvol(usdvol,usdkmd); - if ( height > 380000 ) - printf("%.8f ",dstr(price)); //fprintf(stderr,"ht.%d kmdbtc.%llu btcusd.%llu base -> USD %llu, usdkmd %llu usdvol %llu -> %llu\n",height,(long long)kmdbtc,(long long)btcusd,(long long)baseusd,(long long)usdkmd,(long long)usdvol,(long long)(MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid]/100))); //fprintf(stderr,"usdkmd.%llu basevolume.%llu baseusd.%llu paxvol.%llu usdvol.%llu -> %llu %llu\n",(long long)usdkmd,(long long)basevolume,(long long)baseusd,(long long)komodo_paxvol(basevolume,baseusd),(long long)usdvol,(long long)(MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid]/100)),(long long)price); //fprintf(stderr,"usdkmd.%llu basevolume.%llu baseusd.%llu paxvol.%llu usdvol.%llu -> %llu\n",(long long)usdkmd,(long long)basevolume,(long long)baseusd,(long long)komodo_paxvol(basevolume,baseusd),(long long)usdvol,(long long)(MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid]/100))); From 5ee6fd299b924651eb62962033f0662de83d782c Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 27 Jun 2017 15:55:29 +0300 Subject: [PATCH 012/126] Test --- src/komodo_pax.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/komodo_pax.h b/src/komodo_pax.h index aeb04f089..8c24e8378 100644 --- a/src/komodo_pax.h +++ b/src/komodo_pax.h @@ -448,8 +448,8 @@ uint64_t komodo_paxcalc(int32_t height,uint32_t *pvals,int32_t baseid,int32_t re usdkmd = ((uint64_t)kmdbtc * btcusd) / 1000000000; if ( baseid == USD ) price = usdkmd; - else price = 1000 * ((uint64_t)10000000 * MINDENOMS[USD] / MINDENOMS[baseid]) / komodo_paxvol(usdvol,usdkmd); - fprintf(stderr,"%.8f ht.%d kmdbtc.%llu btcusd.%llu base -> USD %llu, usdkmd %llu usdvol %llu -> %llu\n",dstr(price),height,(long long)kmdbtc,(long long)btcusd,(long long)baseusd,(long long)usdkmd,(long long)usdvol,(long long)(MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid]/100))); + else price = ((uint64_t)1000000000 * MINDENOMS[USD] / MINDENOMS[baseid]) / komodo_paxvol(usdvol,usdkmd); + //fprintf(stderr,"%.8f ht.%d kmdbtc.%llu btcusd.%llu base -> USD %llu, usdkmd %llu usdvol %llu -> %llu\n",dstr(price/10),height,(long long)kmdbtc,(long long)btcusd,(long long)baseusd,(long long)usdkmd,(long long)usdvol,(long long)(MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid]/100))); } else if ( height >= 236000-10 ) { @@ -582,7 +582,7 @@ uint64_t _komodo_paxpriceB(uint64_t seed,int32_t height,char *base,char *rel,uin nonz++; sum += votes[numvotes-1-i]; //if ( (i % 10) == 0 ) - fprintf(stderr,"[%llu] ",(long long)votes[numvotes-1-i]); + fprintf(stderr,"[%llu %.8f] ",(long long)votes[numvotes-1-i],dstr(sum/nonz)/10.); } } fprintf(stderr,"kmdbtc %llu btcusd %llu ",(long long)kmdbtc,(long long)btcusd); From 4c917febb74f0ce6bb8cb36e33ffcaf312bf1402 Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 27 Jun 2017 16:13:49 +0300 Subject: [PATCH 013/126] Test --- src/komodo_pax.h | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/komodo_pax.h b/src/komodo_pax.h index 8c24e8378..bbc543741 100644 --- a/src/komodo_pax.h +++ b/src/komodo_pax.h @@ -365,7 +365,7 @@ uint64_t komodo_paxcorrelation(uint64_t *votes,int32_t numvotes,uint64_t seed) else lastprice = votes[i]; } tolerance = sum / 50; - printf("lastprice %.8f ",dstr(lastprice)); + printf("lastprice %.8f tolerance %.8f ",dstr(lastprice),dstr(tolerance)); for (k=0; k> 1) ) { return(0); From e2ca75ae281e332b8951f9ba15578082f228b15e Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 27 Jun 2017 16:27:03 +0300 Subject: [PATCH 014/126] Test --- src/komodo_pax.h | 68 +++++++++++++++++++++++++----------------------- 1 file changed, 36 insertions(+), 32 deletions(-) diff --git a/src/komodo_pax.h b/src/komodo_pax.h index bbc543741..d97a82349 100644 --- a/src/komodo_pax.h +++ b/src/komodo_pax.h @@ -352,10 +352,7 @@ uint64_t komodo_paxcorrelation(uint64_t *votes,int32_t numvotes,uint64_t seed) else sum += votes[i], nonz++; } if ( nonz < (numvotes >> 2) ) - { - printf("komodo_paxcorrelation not enough votes: nonz.%d numvotes.%d\n",nonz,numvotes); return(0); - } sum /= nonz; lastprice = sum; for (i=0; i (numvotes >> 1) ) - break; - } + if ( delta <= tolerance ) + { + wt++; + if ( wt > (numvotes >> 1) ) + break; + } } } } @@ -400,12 +396,11 @@ uint64_t komodo_paxcorrelation(uint64_t *votes,int32_t numvotes,uint64_t seed) } if ( densum != 0 ) sum /= densum; -printf("paxprice seed.%llx sum %.8f densum %.8f\n",(long long)seed,dstr(sum),dstr(densum)); + //sum = (sum * basevolume); + //printf("paxprice seed.%llx sum %.8f densum %.8f\n",(long long)seed,dstr(sum),dstr(densum)); break; - } //else fprintf(stderr,"%d ",wt); + } } - if ( k == numvotes ) - printf("not enough correlation wt tolerance %lld\n",(long long)tolerance); return(sum); } @@ -442,18 +437,12 @@ uint64_t komodo_paxcalc(int32_t height,uint32_t *pvals,int32_t baseid,int32_t re baseusd = (((uint64_t)pvalb * 1000000000) / pvals[USD]); usdvol = komodo_paxvol(basevolume,baseusd); usdkmd = ((uint64_t)kmdbtc * 1000000000) / btcusd; - if ( height > 380000 ) + if ( height >= 236000-10 ) { usdkmd = ((uint64_t)kmdbtc * btcusd) / 1000000000; - if ( baseid == USD ) + if ( height > 380000 && baseid == USD ) price = usdkmd; - else price = ((uint64_t)1000000000 * MINDENOMS[USD] / MINDENOMS[baseid]) / komodo_paxvol(usdvol,usdkmd); - //fprintf(stderr,"%.8f ht.%d kmdbtc.%llu btcusd.%llu base -> USD %llu, usdkmd %llu usdvol %llu -> %llu\n",dstr(price/10),height,(long long)kmdbtc,(long long)btcusd,(long long)baseusd,(long long)usdkmd,(long long)usdvol,(long long)(MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid]/100))); - } - else if ( height >= 236000-10 ) - { - usdkmd = ((uint64_t)kmdbtc * btcusd) / 1000000000; - price = ((uint64_t)10000000000 * MINDENOMS[USD] / MINDENOMS[baseid]) / komodo_paxvol(usdvol,usdkmd); + else price = ((uint64_t)10000000000 * MINDENOMS[USD] / MINDENOMS[baseid]) / komodo_paxvol(usdvol,usdkmd); //fprintf(stderr,"ht.%d kmdbtc.%llu btcusd.%llu base -> USD %llu, usdkmd %llu usdvol %llu -> %llu\n",height,(long long)kmdbtc,(long long)btcusd,(long long)baseusd,(long long)usdkmd,(long long)usdvol,(long long)(MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid]/100))); //fprintf(stderr,"usdkmd.%llu basevolume.%llu baseusd.%llu paxvol.%llu usdvol.%llu -> %llu %llu\n",(long long)usdkmd,(long long)basevolume,(long long)baseusd,(long long)komodo_paxvol(basevolume,baseusd),(long long)usdvol,(long long)(MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid]/100)),(long long)price); //fprintf(stderr,"usdkmd.%llu basevolume.%llu baseusd.%llu paxvol.%llu usdvol.%llu -> %llu\n",(long long)usdkmd,(long long)basevolume,(long long)baseusd,(long long)komodo_paxvol(basevolume,baseusd),(long long)usdvol,(long long)(MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid]/100))); @@ -565,11 +554,10 @@ uint64_t _komodo_paxpriceB(uint64_t seed,int32_t height,char *base,char *rel,uin for (i=0; i> 1) ) { return(0); @@ -609,13 +597,29 @@ uint64_t komodo_paxpriceB(uint64_t seed,int32_t height,char *base,char *rel,uint } else return(_komodo_paxpriceB(seed,height,base,rel,basevolume)); } +/*uint64_t komodo_paxpriceB(uint64_t seed,int32_t height,char *base,char *rel,uint64_t basevolume) +{ + uint64_t baseusd,basekmd,usdkmd; int32_t baseid = komodo_baseid(base); + //if ( strcmp(rel,"KMD") != 0 || baseid < 0 || MINDENOMS[baseid] == MINDENOMS[USD] ) + // return(_komodo_paxpriceB(seed,height,base,rel,basevolume)); + //else + { + baseusd = _komodo_paxpriceB(seed,height,base,(char *)"USD",SATOSHIDEN); + usdkmd = _komodo_paxpriceB(seed,height,(char *)"USD",(char *)"KMD",SATOSHIDEN); + basekmd = (komodo_paxvol(basevolume,baseusd) * usdkmd) / 10000000; + if ( strcmp("KMD",base) == 0 ) + printf("baseusd.%llu usdkmd.%llu %llu\n",(long long)baseusd,(long long)usdkmd,(long long)basekmd); + return(basekmd); + } +}*/ + uint64_t komodo_paxprice(uint64_t *seedp,int32_t height,char *base,char *rel,uint64_t basevolume) { int32_t i,nonz=0; int64_t diff; uint64_t price,seed,sum = 0; if ( ASSETCHAINS_SYMBOL[0] == 0 && chainActive.Tip() != 0 && height > chainActive.Tip()->nHeight ) { if ( height < 100000000 ) - printf("komodo_paxprice height.%d vs tip.%d\n",height,chainActive.Tip()->nHeight); + printf("height.%d vs tip.%d\n",height,chainActive.Tip()->nHeight); return(0); } *seedp = komodo_seed(height); @@ -626,7 +630,7 @@ uint64_t komodo_paxprice(uint64_t *seedp,int32_t height,char *base,char *rel,uin { sum += price; nonz++; - /*if ( 0 && i == 1 && nonz == 2 ) + if ( 0 && i == 1 && nonz == 2 ) { diff = (((int64_t)price - (sum >> 1)) * 10000); if ( diff < 0 ) @@ -645,7 +649,7 @@ uint64_t komodo_paxprice(uint64_t *seedp,int32_t height,char *base,char *rel,uin printf("(%llu %llu %lld).%lld ",(long long)price,(long long)(sum>>2),(long long) (((int64_t)price - (sum >> 2)) * 10000),(long long)diff); if ( diff < 20 ) break; - }*/ + } } if ( height < 165000 || height > 236000 ) break; @@ -653,7 +657,7 @@ uint64_t komodo_paxprice(uint64_t *seedp,int32_t height,char *base,char *rel,uin portable_mutex_unlock(&komodo_mutex); if ( nonz != 0 ) sum /= nonz; -printf("-> %lld %s/%s i.%d ht.%d nonz.%d\n",(long long)sum,base,rel,i,height,nonz); + //printf("-> %lld %s/%s i.%d ht.%d\n",(long long)sum,base,rel,i,height); return(sum); } From b5da879e2f0e9c5cc08dcfd09921e77311918d93 Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 27 Jun 2017 16:34:14 +0300 Subject: [PATCH 015/126] Test --- src/komodo_pax.h | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/komodo_pax.h b/src/komodo_pax.h index d97a82349..ae3b3243c 100644 --- a/src/komodo_pax.h +++ b/src/komodo_pax.h @@ -440,9 +440,10 @@ uint64_t komodo_paxcalc(int32_t height,uint32_t *pvals,int32_t baseid,int32_t re if ( height >= 236000-10 ) { usdkmd = ((uint64_t)kmdbtc * btcusd) / 1000000000; - if ( height > 380000 && baseid == USD ) - price = usdkmd; - else price = ((uint64_t)10000000000 * MINDENOMS[USD] / MINDENOMS[baseid]) / komodo_paxvol(usdvol,usdkmd); + //if ( height > 380000 && baseid == USD ) + // price = usdkmd; + //else + price = ((uint64_t)10000000000 * MINDENOMS[USD] / MINDENOMS[baseid]) / komodo_paxvol(usdvol,usdkmd); //fprintf(stderr,"ht.%d kmdbtc.%llu btcusd.%llu base -> USD %llu, usdkmd %llu usdvol %llu -> %llu\n",height,(long long)kmdbtc,(long long)btcusd,(long long)baseusd,(long long)usdkmd,(long long)usdvol,(long long)(MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid]/100))); //fprintf(stderr,"usdkmd.%llu basevolume.%llu baseusd.%llu paxvol.%llu usdvol.%llu -> %llu %llu\n",(long long)usdkmd,(long long)basevolume,(long long)baseusd,(long long)komodo_paxvol(basevolume,baseusd),(long long)usdvol,(long long)(MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid]/100)),(long long)price); //fprintf(stderr,"usdkmd.%llu basevolume.%llu baseusd.%llu paxvol.%llu usdvol.%llu -> %llu\n",(long long)usdkmd,(long long)basevolume,(long long)baseusd,(long long)komodo_paxvol(basevolume,baseusd),(long long)usdvol,(long long)(MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid]/100))); @@ -568,12 +569,15 @@ uint64_t _komodo_paxpriceB(uint64_t seed,int32_t height,char *base,char *rel,uin { nonz++; sum += votes[numvotes-1-i]; - //if ( (i % 10) == 0 ) - // fprintf(stderr,"[%llu] ",(long long)votes[numvotes-1-i]); + if ( height > 380000 ) + fprintf(stderr,"[%llu] ",(long long)votes[numvotes-1-i]); } } - //fprintf(stderr,"kmdbtc %llu btcusd %llu ",(long long)kmdbtc,(long long)btcusd); - //fprintf(stderr,"komodo_paxprice nonz.%d of numvotes.%d seed.%llu %.8f\n",nonz,numvotes,(long long)seed,nonz!=0?dstr(1000. * (double)sum/nonz):0); + if ( height > 380000 ) + { + fprintf(stderr,"kmdbtc %llu btcusd %llu ",(long long)kmdbtc,(long long)btcusd); + fprintf(stderr,"komodo_paxprice nonz.%d of numvotes.%d seed.%llu %.8f\n",nonz,numvotes,(long long)seed,nonz!=0?dstr(1000. * (double)sum/nonz):0); + } if ( nonz <= (numvotes >> 1) ) { return(0); From 201269b62d7208a2399e2511ad372aa8ced7a4d2 Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 27 Jun 2017 16:41:50 +0300 Subject: [PATCH 016/126] Test --- src/komodo_pax.h | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/komodo_pax.h b/src/komodo_pax.h index ae3b3243c..c463a7492 100644 --- a/src/komodo_pax.h +++ b/src/komodo_pax.h @@ -342,7 +342,7 @@ void komodo_pvals(int32_t height,uint32_t *pvals,uint8_t numpvals) } } -uint64_t komodo_paxcorrelation(uint64_t *votes,int32_t numvotes,uint64_t seed) +uint64_t komodo_paxcorrelation(int32_t dispflag,uint64_t *votes,int32_t numvotes,uint64_t seed) { int32_t i,j,k,ind,zeroes,wt,nonz; int64_t delta; uint64_t lastprice,tolerance,den,densum,sum=0; for (sum=i=zeroes=nonz=0; i= 236000-10 ) { usdkmd = ((uint64_t)kmdbtc * btcusd) / 1000000000; - //if ( height > 380000 && baseid == USD ) - // price = usdkmd; - //else price = ((uint64_t)10000000000 * MINDENOMS[USD] / MINDENOMS[baseid]) / komodo_paxvol(usdvol,usdkmd); //fprintf(stderr,"ht.%d kmdbtc.%llu btcusd.%llu base -> USD %llu, usdkmd %llu usdvol %llu -> %llu\n",height,(long long)kmdbtc,(long long)btcusd,(long long)baseusd,(long long)usdkmd,(long long)usdvol,(long long)(MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid]/100))); //fprintf(stderr,"usdkmd.%llu basevolume.%llu baseusd.%llu paxvol.%llu usdvol.%llu -> %llu %llu\n",(long long)usdkmd,(long long)basevolume,(long long)baseusd,(long long)komodo_paxvol(basevolume,baseusd),(long long)usdvol,(long long)(MINDENOMS[USD] * komodo_paxvol(usdvol,usdkmd) / (MINDENOMS[baseid]/100)),(long long)price); @@ -557,8 +564,8 @@ uint64_t _komodo_paxpriceB(uint64_t seed,int32_t height,char *base,char *rel,uin _komodo_paxprice(&kmdbtcs[numvotes-1-i],&btcusds[numvotes-1-i],height-i,base,rel,100000,0,0); //printf("(%llu %llu) ",(long long)kmdbtcs[numvotes-1-i],(long long)btcusds[numvotes-1-i]); } - kmdbtc = komodo_paxcorrelation(kmdbtcs,numvotes,seed) * 539; - btcusd = komodo_paxcorrelation(btcusds,numvotes,seed) * 539; + kmdbtc = komodo_paxcorrelation(0,kmdbtcs,numvotes,seed) * 539; + btcusd = komodo_paxcorrelation(0,btcusds,numvotes,seed) * 539; //komodo_kmdbtcusd(1,&kmdbtc,&btcusd,height); } for (i=nonz=0; i 380000,votes,numvotes,seed) * basevolume / 100000); } uint64_t komodo_paxpriceB(uint64_t seed,int32_t height,char *base,char *rel,uint64_t basevolume) From b42e4395126b048e33fd3ad60aeebf6689833215 Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 27 Jun 2017 16:51:12 +0300 Subject: [PATCH 017/126] Test --- src/komodo_pax.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/komodo_pax.h b/src/komodo_pax.h index c463a7492..9f0cec3f8 100644 --- a/src/komodo_pax.h +++ b/src/komodo_pax.h @@ -399,18 +399,19 @@ uint64_t komodo_paxcorrelation(int32_t dispflag,uint64_t *votes,int32_t numvotes den = peggy_smooth_coeffs[j]; densum += den; sum += (den * votes[(ind + j) % numvotes]); - //printf("(%llu/%llu %.8f) ",(long long)sum,(long long)densum,(double)sum/densum); + if ( dispflag != 0 ) + printf("(%llu/%llu %.8f) ",(long long)sum,(long long)densum,(double)sum/densum); } if ( densum != 0 ) sum /= densum; - //sum = (sum * basevolume); - //printf("paxprice seed.%llx sum %.8f densum %.8f\n",(long long)seed,dstr(sum),dstr(densum)); + if ( dispflag != 0 ) + printf("paxprice seed.%llx sum %.8f densum %.8f ind.%d\n",(long long)seed,dstr(sum),dstr(densum),ind); break; } else if ( dispflag != 0 ) printf("%d ",wt); } - if ( dispflag != 0 && k == numvotes ) - printf("not enough correlation\n"); + if ( dispflag != 0 ) + printf("k.%d numvotes.%d\n",k,numvotes); return(sum); } From c1f88b1deb76a003553c2ba52665c5209d926e34 Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 27 Jun 2017 16:59:15 +0300 Subject: [PATCH 018/126] Test --- src/komodo_pax.h | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/komodo_pax.h b/src/komodo_pax.h index 9f0cec3f8..8d566ca75 100644 --- a/src/komodo_pax.h +++ b/src/komodo_pax.h @@ -543,7 +543,7 @@ int32_t komodo_kmdbtcusd(int32_t rwflag,uint64_t *kmdbtcp,uint64_t *btcusdp,int3 uint64_t _komodo_paxpriceB(uint64_t seed,int32_t height,char *base,char *rel,uint64_t basevolume) { - int32_t i,j,k,ind,zeroes,numvotes,wt,nonz; int64_t delta; uint64_t lastprice,tolerance,den,densum,sum=0,votes[sizeof(Peggy_inds)/sizeof(*Peggy_inds)],btcusds[sizeof(Peggy_inds)/sizeof(*Peggy_inds)],kmdbtcs[sizeof(Peggy_inds)/sizeof(*Peggy_inds)],kmdbtc,btcusd; + int32_t i,j,k,ind,zeroes,numvotes,wt,nonz; int64_t delta; uint64_t corr,lastprice,tolerance,den,densum,sum=0,votes[sizeof(Peggy_inds)/sizeof(*Peggy_inds)],btcusds[sizeof(Peggy_inds)/sizeof(*Peggy_inds)],kmdbtcs[sizeof(Peggy_inds)/sizeof(*Peggy_inds)],kmdbtc,btcusd; if ( basevolume > KOMODO_PAXMAX ) { printf("komodo_paxprice overflow %.8f\n",dstr(basevolume)); @@ -590,7 +590,10 @@ uint64_t _komodo_paxpriceB(uint64_t seed,int32_t height,char *base,char *rel,uin { return(0); } - return(komodo_paxcorrelation(height > 380000,votes,numvotes,seed) * basevolume / 100000); + corr = komodo_paxcorrelation(height > 380000,votes,numvotes,seed); + if ( height > 380000 ) + printf("corr %.8f basevolume %llu / 100000\n",dstr(corr),basevolume); + return(corr * basevolume / 100000); } uint64_t komodo_paxpriceB(uint64_t seed,int32_t height,char *base,char *rel,uint64_t basevolume) @@ -642,7 +645,7 @@ uint64_t komodo_paxprice(uint64_t *seedp,int32_t height,char *base,char *rel,uin { sum += price; nonz++; - if ( 0 && i == 1 && nonz == 2 ) + /*if ( 0 && i == 1 && nonz == 2 ) { diff = (((int64_t)price - (sum >> 1)) * 10000); if ( diff < 0 ) @@ -661,7 +664,7 @@ uint64_t komodo_paxprice(uint64_t *seedp,int32_t height,char *base,char *rel,uin printf("(%llu %llu %lld).%lld ",(long long)price,(long long)(sum>>2),(long long) (((int64_t)price - (sum >> 2)) * 10000),(long long)diff); if ( diff < 20 ) break; - } + }*/ } if ( height < 165000 || height > 236000 ) break; From 842948120401dcdc61406771b364fbcebd1da617 Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 27 Jun 2017 17:01:35 +0300 Subject: [PATCH 019/126] Test --- src/komodo_pax.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/komodo_pax.h b/src/komodo_pax.h index 8d566ca75..4c8d5a601 100644 --- a/src/komodo_pax.h +++ b/src/komodo_pax.h @@ -603,7 +603,10 @@ uint64_t komodo_paxpriceB(uint64_t seed,int32_t height,char *base,char *rel,uint { usdkmd = _komodo_paxpriceB(seed,height,(char *)"USD",(char *)"KMD",SATOSHIDEN); if ( strcmp("usd",base) == 0 ) + { + printf("usdkmd %.8f basevol %llu paxvol %.8f\n",dstr(usdkmd),(long long)basevolume,dstr(komodo_paxvol(basevolume,usdkmd))); return(komodo_paxvol(basevolume,usdkmd) * 10); + } baseusd = _komodo_paxpriceB(seed,height,base,(char *)"USD",SATOSHIDEN); basekmd = (komodo_paxvol(basevolume,baseusd) * usdkmd) / 10000000; //if ( strcmp("KMD",base) == 0 ) From e44df8d7e201fcaae2afb2bfdf4459656fbb8b6d Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 27 Jun 2017 17:01:59 +0300 Subject: [PATCH 020/126] Test --- src/komodo_pax.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_pax.h b/src/komodo_pax.h index 4c8d5a601..bb94f1c8d 100644 --- a/src/komodo_pax.h +++ b/src/komodo_pax.h @@ -592,7 +592,7 @@ uint64_t _komodo_paxpriceB(uint64_t seed,int32_t height,char *base,char *rel,uin } corr = komodo_paxcorrelation(height > 380000,votes,numvotes,seed); if ( height > 380000 ) - printf("corr %.8f basevolume %llu / 100000\n",dstr(corr),basevolume); + printf("corr %.8f basevolume %llu / 100000\n",dstr(corr),(long long)basevolume); return(corr * basevolume / 100000); } From 196b41a5acbd2204231e32c97787a8a108e93b3b Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 27 Jun 2017 17:08:41 +0300 Subject: [PATCH 021/126] Test --- src/komodo_pax.h | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/src/komodo_pax.h b/src/komodo_pax.h index bb94f1c8d..78b1c8fa0 100644 --- a/src/komodo_pax.h +++ b/src/komodo_pax.h @@ -361,8 +361,8 @@ uint64_t komodo_paxcorrelation(int32_t dispflag,uint64_t *votes,int32_t numvotes votes[i] = lastprice; else { - if ( dispflag != 0 ) - printf("%.8f ",dstr(votes[i])); + //if ( dispflag != 0 ) + // printf("%.8f ",dstr(votes[i])); lastprice = votes[i]; } } @@ -399,19 +399,18 @@ uint64_t komodo_paxcorrelation(int32_t dispflag,uint64_t *votes,int32_t numvotes den = peggy_smooth_coeffs[j]; densum += den; sum += (den * votes[(ind + j) % numvotes]); - if ( dispflag != 0 ) - printf("(%llu/%llu %.8f) ",(long long)sum,(long long)densum,(double)sum/densum); + //if ( dispflag != 0 ) + // printf("(%llu/%llu %.8f) ",(long long)sum,(long long)densum,(double)sum/densum); } if ( densum != 0 ) sum /= densum; - if ( dispflag != 0 ) - printf("paxprice seed.%llx sum %.8f densum %.8f ind.%d\n",(long long)seed,dstr(sum),dstr(densum),ind); + //if ( dispflag != 0 ) + // printf("paxprice seed.%llx sum %.8f densum %.8f ind.%d\n",(long long)seed,dstr(sum),dstr(densum),ind); break; - } else if ( dispflag != 0 ) - printf("%d ",wt); + } } if ( dispflag != 0 ) - printf("k.%d numvotes.%d\n",k,numvotes); + printf("k.%d numvotes.%d -> corr %.8f\n",k,numvotes,dstr(corr)); return(sum); } @@ -577,19 +576,17 @@ uint64_t _komodo_paxpriceB(uint64_t seed,int32_t height,char *base,char *rel,uin { nonz++; sum += votes[numvotes-1-i]; - if ( height > 380000 ) - fprintf(stderr,"[%llu] ",(long long)votes[numvotes-1-i]); + //if ( height > 380000 ) + // fprintf(stderr,"[%llu] ",(long long)votes[numvotes-1-i]); } } + if ( nonz <= (numvotes >> 1) ) + return(0); if ( height > 380000 ) { - fprintf(stderr,"kmdbtc %llu btcusd %llu ",(long long)kmdbtc,(long long)btcusd); + fprintf(stderr,"ht.%d kmdbtc %llu btcusd %llu ",height,(long long)kmdbtc,(long long)btcusd); fprintf(stderr,"komodo_paxprice nonz.%d of numvotes.%d seed.%llu %.8f\n",nonz,numvotes,(long long)seed,nonz!=0?dstr(1000. * (double)sum/nonz):0); } - if ( nonz <= (numvotes >> 1) ) - { - return(0); - } corr = komodo_paxcorrelation(height > 380000,votes,numvotes,seed); if ( height > 380000 ) printf("corr %.8f basevolume %llu / 100000\n",dstr(corr),(long long)basevolume); From 5f171bf91344383fc1c7b54a13b2c3b21e82c808 Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 27 Jun 2017 17:10:10 +0300 Subject: [PATCH 022/126] Test --- src/komodo_pax.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_pax.h b/src/komodo_pax.h index 78b1c8fa0..0bc9644ea 100644 --- a/src/komodo_pax.h +++ b/src/komodo_pax.h @@ -587,7 +587,7 @@ uint64_t _komodo_paxpriceB(uint64_t seed,int32_t height,char *base,char *rel,uin fprintf(stderr,"ht.%d kmdbtc %llu btcusd %llu ",height,(long long)kmdbtc,(long long)btcusd); fprintf(stderr,"komodo_paxprice nonz.%d of numvotes.%d seed.%llu %.8f\n",nonz,numvotes,(long long)seed,nonz!=0?dstr(1000. * (double)sum/nonz):0); } - corr = komodo_paxcorrelation(height > 380000,votes,numvotes,seed); + uint64_t corr = komodo_paxcorrelation(height > 380000,votes,numvotes,seed); if ( height > 380000 ) printf("corr %.8f basevolume %llu / 100000\n",dstr(corr),(long long)basevolume); return(corr * basevolume / 100000); From 571f648d4104d771221b1c0092599d7547d7fd7d Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 27 Jun 2017 17:25:59 +0300 Subject: [PATCH 023/126] Test --- src/komodo_pax.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/komodo_pax.h b/src/komodo_pax.h index 0bc9644ea..6c4ea6b3a 100644 --- a/src/komodo_pax.h +++ b/src/komodo_pax.h @@ -410,7 +410,7 @@ uint64_t komodo_paxcorrelation(int32_t dispflag,uint64_t *votes,int32_t numvotes } } if ( dispflag != 0 ) - printf("k.%d numvotes.%d -> corr %.8f\n",k,numvotes,dstr(corr)); + printf("k.%d numvotes.%d -> corr %.8f\n",k,numvotes,dstr(sum)); return(sum); } @@ -542,7 +542,7 @@ int32_t komodo_kmdbtcusd(int32_t rwflag,uint64_t *kmdbtcp,uint64_t *btcusdp,int3 uint64_t _komodo_paxpriceB(uint64_t seed,int32_t height,char *base,char *rel,uint64_t basevolume) { - int32_t i,j,k,ind,zeroes,numvotes,wt,nonz; int64_t delta; uint64_t corr,lastprice,tolerance,den,densum,sum=0,votes[sizeof(Peggy_inds)/sizeof(*Peggy_inds)],btcusds[sizeof(Peggy_inds)/sizeof(*Peggy_inds)],kmdbtcs[sizeof(Peggy_inds)/sizeof(*Peggy_inds)],kmdbtc,btcusd; + int32_t i,j,k,ind,zeroes,numvotes,wt,nonz; int64_t delta; uint64_t lastprice,tolerance,den,densum,sum=0,votes[sizeof(Peggy_inds)/sizeof(*Peggy_inds)],btcusds[sizeof(Peggy_inds)/sizeof(*Peggy_inds)],kmdbtcs[sizeof(Peggy_inds)/sizeof(*Peggy_inds)],kmdbtc,btcusd; if ( basevolume > KOMODO_PAXMAX ) { printf("komodo_paxprice overflow %.8f\n",dstr(basevolume)); From 31dd13ad40d1f179835294c094bba385ea923da1 Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 27 Jun 2017 17:36:24 +0300 Subject: [PATCH 024/126] Test --- src/rpcblockchain.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index 037479ca4..a2e73a929 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -708,7 +708,7 @@ UniValue paxprice(const UniValue& params, bool fHelp) height = chainActive.Tip()->nHeight; else height = atoi(params[2].get_str().c_str()); //if ( params.size() == 3 || (basevolume= COIN * atof(params[3].get_str().c_str())) == 0 ) - basevolume = 1; + basevolume = 100000; relvolume = komodo_paxprice(&seed,height,(char *)base.c_str(),(char *)rel.c_str(),basevolume); ret.push_back(Pair("base", base)); ret.push_back(Pair("rel", rel)); From 8ff56739c844d1ca57b8cd96890aa897cf85e4d5 Mon Sep 17 00:00:00 2001 From: jl777 Date: Tue, 27 Jun 2017 17:46:41 +0300 Subject: [PATCH 025/126] Test --- src/komodo_pax.h | 45 ++++++++++++++------------------------------- 1 file changed, 14 insertions(+), 31 deletions(-) diff --git a/src/komodo_pax.h b/src/komodo_pax.h index 6c4ea6b3a..ed5b48436 100644 --- a/src/komodo_pax.h +++ b/src/komodo_pax.h @@ -342,7 +342,7 @@ void komodo_pvals(int32_t height,uint32_t *pvals,uint8_t numpvals) } } -uint64_t komodo_paxcorrelation(int32_t dispflag,uint64_t *votes,int32_t numvotes,uint64_t seed) +uint64_t komodo_paxcorrelation(uint64_t *votes,int32_t numvotes,uint64_t seed) { int32_t i,j,k,ind,zeroes,wt,nonz; int64_t delta; uint64_t lastprice,tolerance,den,densum,sum=0; for (sum=i=zeroes=nonz=0; i corr %.8f\n",k,numvotes,dstr(sum)); return(sum); } @@ -564,8 +554,8 @@ uint64_t _komodo_paxpriceB(uint64_t seed,int32_t height,char *base,char *rel,uin _komodo_paxprice(&kmdbtcs[numvotes-1-i],&btcusds[numvotes-1-i],height-i,base,rel,100000,0,0); //printf("(%llu %llu) ",(long long)kmdbtcs[numvotes-1-i],(long long)btcusds[numvotes-1-i]); } - kmdbtc = komodo_paxcorrelation(0,kmdbtcs,numvotes,seed) * 539; - btcusd = komodo_paxcorrelation(0,btcusds,numvotes,seed) * 539; + kmdbtc = komodo_paxcorrelation(kmdbtcs,numvotes,seed) * 539; + btcusd = komodo_paxcorrelation(btcusds,numvotes,seed) * 539; //komodo_kmdbtcusd(1,&kmdbtc,&btcusd,height); } for (i=nonz=0; i 380000 ) + //if ( (i % 10) == 0 ) // fprintf(stderr,"[%llu] ",(long long)votes[numvotes-1-i]); } } + //fprintf(stderr,"kmdbtc %llu btcusd %llu ",(long long)kmdbtc,(long long)btcusd); + //fprintf(stderr,"komodo_paxprice nonz.%d of numvotes.%d seed.%llu %.8f\n",nonz,numvotes,(long long)seed,nonz!=0?dstr(1000. * (double)sum/nonz):0); if ( nonz <= (numvotes >> 1) ) - return(0); - if ( height > 380000 ) { - fprintf(stderr,"ht.%d kmdbtc %llu btcusd %llu ",height,(long long)kmdbtc,(long long)btcusd); - fprintf(stderr,"komodo_paxprice nonz.%d of numvotes.%d seed.%llu %.8f\n",nonz,numvotes,(long long)seed,nonz!=0?dstr(1000. * (double)sum/nonz):0); + return(0); } - uint64_t corr = komodo_paxcorrelation(height > 380000,votes,numvotes,seed); - if ( height > 380000 ) - printf("corr %.8f basevolume %llu / 100000\n",dstr(corr),(long long)basevolume); - return(corr * basevolume / 100000); + return(komodo_paxcorrelation(votes,numvotes,seed) * basevolume / 100000); } uint64_t komodo_paxpriceB(uint64_t seed,int32_t height,char *base,char *rel,uint64_t basevolume) @@ -600,10 +586,7 @@ uint64_t komodo_paxpriceB(uint64_t seed,int32_t height,char *base,char *rel,uint { usdkmd = _komodo_paxpriceB(seed,height,(char *)"USD",(char *)"KMD",SATOSHIDEN); if ( strcmp("usd",base) == 0 ) - { - printf("usdkmd %.8f basevol %llu paxvol %.8f\n",dstr(usdkmd),(long long)basevolume,dstr(komodo_paxvol(basevolume,usdkmd))); return(komodo_paxvol(basevolume,usdkmd) * 10); - } baseusd = _komodo_paxpriceB(seed,height,base,(char *)"USD",SATOSHIDEN); basekmd = (komodo_paxvol(basevolume,baseusd) * usdkmd) / 10000000; //if ( strcmp("KMD",base) == 0 ) @@ -645,7 +628,7 @@ uint64_t komodo_paxprice(uint64_t *seedp,int32_t height,char *base,char *rel,uin { sum += price; nonz++; - /*if ( 0 && i == 1 && nonz == 2 ) + if ( 0 && i == 1 && nonz == 2 ) { diff = (((int64_t)price - (sum >> 1)) * 10000); if ( diff < 0 ) @@ -664,7 +647,7 @@ uint64_t komodo_paxprice(uint64_t *seedp,int32_t height,char *base,char *rel,uin printf("(%llu %llu %lld).%lld ",(long long)price,(long long)(sum>>2),(long long) (((int64_t)price - (sum >> 2)) * 10000),(long long)diff); if ( diff < 20 ) break; - }*/ + } } if ( height < 165000 || height > 236000 ) break; From 3e4c8dc8638ebe721b48e83174d8a7fd73940b81 Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 29 Jun 2017 18:11:00 +0300 Subject: [PATCH 026/126] COQUI --- src/assetchains | 3 ++- src/assetchains.old | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/assetchains b/src/assetchains index 672039062..eb96d7153 100755 --- a/src/assetchains +++ b/src/assetchains @@ -31,7 +31,8 @@ komodo_asset HODL 9999999 komodo_asset SHARK 1401 komodo_asset BOTS 999999 komodo_asset MGW 999999 -komodo_asset MVP 1000000 +#komodo_asset MVP 1000000 +komodo_asset COQUI 72000000 komodo_asset WLC 210000000 komodo_asset KV 1000000 komodo_asset CEAL 366666666 diff --git a/src/assetchains.old b/src/assetchains.old index a85cdbe38..ce56f8b86 100755 --- a/src/assetchains.old +++ b/src/assetchains.old @@ -15,7 +15,8 @@ echo $pubkey ./komodod -pubkey=$pubkey -ac_name=SHARK -ac_supply=1401 -addnode=78.47.196.146 $1 -gen & ./komodod -pubkey=$pubkey -ac_name=BOTS -ac_supply=999999 -addnode=78.47.196.146 $1 -gen & ./komodod -pubkey=$pubkey -ac_name=MGW -ac_supply=999999 -addnode=78.47.196.146 $1 -gen & -./komodod -pubkey=$pubkey -ac_name=MVP -ac_supply=1000000 -addnode=78.47.196.146 $1 -gen & +#./komodod -pubkey=$pubkey -ac_name=MVP -ac_supply=1000000 -addnode=78.47.196.146 $1 -gen & +./komodod -pubkey=$pubkey -ac_name=COQUI -ac_supply=72000000 -addnode=78.47.196.146 $1 -gen & ./komodod -pubkey=$pubkey -ac_name=WLC -ac_supply=210000000 -addnode=148.251.190.89 $1 -gen & ./komodod -pubkey=$pubkey -ac_name=KV -ac_supply=1000000 -addnode=78.47.196.146 $1 -gen & ./komodod -pubkey=$pubkey -ac_name=CEAL -ac_supply=366666666 -addnode=78.47.196.146 $1 -gen & From f60d4e69c11fbab6789d4716a902d0100f95a671 Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 29 Jun 2017 18:16:04 +0300 Subject: [PATCH 027/126] Test --- src/assetchains | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/assetchains b/src/assetchains index eb96d7153..5e8354a5f 100755 --- a/src/assetchains +++ b/src/assetchains @@ -14,7 +14,14 @@ function komodo_asset () gen="" fi - $komodo_binary -pubkey=$pubkey -ac_name=$1 -ac_supply=$2 -addnode=$seed_ip $gen $args & + if [ -n "$2" ] + then + supply=" -ac_supply=$2" + else + supply=" " + fi + + $komodo_binary -pubkey=$pubkey -ac_name=$1 $supply -addnode=$seed_ip $gen $args & sleep $delay } From 40a778cb541f9a87689b83b39b93393bb72e8a4a Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 29 Jun 2017 18:18:27 +0300 Subject: [PATCH 028/126] Test --- src/fiat-cli | 3 ++- src/fiat/coqui | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100755 src/fiat/coqui diff --git a/src/fiat-cli b/src/fiat-cli index aa29a3095..119f25c6d 100755 --- a/src/fiat-cli +++ b/src/fiat-cli @@ -43,7 +43,8 @@ echo hodl; fiat/hodl $1 $2 $3 $4 echo shark; fiat/shark $1 $2 $3 $4 echo bots; fiat/bots $1 $2 $3 $4 echo mgw; fiat/mgw $1 $2 $3 $4 -echo mvp; fiat/mvp $1 $2 $3 $4 +#echo mvp; fiat/mvp $1 $2 $3 $4 +echo coqui; fiat/coqui $1 $2 $3 $4 echo wlc; fiat/wlc $1 $2 $3 $4 echo kv; fiat/kv $1 $2 $3 $4 echo ceal; fiat/ceal $1 $2 $3 $4 diff --git a/src/fiat/coqui b/src/fiat/coqui new file mode 100755 index 000000000..d4fcb63d5 --- /dev/null +++ b/src/fiat/coqui @@ -0,0 +1,2 @@ +#!/bin/bash +./komodo-cli -ac_name=COQUI $1 $2 $3 $4 $5 $6 From d7d501b6e5e2186cb6096652101316ccbf734485 Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 29 Jun 2017 18:47:48 +0300 Subject: [PATCH 029/126] Test --- src/dpowassets | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/dpowassets b/src/dpowassets index 8115fdd27..97f1ac6b0 100755 --- a/src/dpowassets +++ b/src/dpowassets @@ -16,7 +16,8 @@ curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dp curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"SHARK\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"BOTS\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"MGW\",\"pubkey\":\"$pubkey\"}" -curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"MVP\",\"pubkey\":\"$pubkey\"}" +//curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"MVP\",\"pubkey\":\"$pubkey\"}" +curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"COQUI\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"WLC\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"KV\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"CEAL\",\"pubkey\":\"$pubkey\"}" From bdcabcaf5608a64077ff4dadc9983c925e431237 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 1 Jul 2017 15:22:27 +0300 Subject: [PATCH 030/126] Test --- src/komodo_gateway.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 7d4923608..7521c05eb 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -968,8 +968,8 @@ int32_t komodo_check_deposit(int32_t height,const CBlock& block) // verify above printf("%.8f ",dstr(block.vtx[0].vout[j].nValue)); printf("vout values\n"); for (j=0; j<32; j++) - printf("%02x",((uint8_t *)&hash)[j]); - printf(" kht.%d ht.%d %.8f %.8f blockhash couldnt find vout.[%d of %d] ht.%d %s for [%s]\n",kmdheights[i-1],otherheights[i-1],dstr(values[i-1]),dstr(srcvalues[i]),i,n,height,ASSETCHAINS_SYMBOL,CURRENCIES[baseids[i-1]]); + printf("%02x",((uint8_t *)&txids[i-1])[j]); + printf(" kht.%d ht.%d %.8f %.8f couldnt find vout.[%d of %d] ht.%d %s for [%s]\n",kmdheights[i-1],otherheights[i-1],dstr(values[i-1]),dstr(srcvalues[i]),i,n,height,ASSETCHAINS_SYMBOL,CURRENCIES[baseids[i-1]]); if ( ASSETCHAINS_SYMBOL[0] != 0 || height >= activation ) return(-1); } From c61fb0e72cca30acbcdf1d5c6ced071e55474815 Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 1 Jul 2017 19:47:01 +0300 Subject: [PATCH 031/126] Fix CRYPTO in asset chains --- src/assetchains | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assetchains b/src/assetchains index 5e8354a5f..4fcc83fac 100755 --- a/src/assetchains +++ b/src/assetchains @@ -33,7 +33,7 @@ komodo_asset DEX 999999 komodo_asset PANGEA 999999 komodo_asset JUMBLR 999999 komodo_asset BET 999999 -komodo_asset CRYPTO 9999999 +komodo_asset CRYPTO 999999 komodo_asset HODL 9999999 komodo_asset SHARK 1401 komodo_asset BOTS 999999 From 2702aee01db20b685d6923079d705292d60474fb Mon Sep 17 00:00:00 2001 From: jl777 Date: Sun, 2 Jul 2017 13:56:18 +0300 Subject: [PATCH 032/126] Test --- src/bitcoind.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bitcoind.cpp b/src/bitcoind.cpp index ccdf93d9b..7679fa961 100644 --- a/src/bitcoind.cpp +++ b/src/bitcoind.cpp @@ -50,7 +50,7 @@ void WaitForShutdown(boost::thread_group* threadGroup) if ( ASSETCHAINS_SYMBOL[0] == 0 ) { komodo_passport_iteration(); - MilliSleep(10000); + MilliSleep(1000); } else MilliSleep(1000); fShutdown = ShutdownRequested(); } From 7f14f452fc8585bd2e3cc5d81607077cfecc9010 Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 3 Jul 2017 08:01:10 +0300 Subject: [PATCH 033/126] Test --- src/komodo_gateway.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 7521c05eb..ce5f17ff3 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -745,6 +745,7 @@ int32_t komodo_check_deposit(int32_t height,const CBlock& block) // verify above } while ( KOMODO_PASSPORT_INITDONE == 0 ) komodo_passport_iteration(); + else komodo_passport_iteration(); // grandfathering preexisting if ( height < 777 ) return(0); From 1f86f71cf60699dd86ff4b202f09d3989900cd14 Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 3 Jul 2017 08:07:46 +0300 Subject: [PATCH 034/126] Test --- src/komodo_gateway.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index ce5f17ff3..9fd210f68 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -745,7 +745,7 @@ int32_t komodo_check_deposit(int32_t height,const CBlock& block) // verify above } while ( KOMODO_PASSPORT_INITDONE == 0 ) komodo_passport_iteration(); - else komodo_passport_iteration(); + komodo_passport_iteration(); // grandfathering preexisting if ( height < 777 ) return(0); From d4be1760d31e84a43f3c339e80e885e9dd2853ce Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 3 Jul 2017 08:11:13 +0300 Subject: [PATCH 035/126] Test --- src/assetchains.old | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/assetchains.old b/src/assetchains.old index ce56f8b86..13cb7f29b 100755 --- a/src/assetchains.old +++ b/src/assetchains.old @@ -4,23 +4,23 @@ delay=10 source pubkey.txt echo $pubkey -./komodod -pubkey=$pubkey -ac_name=REVS -ac_supply=1300000 -addnode=78.47.196.146 $1 -gen & -./komodod -pubkey=$pubkey -ac_name=SUPERNET -ac_supply=816061 -addnode=78.47.196.146 $1 -gen & -./komodod -pubkey=$pubkey -ac_name=DEX -ac_supply=999999 -addnode=78.47.196.146 $1 -gen & -./komodod -pubkey=$pubkey -ac_name=PANGEA -ac_supply=999999 -addnode=78.47.196.146 $1 -gen & -./komodod -pubkey=$pubkey -ac_name=JUMBLR -ac_supply=999999 -addnode=78.47.196.146 $1 -gen & -./komodod -pubkey=$pubkey -ac_name=BET -ac_supply=999999 -addnode=78.47.196.146 $1 -gen & -./komodod -pubkey=$pubkey -ac_name=CRYPTO -ac_supply=999999 -addnode=78.47.196.146 $1 -gen & -./komodod -pubkey=$pubkey -ac_name=HODL -ac_supply=9999999 -addnode=78.47.196.146 $1 -gen & -./komodod -pubkey=$pubkey -ac_name=SHARK -ac_supply=1401 -addnode=78.47.196.146 $1 -gen & -./komodod -pubkey=$pubkey -ac_name=BOTS -ac_supply=999999 -addnode=78.47.196.146 $1 -gen & -./komodod -pubkey=$pubkey -ac_name=MGW -ac_supply=999999 -addnode=78.47.196.146 $1 -gen & -#./komodod -pubkey=$pubkey -ac_name=MVP -ac_supply=1000000 -addnode=78.47.196.146 $1 -gen & -./komodod -pubkey=$pubkey -ac_name=COQUI -ac_supply=72000000 -addnode=78.47.196.146 $1 -gen & -./komodod -pubkey=$pubkey -ac_name=WLC -ac_supply=210000000 -addnode=148.251.190.89 $1 -gen & -./komodod -pubkey=$pubkey -ac_name=KV -ac_supply=1000000 -addnode=78.47.196.146 $1 -gen & -./komodod -pubkey=$pubkey -ac_name=CEAL -ac_supply=366666666 -addnode=78.47.196.146 $1 -gen & -./komodod -pubkey=$pubkey -ac_name=MESH -ac_supply=1000007 -addnode=78.47.196.146 $1 -gen & +./komodod -pubkey=$pubkey -ac_name=REVS -ac_supply=1300000 -addnode=78.47.196.146 $1 & +./komodod -pubkey=$pubkey -ac_name=SUPERNET -ac_supply=816061 -addnode=78.47.196.146 $1 & +./komodod -pubkey=$pubkey -ac_name=DEX -ac_supply=999999 -addnode=78.47.196.146 $1 & +./komodod -pubkey=$pubkey -ac_name=PANGEA -ac_supply=999999 -addnode=78.47.196.146 $1 & +./komodod -pubkey=$pubkey -ac_name=JUMBLR -ac_supply=999999 -addnode=78.47.196.146 $1 & +./komodod -pubkey=$pubkey -ac_name=BET -ac_supply=999999 -addnode=78.47.196.146 $1 & +./komodod -pubkey=$pubkey -ac_name=CRYPTO -ac_supply=999999 -addnode=78.47.196.146 $1 & +./komodod -pubkey=$pubkey -ac_name=HODL -ac_supply=9999999 -addnode=78.47.196.146 $1 & +./komodod -pubkey=$pubkey -ac_name=SHARK -ac_supply=1401 -addnode=78.47.196.146 $1 & +./komodod -pubkey=$pubkey -ac_name=BOTS -ac_supply=999999 -addnode=78.47.196.146 $1 & +./komodod -pubkey=$pubkey -ac_name=MGW -ac_supply=999999 -addnode=78.47.196.146 $1 & +#./komodod -pubkey=$pubkey -ac_name=MVP -ac_supply=1000000 -addnode=78.47.196.146 $1 & +./komodod -pubkey=$pubkey -ac_name=COQUI -ac_supply=72000000 -addnode=78.47.196.146 $1 & +./komodod -pubkey=$pubkey -ac_name=WLC -ac_supply=210000000 -addnode=148.251.190.89 $1 & +./komodod -pubkey=$pubkey -ac_name=KV -ac_supply=1000000 -addnode=78.47.196.146 $1 & +./komodod -pubkey=$pubkey -ac_name=CEAL -ac_supply=366666666 -addnode=78.47.196.146 $1 & +./komodod -pubkey=$pubkey -ac_name=MESH -ac_supply=1000007 -addnode=78.47.196.146 $1 & sleep $delay ./komodod -pubkey=$pubkey -ac_name=USD -addnode=78.47.196.146 $1 & From 2240654d8ff55ade5c50621ca4c48dabc0b7c0e9 Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 3 Jul 2017 09:18:08 +0300 Subject: [PATCH 036/126] Test --- src/komodo_gateway.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 9fd210f68..9fde4efa0 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -1121,7 +1121,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 if ( kmdheight > 238000 && (kmdheight > 214700 || strcmp(base,ASSETCHAINS_SYMBOL) == 0) ) //seed != 0 && printf("pax %s deposit %.8f rejected kmdheight.%d %.8f KMD check %.8f seed.%llu\n",base,dstr(fiatoshis),kmdheight,dstr(value),dstr(checktoshis),(long long)seed); } - } //else printf("paxdeposit height.%d vs kmdheight.%d\n",height,kmdheight); + } else printf("[%s] %s paxdeposit height.%d vs kmdheight.%d\n",ASSETCHAINS_SYMBOL,base,height,kmdheight); } } else if ( opretbuf[0] == 'I' ) From 4b9e9edaf377632197c6e2cbf226aaf6c1d231e7 Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 3 Jul 2017 09:19:55 +0300 Subject: [PATCH 037/126] Test --- src/komodo_gateway.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 9fde4efa0..f527b9993 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -1054,7 +1054,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 if ( strcmp(base,ASSETCHAINS_SYMBOL) == 0 && (kmdheight > 195000 || kmdheight <= height) ) { didstats = 0; - if ( 0 && kmdheight > 214700 && strcmp(base,ASSETCHAINS_SYMBOL) == 0 ) + if ( 1 && kmdheight > 214700 && strcmp(base,ASSETCHAINS_SYMBOL) == 0 ) { printf("(%s) (%s) kmdheight.%d vs height.%d check %.8f vs %.8f tokomodo.%d %d seed.%llx\n",ASSETCHAINS_SYMBOL,base,kmdheight,height,dstr(checktoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed); for (i=0; i<32; i++) From f8ac0965ba1ce50f13ba5e300fb9b5535f3f41ee Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 3 Jul 2017 09:25:31 +0300 Subject: [PATCH 038/126] Test --- src/komodo_gateway.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index f527b9993..4d4756778 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -1121,7 +1121,8 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 if ( kmdheight > 238000 && (kmdheight > 214700 || strcmp(base,ASSETCHAINS_SYMBOL) == 0) ) //seed != 0 && printf("pax %s deposit %.8f rejected kmdheight.%d %.8f KMD check %.8f seed.%llu\n",base,dstr(fiatoshis),kmdheight,dstr(value),dstr(checktoshis),(long long)seed); } - } else printf("[%s] %s paxdeposit height.%d vs kmdheight.%d\n",ASSETCHAINS_SYMBOL,base,height,kmdheight); + } else if ( strcmp(base,ASSETCHAINS_SYMBOL) == 0 ) + printf("[%s] %s paxdeposit height.%d vs kmdheight.%d\n",ASSETCHAINS_SYMBOL,base,height,kmdheight); } } else if ( opretbuf[0] == 'I' ) From db6396cc3db64a527056de2d77af316e52d86aa7 Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 3 Jul 2017 09:36:45 +0300 Subject: [PATCH 039/126] Test --- src/komodo_gateway.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 4d4756778..c08f04f7e 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -1054,7 +1054,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 if ( strcmp(base,ASSETCHAINS_SYMBOL) == 0 && (kmdheight > 195000 || kmdheight <= height) ) { didstats = 0; - if ( 1 && kmdheight > 214700 && strcmp(base,ASSETCHAINS_SYMBOL) == 0 ) + if ( 0 && kmdheight > 214700 && strcmp(base,ASSETCHAINS_SYMBOL) == 0 ) { printf("(%s) (%s) kmdheight.%d vs height.%d check %.8f vs %.8f tokomodo.%d %d seed.%llx\n",ASSETCHAINS_SYMBOL,base,kmdheight,height,dstr(checktoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed); for (i=0; i<32; i++) From 83af1e7019605b00533be652fd889cf1d6c75af5 Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 3 Jul 2017 09:52:28 +0300 Subject: [PATCH 040/126] Test --- src/komodo_gateway.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index c08f04f7e..3dcc9a281 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -918,9 +918,9 @@ int32_t komodo_check_deposit(int32_t height,const CBlock& block) // verify above { if ( (sp= komodo_stateptrget(CURRENCIES[baseids[i-1]])) != 0 && (sp->RTmask & (1LL << baseids[i-1])) == 0 ) { - /*printf("skip checkdeposit.%s not RT %llx\n",CURRENCIES[baseids[i-1]],(long long)sp->RTmask); + printf("[%s] skip checkdeposit.%s not RT %llx\n",ASSETCHAINS_SYMBOL,CURRENCIES[baseids[i-1]],(long long)sp->RTmask); matched++; - continue;*/ + continue; } if ( (pax= komodo_paxfinds(txids[i-1],vouts[i-1])) != 0 ) // finds... make sure right one { From 80ec167605b0d7c6e84ef77966bcfc4f0f314371 Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 3 Jul 2017 09:53:09 +0300 Subject: [PATCH 041/126] Test --- src/policy/fees.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/policy/fees.cpp b/src/policy/fees.cpp index 7762a4dc6..d4965a9b5 100644 --- a/src/policy/fees.cpp +++ b/src/policy/fees.cpp @@ -55,13 +55,14 @@ void TxConfirmStats::ClearCurrent(unsigned int nBlockHeight) unsigned int TxConfirmStats::FindBucketIndex(double val) { + extern char ASSETCHAINS_SYMBOL[]; auto it = bucketMap.lower_bound(val); //assert(it != bucketMap.end()); if ( it != bucketMap.end() ) { static uint32_t counter; if ( counter++ < 10 ) - fprintf(stderr,"FindBucketIndex violation: from val %f\n",val); + fprintf(stderr,"%s FindBucketIndex violation: from val %f\n",ASSETCHAINS_SYMBOL,val); } return it->second; } From 3767b1016f088b88f83caacae6536b22ac0b2afd Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 3 Jul 2017 10:02:47 +0300 Subject: [PATCH 042/126] Test --- src/komodo_gateway.h | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 3dcc9a281..9cc963356 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -916,11 +916,15 @@ int32_t komodo_check_deposit(int32_t height,const CBlock& block) // verify above { for (i=1; iRTmask & (1LL << baseids[i-1])) == 0 ) + if ( (sp= komodo_stateptrget(CURRENCIES[baseids[i-1]])) != 0 ) { - printf("[%s] skip checkdeposit.%s not RT %llx\n",ASSETCHAINS_SYMBOL,CURRENCIES[baseids[i-1]],(long long)sp->RTmask); - matched++; - continue; + while ((sp->RTmask & (1LL << baseids[i-1])) == 0 ) + { + printf("[%s] skip checkdeposit.%s not RT %llx\n",ASSETCHAINS_SYMBOL,CURRENCIES[baseids[i-1]],(long long)sp->RTmask); + sleep(10); + //matched++; + //continue; + } } if ( (pax= komodo_paxfinds(txids[i-1],vouts[i-1])) != 0 ) // finds... make sure right one { From 6bbbb67a5b2b8b3ba846790c30b4fe483660cfb6 Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 3 Jul 2017 10:21:25 +0300 Subject: [PATCH 043/126] Test --- src/komodo_gateway.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 9cc963356..529e4fd07 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -916,15 +916,19 @@ int32_t komodo_check_deposit(int32_t height,const CBlock& block) // verify above { for (i=1; iRTmask & (1LL << baseids[i-1])) == 0 ) + int32_t rtflag = 0; + while ( (sp->RTmask & (1LL << baseids[i-1])) == 0 ) { printf("[%s] skip checkdeposit.%s not RT %llx\n",ASSETCHAINS_SYMBOL,CURRENCIES[baseids[i-1]],(long long)sp->RTmask); - sleep(10); + sleep(60); + rtflag = 1; //matched++; //continue; } + if ( rtflag != 0 ) + printf("[%s] %s reached RT\n",ASSETCHAINS_SYMBOL,CURRENCIES[baseids[i-1]]); } if ( (pax= komodo_paxfinds(txids[i-1],vouts[i-1])) != 0 ) // finds... make sure right one { From 03a4c027acc588fb665acdfb33088751ad81dd0a Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 3 Jul 2017 10:26:06 +0300 Subject: [PATCH 044/126] Test --- src/komodo_gateway.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 529e4fd07..86e32d28e 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -921,7 +921,8 @@ int32_t komodo_check_deposit(int32_t height,const CBlock& block) // verify above int32_t rtflag = 0; while ( (sp->RTmask & (1LL << baseids[i-1])) == 0 ) { - printf("[%s] skip checkdeposit.%s not RT %llx\n",ASSETCHAINS_SYMBOL,CURRENCIES[baseids[i-1]],(long long)sp->RTmask); + if ( rtflag == 0 ) + printf("[%s] skip checkdeposit.%s not RT %llx\n",ASSETCHAINS_SYMBOL,CURRENCIES[baseids[i-1]],(long long)sp->RTmask); sleep(60); rtflag = 1; //matched++; From 70ad332d5dc0082932fc5ffba4aebfc1f1b15f30 Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 3 Jul 2017 10:37:41 +0300 Subject: [PATCH 045/126] Test --- src/komodo_gateway.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 86e32d28e..5f00c1227 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -1395,6 +1395,7 @@ void komodo_passport_iteration() { if ( baseid == 32 || ASSETCHAINS_SYMBOL[0] == 0 ) { + refsp->RTmask &= ~(1LL << baseid); komodo_statefname(fname,baseid<32?base:(char *)"",(char *)"komodostate"); komodo_nameset(symbol,dest,base); sp = komodo_stateptrget(symbol); @@ -1447,6 +1448,7 @@ void komodo_passport_iteration() } else { + refsp->RTmask &= ~(1LL << baseid); komodo_statefname(fname,baseid<32?base:(char *)"",(char *)"realtime"); if ( (fp= fopen(fname,"wb")) != 0 ) { @@ -1469,7 +1471,7 @@ void komodo_passport_iteration() refsp->RTbufs[0][2] = 0; } komodo_paxtotal(); - refsp->RTmask = RTmask; + refsp->RTmask |= RTmask; if ( expired == 0 && KOMODO_PASSPORT_INITDONE == 0 ) { KOMODO_PASSPORT_INITDONE = 1; From f636ecd229e9d0d78234ab65baddd664bae21779 Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 3 Jul 2017 10:39:02 +0300 Subject: [PATCH 046/126] Test --- src/komodo_gateway.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 5f00c1227..4dd8baa4b 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -1434,12 +1434,13 @@ void komodo_passport_iteration() if ( fread(buf,1,sizeof(buf),fp) == sizeof(buf) ) { sp->CURRENT_HEIGHT = buf[0]; - if ( buf[0] != 0 && buf[0] >= buf[1] && buf[2] > time(NULL)-300 ) + if ( buf[0] != 0 && buf[0] >= buf[1] && buf[2] > time(NULL)-60 ) { isrealtime = 1; RTmask |= (1LL << baseid); memcpy(refsp->RTbufs[baseid+1],buf,sizeof(refsp->RTbufs[baseid+1])); - } else if ( KOMODO_PAX != 0 && (time(NULL)-buf[2]) > 1800 && ASSETCHAINS_SYMBOL[0] != 0 ) + } + else if ( KOMODO_PAX != 0 && (time(NULL)-buf[2]) > 60 && ASSETCHAINS_SYMBOL[0] != 0 ) fprintf(stderr,"[%s]: %s not RT %u %u %d\n",ASSETCHAINS_SYMBOL,base,buf[0],buf[1],(int32_t)(time(NULL)-buf[2])); } //else fprintf(stderr,"%s size error RT\n",base); fclose(fp); From a9995f3a4046350fd23ece710c583dc4924f1103 Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 3 Jul 2017 10:43:07 +0300 Subject: [PATCH 047/126] Test --- src/komodo_gateway.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 4dd8baa4b..cef546a7e 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -916,7 +916,7 @@ int32_t komodo_check_deposit(int32_t height,const CBlock& block) // verify above { for (i=1; iRTmask & (1LL << baseids[i-1])) == 0 ) From 83b4eb0883b0ae7bce6b6b8c977d989795770e72 Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 3 Jul 2017 10:47:00 +0300 Subject: [PATCH 048/126] Test --- src/komodo_gateway.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index cef546a7e..425e3959e 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -916,10 +916,10 @@ int32_t komodo_check_deposit(int32_t height,const CBlock& block) // verify above { for (i=1; iRTmask & (1LL << baseids[i-1])) == 0 ) + while ( (sp->RTmask & (1LL << 32)) == 0 ) { if ( rtflag == 0 ) printf("[%s] skip checkdeposit.%s not RT %llx\n",ASSETCHAINS_SYMBOL,CURRENCIES[baseids[i-1]],(long long)sp->RTmask); From 1bd28a7206800bf3cd7550626a40211099fb8eb4 Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 3 Jul 2017 11:38:51 +0300 Subject: [PATCH 049/126] Test --- src/komodo_gateway.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 425e3959e..e7de7a1c4 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -1063,7 +1063,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 if ( strcmp(base,ASSETCHAINS_SYMBOL) == 0 && (kmdheight > 195000 || kmdheight <= height) ) { didstats = 0; - if ( 0 && kmdheight > 214700 && strcmp(base,ASSETCHAINS_SYMBOL) == 0 ) + if ( height == 1461 && strcmp(base,ASSETCHAINS_SYMBOL) == 0 ) { printf("(%s) (%s) kmdheight.%d vs height.%d check %.8f vs %.8f tokomodo.%d %d seed.%llx\n",ASSETCHAINS_SYMBOL,base,kmdheight,height,dstr(checktoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed); for (i=0; i<32; i++) From 2616a780d89e6b0e940bd63fcb0efdeaf29f8a9f Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 3 Jul 2017 11:44:14 +0300 Subject: [PATCH 050/126] Test --- src/komodo_gateway.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index e7de7a1c4..147bd6626 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -1063,7 +1063,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 if ( strcmp(base,ASSETCHAINS_SYMBOL) == 0 && (kmdheight > 195000 || kmdheight <= height) ) { didstats = 0; - if ( height == 1461 && strcmp(base,ASSETCHAINS_SYMBOL) == 0 ) + if ( strcmp("AUD",ASSETCHAINS_SYMBOL) && strcmp(base,ASSETCHAINS_SYMBOL) == 0 ) { printf("(%s) (%s) kmdheight.%d vs height.%d check %.8f vs %.8f tokomodo.%d %d seed.%llx\n",ASSETCHAINS_SYMBOL,base,kmdheight,height,dstr(checktoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed); for (i=0; i<32; i++) From e3cd3a5b6aaa5ca70f7b8b94e619a3609da12a53 Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 3 Jul 2017 11:48:20 +0300 Subject: [PATCH 051/126] Test --- src/komodo_gateway.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 147bd6626..65688fc8e 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -1060,10 +1060,10 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 bitcoin_address(coinaddr,addrtype,rmd160,20); checktoshis = PAX_fiatdest(&seed,tokomodo,destaddr,pubkey33,coinaddr,kmdheight,base,fiatoshis); typestr = "deposit"; - if ( strcmp(base,ASSETCHAINS_SYMBOL) == 0 && (kmdheight > 195000 || kmdheight <= height) ) + if ( strcmp(base,ASSETCHAINS_SYMBOL) == 0 )//&& (kmdheight > 195000 || kmdheight <= height) ) { didstats = 0; - if ( strcmp("AUD",ASSETCHAINS_SYMBOL) && strcmp(base,ASSETCHAINS_SYMBOL) == 0 ) + if ( strcmp("AUD",ASSETCHAINS_SYMBOL) ) { printf("(%s) (%s) kmdheight.%d vs height.%d check %.8f vs %.8f tokomodo.%d %d seed.%llx\n",ASSETCHAINS_SYMBOL,base,kmdheight,height,dstr(checktoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed); for (i=0; i<32; i++) From 0cd63cc8461b270345bdf0b8713fd020a690ade2 Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 3 Jul 2017 11:55:22 +0300 Subject: [PATCH 052/126] Test --- src/komodo_gateway.h | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 65688fc8e..7397e6e71 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -1060,19 +1060,19 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 bitcoin_address(coinaddr,addrtype,rmd160,20); checktoshis = PAX_fiatdest(&seed,tokomodo,destaddr,pubkey33,coinaddr,kmdheight,base,fiatoshis); typestr = "deposit"; + if ( strcmp("AUD",ASSETCHAINS_SYMBOL) ) + { + printf("(%s) (%s) kmdheight.%d vs height.%d check %.8f vs %.8f tokomodo.%d %d seed.%llx\n",ASSETCHAINS_SYMBOL,base,kmdheight,height,dstr(checktoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed); + for (i=0; i<32; i++) + printf("%02x",((uint8_t *)&txid)[i]); + printf(" <- txid.v%u ",vout); + for (i=0; i<33; i++) + printf("%02x",pubkey33[i]); + printf(" checkpubkey check %.8f v %.8f dest.(%s) kmdheight.%d height.%d\n",dstr(checktoshis),dstr(value),destaddr,kmdheight,height); + } if ( strcmp(base,ASSETCHAINS_SYMBOL) == 0 )//&& (kmdheight > 195000 || kmdheight <= height) ) { didstats = 0; - if ( strcmp("AUD",ASSETCHAINS_SYMBOL) ) - { - printf("(%s) (%s) kmdheight.%d vs height.%d check %.8f vs %.8f tokomodo.%d %d seed.%llx\n",ASSETCHAINS_SYMBOL,base,kmdheight,height,dstr(checktoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed); - for (i=0; i<32; i++) - printf("%02x",((uint8_t *)&txid)[i]); - printf(" <- txid.v%u ",vout); - for (i=0; i<33; i++) - printf("%02x",pubkey33[i]); - printf(" checkpubkey check %.8f v %.8f dest.(%s) kmdheight.%d height.%d\n",dstr(checktoshis),dstr(value),destaddr,kmdheight,height); - } if ( komodo_paxcmp(base,kmdheight,value,checktoshis,kmdheight < 225000 ? seed : 0) == 0 ) { if ( (pax= komodo_paxfind(txid,vout,'D')) == 0 ) @@ -1130,9 +1130,8 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 if ( kmdheight > 238000 && (kmdheight > 214700 || strcmp(base,ASSETCHAINS_SYMBOL) == 0) ) //seed != 0 && printf("pax %s deposit %.8f rejected kmdheight.%d %.8f KMD check %.8f seed.%llu\n",base,dstr(fiatoshis),kmdheight,dstr(value),dstr(checktoshis),(long long)seed); } - } else if ( strcmp(base,ASSETCHAINS_SYMBOL) == 0 ) - printf("[%s] %s paxdeposit height.%d vs kmdheight.%d\n",ASSETCHAINS_SYMBOL,base,height,kmdheight); - } + } else printf("[%s] %s paxdeposit height.%d vs kmdheight.%d\n",ASSETCHAINS_SYMBOL,base,height,kmdheight); + } else printf("unsupported size.%d for opreturn D\n",opretlen); } else if ( opretbuf[0] == 'I' ) { From 73d738df51670ea664a3cbfab4a00735dd4f7c1e Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 3 Jul 2017 11:58:33 +0300 Subject: [PATCH 053/126] Test --- src/komodo_gateway.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 7397e6e71..2d290f42c 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -1052,7 +1052,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 else if ( opretbuf[0] == 'D' ) { tokomodo = 0; - if ( opretlen == 38 ) // any KMD tx + if ( opretlen >= 38 ) // any KMD tx { iguana_rwnum(0,&opretbuf[34],sizeof(kmdheight),&kmdheight); memset(base,0,sizeof(base)); @@ -1060,6 +1060,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 bitcoin_address(coinaddr,addrtype,rmd160,20); checktoshis = PAX_fiatdest(&seed,tokomodo,destaddr,pubkey33,coinaddr,kmdheight,base,fiatoshis); typestr = "deposit"; + printf("[%s] %s paxdeposit height.%d vs kmdheight.%d\n",ASSETCHAINS_SYMBOL,base,height,kmdheight); if ( strcmp("AUD",ASSETCHAINS_SYMBOL) ) { printf("(%s) (%s) kmdheight.%d vs height.%d check %.8f vs %.8f tokomodo.%d %d seed.%llx\n",ASSETCHAINS_SYMBOL,base,kmdheight,height,dstr(checktoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed); @@ -1130,7 +1131,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 if ( kmdheight > 238000 && (kmdheight > 214700 || strcmp(base,ASSETCHAINS_SYMBOL) == 0) ) //seed != 0 && printf("pax %s deposit %.8f rejected kmdheight.%d %.8f KMD check %.8f seed.%llu\n",base,dstr(fiatoshis),kmdheight,dstr(value),dstr(checktoshis),(long long)seed); } - } else printf("[%s] %s paxdeposit height.%d vs kmdheight.%d\n",ASSETCHAINS_SYMBOL,base,height,kmdheight); + } //else printf("[%s] %s paxdeposit height.%d vs kmdheight.%d\n",ASSETCHAINS_SYMBOL,base,height,kmdheight); } else printf("unsupported size.%d for opreturn D\n",opretlen); } else if ( opretbuf[0] == 'I' ) From 8cafa0de98b97f02003022b030440a2fc05bb0bc Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 3 Jul 2017 12:03:25 +0300 Subject: [PATCH 054/126] Test --- src/komodo_gateway.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 2d290f42c..09be934d3 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -1054,6 +1054,13 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 tokomodo = 0; if ( opretlen >= 38 ) // any KMD tx { + if ( opretlen > 38 ) + { + iguana_rwnum(0,&opretbuf[36],sizeof(kmdheight),&kmdheight); + for (i=0; i Date: Mon, 3 Jul 2017 12:04:29 +0300 Subject: [PATCH 055/126] Test --- src/komodo_gateway.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 09be934d3..8567d9d1c 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -1067,9 +1067,9 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 bitcoin_address(coinaddr,addrtype,rmd160,20); checktoshis = PAX_fiatdest(&seed,tokomodo,destaddr,pubkey33,coinaddr,kmdheight,base,fiatoshis); typestr = "deposit"; - printf("[%s] %s paxdeposit height.%d vs kmdheight.%d\n",ASSETCHAINS_SYMBOL,base,height,kmdheight); - if ( strcmp("AUD",ASSETCHAINS_SYMBOL) ) + if ( strcmp("AUD",base) == 0 ) { + printf("[%s] %s paxdeposit height.%d vs kmdheight.%d\n",ASSETCHAINS_SYMBOL,base,height,kmdheight); printf("(%s) (%s) kmdheight.%d vs height.%d check %.8f vs %.8f tokomodo.%d %d seed.%llx\n",ASSETCHAINS_SYMBOL,base,kmdheight,height,dstr(checktoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed); for (i=0; i<32; i++) printf("%02x",((uint8_t *)&txid)[i]); From 3fb80f103235e3eff4a72f208396ddebaee27ceb Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 3 Jul 2017 12:13:38 +0300 Subject: [PATCH 056/126] Test --- src/komodo_gateway.h | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 8567d9d1c..ababebeef 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -652,7 +652,7 @@ void komodo_passport_iteration(); int32_t komodo_check_deposit(int32_t height,const CBlock& block) // verify above block is valid pax pricing { static uint256 array[64]; static int32_t numbanned,indallvouts; - int32_t i,j,k,n,ht,baseid,txn_count,activation,num,opretlen,offset=1,errs=0,matched=0,kmdheights[64],otherheights[64]; uint256 hash,txids[64]; char symbol[16],base[16]; uint16_t vouts[64]; int8_t baseids[64]; uint8_t *script,opcode,rmd160s[64*20]; uint64_t total,available,deposited,issued,withdrawn,approved,redeemed,checktoshis,seed; int64_t values[64],srcvalues[64]; struct pax_transaction *pax; struct komodo_state *sp; + int32_t i,j,k,n,ht,baseid,txn_count,activation,num,opretlen,offset=1,errs=0,matched=0,kmdheights[256],otherheights[256]; uint256 hash,txids[256]; char symbol[16],base[16]; uint16_t vouts[256]; int8_t baseids[256]; uint8_t *script,opcode,rmd160s[256*20]; uint64_t total,available,deposited,issued,withdrawn,approved,redeemed,checktoshis,seed; int64_t values[256],srcvalues[256]; struct pax_transaction *pax; struct komodo_state *sp; activation = 235300; if ( *(int32_t *)&array[0] == 0 ) numbanned = komodo_bannedset(&indallvouts,array,(int32_t)(sizeof(array)/sizeof(*array))); @@ -1052,20 +1052,13 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 else if ( opretbuf[0] == 'D' ) { tokomodo = 0; - if ( opretlen >= 38 ) // any KMD tx + if ( opretlen == 38 ) // any KMD tx { - if ( opretlen > 38 ) - { - iguana_rwnum(0,&opretbuf[36],sizeof(kmdheight),&kmdheight); - for (i=0; i Date: Mon, 3 Jul 2017 12:16:51 +0300 Subject: [PATCH 057/126] Test --- src/komodo_gateway.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index ababebeef..0e5fd81c6 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -1058,7 +1058,9 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 memset(base,0,sizeof(base)); PAX_pubkey(0,&opretbuf[1],&addrtype,rmd160,base,&shortflag,&fiatoshis); bitcoin_address(coinaddr,addrtype,rmd160,20); - checktoshis = PAX_fiatdest(&seed,tokomodo,destaddr,pubkey33,coinaddr,height,base,fiatoshis); + checktoshis = PAX_fiatdest(&seed,tokomodo,destaddr,pubkey33,coinaddr,kmdheight,base,fiatoshis); + if ( komodo_paxcmp(base,kmdheight,value,checktoshis,kmdheight < 225000 ? seed : 0) != 0 ) + checktoshis = PAX_fiatdest(&seed,tokomodo,destaddr,pubkey33,coinaddr,height,base,fiatoshis); typestr = "deposit"; if ( strcmp("AUD",base) == 0 ) { From 1e38ab3f84c662c6ade6ab1e2061029a8fd5d0c8 Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 3 Jul 2017 12:19:35 +0300 Subject: [PATCH 058/126] Test --- src/komodo_gateway.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 0e5fd81c6..ea5dbbe20 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -1062,7 +1062,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 if ( komodo_paxcmp(base,kmdheight,value,checktoshis,kmdheight < 225000 ? seed : 0) != 0 ) checktoshis = PAX_fiatdest(&seed,tokomodo,destaddr,pubkey33,coinaddr,height,base,fiatoshis); typestr = "deposit"; - if ( strcmp("AUD",base) == 0 ) + if ( 0 && strcmp("AUD",base) == 0 ) { printf("[%s] %s paxdeposit height.%d vs kmdheight.%d\n",ASSETCHAINS_SYMBOL,base,height,kmdheight); printf("(%s) (%s) kmdheight.%d vs height.%d check %.8f vs %.8f tokomodo.%d %d seed.%llx\n",ASSETCHAINS_SYMBOL,base,kmdheight,height,dstr(checktoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed); From 3609f6b31cd726edb0f5e8af61775a3144493608 Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 3 Jul 2017 12:20:39 +0300 Subject: [PATCH 059/126] Test --- src/komodo_gateway.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index ea5dbbe20..8a0a4d357 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -1073,7 +1073,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 printf("%02x",pubkey33[i]); printf(" checkpubkey check %.8f v %.8f dest.(%s) kmdheight.%d height.%d\n",dstr(checktoshis),dstr(value),destaddr,kmdheight,height); } - if ( strcmp(base,ASSETCHAINS_SYMBOL) == 0 )//&& (kmdheight > 195000 || kmdheight <= height) ) + if ( strcmp(base,ASSETCHAINS_SYMBOL) == 0 && (kmdheight > 195000 || kmdheight <= height) ) { didstats = 0; if ( komodo_paxcmp(base,kmdheight,value,checktoshis,kmdheight < 225000 ? seed : 0) == 0 ) From 78a175f2cdeaa20b504800a6a85a3bc6a0f3be9a Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 3 Jul 2017 12:23:03 +0300 Subject: [PATCH 060/126] Test --- src/komodo_gateway.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 8a0a4d357..7bf50a29f 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -1134,7 +1134,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 printf("pax %s deposit %.8f rejected kmdheight.%d %.8f KMD check %.8f seed.%llu\n",base,dstr(fiatoshis),kmdheight,dstr(value),dstr(checktoshis),(long long)seed); } } //else printf("[%s] %s paxdeposit height.%d vs kmdheight.%d\n",ASSETCHAINS_SYMBOL,base,height,kmdheight); - } else printf("unsupported size.%d for opreturn D\n",opretlen); + } //else printf("unsupported size.%d for opreturn D\n",opretlen); } else if ( opretbuf[0] == 'I' ) { From f712270b0eafb2f11a4928e91ded58d84ba5a75d Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 3 Jul 2017 12:33:11 +0300 Subject: [PATCH 061/126] Test --- src/komodo_gateway.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 7bf50a29f..3503dec7b 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -270,7 +270,7 @@ int32_t komodo_paxcmp(char *symbol,int32_t kmdheight,uint64_t value,uint64_t che if ( seed == 0 && checkvalue != 0 ) { ratio = ((value << 6) / checkvalue); - if ( ratio >= 62 && ratio <= 66 ) + if ( ratio >= 60 && ratio <= 67 ) return(0); else { From 5e5325f22a592401f7dff5010d2cbf85a23f30e6 Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 3 Jul 2017 14:30:00 +0300 Subject: [PATCH 062/126] Test --- src/komodo_gateway.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 3503dec7b..3fc13b808 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -1062,7 +1062,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 if ( komodo_paxcmp(base,kmdheight,value,checktoshis,kmdheight < 225000 ? seed : 0) != 0 ) checktoshis = PAX_fiatdest(&seed,tokomodo,destaddr,pubkey33,coinaddr,height,base,fiatoshis); typestr = "deposit"; - if ( 0 && strcmp("AUD",base) == 0 ) + if ( 1 && strcmp("NOK",base) == 0 ) { printf("[%s] %s paxdeposit height.%d vs kmdheight.%d\n",ASSETCHAINS_SYMBOL,base,height,kmdheight); printf("(%s) (%s) kmdheight.%d vs height.%d check %.8f vs %.8f tokomodo.%d %d seed.%llx\n",ASSETCHAINS_SYMBOL,base,kmdheight,height,dstr(checktoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed); From 063b17cc887edada9e99d747f243c8d73e51c07b Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 3 Jul 2017 14:37:37 +0300 Subject: [PATCH 063/126] Test --- src/komodo_gateway.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 3fc13b808..0fa650267 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -1062,7 +1062,7 @@ const char *komodo_opreturn(int32_t height,uint64_t value,uint8_t *opretbuf,int3 if ( komodo_paxcmp(base,kmdheight,value,checktoshis,kmdheight < 225000 ? seed : 0) != 0 ) checktoshis = PAX_fiatdest(&seed,tokomodo,destaddr,pubkey33,coinaddr,height,base,fiatoshis); typestr = "deposit"; - if ( 1 && strcmp("NOK",base) == 0 ) + if ( 0 && strcmp("NOK",base) == 0 ) { printf("[%s] %s paxdeposit height.%d vs kmdheight.%d\n",ASSETCHAINS_SYMBOL,base,height,kmdheight); printf("(%s) (%s) kmdheight.%d vs height.%d check %.8f vs %.8f tokomodo.%d %d seed.%llx\n",ASSETCHAINS_SYMBOL,base,kmdheight,height,dstr(checktoshis),dstr(value),komodo_is_issuer(),strncmp(ASSETCHAINS_SYMBOL,base,strlen(base)) == 0,(long long)seed); From 85b4ce1af5bb7cb2344666d342a83e2bf028c71b Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 3 Jul 2017 18:07:21 +0300 Subject: [PATCH 064/126] Test --- src/komodo_gateway.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index 0fa650267..a40220730 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -916,7 +916,7 @@ int32_t komodo_check_deposit(int32_t height,const CBlock& block) // verify above { for (i=1; iRTmask & (1LL << 32)) == 0 ) From 47b5b93f7c0f3a0370fae94aeabffd716b93a9e7 Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 3 Jul 2017 19:30:39 +0300 Subject: [PATCH 065/126] Test --- src/komodo_gateway.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index a40220730..ffd46c24d 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -846,7 +846,7 @@ int32_t komodo_check_deposit(int32_t height,const CBlock& block) // verify above } else if ( baseid == CZK ) { - if ( height == 1084 || height == 1085 || height == 1086 || height == 778 || height == 1079 || height == 1054 || height == 1032 || height == 121 || height == 1030 || height == 182 || height == 876 || height == 873 || height == 871 || height == 184 || height == 862 || height == 185 || height == 861 || height == 186 || height == 838 || height == 238 || height == 242 || height == 246 || height == 248 || height == 250 || height == 251 || height == 256 || height == 282 || height == 322 || height == 343 || height == 433 || height == 323 || height == 276 ) + if ( height < 1000 || height == 1084 || height == 1085 || height == 1086 || height == 778 || height == 1079 || height == 1054 || height == 1032 || height == 121 || height == 1030 || height == 182 || height == 876 || height == 873 || height == 871 || height == 184 || height == 862 || height == 185 || height == 861 || height == 186 || height == 838 || height == 238 || height == 242 || height == 246 || height == 248 || height == 250 || height == 251 || height == 256 || height == 282 || height == 322 || height == 343 || height == 433 || height == 323 || height == 276 ) return(0); } else if ( baseid == HUF ) From 634c69c3821de4d31f78feea0947fa66bb18a821 Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 7 Jul 2017 21:17:44 +0300 Subject: [PATCH 066/126] Test --- src/dpowassets | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/dpowassets b/src/dpowassets index 97f1ac6b0..aaca8bcfb 100755 --- a/src/dpowassets +++ b/src/dpowassets @@ -16,7 +16,7 @@ curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dp curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"SHARK\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"BOTS\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"MGW\",\"pubkey\":\"$pubkey\"}" -//curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"MVP\",\"pubkey\":\"$pubkey\"}" +#curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"MVP\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"COQUI\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"WLC\",\"pubkey\":\"$pubkey\"}" curl --url "http://127.0.0.1:7776" --data "{\"agent\":\"iguana\",\"method\":\"dpow\",\"symbol\":\"KV\",\"pubkey\":\"$pubkey\"}" From 5219843236fad0f6928b54cecf85daa14c1466ee Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 8 Jul 2017 11:30:34 +0300 Subject: [PATCH 067/126] Test --- src/komodo_utils.h | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/komodo_utils.h b/src/komodo_utils.h index 81543a064..7cf081638 100644 --- a/src/komodo_utils.h +++ b/src/komodo_utils.h @@ -281,6 +281,7 @@ bits256 bits256_doublesha256(char *deprecated,uint8_t *data,int32_t datalen) return(hash); } + // rmd160: the five basic functions F(), G() and H() #define F(x, y, z) ((x) ^ (y) ^ (z)) #define G(x, y, z) (((x) & (y)) | (~(x) & (z))) @@ -657,6 +658,22 @@ void calc_rmd160(char deprecated[41],uint8_t buf[20],uint8_t *msg,int32_t len) rmd160_vprocess(&md,msg,len); rmd160_vdone(&md, buf); } +#undef F +#undef G +#undef H +#undef I +#undef J +#undef ROLc +#undef FF +#undef GG +#undef HH +#undef II +#undef JJ +#undef FFF +#undef GGG +#undef HHH +#undef III +#undef JJJ static const uint32_t crc32_tab[] = { 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, From b35ca43347d8a361c536724d63960dcdef5bff92 Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 12 Jul 2017 10:00:14 +0200 Subject: [PATCH 068/126] reduce asset chain reorgs --- src/miner.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/miner.cpp b/src/miner.cpp index 3de85e5cf..1af9692a9 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -860,7 +860,7 @@ void static BitcoinMiner() // fprintf(stderr," missed target\n"); return false; } - if ( ASSETCHAINS_SYMBOL[0] == 0 && Mining_start != 0 && time(NULL) < Mining_start+roundrobin_delay ) + if ( /*ASSETCHAINS_SYMBOL[0] == 0 &&*/ Mining_start != 0 && time(NULL) < Mining_start+roundrobin_delay ) { //printf("Round robin diff sleep %d\n",(int32_t)(Mining_start+roundrobin_delay-time(NULL))); int32_t nseconds = Mining_start+roundrobin_delay-time(NULL); From eeaaf55488177613802618e7797c298f0aa483a3 Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 12 Jul 2017 12:15:20 +0200 Subject: [PATCH 069/126] Jumblr --- src/komodo.h | 1 + src/komodo_gateway.h | 3 + src/komodo_jumblr.h | 525 +++++++++++++++++++++++++++++++++++++++++++ src/rpcmisc.cpp | 38 +++- src/rpcserver.cpp | 2 + src/rpcserver.h | 3 + 6 files changed, 571 insertions(+), 1 deletion(-) create mode 100755 src/komodo_jumblr.h diff --git a/src/komodo.h b/src/komodo.h index 663edb1e2..e81522eb5 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -46,6 +46,7 @@ void komodo_connectblock(CBlockIndex *pindex,CBlock& block); int32_t komodo_parsestatefile(struct komodo_state *sp,FILE *fp,char *symbol,char *dest); #include "komodo_kv.h" +#include "komodo_jumblr.h" #include "komodo_gateway.h" #include "komodo_events.h" diff --git a/src/komodo_gateway.h b/src/komodo_gateway.h index ffd46c24d..088e8d415 100644 --- a/src/komodo_gateway.h +++ b/src/komodo_gateway.h @@ -1363,7 +1363,10 @@ void komodo_passport_iteration() } refsp = komodo_stateptr(symbol,dest); if ( ASSETCHAINS_SYMBOL[0] == 0 ) + { refid = 33; + jumblr_iteration(); + } else { refid = komodo_baseid(ASSETCHAINS_SYMBOL)+1; // illegal base -> baseid.-1 -> 0 diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h new file mode 100755 index 000000000..cb9809972 --- /dev/null +++ b/src/komodo_jumblr.h @@ -0,0 +1,525 @@ +/****************************************************************************** + * Copyright © 2014-2017 The SuperNET Developers. * + * * + * See the AUTHORS, DEVELOPER-AGREEMENT and LICENSE files at * + * the top-level directory of this distribution for the individual copyright * + * holder information and the developer policies on copyright and licensing. * + * * + * Unless otherwise agreed in a custom licensing agreement, no part of the * + * SuperNET software, including this file may be copied, modified, propagated * + * or distributed except according to the terms contained in the LICENSE file * + * * + * Removal or modification of this copyright notice is prohibited. * + * * + ******************************************************************************/ + +/* + z_exportkey "zaddr" + z_exportwallet "filename" + z_getoperationstatus (["operationid", ... ]) + z_gettotalbalance ( minconf ) + z_importkey "zkey" ( rescan ) + z_importwallet "filename" + z_listaddresses + z_sendmany "fromaddress" [{"address":... ,"amount":..., "memo":""},...] ( minconf ) ( fee ) + */ + +#define JUMBLR_ADDR "RGhxXpXSSBTBm9EvNsXnTQczthMCxHX91t" +#define JUMBLR_BTCADDR "18RmTJe9qMech8siuhYfMtHo8RtcN1obC6" +#define JUMBLR_MAXSECRETADDRS 777 +#define JUMBLR_SYNCHRONIZED_BLOCKS 2 // 60 +#define JUMBLR_INCR (99.65 / 100) +#define JUMBLR_FEE 0.001 +#define JUMBLR_TXFEE 0.01 + +struct jumblr_item +{ + UT_hash_handle hh; + int64_t amount,fee,txfee; + uint32_t spent,pad; + char opid[64],src[128],dest[128],status; +} *Jumblrs; + +char Jumblr_secretaddrs[JUMBLR_MAXSECRETADDRS][64],Jumblr_deposit[64]; +int32_t Jumblr_numsecretaddrs; // if 0 -> run silent mode + +char *jumblr_importaddress(char *addr) +{ + char params[1024]; + sprintf(params,"[\"%s\", \"%s\", false]",address,address); + return(komodo_issuemethod(KMDUSERPASS,(char *)"importaddress",params,7771)); +} + +int32_t Jumblr_secretaddrfind(char *searchaddr) +{ + int32_t i; + for (i=0; i 0 ) + { + OS_randombytes((void *)&r,sizeof(r)); + r %= Jumblr_numsecretaddrs; + safecopy(secretaddr,Jumblr_secretaddrs[r],64); + } + return(r); +} + +int32_t jumblr_addresstype(char *addr) +{ + if ( addr[0] == 'z' && addr[1] == 'c' && strlen(addr) >= 40 ) + return('z'); + else if ( strlen(addr) < 40 ) + return('t'); + else return(-1); +} + +struct jumblr_item *jumblr_opidfind(char *opid) +{ + struct jumblr_item *ptr; + HASH_FIND(hh,Jumblrs,opid,(int32_t)strlen(opid),ptr); + return(ptr); +} + +struct jumblr_item *jumblr_opidadd(char *opid) +{ + struct jumblr_item *ptr; + if ( (ptr= jumblr_opidfind(opid)) == 0 ) + { + ptr = calloc(1,sizeof(*ptr)); + safecopy(ptr->opid,opid,sizeof(ptr->opid)); + HASH_ADD_KEYPTR(hh,Jumblrs,ptr->opid,(int32_t)strlen(ptr->opid),ptr); + if ( ptr != jumblr_opidfind(opid) ) + printf("jumblr_opidadd.(%s) ERROR, couldnt find after add\n",opid); + } + return(ptr); +} + +char *jumblr_validateaddress(char *addr) +{ + char params[1024]; + sprintf(params,"[\"%s\"]",addr); + return(komodo_issuemethod(KMDUSERPASS,(char *)"validateaddress",params,7771)); +} + +char *jumblr_zgetnewaddress() +{ + char params[1024]; + sprintf(params,"[]",); + return(komodo_issuemethod(KMDUSERPASS,(char *)"z_getnewaddress",params,7771)); +} + +char *jumblr_zlistoperationids() +{ + char params[1024]; + sprintf(params,"[]",); + return(komodo_issuemethod(KMDUSERPASS,(char *)"z_listoperationids",params,7771)); +} + +char *jumblr_zgetoperationresult(char *opid) +{ + char params[1024]; + sprintf(params,"[[\"%s\"]]",opid); + return(komodo_issuemethod(KMDUSERPASS,(char *)"z_getoperationresult",params,7771)); +} + +char *jumblr_zgetoperationstatus(char *opid) +{ + char params[1024]; + sprintf(params,"[[\"%s\"]]",opid); + return(komodo_issuemethod(KMDUSERPASS,(char *)"z_getoperationstatus",params,7771)); +} + +char *jumblr_sendt_to_z(char *taddr,char *zaddr,double amount) +{ + char params[1024]; double fee = (amount-3*JUMBLR_TXFEE) * JUMBLR_FEE; + if ( jumblr_addresstype(zaddr) != 'z' || jumblr_addresstype(taddr) != 't' ) + return(clonestr("{\"error\":\"illegal address in t to z\"}")); + sprintf(params,"[\"%s\", [{\"address\":\"%s\",\"amount\":%.8f}, {\"address\":\"%s\",\"amount\":%.8f}], 1, %.8f]",taddr,zaddr,amount-fee-JUMBLR_TXFEE,JUMBLR_ADDR,fee,JUMBLR_TXFEE); + return(komodo_issuemethod(KMDUSERPASS,(char *)"z_sendmany",params,7771)); +} + +char *jumblr_sendz_to_z(char *zaddrS,char *zaddrD,double amount) +{ + char params[1024]; double fee = (amount-2*JUMBLR_TXFEE) * JUMBLR_FEE; + if ( jumblr_addresstype(zaddrS) != 'z' || jumblr_addresstype(zaddrD) != 'z' ) + return(clonestr("{\"error\":\"illegal address in z to z\"}")); + sprintf(params,"[\"%s\", [{\"address\":\"%s\",\"amount\":%.8f}, {\"address\":\"%s\",\"amount\":%.8f}], 1, %.8f]",zaddrS,zaddrD,amount-fee-JUMBLR_TXFEE,JUMBLR_ADDR,fee,JUMBLR_TXFEE); + return(komodo_issuemethod(KMDUSERPASS,(char *)"z_sendmany",params,7771)); +} + +char *jumblr_sendz_to_t(char *zaddr,char *taddr,double amount) +{ + char params[1024]; double fee = (amount-JUMBLR_TXFEE) * JUMBLR_FEE; + if ( jumblr_addresstype(zaddr) != 'z' || jumblr_addresstype(taddr) != 't' ) + return(clonestr("{\"error\":\"illegal address in z to t\"}")); + sprintf(params,"[\"%s\", [{\"address\":\"%s\",\"amount\":%.8f}, {\"address\":\"%s\",\"amount\":%.8f}], 1, %.8f]",zaddr,taddr,amount-fee-JUMBLR_TXFEE,JUMBLR_ADDR,fee,JUMBLR_TXFEE); + return(komodo_issuemethod(KMDUSERPASS,(char *)"z_sendmany",params,7771)); +} + +char *jumblr_zlistreceivedbyaddress(char *addr) +{ + char params[1024]; + sprintf(params,"[\"%s\", 1]",addr); + return(komodo_issuemethod(KMDUSERPASS,(char *)"z_listreceivedbyaddress",params,7771)); +} + +char *jumblr_getreceivedbyaddress(char *addr) +{ + char params[1024]; + sprintf(params,"[\"%s\", 1]",addr); + return(komodo_issuemethod(KMDUSERPASS,(char *)"getreceivedbyaddress",params,7771)); +} + +char *jumblr_importprivkey(char *wifstr) +{ + char params[1024]; + sprintf(params,"[\"%s\", \"\", false]",wifstr); + return(komodo_issuemethod(KMDUSERPASS,(char *)"importprivkey",params,7771)); +} + +char *jumblr_zgetbalance(char *addr) +{ + char params[1024]; + sprintf(params,"[\"%s\", 1]",addr); + return(komodo_issuemethod(KMDUSERPASS,(char *)"z_getbalance",params,7771)); +} + +char *jumblr_listunspent(char *coinaddr) +{ + char params[1024]; + sprintf(params,"[1, 99999999, [\"%s\"]]",coinaddr); + return(komodo_issuemethod(KMDUSERPASS,(char *)"listunspent",params,7771)); +} + +int64_t jumblr_receivedby(char *addr) +{ + char *retstr; int64_t total = 0; + if ( (retstr= jumblr_getreceivedbyaddress(addr)) != 0 ) + { + total = atof(retstr) * SATOSHIDEN; + free(retstr); + } + return(total); +} + +int64_t jumblr_balance(char *addr) +{ + char *retstr; double val; cJSON *retjson; int32_t i,n; int64_t balance = 0; + if ( jumblr_addresstype(addr) == 't' ) + { + if ( (retstr= jumblr_listunspent(addr)) != 0 ) + { + printf("jumblr.[%s].(%s)\n","KMD",retstr); + if ( (retjson= cJSON_Parse(retstr)) != 0 ) + { + if ( (n= cJSON_GetArraySize(retjson)) > 0 ) + for (i=0; i SMALLVAL ) + balance = val * SATOSHIDEN; + free(retstr); + } + return(balance); +} + +int32_t jumblr_itemset(struct jumblr_item *ptr,cJSON *item,char *status) +{ + cJSON *params,*amounts,*dest; char *from,*addr; int32_t i,n; int64_t amount; + /*"params" : { + "fromaddress" : "RDhEGYScNQYetCyG75Kf8Fg61UWPdwc1C5", + "amounts" : [ + { + "address" : "zc9s3UdkDFTnnwHrMCr1vYy2WmkjhmTxXNiqC42s7BjeKBVUwk766TTSsrRPKfnX31Bbu8wbrTqnjDqskYGwx48FZMPHvft", + "amount" : 3.00000000 + } + ], + "minconf" : 1, + "fee" : 0.00010000 + }*/ + if ( (params= jobj(item,"params")) != 0 ) + { + //printf("params.(%s)\n",jprint(params,0)); + if ( (from= jstr(params,"fromaddress")) != 0 ) + { + safecopy(ptr->src,from,sizeof(ptr->src)); + } + if ( (amounts= jarray(&n,params,"amounts")) != 0 ) + { + for (i=0; i 0 ) + { + if ( strcmp(addr,JUMBLR_ADDR) == 0 ) + ptr->fee = amount; + else + { + ptr->amount = amount; + safecopy(ptr->dest,addr,sizeof(ptr->dest)); + } + } + } + } + ptr->txfee = jdouble(params,"fee") * SATOSHIDEN; + } + return(1); +} + +void jumblr_opidupdate(struct jumblr_item *ptr) +{ + char *retstr,*status; cJSON *retjson,*item; + if ( ptr->status == 0 ) + { + if ( (retstr= jumblr_zgetoperationstatus(ptr->opid)) != 0 ) + { + if ( (retjson= cJSON_Parse(retstr)) != 0 ) + { + if ( cJSON_GetArraySize(retjson) == 1 ) + { + item = jitem(retjson,0); + //printf("%s\n",jprint(item,0)); + if ( (status= jstr(item,"status")) != 0 ) + { + if ( strcmp(status,"success") == 0 ) + { + ptr->status = jumblr_itemset(ptr,item,status); + if ( (jumblr_addresstype(ptr->src) == 't' && jumblr_addresstype(ptr->src) == 'z' && strcmp(ptr->src,Jumblr_deposit) != 0) || (jumblr_addresstype(ptr->src) == 'z' && jumblr_addresstype(ptr->src) == 't' && Jumblr_secretaddrfind(ptr->dest) < 0) ) + { + printf("a non-jumblr t->z pruned\n"); + free(jumblr_zgetoperationresult(ptr->opid)); + ptr->status = -1; + } + + } + else if ( strcmp(status,"failed") == 0 ) + { + printf("jumblr_opidupdate %s failed\n",ptr->opid); + free(jumblr_zgetoperationresult(ptr->opid)); + ptr->status = -1; + } + } + } + free_json(retjson); + } + free(retstr); + } + } +} + +void jumblr_prune(struct jumblr_item *ptr) +{ + struct jumblr_item *tmp; char oldsrc[128]; int32_t flag = 1; + printf("jumblr_prune %s\n",ptr->opid); + strcpy(oldsrc,ptr->src); + free(jumblr_zgetoperationresult(ptr->opid)); + while ( flag != 0 ) + { + flag = 0; + HASH_ITER(hh,Jumblrs,ptr,tmp) + { + if ( strcmp(oldsrc,ptr->dest) == 0 ) + { + printf("jumblr_prune %s (%s -> %s) matched oldsrc\n",ptr->opid,ptr->src,ptr->dest); + free(jumblr_zgetoperationresult(ptr->opid)); + strcpy(oldsrc,ptr->src); + flag = 1; + break; + } + } + } +} + +void jumblr_opidsupdate() +{ + char *retstr; cJSON *array; int32_t i,n; struct jumblr_item *ptr; + if ( (retstr= jumblr_zlistoperationids()) != 0 ) + { + if ( (array= cJSON_Parse(retstr)) != 0 ) + { + if ( (n= cJSON_GetArraySize(array)) > 0 ) + { + for (i=0; istatus == 0 ) + jumblr_opidupdate(ptr); + //printf("%d: %s -> %s %.8f\n",ptr->status,ptr->src,ptr->dest,dstr(ptr->amount)); + if ( jumblr_addresstype(ptr->src) == 'z' && jumblr_addresstype(ptr->dest) == 't' ) + jumblr_prune(ptr); + } + } + } + free_json(array); + } + free(retstr); + } +} + +void jumblr_iteration() +{ + static int32_t lastheight; + char *zaddr,*retstr; int32_t iter,height,counter,chosen_one,n; uint64_t amount=0,total=0; double fee; struct jumblr_item *ptr,*tmp; uint8_t r,s; + height = (int32_t)chainActive.Tip()->nHeight; + if ( lastheight == height ) + return; + if ( (height % JUMBLR_SYNCHRONIZED_BLOCKS) != 0 ) + return; + fee = JUMBLR_INCR * JUMBLR_FEE; + OS_randombytes(&r,sizeof(r)); + s = ((r >> 2) % 3); + switch ( s ) + { + case 0: // public -> z, need to importprivkey + if ( Jumblr_deposit[0] != 0 && (total= jumblr_balance(Jumblr_deposit)) >= (JUMBLR_INCR + 3*(fee+JUMBLR_TXFEE))*SATOSHIDEN ) + { + if ( (zaddr= jumblr_zgetnewaddress()) != 0 ) + { + amount = 0; + if ( (height % (JUMBLR_SYNCHRONIZED_BLOCKS*JUMBLR_SYNCHRONIZED_BLOCKS)) == 0 && total >= SATOSHIDEN * ((JUMBLR_INCR + 3*fee)*100 + 3*JUMBLR_TXFEE) ) + amount = SATOSHIDEN * ((JUMBLR_INCR + 3*fee)*100 + 3*JUMBLR_TXFEE); + else if ( (r & 3) == 0 && total >= SATOSHIDEN * ((JUMBLR_INCR + 3*fee)*10 + 3*JUMBLR_TXFEE) ) + amount = SATOSHIDEN * ((JUMBLR_INCR + 3*fee)*10 + 3*JUMBLR_TXFEE); + else amount = SATOSHIDEN * ((JUMBLR_INCR + 3*fee) + 3*JUMBLR_TXFEE); + if ( amount > 0 && (retstr= jumblr_sendt_to_z(Jumblr_deposit,zaddr,dstr(amount))) != 0 ) + { + printf("sendt_to_z.(%s)\n",retstr); + free(retstr); + } + free(zaddr); + } else printf("no zaddr from jumblr_zgetnewaddress\n"); + } + else if ( Jumblr_deposit[0] != 0 ) + printf("%s total %.8f vs %.8f\n",Jumblr_deposit,dstr(total),(JUMBLR_INCR + 3*(fee+JUMBLR_TXFEE))); + break; + case 1: // z -> z + jumblr_opidsupdate(); + chosen_one = -1; + for (iter=counter=0; iter<2; iter++) + { + counter = n = 0; + HASH_ITER(hh,Jumblrs,ptr,tmp) + { + if ( jumblr_addresstype(ptr->src) == 't' && jumblr_addresstype(ptr->dest) == 'z' ) + { + if ( ptr->spent == 0 && (total= jumblr_balance(ptr->dest)) >= (fee + JUMBLR_FEE)*SATOSHIDEN ) + { + if ( iter == 1 && counter == chosen_one ) + { + if ( (zaddr= jumblr_zgetnewaddress()) != 0 ) + { + if ( (retstr= jumblr_sendz_to_z(ptr->dest,zaddr,dstr(total))) != 0 ) + { + printf("n.%d counter.%d chosen_one.%d sendz_to_z.(%s)\n",n,counter,chosen_one,retstr); + free(retstr); + } + ptr->spent = (uint32_t)time(NULL); + free(zaddr); + break; + } + } + counter++; + } + } + n++; + } + if ( counter == 0 ) + break; + if ( iter == 0 ) + { + OS_randombytes((uint8_t *)&chosen_one,sizeof(chosen_one)); + if ( chosen_one < 0 ) + chosen_one = -chosen_one; + chosen_one %= counter; + printf("jumblr z->z chosen_one.%d of %d, from %d\n",chosen_one,counter,n); + } + } + break; + case 2: // z -> public + if ( Jumblr_numsecretaddrs > 0 ) + { + jumblr_opidsupdate(); + chosen_one = -1; + for (iter=0; iter<2; iter++) + { + counter = n = 0; + HASH_ITER(hh,Jumblrs,ptr,tmp) + { + if ( jumblr_addresstype(ptr->src) == 'z' && jumblr_addresstype(ptr->dest) == 'z' ) + { + if ( ptr->spent == 0 && (total= jumblr_balance(ptr->dest)) >= (fee + JUMBLR_FEE)*SATOSHIDEN ) + { + if ( iter == 1 && n == chosen_one ) + { + Jumblr_secretaddr(secretaddr); + if ( (retstr= jumblr_sendz_to_t(ptr->dest,secretaddr,dstr(total))) != 0 ) + { + printf("sendz_to_t.(%s)\n",retstr); + free(retstr); + } + ptr->spent = (uint32_t)time(NULL); + break; + } + counter++; + } + } + n++; + } + if ( counter == 0 ) + break; + if ( iter == 0 ) + { + OS_randombytes((uint8_t *)&chosen_one,sizeof(chosen_one)); + if ( chosen_one < 0 ) + chosen_one = -chosen_one; + chosen_one %= counter; + printf("jumblr z->t chosen_one.%d of %d, from %d\n",chosen_one,counter,n); + } + } + } + break; + } +} + diff --git a/src/rpcmisc.cpp b/src/rpcmisc.cpp index f6a78ce3d..b421375ba 100644 --- a/src/rpcmisc.cpp +++ b/src/rpcmisc.cpp @@ -41,6 +41,8 @@ using namespace std; * Or alternatively, create a specific query method for the information. **/ +char *Jumblr_depositaddradd(char *depositaddr); +int32_t Jumblr_secretaddradd(char *secretaddr); uint64_t komodo_interestsum(); int32_t komodo_longestchain(); int32_t komodo_notarized_height(uint256 *hashp,uint256 *txidp); @@ -48,7 +50,7 @@ int32_t komodo_whoami(char *pubkeystr,int32_t height); extern int32_t KOMODO_LASTMINED; extern char ASSETCHAINS_SYMBOL[]; int32_t notarizedtxid_height(char *dest,char *txidstr,int32_t *kmdnotarized_heightp); -#define KOMODO_VERSION "0.1.0" +#define KOMODO_VERSION "0.1.1" UniValue getinfo(const UniValue& params, bool fHelp) { @@ -188,6 +190,40 @@ public: }; #endif +UniValue jumblr_deposit(const UniValue& params, bool fHelp) +{ + char *retstr; UniValue result(UniValue::VOBJ); + if (fHelp || params.size() != 1) + throw runtime_error("jumblr_deposit \"depositaddress\"\n"); + CBitcoinAddress address(params[0].get_str()); + bool isValid = address.IsValid(); + if ( isValid != 0 ) + { + string addr = params[0].get_str(); + if ( (retstr= Jumblr_depositaddradd(addr.c_str())) == 0 ) + result.push_back(Pair("result", (char *)"null return from Jumblr_depositaddradd")); + else result.push_back(Pair("result", retstr)); + } else result.push_back(Pair("error", "invalid address")); + return(result); +} + +UniValue jumblr_secret(const UniValue& params, bool fHelp) +{ + int32_t retval; UniValue result(UniValue::VOBJ); + if (fHelp || params.size() != 1) + throw runtime_error("jumblr_secret \"secretaddress\"\n"); + CBitcoinAddress address(params[0].get_str()); + bool isValid = address.IsValid(); + if ( isValid != 0 ) + { + string addr = params[0].get_str(); + retval = Jumblr_secretaddradd(addr.c_str()); + result.push_back(Pair("result", "success")); + result.push_back(Pair("num", retval)); + } else result.push_back(Pair("error", "invalid address")); + return(result); +} + UniValue validateaddress(const UniValue& params, bool fHelp) { if (fHelp || params.size() != 1) diff --git a/src/rpcserver.cpp b/src/rpcserver.cpp index 4749cfdc4..03597f708 100644 --- a/src/rpcserver.cpp +++ b/src/rpcserver.cpp @@ -336,6 +336,8 @@ static const CRPCCommand vRPCCommands[] = { "util", "estimatefee", &estimatefee, true }, { "util", "estimatepriority", &estimatepriority, true }, { "util", "z_validateaddress", &z_validateaddress, true }, /* uses wallet if enabled */ + { "util", "jumblr_deposit", &jumblr_depositaddr, true }, + { "util", "jumblr_secret", &jumblr_secretaddr, true }, /* Not shown in help */ { "hidden", "invalidateblock", &invalidateblock, true }, diff --git a/src/rpcserver.h b/src/rpcserver.h index f1eacb7bb..ecf7b0573 100644 --- a/src/rpcserver.h +++ b/src/rpcserver.h @@ -246,6 +246,9 @@ extern UniValue zc_raw_joinsplit(const UniValue& params, bool fHelp); extern UniValue zc_raw_receive(const UniValue& params, bool fHelp); extern UniValue zc_sample_joinsplit(const UniValue& params, bool fHelp); +extern UniValue jumblr_deposit(const UniValue& params, bool fHelp); +extern UniValue jumblr_secret(const UniValue& params, bool fHelp); + extern UniValue getrawtransaction(const UniValue& params, bool fHelp); // in rcprawtransaction.cpp extern UniValue listunspent(const UniValue& params, bool fHelp); extern UniValue lockunspent(const UniValue& params, bool fHelp); From 19acd959f988be7e926adc885863111cf320fed6 Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 12 Jul 2017 12:19:58 +0200 Subject: [PATCH 070/126] Test --- src/komodo_jumblr.h | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index cb9809972..d299ceb65 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -43,7 +43,7 @@ struct jumblr_item char Jumblr_secretaddrs[JUMBLR_MAXSECRETADDRS][64],Jumblr_deposit[64]; int32_t Jumblr_numsecretaddrs; // if 0 -> run silent mode -char *jumblr_importaddress(char *addr) +char *jumblr_importaddress(char *address) { char params[1024]; sprintf(params,"[\"%s\", \"%s\", false]",address,address); @@ -78,12 +78,12 @@ int32_t Jumblr_secretaddradd(char *secretaddr) // external char *Jumblr_depositaddradd(char *depositaddr) // external { if ( depositaddr == 0 ) - depositaddr = ""; + depositaddr = (char *)""; if ( (ind= Jumblr_secretaddrfind(secretaddr)) < 0 ) { safecopy(Jumblr_deposit,depositaddr,sizeof(Jumblr_deposit)); return(jumblr_importaddress(depositaddr)); - } else return(clonestr("{\"error\":\"cant make a secret address a depositaddress\"}")); + } else return(clonestr((char *)"{\"error\":\"cant make a secret address a depositaddress\"}")); } int32_t Jumblr_secretaddr(char *secretaddr) @@ -91,7 +91,7 @@ int32_t Jumblr_secretaddr(char *secretaddr) uint32_t r; if ( Jumblr_numsecretaddrs > 0 ) { - OS_randombytes((void *)&r,sizeof(r)); + OS_randombytes((uint8_t *)&r,sizeof(r)); r %= Jumblr_numsecretaddrs; safecopy(secretaddr,Jumblr_secretaddrs[r],64); } @@ -119,7 +119,7 @@ struct jumblr_item *jumblr_opidadd(char *opid) struct jumblr_item *ptr; if ( (ptr= jumblr_opidfind(opid)) == 0 ) { - ptr = calloc(1,sizeof(*ptr)); + ptr = (struct jumblr_item *)calloc(1,sizeof(*ptr)); safecopy(ptr->opid,opid,sizeof(ptr->opid)); HASH_ADD_KEYPTR(hh,Jumblrs,ptr->opid,(int32_t)strlen(ptr->opid),ptr); if ( ptr != jumblr_opidfind(opid) ) @@ -138,14 +138,14 @@ char *jumblr_validateaddress(char *addr) char *jumblr_zgetnewaddress() { char params[1024]; - sprintf(params,"[]",); + sprintf(params,"[]"); return(komodo_issuemethod(KMDUSERPASS,(char *)"z_getnewaddress",params,7771)); } char *jumblr_zlistoperationids() { char params[1024]; - sprintf(params,"[]",); + sprintf(params,"[]"); return(komodo_issuemethod(KMDUSERPASS,(char *)"z_listoperationids",params,7771)); } @@ -167,7 +167,7 @@ char *jumblr_sendt_to_z(char *taddr,char *zaddr,double amount) { char params[1024]; double fee = (amount-3*JUMBLR_TXFEE) * JUMBLR_FEE; if ( jumblr_addresstype(zaddr) != 'z' || jumblr_addresstype(taddr) != 't' ) - return(clonestr("{\"error\":\"illegal address in t to z\"}")); + return(clonestr((char *)"{\"error\":\"illegal address in t to z\"}")); sprintf(params,"[\"%s\", [{\"address\":\"%s\",\"amount\":%.8f}, {\"address\":\"%s\",\"amount\":%.8f}], 1, %.8f]",taddr,zaddr,amount-fee-JUMBLR_TXFEE,JUMBLR_ADDR,fee,JUMBLR_TXFEE); return(komodo_issuemethod(KMDUSERPASS,(char *)"z_sendmany",params,7771)); } @@ -176,7 +176,7 @@ char *jumblr_sendz_to_z(char *zaddrS,char *zaddrD,double amount) { char params[1024]; double fee = (amount-2*JUMBLR_TXFEE) * JUMBLR_FEE; if ( jumblr_addresstype(zaddrS) != 'z' || jumblr_addresstype(zaddrD) != 'z' ) - return(clonestr("{\"error\":\"illegal address in z to z\"}")); + return(clonestr((char *)"{\"error\":\"illegal address in z to z\"}")); sprintf(params,"[\"%s\", [{\"address\":\"%s\",\"amount\":%.8f}, {\"address\":\"%s\",\"amount\":%.8f}], 1, %.8f]",zaddrS,zaddrD,amount-fee-JUMBLR_TXFEE,JUMBLR_ADDR,fee,JUMBLR_TXFEE); return(komodo_issuemethod(KMDUSERPASS,(char *)"z_sendmany",params,7771)); } @@ -185,7 +185,7 @@ char *jumblr_sendz_to_t(char *zaddr,char *taddr,double amount) { char params[1024]; double fee = (amount-JUMBLR_TXFEE) * JUMBLR_FEE; if ( jumblr_addresstype(zaddr) != 'z' || jumblr_addresstype(taddr) != 't' ) - return(clonestr("{\"error\":\"illegal address in z to t\"}")); + return(clonestr((char *)"{\"error\":\"illegal address in z to t\"}")); sprintf(params,"[\"%s\", [{\"address\":\"%s\",\"amount\":%.8f}, {\"address\":\"%s\",\"amount\":%.8f}], 1, %.8f]",zaddr,taddr,amount-fee-JUMBLR_TXFEE,JUMBLR_ADDR,fee,JUMBLR_TXFEE); return(komodo_issuemethod(KMDUSERPASS,(char *)"z_sendmany",params,7771)); } @@ -248,7 +248,7 @@ int64_t jumblr_balance(char *addr) { if ( (n= cJSON_GetArraySize(retjson)) > 0 ) for (i=0; isrc,from,sizeof(ptr->src)); } - if ( (amounts= jarray(&n,params,"amounts")) != 0 ) + if ( (amounts= jarray(&n,params,(char *)"amounts")) != 0 ) { for (i=0; i 0 ) + if ( (addr= jstr(dest,(char *)"address")) != 0 && (amount= jdouble(dest,(char *)"amount")*SATOSHIDEN) > 0 ) { if ( strcmp(addr,JUMBLR_ADDR) == 0 ) ptr->fee = amount; @@ -302,7 +302,7 @@ int32_t jumblr_itemset(struct jumblr_item *ptr,cJSON *item,char *status) } } } - ptr->txfee = jdouble(params,"fee") * SATOSHIDEN; + ptr->txfee = jdouble(params,(char *)"fee") * SATOSHIDEN; } return(1); } @@ -320,9 +320,9 @@ void jumblr_opidupdate(struct jumblr_item *ptr) { item = jitem(retjson,0); //printf("%s\n",jprint(item,0)); - if ( (status= jstr(item,"status")) != 0 ) + if ( (status= jstr(item,(char *)"status")) != 0 ) { - if ( strcmp(status,"success") == 0 ) + if ( strcmp(status,(char *)"success") == 0 ) { ptr->status = jumblr_itemset(ptr,item,status); if ( (jumblr_addresstype(ptr->src) == 't' && jumblr_addresstype(ptr->src) == 'z' && strcmp(ptr->src,Jumblr_deposit) != 0) || (jumblr_addresstype(ptr->src) == 'z' && jumblr_addresstype(ptr->src) == 't' && Jumblr_secretaddrfind(ptr->dest) < 0) ) @@ -333,7 +333,7 @@ void jumblr_opidupdate(struct jumblr_item *ptr) } } - else if ( strcmp(status,"failed") == 0 ) + else if ( strcmp(status,(char *)"failed") == 0 ) { printf("jumblr_opidupdate %s failed\n",ptr->opid); free(jumblr_zgetoperationresult(ptr->opid)); From 9bbeff91885d4beddde35850bd4b3ca1e306ac94 Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 12 Jul 2017 12:22:13 +0200 Subject: [PATCH 071/126] Test --- src/komodo_jumblr.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index d299ceb65..c1bd24d00 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -31,6 +31,7 @@ #define JUMBLR_INCR (99.65 / 100) #define JUMBLR_FEE 0.001 #define JUMBLR_TXFEE 0.01 +#define SMALLVAL 0.000000000000001 struct jumblr_item { @@ -77,9 +78,10 @@ int32_t Jumblr_secretaddradd(char *secretaddr) // external char *Jumblr_depositaddradd(char *depositaddr) // external { + int32_t ind; if ( depositaddr == 0 ) depositaddr = (char *)""; - if ( (ind= Jumblr_secretaddrfind(secretaddr)) < 0 ) + if ( (ind= Jumblr_secretaddrfind(depositaddr)) < 0 ) { safecopy(Jumblr_deposit,depositaddr,sizeof(Jumblr_deposit)); return(jumblr_importaddress(depositaddr)); @@ -401,7 +403,7 @@ void jumblr_opidsupdate() void jumblr_iteration() { static int32_t lastheight; - char *zaddr,*retstr; int32_t iter,height,counter,chosen_one,n; uint64_t amount=0,total=0; double fee; struct jumblr_item *ptr,*tmp; uint8_t r,s; + char *zaddr,*retstr,secretaddr[64]; int32_t iter,height,counter,chosen_one,n; uint64_t amount=0,total=0; double fee; struct jumblr_item *ptr,*tmp; uint8_t r,s; height = (int32_t)chainActive.Tip()->nHeight; if ( lastheight == height ) return; From bc035879e91a866fd3a276911e7bec8974637d98 Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 12 Jul 2017 12:25:00 +0200 Subject: [PATCH 072/126] Test --- src/rpcmisc.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rpcmisc.cpp b/src/rpcmisc.cpp index b421375ba..98f3d1bf2 100644 --- a/src/rpcmisc.cpp +++ b/src/rpcmisc.cpp @@ -200,7 +200,7 @@ UniValue jumblr_deposit(const UniValue& params, bool fHelp) if ( isValid != 0 ) { string addr = params[0].get_str(); - if ( (retstr= Jumblr_depositaddradd(addr.c_str())) == 0 ) + if ( (retstr= Jumblr_depositaddradd((char *)addr.c_str())) == 0 ) result.push_back(Pair("result", (char *)"null return from Jumblr_depositaddradd")); else result.push_back(Pair("result", retstr)); } else result.push_back(Pair("error", "invalid address")); @@ -217,7 +217,7 @@ UniValue jumblr_secret(const UniValue& params, bool fHelp) if ( isValid != 0 ) { string addr = params[0].get_str(); - retval = Jumblr_secretaddradd(addr.c_str()); + retval = Jumblr_secretaddradd((char *)addr.c_str()); result.push_back(Pair("result", "success")); result.push_back(Pair("num", retval)); } else result.push_back(Pair("error", "invalid address")); From 5539178c7f588b726e7185849976b909895c6fd9 Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 12 Jul 2017 12:26:38 +0200 Subject: [PATCH 073/126] Test --- src/rpcserver.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rpcserver.cpp b/src/rpcserver.cpp index 03597f708..518ba4693 100644 --- a/src/rpcserver.cpp +++ b/src/rpcserver.cpp @@ -336,8 +336,8 @@ static const CRPCCommand vRPCCommands[] = { "util", "estimatefee", &estimatefee, true }, { "util", "estimatepriority", &estimatepriority, true }, { "util", "z_validateaddress", &z_validateaddress, true }, /* uses wallet if enabled */ - { "util", "jumblr_deposit", &jumblr_depositaddr, true }, - { "util", "jumblr_secret", &jumblr_secretaddr, true }, + { "util", "jumblr_deposit", &jumblr_deposit, true }, + { "util", "jumblr_secret", &jumblr_secret, true }, /* Not shown in help */ { "hidden", "invalidateblock", &invalidateblock, true }, From 8ac542730009832e9a90ffc66ae1c8081de78f3b Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 12 Jul 2017 12:38:22 +0200 Subject: [PATCH 074/126] Test --- src/komodo_jumblr.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index c1bd24d00..c8870b64f 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -118,8 +118,8 @@ struct jumblr_item *jumblr_opidfind(char *opid) struct jumblr_item *jumblr_opidadd(char *opid) { - struct jumblr_item *ptr; - if ( (ptr= jumblr_opidfind(opid)) == 0 ) + struct jumblr_item *ptr = 0; + if ( opid != 0 && (ptr= jumblr_opidfind(opid)) == 0 ) { ptr = (struct jumblr_item *)calloc(1,sizeof(*ptr)); safecopy(ptr->opid,opid,sizeof(ptr->opid)); @@ -382,6 +382,7 @@ void jumblr_opidsupdate() { if ( (n= cJSON_GetArraySize(array)) > 0 ) { + printf("%s -> n%d\n",retstr,n); for (i=0; i Date: Wed, 12 Jul 2017 12:50:07 +0200 Subject: [PATCH 075/126] Test --- src/komodo_jumblr.h | 75 ++++++++++++++++++++++++++++++++------------- src/rpcmisc.cpp | 10 +++--- 2 files changed, 59 insertions(+), 26 deletions(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index c8870b64f..15088cbf9 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -44,11 +44,36 @@ struct jumblr_item char Jumblr_secretaddrs[JUMBLR_MAXSECRETADDRS][64],Jumblr_deposit[64]; int32_t Jumblr_numsecretaddrs; // if 0 -> run silent mode +char *jumblr_issuemethod(char *usepass,char *method,char *params,uint16_t port) +{ + cJSON *retjson,*resjson = 0; char *retstr; + if ( (retstr= komodo_issuemethod(userpass,method,params,port)) != 0 ) + { + if ( (retjson= cJSON_Parse(retstr)) != 0 ) + { + if ( jobj(retjson,"result") != 0 ) + resjson = jduplicate(jobj(retjson,"result")); + else if ( jobj(retjson,"error") != 0 ) + resjson = jduplicate(jobj(retjson,"error")); + else + { + resjson = cJSON_CreateObject(); + jaddstr(resjson,"error","cant parse return"); + } + free_json(retjson); + } + free(retstr); + } + if ( resjson != 0 ) + return(jprint(resjson,1)); + else return(clonestr("{\"error\":\"unknown error\"}")); +} + char *jumblr_importaddress(char *address) { char params[1024]; sprintf(params,"[\"%s\", \"%s\", false]",address,address); - return(komodo_issuemethod(KMDUSERPASS,(char *)"importaddress",params,7771)); + return(jumblr_issuemethod(KMDUSERPASS,(char *)"importaddress",params,7771)); } int32_t Jumblr_secretaddrfind(char *searchaddr) @@ -76,16 +101,24 @@ int32_t Jumblr_secretaddradd(char *secretaddr) // external return(Jumblr_numsecretaddrs); } -char *Jumblr_depositaddradd(char *depositaddr) // external +int32_t Jumblr_depositaddradd(char *depositaddr) // external { - int32_t ind; + int32_t ind,retal = -1; char *retstr; cJSON *retjson; if ( depositaddr == 0 ) depositaddr = (char *)""; if ( (ind= Jumblr_secretaddrfind(depositaddr)) < 0 ) { safecopy(Jumblr_deposit,depositaddr,sizeof(Jumblr_deposit)); - return(jumblr_importaddress(depositaddr)); - } else return(clonestr((char *)"{\"error\":\"cant make a secret address a depositaddress\"}")); + if ( (retstr= jumblr_importaddress(depositaddr)) != 0 ) + { + if ( (retjson= cJSON_Parse(retstr)) != 0 ) + { + free_json(retjson); + } + free(retstr); + } + } + return(retval); } int32_t Jumblr_secretaddr(char *secretaddr) @@ -134,35 +167,35 @@ char *jumblr_validateaddress(char *addr) { char params[1024]; sprintf(params,"[\"%s\"]",addr); - return(komodo_issuemethod(KMDUSERPASS,(char *)"validateaddress",params,7771)); + return(jumblr_issuemethod(KMDUSERPASS,(char *)"validateaddress",params,7771)); } char *jumblr_zgetnewaddress() { char params[1024]; sprintf(params,"[]"); - return(komodo_issuemethod(KMDUSERPASS,(char *)"z_getnewaddress",params,7771)); + return(jumblr_issuemethod(KMDUSERPASS,(char *)"z_getnewaddress",params,7771)); } char *jumblr_zlistoperationids() { char params[1024]; sprintf(params,"[]"); - return(komodo_issuemethod(KMDUSERPASS,(char *)"z_listoperationids",params,7771)); + return(jumblr_issuemethod(KMDUSERPASS,(char *)"z_listoperationids",params,7771)); } char *jumblr_zgetoperationresult(char *opid) { char params[1024]; sprintf(params,"[[\"%s\"]]",opid); - return(komodo_issuemethod(KMDUSERPASS,(char *)"z_getoperationresult",params,7771)); + return(jumblr_issuemethod(KMDUSERPASS,(char *)"z_getoperationresult",params,7771)); } char *jumblr_zgetoperationstatus(char *opid) { char params[1024]; sprintf(params,"[[\"%s\"]]",opid); - return(komodo_issuemethod(KMDUSERPASS,(char *)"z_getoperationstatus",params,7771)); + return(jumblr_issuemethod(KMDUSERPASS,(char *)"z_getoperationstatus",params,7771)); } char *jumblr_sendt_to_z(char *taddr,char *zaddr,double amount) @@ -171,7 +204,7 @@ char *jumblr_sendt_to_z(char *taddr,char *zaddr,double amount) if ( jumblr_addresstype(zaddr) != 'z' || jumblr_addresstype(taddr) != 't' ) return(clonestr((char *)"{\"error\":\"illegal address in t to z\"}")); sprintf(params,"[\"%s\", [{\"address\":\"%s\",\"amount\":%.8f}, {\"address\":\"%s\",\"amount\":%.8f}], 1, %.8f]",taddr,zaddr,amount-fee-JUMBLR_TXFEE,JUMBLR_ADDR,fee,JUMBLR_TXFEE); - return(komodo_issuemethod(KMDUSERPASS,(char *)"z_sendmany",params,7771)); + return(jumblr_issuemethod(KMDUSERPASS,(char *)"z_sendmany",params,7771)); } char *jumblr_sendz_to_z(char *zaddrS,char *zaddrD,double amount) @@ -180,7 +213,7 @@ char *jumblr_sendz_to_z(char *zaddrS,char *zaddrD,double amount) if ( jumblr_addresstype(zaddrS) != 'z' || jumblr_addresstype(zaddrD) != 'z' ) return(clonestr((char *)"{\"error\":\"illegal address in z to z\"}")); sprintf(params,"[\"%s\", [{\"address\":\"%s\",\"amount\":%.8f}, {\"address\":\"%s\",\"amount\":%.8f}], 1, %.8f]",zaddrS,zaddrD,amount-fee-JUMBLR_TXFEE,JUMBLR_ADDR,fee,JUMBLR_TXFEE); - return(komodo_issuemethod(KMDUSERPASS,(char *)"z_sendmany",params,7771)); + return(jumblr_issuemethod(KMDUSERPASS,(char *)"z_sendmany",params,7771)); } char *jumblr_sendz_to_t(char *zaddr,char *taddr,double amount) @@ -189,42 +222,42 @@ char *jumblr_sendz_to_t(char *zaddr,char *taddr,double amount) if ( jumblr_addresstype(zaddr) != 'z' || jumblr_addresstype(taddr) != 't' ) return(clonestr((char *)"{\"error\":\"illegal address in z to t\"}")); sprintf(params,"[\"%s\", [{\"address\":\"%s\",\"amount\":%.8f}, {\"address\":\"%s\",\"amount\":%.8f}], 1, %.8f]",zaddr,taddr,amount-fee-JUMBLR_TXFEE,JUMBLR_ADDR,fee,JUMBLR_TXFEE); - return(komodo_issuemethod(KMDUSERPASS,(char *)"z_sendmany",params,7771)); + return(jumblr_issuemethod(KMDUSERPASS,(char *)"z_sendmany",params,7771)); } char *jumblr_zlistreceivedbyaddress(char *addr) { char params[1024]; sprintf(params,"[\"%s\", 1]",addr); - return(komodo_issuemethod(KMDUSERPASS,(char *)"z_listreceivedbyaddress",params,7771)); + return(jumblr_issuemethod(KMDUSERPASS,(char *)"z_listreceivedbyaddress",params,7771)); } char *jumblr_getreceivedbyaddress(char *addr) { char params[1024]; sprintf(params,"[\"%s\", 1]",addr); - return(komodo_issuemethod(KMDUSERPASS,(char *)"getreceivedbyaddress",params,7771)); + return(jumblr_issuemethod(KMDUSERPASS,(char *)"getreceivedbyaddress",params,7771)); } char *jumblr_importprivkey(char *wifstr) { char params[1024]; sprintf(params,"[\"%s\", \"\", false]",wifstr); - return(komodo_issuemethod(KMDUSERPASS,(char *)"importprivkey",params,7771)); + return(jumblr_issuemethod(KMDUSERPASS,(char *)"importprivkey",params,7771)); } char *jumblr_zgetbalance(char *addr) { char params[1024]; sprintf(params,"[\"%s\", 1]",addr); - return(komodo_issuemethod(KMDUSERPASS,(char *)"z_getbalance",params,7771)); + return(jumblr_issuemethod(KMDUSERPASS,(char *)"z_getbalance",params,7771)); } char *jumblr_listunspent(char *coinaddr) { char params[1024]; sprintf(params,"[1, 99999999, [\"%s\"]]",coinaddr); - return(komodo_issuemethod(KMDUSERPASS,(char *)"listunspent",params,7771)); + return(jumblr_issuemethod(KMDUSERPASS,(char *)"listunspent",params,7771)); } int64_t jumblr_receivedby(char *addr) @@ -248,7 +281,7 @@ int64_t jumblr_balance(char *addr) printf("jumblr.[%s].(%s)\n","KMD",retstr); if ( (retjson= cJSON_Parse(retstr)) != 0 ) { - if ( (n= cJSON_GetArraySize(retjson)) > 0 ) + if ( (n= cJSON_GetArraySize(retjson)) > 0 && is_cJSON_Array(retjson) != 0 ) for (i=0; i 0 ) + if ( (n= cJSON_GetArraySize(array)) > 0 && is_cJSON_Array(array) != 0 ) { printf("%s -> n%d\n",retstr,n); for (i=0; i= 0 ) + result.push_back(Pair("result", retval); + else result.push_back(Pair("error", retval)); } else result.push_back(Pair("error", "invalid address")); return(result); } From eb416c9c261681d4fc40f8946d8450411d632365 Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 12 Jul 2017 12:53:40 +0200 Subject: [PATCH 076/126] Test --- src/komodo_jumblr.h | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index 15088cbf9..4f8814479 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -51,14 +51,14 @@ char *jumblr_issuemethod(char *usepass,char *method,char *params,uint16_t port) { if ( (retjson= cJSON_Parse(retstr)) != 0 ) { - if ( jobj(retjson,"result") != 0 ) - resjson = jduplicate(jobj(retjson,"result")); - else if ( jobj(retjson,"error") != 0 ) - resjson = jduplicate(jobj(retjson,"error")); + if ( jobj(retjson,(char *)"result") != 0 ) + resjson = jduplicate(jobj(retjson,(char *)"result")); + else if ( jobj(retjson,(char *)"error") != 0 ) + resjson = jduplicate(jobj(retjson,(char *)"error")); else { resjson = cJSON_CreateObject(); - jaddstr(resjson,"error","cant parse return"); + jaddstr(resjson,(char *)"error",(char *)"cant parse return"); } free_json(retjson); } @@ -66,7 +66,7 @@ char *jumblr_issuemethod(char *usepass,char *method,char *params,uint16_t port) } if ( resjson != 0 ) return(jprint(resjson,1)); - else return(clonestr("{\"error\":\"unknown error\"}")); + else return(clonestr((char *)"{\"error\":\"unknown error\"}")); } char *jumblr_importaddress(char *address) @@ -351,7 +351,7 @@ void jumblr_opidupdate(struct jumblr_item *ptr) { if ( (retjson= cJSON_Parse(retstr)) != 0 ) { - if ( cJSON_GetArraySize(retjson) == 1 && is_cJSON_array(retjson) != 0 ) + if ( cJSON_GetArraySize(retjson) == 1 && is_cJSON_Array(retjson) != 0 ) { item = jitem(retjson,0); //printf("%s\n",jprint(item,0)); From a8ec5e86616859792199ecddd67f085d52a35acc Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 12 Jul 2017 12:55:29 +0200 Subject: [PATCH 077/126] Test --- src/komodo_jumblr.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index 4f8814479..284c1c5e6 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -44,7 +44,7 @@ struct jumblr_item char Jumblr_secretaddrs[JUMBLR_MAXSECRETADDRS][64],Jumblr_deposit[64]; int32_t Jumblr_numsecretaddrs; // if 0 -> run silent mode -char *jumblr_issuemethod(char *usepass,char *method,char *params,uint16_t port) +char *jumblr_issuemethod(char *userpass,char *method,char *params,uint16_t port) { cJSON *retjson,*resjson = 0; char *retstr; if ( (retstr= komodo_issuemethod(userpass,method,params,port)) != 0 ) @@ -103,7 +103,7 @@ int32_t Jumblr_secretaddradd(char *secretaddr) // external int32_t Jumblr_depositaddradd(char *depositaddr) // external { - int32_t ind,retal = -1; char *retstr; cJSON *retjson; + int32_t ind,retval = -1; char *retstr; cJSON *retjson; if ( depositaddr == 0 ) depositaddr = (char *)""; if ( (ind= Jumblr_secretaddrfind(depositaddr)) < 0 ) @@ -113,6 +113,8 @@ int32_t Jumblr_depositaddradd(char *depositaddr) // external { if ( (retjson= cJSON_Parse(retstr)) != 0 ) { + if ( jobj(retjson,(char *)"error") == 0 || is_cJSON_Null(jobj(retjson,(char *)"error")) != 0 ) + retval = 0; free_json(retjson); } free(retstr); From 190dbe6d436aee0fb1761561561229c696a78aab Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 12 Jul 2017 12:56:43 +0200 Subject: [PATCH 078/126] Test --- src/rpcmisc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rpcmisc.cpp b/src/rpcmisc.cpp index dae1127d5..42307470f 100644 --- a/src/rpcmisc.cpp +++ b/src/rpcmisc.cpp @@ -201,7 +201,7 @@ UniValue jumblr_deposit(const UniValue& params, bool fHelp) { string addr = params[0].get_str(); if ( (retval= Jumblr_depositaddradd((char *)addr.c_str())) >= 0 ) - result.push_back(Pair("result", retval); + result.push_back(Pair("result", retval)); else result.push_back(Pair("error", retval)); } else result.push_back(Pair("error", "invalid address")); return(result); From 3f318aa449c1654e6e0170d6acdb8e6f52a93ac9 Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 12 Jul 2017 13:07:36 +0200 Subject: [PATCH 079/126] Test --- src/komodo_jumblr.h | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index 284c1c5e6..619f4e782 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -33,6 +33,11 @@ #define JUMBLR_TXFEE 0.01 #define SMALLVAL 0.000000000000001 +#define JUMBLR_ERROR_DUPLICATEDEPOSIT -1 +#define JUMBLR_ERROR_SECRETCANTBEDEPOSIT -2 +#define JUMBLR_ERROR_TOOMANYSECRETS -3 +#define JUMBLR_ERROR_IMPORTADDRESS -4 + struct jumblr_item { UT_hash_handle hh; @@ -90,20 +95,31 @@ int32_t Jumblr_secretaddrfind(char *searchaddr) int32_t Jumblr_secretaddradd(char *secretaddr) // external { int32_t ind; - if ( secretaddr != 0 && secretaddr[0] != 0 && Jumblr_numsecretaddrs < JUMBLR_MAXSECRETADDRS ) + if ( secretaddr != 0 && secretaddr[0] != 0 ) { - if ( (ind= Jumblr_secretaddrfind(secretaddr)) < 0 ) + if ( Jumblr_numsecretaddrs < JUMBLR_MAXSECRETADDRS ) { - safecopy(Jumblr_secretaddrs[Jumblr_numsecretaddrs],secretaddr,64); - Jumblr_numsecretaddrs++; - } else return(ind); + if ( strcmp(Jumblr_deposit,secretaddr) != 0 ) + { + if ( (ind= Jumblr_secretaddrfind(secretaddr)) < 0 ) + { + safecopy(Jumblr_secretaddrs[Jumblr_numsecretaddrs],secretaddr,64); + Jumblr_numsecretaddrs++; + } else return(ind); + } else return(JUMBLR_ERROR_SECRETCANTBEDEPOSIT); + } else return(JUMBLR_ERROR_TOOMANYSECRETS); + } + else + { + memset(Jumblr_secretaddrs,0,sizeof(Jumblr_secretaddrs)); + Jumblr_numsecretaddrs = 0; } return(Jumblr_numsecretaddrs); } int32_t Jumblr_depositaddradd(char *depositaddr) // external { - int32_t ind,retval = -1; char *retstr; cJSON *retjson; + int32_t ind,retval = JUMBLR_ERROR_DUPLICATEDEPOSIT; char *retstr; cJSON *retjson; if ( depositaddr == 0 ) depositaddr = (char *)""; if ( (ind= Jumblr_secretaddrfind(depositaddr)) < 0 ) @@ -115,6 +131,7 @@ int32_t Jumblr_depositaddradd(char *depositaddr) // external { if ( jobj(retjson,(char *)"error") == 0 || is_cJSON_Null(jobj(retjson,(char *)"error")) != 0 ) retval = 0; + else retval = JUMBLR_ERROR_IMPORTADDRESS; free_json(retjson); } free(retstr); From 44165ded33c5dcd67e1d7693bf365aa9068cd9ff Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 12 Jul 2017 13:19:59 +0200 Subject: [PATCH 080/126] Test --- src/komodo_jumblr.h | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index 619f4e782..4c0d1b9e4 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -36,7 +36,7 @@ #define JUMBLR_ERROR_DUPLICATEDEPOSIT -1 #define JUMBLR_ERROR_SECRETCANTBEDEPOSIT -2 #define JUMBLR_ERROR_TOOMANYSECRETS -3 -#define JUMBLR_ERROR_IMPORTADDRESS -4 +#define JUMBLR_ERROR_NOTINWALLET -4 struct jumblr_item { @@ -81,6 +81,13 @@ char *jumblr_importaddress(char *address) return(jumblr_issuemethod(KMDUSERPASS,(char *)"importaddress",params,7771)); } +char *jumblr_validateaddress(char *addr) +{ + char params[1024]; + sprintf(params,"[\"%s\"]",addr); + return(jumblr_issuemethod(KMDUSERPASS,(char *)"validateaddress",params,7771)); +} + int32_t Jumblr_secretaddrfind(char *searchaddr) { int32_t i; @@ -119,19 +126,19 @@ int32_t Jumblr_secretaddradd(char *secretaddr) // external int32_t Jumblr_depositaddradd(char *depositaddr) // external { - int32_t ind,retval = JUMBLR_ERROR_DUPLICATEDEPOSIT; char *retstr; cJSON *retjson; + int32_t ind,retval = JUMBLR_ERROR_DUPLICATEDEPOSIT; char *retstr; cJSON *retjson,*ismine; if ( depositaddr == 0 ) depositaddr = (char *)""; if ( (ind= Jumblr_secretaddrfind(depositaddr)) < 0 ) { safecopy(Jumblr_deposit,depositaddr,sizeof(Jumblr_deposit)); - if ( (retstr= jumblr_importaddress(depositaddr)) != 0 ) + if ( (retstr= jumblr_validateaddress(depositaddr)) != 0 ) { if ( (retjson= cJSON_Parse(retstr)) != 0 ) { - if ( jobj(retjson,(char *)"error") == 0 || is_cJSON_Null(jobj(retjson,(char *)"error")) != 0 ) + if ( (ismine= jobj(retjson,(char *)"ismine")) != 0 && is_cJSON_True(ismine) != 0 ) retval = 0; - else retval = JUMBLR_ERROR_IMPORTADDRESS; + else retval = JUMBLR_ERROR_NOTINWALLET; free_json(retjson); } free(retstr); @@ -182,13 +189,6 @@ struct jumblr_item *jumblr_opidadd(char *opid) return(ptr); } -char *jumblr_validateaddress(char *addr) -{ - char params[1024]; - sprintf(params,"[\"%s\"]",addr); - return(jumblr_issuemethod(KMDUSERPASS,(char *)"validateaddress",params,7771)); -} - char *jumblr_zgetnewaddress() { char params[1024]; From c8e628684cae91fbe319ffc06dba72dfede194cd Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 12 Jul 2017 13:28:56 +0200 Subject: [PATCH 081/126] Test --- src/komodo_jumblr.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index 4c0d1b9e4..d779adf11 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -162,10 +162,17 @@ int32_t Jumblr_secretaddr(char *secretaddr) int32_t jumblr_addresstype(char *addr) { if ( addr[0] == 'z' && addr[1] == 'c' && strlen(addr) >= 40 ) + { + printf("zaddr.(%s)\n",addr); return('z'); + } else if ( strlen(addr) < 40 ) + { + printf("taddr.(%s)\n",addr); return('t'); - else return(-1); + } + printf("strange.(%s)\n",addr); + return(-1); } struct jumblr_item *jumblr_opidfind(char *opid) From aa3be97e79646105e0c4a7cabf30e74195127afe Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 12 Jul 2017 13:33:58 +0200 Subject: [PATCH 082/126] Test --- src/komodo_jumblr.h | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index d779adf11..2e239ba6b 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -161,16 +161,15 @@ int32_t Jumblr_secretaddr(char *secretaddr) int32_t jumblr_addresstype(char *addr) { + if ( addr[0] == '"' && addr[strlen(addr)-1] == '"' ) + { + addr[strlen(addr)-1] = 0; + addr++; + } if ( addr[0] == 'z' && addr[1] == 'c' && strlen(addr) >= 40 ) - { - printf("zaddr.(%s)\n",addr); return('z'); - } else if ( strlen(addr) < 40 ) - { - printf("taddr.(%s)\n",addr); return('t'); - } printf("strange.(%s)\n",addr); return(-1); } From 61a0f96b9ea60c6d623ee76767cced77cad3234c Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 12 Jul 2017 13:40:38 +0200 Subject: [PATCH 083/126] Test --- src/komodo_jumblr.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index 2e239ba6b..2a7ce0425 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -229,6 +229,7 @@ char *jumblr_sendt_to_z(char *taddr,char *zaddr,double amount) if ( jumblr_addresstype(zaddr) != 'z' || jumblr_addresstype(taddr) != 't' ) return(clonestr((char *)"{\"error\":\"illegal address in t to z\"}")); sprintf(params,"[\"%s\", [{\"address\":\"%s\",\"amount\":%.8f}, {\"address\":\"%s\",\"amount\":%.8f}], 1, %.8f]",taddr,zaddr,amount-fee-JUMBLR_TXFEE,JUMBLR_ADDR,fee,JUMBLR_TXFEE); + printf("t -> z: %s\n",params); return(jumblr_issuemethod(KMDUSERPASS,(char *)"z_sendmany",params,7771)); } @@ -238,6 +239,7 @@ char *jumblr_sendz_to_z(char *zaddrS,char *zaddrD,double amount) if ( jumblr_addresstype(zaddrS) != 'z' || jumblr_addresstype(zaddrD) != 'z' ) return(clonestr((char *)"{\"error\":\"illegal address in z to z\"}")); sprintf(params,"[\"%s\", [{\"address\":\"%s\",\"amount\":%.8f}, {\"address\":\"%s\",\"amount\":%.8f}], 1, %.8f]",zaddrS,zaddrD,amount-fee-JUMBLR_TXFEE,JUMBLR_ADDR,fee,JUMBLR_TXFEE); + printf("z -> z: %s\n",params); return(jumblr_issuemethod(KMDUSERPASS,(char *)"z_sendmany",params,7771)); } @@ -247,6 +249,7 @@ char *jumblr_sendz_to_t(char *zaddr,char *taddr,double amount) if ( jumblr_addresstype(zaddr) != 'z' || jumblr_addresstype(taddr) != 't' ) return(clonestr((char *)"{\"error\":\"illegal address in z to t\"}")); sprintf(params,"[\"%s\", [{\"address\":\"%s\",\"amount\":%.8f}, {\"address\":\"%s\",\"amount\":%.8f}], 1, %.8f]",zaddr,taddr,amount-fee-JUMBLR_TXFEE,JUMBLR_ADDR,fee,JUMBLR_TXFEE); + printf("z -> t: %s\n",params); return(jumblr_issuemethod(KMDUSERPASS,(char *)"z_sendmany",params,7771)); } @@ -303,7 +306,7 @@ int64_t jumblr_balance(char *addr) { if ( (retstr= jumblr_listunspent(addr)) != 0 ) { - printf("jumblr.[%s].(%s)\n","KMD",retstr); + //printf("jumblr.[%s].(%s)\n","KMD",retstr); if ( (retjson= cJSON_Parse(retstr)) != 0 ) { if ( (n= cJSON_GetArraySize(retjson)) > 0 && is_cJSON_Array(retjson) != 0 ) From 20082066fd3acd6595b6b41f4a9c4f316742168c Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 12 Jul 2017 13:47:15 +0200 Subject: [PATCH 084/126] Test --- src/komodo_jumblr.h | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index 2a7ce0425..8db5dbd29 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -465,7 +465,7 @@ void jumblr_opidsupdate() void jumblr_iteration() { static int32_t lastheight; - char *zaddr,*retstr,secretaddr[64]; int32_t iter,height,counter,chosen_one,n; uint64_t amount=0,total=0; double fee; struct jumblr_item *ptr,*tmp; uint8_t r,s; + char *zaddr,*addr,*retstr,secretaddr[64]; int32_t iter,height,counter,chosen_one,n; uint64_t amount=0,total=0; double fee; struct jumblr_item *ptr,*tmp; uint8_t r,s; height = (int32_t)chainActive.Tip()->nHeight; if ( lastheight == height ) return; @@ -481,13 +481,18 @@ void jumblr_iteration() { if ( (zaddr= jumblr_zgetnewaddress()) != 0 ) { + if ( zaddr[0] == '"' && zaddr[strlen(zaddr)-1] == '"' ) + { + zaddr[strlen(zaddr)-1] = 0; + addr = zaddr+1; + } else addr = zaddr; amount = 0; if ( (height % (JUMBLR_SYNCHRONIZED_BLOCKS*JUMBLR_SYNCHRONIZED_BLOCKS)) == 0 && total >= SATOSHIDEN * ((JUMBLR_INCR + 3*fee)*100 + 3*JUMBLR_TXFEE) ) amount = SATOSHIDEN * ((JUMBLR_INCR + 3*fee)*100 + 3*JUMBLR_TXFEE); else if ( (r & 3) == 0 && total >= SATOSHIDEN * ((JUMBLR_INCR + 3*fee)*10 + 3*JUMBLR_TXFEE) ) amount = SATOSHIDEN * ((JUMBLR_INCR + 3*fee)*10 + 3*JUMBLR_TXFEE); else amount = SATOSHIDEN * ((JUMBLR_INCR + 3*fee) + 3*JUMBLR_TXFEE); - if ( amount > 0 && (retstr= jumblr_sendt_to_z(Jumblr_deposit,zaddr,dstr(amount))) != 0 ) + if ( amount > 0 && (retstr= jumblr_sendt_to_z(Jumblr_deposit,addr,dstr(amount))) != 0 ) { printf("sendt_to_z.(%s)\n",retstr); free(retstr); From dca9da6898d3adb3318c51be903a7f163828a3cb Mon Sep 17 00:00:00 2001 From: jl777 Date: Wed, 12 Jul 2017 13:49:42 +0200 Subject: [PATCH 085/126] Test --- src/komodo_jumblr.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index 8db5dbd29..d42bab110 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -464,11 +464,14 @@ void jumblr_opidsupdate() void jumblr_iteration() { - static int32_t lastheight; + static int32_t lastheight; static uint32_t lasttime; char *zaddr,*addr,*retstr,secretaddr[64]; int32_t iter,height,counter,chosen_one,n; uint64_t amount=0,total=0; double fee; struct jumblr_item *ptr,*tmp; uint8_t r,s; height = (int32_t)chainActive.Tip()->nHeight; if ( lastheight == height ) return; + if ( time(NULL) < lasttime+60 ) + return; + lasttime = (uint32_t)time(NULL); if ( (height % JUMBLR_SYNCHRONIZED_BLOCKS) != 0 ) return; fee = JUMBLR_INCR * JUMBLR_FEE; @@ -519,7 +522,12 @@ void jumblr_iteration() { if ( (zaddr= jumblr_zgetnewaddress()) != 0 ) { - if ( (retstr= jumblr_sendz_to_z(ptr->dest,zaddr,dstr(total))) != 0 ) + if ( zaddr[0] == '"' && zaddr[strlen(zaddr)-1] == '"' ) + { + zaddr[strlen(zaddr)-1] = 0; + addr = zaddr+1; + } else addr = zaddr; + if ( (retstr= jumblr_sendz_to_z(ptr->dest,addr,dstr(total))) != 0 ) { printf("n.%d counter.%d chosen_one.%d sendz_to_z.(%s)\n",n,counter,chosen_one,retstr); free(retstr); From d2d3c766296c007135c2fc41e872e614e9656730 Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 11:09:26 +0200 Subject: [PATCH 086/126] Test --- src/miner.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/miner.cpp b/src/miner.cpp index 1af9692a9..1b5722316 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -798,7 +798,9 @@ void static BitcoinMiner() if ( gpucount > j/2 ) { double delta; - i = ((Mining_height + notaryid) % 64); + if ( notaryid < 0 ) + i = (rand() % 64); + else i = ((Mining_height + notaryid) % 64); delta = sqrt((double)gpucount - j/2) / 2.; roundrobin_delay += ((delta * i) / 64) - delta; //fprintf(stderr,"delta.%f %f %f\n",delta,(double)(gpucount - j/3) / 2,(delta * i) / 64); @@ -869,7 +871,9 @@ void static BitcoinMiner() MilliSleep((rand() % 1700) + 1); } else if ( ASSETCHAINS_SYMBOL[0] != 0 ) - sleep(3); + { + sleep(rand() % 30); + } KOMODO_CHOSEN_ONE = 1; // Found a solution SetThreadPriority(THREAD_PRIORITY_NORMAL); From c89c562b09ece18b7fa2a2d7e42f43b9af1205c5 Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 12:11:40 +0200 Subject: [PATCH 087/126] Test --- src/komodo_jumblr.h | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index d42bab110..8484c1711 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -27,8 +27,8 @@ #define JUMBLR_ADDR "RGhxXpXSSBTBm9EvNsXnTQczthMCxHX91t" #define JUMBLR_BTCADDR "18RmTJe9qMech8siuhYfMtHo8RtcN1obC6" #define JUMBLR_MAXSECRETADDRS 777 -#define JUMBLR_SYNCHRONIZED_BLOCKS 2 // 60 -#define JUMBLR_INCR (99.65 / 100) +#define JUMBLR_SYNCHRONIZED_BLOCKS 2 //10 +#define JUMBLR_INCR 9.965 #define JUMBLR_FEE 0.001 #define JUMBLR_TXFEE 0.01 #define SMALLVAL 0.000000000000001 @@ -110,9 +110,10 @@ int32_t Jumblr_secretaddradd(char *secretaddr) // external { if ( (ind= Jumblr_secretaddrfind(secretaddr)) < 0 ) { - safecopy(Jumblr_secretaddrs[Jumblr_numsecretaddrs],secretaddr,64); - Jumblr_numsecretaddrs++; - } else return(ind); + ind = Jumblr_numsecretaddrs++; + safecopy(Jumblr_secretaddrs[ind],secretaddr,64); + } + return(ind); } else return(JUMBLR_ERROR_SECRETCANTBEDEPOSIT); } else return(JUMBLR_ERROR_TOOMANYSECRETS); } @@ -225,7 +226,7 @@ char *jumblr_zgetoperationstatus(char *opid) char *jumblr_sendt_to_z(char *taddr,char *zaddr,double amount) { - char params[1024]; double fee = (amount-3*JUMBLR_TXFEE) * JUMBLR_FEE; + char params[1024]; double fee = ((amount-3*JUMBLR_TXFEE) * JUMBLR_FEE) * 1.5; if ( jumblr_addresstype(zaddr) != 'z' || jumblr_addresstype(taddr) != 't' ) return(clonestr((char *)"{\"error\":\"illegal address in t to z\"}")); sprintf(params,"[\"%s\", [{\"address\":\"%s\",\"amount\":%.8f}, {\"address\":\"%s\",\"amount\":%.8f}], 1, %.8f]",taddr,zaddr,amount-fee-JUMBLR_TXFEE,JUMBLR_ADDR,fee,JUMBLR_TXFEE); @@ -238,14 +239,15 @@ char *jumblr_sendz_to_z(char *zaddrS,char *zaddrD,double amount) char params[1024]; double fee = (amount-2*JUMBLR_TXFEE) * JUMBLR_FEE; if ( jumblr_addresstype(zaddrS) != 'z' || jumblr_addresstype(zaddrD) != 'z' ) return(clonestr((char *)"{\"error\":\"illegal address in z to z\"}")); - sprintf(params,"[\"%s\", [{\"address\":\"%s\",\"amount\":%.8f}, {\"address\":\"%s\",\"amount\":%.8f}], 1, %.8f]",zaddrS,zaddrD,amount-fee-JUMBLR_TXFEE,JUMBLR_ADDR,fee,JUMBLR_TXFEE); + //sprintf(params,"[\"%s\", [{\"address\":\"%s\",\"amount\":%.8f}, {\"address\":\"%s\",\"amount\":%.8f}], 1, %.8f]",zaddrS,zaddrD,amount-fee-JUMBLR_TXFEE,JUMBLR_ADDR,fee,JUMBLR_TXFEE); + sprintf(params,"[\"%s\", [{\"address\":\"%s\",\"amount\":%.8f}], 1, %.8f]",zaddrS,zaddrD,amount-fee-JUMBLR_TXFEE,JUMBLR_TXFEE); printf("z -> z: %s\n",params); return(jumblr_issuemethod(KMDUSERPASS,(char *)"z_sendmany",params,7771)); } char *jumblr_sendz_to_t(char *zaddr,char *taddr,double amount) { - char params[1024]; double fee = (amount-JUMBLR_TXFEE) * JUMBLR_FEE; + char params[1024]; double fee = ((amount-JUMBLR_TXFEE) * JUMBLR_FEE) * 1.5; if ( jumblr_addresstype(zaddr) != 'z' || jumblr_addresstype(taddr) != 't' ) return(clonestr((char *)"{\"error\":\"illegal address in z to t\"}")); sprintf(params,"[\"%s\", [{\"address\":\"%s\",\"amount\":%.8f}, {\"address\":\"%s\",\"amount\":%.8f}], 1, %.8f]",zaddr,taddr,amount-fee-JUMBLR_TXFEE,JUMBLR_ADDR,fee,JUMBLR_TXFEE); @@ -443,7 +445,7 @@ void jumblr_opidsupdate() { if ( (n= cJSON_GetArraySize(array)) > 0 && is_cJSON_Array(array) != 0 ) { - printf("%s -> n%d\n",retstr,n); + //printf("%s -> n%d\n",retstr,n); for (i=0; i> 2) % 3); + s = 2; switch ( s ) { case 0: // public -> z, need to importprivkey @@ -573,14 +576,14 @@ void jumblr_iteration() Jumblr_secretaddr(secretaddr); if ( (retstr= jumblr_sendz_to_t(ptr->dest,secretaddr,dstr(total))) != 0 ) { - printf("sendz_to_t.(%s)\n",retstr); + printf("%s sendz_to_t.(%s)\n",secretaddr,retstr); free(retstr); - } + } else printf("null return from jumblr_sendz_to_t\n"); ptr->spent = (uint32_t)time(NULL); break; } counter++; - } + } else printf("z->t spent.%u total %.8f error\n",ptr->spent,dstr(total)); } n++; } From 421d71a20700f2371ccd8fddb0b012dc3462432b Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 12:30:51 +0200 Subject: [PATCH 088/126] Test --- src/komodo_jumblr.h | 43 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index 8484c1711..06eb105e5 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -255,6 +255,13 @@ char *jumblr_sendz_to_t(char *zaddr,char *taddr,double amount) return(jumblr_issuemethod(KMDUSERPASS,(char *)"z_sendmany",params,7771)); } +char *jumblr_zlistaddresses(char *addr) +{ + char params[1024]; + sprintf(params,"[\"%s\", 1]",addr); + return(jumblr_issuemethod(KMDUSERPASS,(char *)"z_listaddresses",params,7771)); +} + char *jumblr_zlistreceivedbyaddress(char *addr) { char params[1024]; @@ -436,6 +443,20 @@ void jumblr_prune(struct jumblr_item *ptr) } } +void jumblr_zaddrinit(char *zaddr) +{ + char *retstr; cJSON *item; + if ( (retstr= jumblr_zlistreceivedbyaddress(zaddr)) != 0 ) + { + if ( (item= cJSON_Parse(retstr)) != 0 ) + { + printf("%s\n",jprint(item,0)); + free_json(item); + } + free(retstr); + } +} + void jumblr_opidsupdate() { char *retstr; cJSON *array; int32_t i,n; struct jumblr_item *ptr; @@ -467,13 +488,29 @@ void jumblr_opidsupdate() void jumblr_iteration() { static int32_t lastheight; static uint32_t lasttime; - char *zaddr,*addr,*retstr,secretaddr[64]; int32_t iter,height,counter,chosen_one,n; uint64_t amount=0,total=0; double fee; struct jumblr_item *ptr,*tmp; uint8_t r,s; + char *zaddr,*addr,*retstr,secretaddr[64]; cJSON *array; int32_t i,iter,height,counter,chosen_one,n; uint64_t amount=0,total=0; double fee; struct jumblr_item *ptr,*tmp; uint8_t r,s; + if ( lasttime == 0 ) + { + if ( (retstr= jumblr_zlistaddresses()) != 0 ) + { + if ( (array= cJSON_Parse(retstr)) != 0 ) + { + if ( (n= cJSON_GetArraySize(array)) > 0 && is_cJSON_Array(array) != 0 ) + { + for (i=0; inHeight; - if ( lastheight == height ) - return; if ( time(NULL) < lasttime+60 ) return; lasttime = (uint32_t)time(NULL); + if ( lastheight == height ) + return; if ( (height % JUMBLR_SYNCHRONIZED_BLOCKS) != 0 ) return; fee = JUMBLR_INCR * JUMBLR_FEE; From 007d1a865786a413c3cc518deeaf088177c618e0 Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 12:32:02 +0200 Subject: [PATCH 089/126] Test --- src/komodo_jumblr.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index 06eb105e5..7de1b3c1a 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -255,10 +255,10 @@ char *jumblr_sendz_to_t(char *zaddr,char *taddr,double amount) return(jumblr_issuemethod(KMDUSERPASS,(char *)"z_sendmany",params,7771)); } -char *jumblr_zlistaddresses(char *addr) +char *jumblr_zlistaddresses() { char params[1024]; - sprintf(params,"[\"%s\", 1]",addr); + sprintf(params,"[]"); return(jumblr_issuemethod(KMDUSERPASS,(char *)"z_listaddresses",params,7771)); } From c45ec669c16a279f4dfa7b72a65e357369358d37 Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 12:40:50 +0200 Subject: [PATCH 090/126] Test --- src/komodo_jumblr.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index 7de1b3c1a..53736c402 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -445,12 +445,13 @@ void jumblr_prune(struct jumblr_item *ptr) void jumblr_zaddrinit(char *zaddr) { + //[{"txid":"8186f4e9868dc8525126a92f2fe93ea86272b091609fafdc418a76a7fda34ebd","amount":1.00749152,"memo":"f600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}] char *retstr; cJSON *item; if ( (retstr= jumblr_zlistreceivedbyaddress(zaddr)) != 0 ) { if ( (item= cJSON_Parse(retstr)) != 0 ) { - printf("%s\n",jprint(item,0)); + printf("%s %s %s\n",zaddr,jumblr_zgetbalance(zaddr),jprint(item,0)); free_json(item); } free(retstr); From f3f124e1abc53e0a07fb93d2cf63ca5f47425f55 Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 13:14:56 +0200 Subject: [PATCH 091/126] Test --- src/komodo_jumblr.h | 56 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 46 insertions(+), 10 deletions(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index 53736c402..c002a6c80 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -41,9 +41,9 @@ struct jumblr_item { UT_hash_handle hh; - int64_t amount,fee,txfee; + int64_t amount,fee,txfee; // fee and txfee not really used (yet) uint32_t spent,pad; - char opid[64],src[128],dest[128],status; + char opid[66],src[128],dest[128],status; } *Jumblrs; char Jumblr_secretaddrs[JUMBLR_MAXSECRETADDRS][64],Jumblr_deposit[64]; @@ -446,15 +446,51 @@ void jumblr_prune(struct jumblr_item *ptr) void jumblr_zaddrinit(char *zaddr) { //[{"txid":"8186f4e9868dc8525126a92f2fe93ea86272b091609fafdc418a76a7fda34ebd","amount":1.00749152,"memo":"f600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}] - char *retstr; cJSON *item; - if ( (retstr= jumblr_zlistreceivedbyaddress(zaddr)) != 0 ) + char *retstr; cJSON *item; double total; bits256 txid; char txidstr[65],t_z,z_t; + if ( (totalstr= jumblr_zgetbalance(zaddr)) != 0 ) { - if ( (item= cJSON_Parse(retstr)) != 0 ) + if ( (total= atof(total)) > SMALLVAL ) { - printf("%s %s %s\n",zaddr,jumblr_zgetbalance(zaddr),jprint(item,0)); - free_json(item); + if ( (retstr= jumblr_zlistreceivedbyaddress(zaddr)) != 0 ) + { + if ( (array= cJSON_Parse(retstr)) != 0 ) + { + if ( cJSON_GetArraySize(array) == 1 && is_cJSON_Array(array) != 0 ) + { + item = jitem(array,0); + if ( (uint64_t)(total * SATOSHIDEN) == (uint64_t)(jdouble(item,"amount") * SATOSHIDEN) ) + { + txid = jbits256(item,"txid"); + bits256_str(txidstr,txid); + if ( (ptr= jumblr_opidadd(txidstr)) != 0 ) + { + ptr->amount = (total * SATOSHIDEN); + ptr->status = 1; + strcpy(ptr->dest,zaddr); + if ( jumblr_numvins(txid) == 0 ) + { + z_z = 1; + strcpy(ptr->src,"zcaddr"); + if ( jumblr_addresstype(ptr->src) != 'z' ) + printf("error setting address type to Z: %s\n",jprint(item,0)); + } + else + { + t_z = 1; + strcpy(ptr->src,"taddr"); + if ( jumblr_addresstype(ptr->src) != 't' ) + printf("error setting address type to T: %s\n",jprint(item,0)); + } + printf("%s %s %.8f t_z.%d z_z.%d\n",zaddr,txidstr,total,t_z,z_z); // cant be z->t from spend + } + } else printf("mismatched %s total %.8f vs %.8f\n",zaddr,total,jdouble(item,"amount")); + } + free_json(array); + } + free(retstr); + } } - free(retstr); + free(totalstr); } } @@ -555,7 +591,7 @@ void jumblr_iteration() counter = n = 0; HASH_ITER(hh,Jumblrs,ptr,tmp) { - if ( jumblr_addresstype(ptr->src) == 't' && jumblr_addresstype(ptr->dest) == 'z' ) + if ( ptr->status > 0 && jumblr_addresstype(ptr->src) == 't' && jumblr_addresstype(ptr->dest) == 'z' ) { if ( ptr->spent == 0 && (total= jumblr_balance(ptr->dest)) >= (fee + JUMBLR_FEE)*SATOSHIDEN ) { @@ -605,7 +641,7 @@ void jumblr_iteration() counter = n = 0; HASH_ITER(hh,Jumblrs,ptr,tmp) { - if ( jumblr_addresstype(ptr->src) == 'z' && jumblr_addresstype(ptr->dest) == 'z' ) + if ( ptr->status > 0 && jumblr_addresstype(ptr->src) == 'z' && jumblr_addresstype(ptr->dest) == 'z' ) { if ( ptr->spent == 0 && (total= jumblr_balance(ptr->dest)) >= (fee + JUMBLR_FEE)*SATOSHIDEN ) { From 61c2e3f5bf27b565a1212636435c60e7c2991fb8 Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 13:16:01 +0200 Subject: [PATCH 092/126] Test --- src/komodo_jumblr.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index c002a6c80..6a16f22b6 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -445,8 +445,7 @@ void jumblr_prune(struct jumblr_item *ptr) void jumblr_zaddrinit(char *zaddr) { - //[{"txid":"8186f4e9868dc8525126a92f2fe93ea86272b091609fafdc418a76a7fda34ebd","amount":1.00749152,"memo":"f600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}] - char *retstr; cJSON *item; double total; bits256 txid; char txidstr[65],t_z,z_t; + char *retstr; cJSON *item,*array; double total; bits256 txid; char txidstr[65],t_z,z_z; if ( (totalstr= jumblr_zgetbalance(zaddr)) != 0 ) { if ( (total= atof(total)) > SMALLVAL ) From a78fe447982744ce439ff6b8b639ce145efd1a76 Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 13:19:25 +0200 Subject: [PATCH 093/126] Test --- src/komodo_jumblr.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index 6a16f22b6..597dfe3f0 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -445,7 +445,7 @@ void jumblr_prune(struct jumblr_item *ptr) void jumblr_zaddrinit(char *zaddr) { - char *retstr; cJSON *item,*array; double total; bits256 txid; char txidstr[65],t_z,z_z; + struct jumblr_item *ptr; char *retstr; cJSON *item,*array; double total; bits256 txid; char txidstr[65],t_z,z_z; if ( (totalstr= jumblr_zgetbalance(zaddr)) != 0 ) { if ( (total= atof(total)) > SMALLVAL ) From bbd64789fc7dd64a5623b176288b6411fb521865 Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 13:26:33 +0200 Subject: [PATCH 094/126] Test --- src/komodo_jumblr.h | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index 597dfe3f0..318ef6a28 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -297,6 +297,30 @@ char *jumblr_listunspent(char *coinaddr) return(jumblr_issuemethod(KMDUSERPASS,(char *)"listunspent",params,7771)); } +char *jumblr_gettransaction(char *txidstr) +{ + char params[1024]; + sprintf(params,"[\"%s\", 1]",txidstr); + return(jumblr_issuemethod(KMDUSERPASS,(char *)"getrawtransaction",params,7771)); +} + +int32_t jumblr_numvins(bits256 txid) +{ + char txidstr[65],params[1024],*retstr; cJSON *retjson,*vins; int32_t numvins = -1; + bits256_str(txidstr,txid); + if ( (retstr= jumblr_gettransaction(txidstr)) != 0 ) + { + if ( (retjson= cJSON_Parse(retstr)) != 0 ) + { + if ( (vins= jarray(&n,retjson,"vin")) != 0 ) + numvins = n; + free_json(retjson); + } + free(retstr); + } + return(numvins); +} + int64_t jumblr_receivedby(char *addr) { char *retstr; int64_t total = 0; @@ -445,7 +469,7 @@ void jumblr_prune(struct jumblr_item *ptr) void jumblr_zaddrinit(char *zaddr) { - struct jumblr_item *ptr; char *retstr; cJSON *item,*array; double total; bits256 txid; char txidstr[65],t_z,z_z; + struct jumblr_item *ptr; char *retstr,*totalstr; cJSON *item,*array; double total; bits256 txid; char txidstr[65],t_z,z_z; if ( (totalstr= jumblr_zgetbalance(zaddr)) != 0 ) { if ( (total= atof(total)) > SMALLVAL ) @@ -457,9 +481,9 @@ void jumblr_zaddrinit(char *zaddr) if ( cJSON_GetArraySize(array) == 1 && is_cJSON_Array(array) != 0 ) { item = jitem(array,0); - if ( (uint64_t)(total * SATOSHIDEN) == (uint64_t)(jdouble(item,"amount") * SATOSHIDEN) ) + if ( (uint64_t)(total * SATOSHIDEN) == (uint64_t)(jdouble(item,(char *)"amount") * SATOSHIDEN) ) { - txid = jbits256(item,"txid"); + txid = jbits256(item,(char *)"txid"); bits256_str(txidstr,txid); if ( (ptr= jumblr_opidadd(txidstr)) != 0 ) { @@ -482,7 +506,7 @@ void jumblr_zaddrinit(char *zaddr) } printf("%s %s %.8f t_z.%d z_z.%d\n",zaddr,txidstr,total,t_z,z_z); // cant be z->t from spend } - } else printf("mismatched %s total %.8f vs %.8f\n",zaddr,total,jdouble(item,"amount")); + } else printf("mismatched %s total %.8f vs %.8f\n",zaddr,total,jdouble(item,(char *)"amount")); } free_json(array); } From d506468b2c39970c7021ca25e3e12096d1e10ce7 Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 13:27:27 +0200 Subject: [PATCH 095/126] Test --- src/komodo_jumblr.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index 318ef6a28..12b8799e3 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -306,7 +306,7 @@ char *jumblr_gettransaction(char *txidstr) int32_t jumblr_numvins(bits256 txid) { - char txidstr[65],params[1024],*retstr; cJSON *retjson,*vins; int32_t numvins = -1; + char txidstr[65],params[1024],*retstr; cJSON *retjson,*vins; int32_t n,numvins = -1; bits256_str(txidstr,txid); if ( (retstr= jumblr_gettransaction(txidstr)) != 0 ) { From e5dfb297da776441983abee9a5e6c7079b42217b Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 13:28:42 +0200 Subject: [PATCH 096/126] Test --- src/komodo_jumblr.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index 12b8799e3..cff1524d3 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -312,7 +312,7 @@ int32_t jumblr_numvins(bits256 txid) { if ( (retjson= cJSON_Parse(retstr)) != 0 ) { - if ( (vins= jarray(&n,retjson,"vin")) != 0 ) + if ( (vins= jarray(&n,retjson,(char *)"vin")) != 0 ) numvins = n; free_json(retjson); } @@ -472,7 +472,7 @@ void jumblr_zaddrinit(char *zaddr) struct jumblr_item *ptr; char *retstr,*totalstr; cJSON *item,*array; double total; bits256 txid; char txidstr[65],t_z,z_z; if ( (totalstr= jumblr_zgetbalance(zaddr)) != 0 ) { - if ( (total= atof(total)) > SMALLVAL ) + if ( (total= atof(totalstr)) > SMALLVAL ) { if ( (retstr= jumblr_zlistreceivedbyaddress(zaddr)) != 0 ) { From afae290a4257ac398975cd2740e61400c171a51e Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 13:38:29 +0200 Subject: [PATCH 097/126] Test --- src/komodo_jumblr.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index cff1524d3..c5348abf5 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -478,6 +478,7 @@ void jumblr_zaddrinit(char *zaddr) { if ( (array= cJSON_Parse(retstr)) != 0 ) { + t_z = z_z = 0; if ( cJSON_GetArraySize(array) == 1 && is_cJSON_Array(array) != 0 ) { item = jitem(array,0); @@ -659,11 +660,13 @@ void jumblr_iteration() { jumblr_opidsupdate(); chosen_one = -1; + printf("Jumblr_numsecretaddrs.%d\n",Jumblr_numsecretaddrs); for (iter=0; iter<2; iter++) { counter = n = 0; HASH_ITER(hh,Jumblrs,ptr,tmp) { + printf("status.%d %c %c %.8f\n",ptr->status,jumblr_addresstype(ptr->src),jumblr_addresstype(ptr->dest),dstr(ptr->amount)); if ( ptr->status > 0 && jumblr_addresstype(ptr->src) == 'z' && jumblr_addresstype(ptr->dest) == 'z' ) { if ( ptr->spent == 0 && (total= jumblr_balance(ptr->dest)) >= (fee + JUMBLR_FEE)*SATOSHIDEN ) From ad74c1a37eb6e9d6836a3445fe684a5123da144a Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 13:45:34 +0200 Subject: [PATCH 098/126] Test --- src/komodo_jumblr.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index c5348abf5..92cebf937 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -313,7 +313,10 @@ int32_t jumblr_numvins(bits256 txid) if ( (retjson= cJSON_Parse(retstr)) != 0 ) { if ( (vins= jarray(&n,retjson,(char *)"vin")) != 0 ) + { numvins = n; + printf("numvins.%d\n",n); + } else printf("no vin.(%s)\n",retstr); free_json(retjson); } free(retstr); From c4818fd41e91029edf6c1e328b4e94023ff07b85 Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 13:51:30 +0200 Subject: [PATCH 099/126] Test --- src/komodo_jumblr.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index 92cebf937..8c8ee5775 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -312,11 +312,11 @@ int32_t jumblr_numvins(bits256 txid) { if ( (retjson= cJSON_Parse(retstr)) != 0 ) { - if ( (vins= jarray(&n,retjson,(char *)"vin")) != 0 ) + if ( jobj(retjson,(char *)"vin") != 0 && ((vins= jarray(&n,retjson,(char *)"vin")) == 0 || n == 0) ) { numvins = n; - printf("numvins.%d\n",n); - } else printf("no vin.(%s)\n",retstr); + //printf("numvins.%d\n",n); + } //else printf("no vin.(%s)\n",retstr); free_json(retjson); } free(retstr); From 231bcedcf1fdf72b52023ed50259cd5c6b1e47a1 Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 13:58:12 +0200 Subject: [PATCH 100/126] Test --- src/komodo_jumblr.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index 8c8ee5775..5022b2371 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -494,10 +494,12 @@ void jumblr_zaddrinit(char *zaddr) ptr->amount = (total * SATOSHIDEN); ptr->status = 1; strcpy(ptr->dest,zaddr); + if ( jumblr_addresstype(ptr->dest) != 'z' ) + printf("error setting dest type to Z: %s\n",jprint(item,0)); if ( jumblr_numvins(txid) == 0 ) { z_z = 1; - strcpy(ptr->src,"zcaddr"); + strcpy(ptr->src,zaddr); if ( jumblr_addresstype(ptr->src) != 'z' ) printf("error setting address type to Z: %s\n",jprint(item,0)); } From eb23a6422056fa8f4d425609d027278f73e5e20d Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 14:09:52 +0200 Subject: [PATCH 101/126] Test --- src/komodo_jumblr.h | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index 5022b2371..7789b5b81 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -450,6 +450,8 @@ void jumblr_opidupdate(struct jumblr_item *ptr) void jumblr_prune(struct jumblr_item *ptr) { struct jumblr_item *tmp; char oldsrc[128]; int32_t flag = 1; + if ( is_hexstr(ptr->opid,0) == 64 ) + return; printf("jumblr_prune %s\n",ptr->opid); strcpy(oldsrc,ptr->src); free(jumblr_zgetoperationresult(ptr->opid)); @@ -460,11 +462,14 @@ void jumblr_prune(struct jumblr_item *ptr) { if ( strcmp(oldsrc,ptr->dest) == 0 ) { - printf("jumblr_prune %s (%s -> %s) matched oldsrc\n",ptr->opid,ptr->src,ptr->dest); - free(jumblr_zgetoperationresult(ptr->opid)); - strcpy(oldsrc,ptr->src); - flag = 1; - break; + if ( is_hexstr(ptr->opid,0) != 64 ) + { + printf("jumblr_prune %s (%s -> %s) matched oldsrc\n",ptr->opid,ptr->src,ptr->dest); + free(jumblr_zgetoperationresult(ptr->opid)); + strcpy(oldsrc,ptr->src); + flag = 1; + break; + } } } } @@ -500,6 +505,9 @@ void jumblr_zaddrinit(char *zaddr) { z_z = 1; strcpy(ptr->src,zaddr); + ptr->src[3] = '0'; + ptr->src[4] = '0'; + ptr->src[5] = '0'; if ( jumblr_addresstype(ptr->src) != 'z' ) printf("error setting address type to Z: %s\n",jprint(item,0)); } @@ -585,7 +593,7 @@ void jumblr_iteration() s = 2; switch ( s ) { - case 0: // public -> z, need to importprivkey + case 0: // t -> z if ( Jumblr_deposit[0] != 0 && (total= jumblr_balance(Jumblr_deposit)) >= (JUMBLR_INCR + 3*(fee+JUMBLR_TXFEE))*SATOSHIDEN ) { if ( (zaddr= jumblr_zgetnewaddress()) != 0 ) @@ -635,7 +643,7 @@ void jumblr_iteration() } else addr = zaddr; if ( (retstr= jumblr_sendz_to_z(ptr->dest,addr,dstr(total))) != 0 ) { - printf("n.%d counter.%d chosen_one.%d sendz_to_z.(%s)\n",n,counter,chosen_one,retstr); + printf("n.%d counter.%d chosen_one.%d send z_to_z.(%s)\n",n,counter,chosen_one,retstr); free(retstr); } ptr->spent = (uint32_t)time(NULL); @@ -660,18 +668,17 @@ void jumblr_iteration() } } break; - case 2: // z -> public + case 2: // z -> t if ( Jumblr_numsecretaddrs > 0 ) { jumblr_opidsupdate(); chosen_one = -1; - printf("Jumblr_numsecretaddrs.%d\n",Jumblr_numsecretaddrs); for (iter=0; iter<2; iter++) { counter = n = 0; HASH_ITER(hh,Jumblrs,ptr,tmp) { - printf("status.%d %c %c %.8f\n",ptr->status,jumblr_addresstype(ptr->src),jumblr_addresstype(ptr->dest),dstr(ptr->amount)); + //printf("status.%d %c %c %.8f\n",ptr->status,jumblr_addresstype(ptr->src),jumblr_addresstype(ptr->dest),dstr(ptr->amount)); if ( ptr->status > 0 && jumblr_addresstype(ptr->src) == 'z' && jumblr_addresstype(ptr->dest) == 'z' ) { if ( ptr->spent == 0 && (total= jumblr_balance(ptr->dest)) >= (fee + JUMBLR_FEE)*SATOSHIDEN ) @@ -681,7 +688,7 @@ void jumblr_iteration() Jumblr_secretaddr(secretaddr); if ( (retstr= jumblr_sendz_to_t(ptr->dest,secretaddr,dstr(total))) != 0 ) { - printf("%s sendz_to_t.(%s)\n",secretaddr,retstr); + printf("%s send z_to_t.(%s)\n",secretaddr,retstr); free(retstr); } else printf("null return from jumblr_sendz_to_t\n"); ptr->spent = (uint32_t)time(NULL); From 1cacba6a844f580f1889272390a5d0c72deef69a Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 14:21:52 +0200 Subject: [PATCH 102/126] Test --- README.md | 40 ++++++++++++++++++++++++++++++++++++++++ src/komodo_jumblr.h | 10 +++++----- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 8278748a8..ef3d637a6 100644 --- a/README.md +++ b/README.md @@ -180,4 +180,44 @@ mv ~/.komodo ~/.komodo.old && mkdir ~/.komodo && cp ~/.komodo.old/komodo.conf ~/ ./komodod -exchange -exportdir=/tmp & ./komodo-cli importwallet /tmp/example +############## JUMBLR + +komodod now has jumblr_deposit and jumblr_secret RPC calls. + +Jumblr works like described previously where all the nodes with jumblr active synchronize their tx activity during the same block to maximize the mixing effect. However, unlike all other mixers/tumblers, you never give up control of your coins to anybody else. JUMBLR uses a one to many allocation of funds, ie. one deposit address and many secret addresses. You can always run multiple komodod daemons to get multiple active deposit addresses. + +JUMBLR implements t -> z, z -> z and z -> t transactions to maximize privacy of the destination t (transparent) address. So while it is transparent, its first activity is funds coming from an untracable z address. + +Which of the three stages is done is randomly selected at each turn. Also when there are more than one possible transaction at the selected stage, a random one is selected. This randomization prevents analyzing incoming z ->t transactions by its size to correlate it to the originating address. + +jumblr_deposit designates the deposit address as the jumblr deposit address for that session. You can select an address that already has funds in it and it will immediately start jumblr process. If there are no funds, it will wait until you send funds to it. + +There are three sizes of a jumblr transaction: 10 KMD, 100 KMD and 1000 KMD. There is also a fixed interval of blocks where all jumblr nodes are active. Currently it is set to be 10, but this is subject to change. Only during every 10*10 blocks are the largest 1000 KMD transactions processed, so this concentrates all the large transactions every N*N blocks. + +jumblr_secret notifies JUMBLR where to send the final z -> t transactions. In order to allow larger accounts to obtain privacy, up to 777 secret addresses are supported. Whenever a z -> t stage is activated, a random secret address from the list of the then active secret addresses is selected. + +Practical Advice: +Obtaining privacy used to be very difficult. JUMBLR makes it as simple as issuing two command line calls. Higher level layers can be added to help manage the addresses, ie. linking them at the passphrase level. Such things are left to each implementation. + +Once obtained, it is very easy to lose all the privacy. With a single errant transaction that combines some previously used address and the secretaddress, well, the secretaddress is no longer so private. + +The advice is to setup a totally separate node! + +This might seem a bit drastic, but if you want to maintain privacy, it is best to make it look like all the transactions are coming from a different node. The easiest way for most people to do this is to actually have a different node. + +It can be a dedicated laptop (recommended) or a VPS (for not so big amounts) with a totally fresh komodod wallet. Generate an address on this wallet and use that as the jumblr_secret address on your main node. As the JUMBLR operates funds will teleport into your secret node's address. If you are careful and never use the same IP address for both your nodes, you will be able to maintain very good privacy. + +Of course, dont be sending emails that link the two accounts together! Dont use secret address funds for home delivery purchases!! Etc. There are many ways to lose the privacy, just think about what linkages can be dont at the IP and blockchain level and that should be a useful preparation. + +What if you have 100,000 KMD and you dont want others to know you are such a whale? + +Instead of generating 1 secret address, generate 100 and make a script file with: + +./komodo-cli jumblr_secret +./komodo-cli jumblr_secret +... +./komodo-cli jumblr_secret + +And make sure to delete all traces of this when the JUMBLR is finished. You will end up with 100 addresses that have an average of 1000 KMD each. So as long as you are careful and dont do a 10,000 KMD transaction (that will link 10 of your secret addresses together), you can appear as 100 different people each with 1000 KMD. + diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index 7789b5b81..abb1d66f2 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -628,9 +628,9 @@ void jumblr_iteration() counter = n = 0; HASH_ITER(hh,Jumblrs,ptr,tmp) { - if ( ptr->status > 0 && jumblr_addresstype(ptr->src) == 't' && jumblr_addresstype(ptr->dest) == 'z' ) + if ( ptr->spent == 0 && ptr->status > 0 && jumblr_addresstype(ptr->src) == 't' && jumblr_addresstype(ptr->dest) == 'z' ) { - if ( ptr->spent == 0 && (total= jumblr_balance(ptr->dest)) >= (fee + JUMBLR_FEE)*SATOSHIDEN ) + if ( (total= jumblr_balance(ptr->dest)) >= (fee + JUMBLR_FEE)*SATOSHIDEN ) { if ( iter == 1 && counter == chosen_one ) { @@ -679,9 +679,9 @@ void jumblr_iteration() HASH_ITER(hh,Jumblrs,ptr,tmp) { //printf("status.%d %c %c %.8f\n",ptr->status,jumblr_addresstype(ptr->src),jumblr_addresstype(ptr->dest),dstr(ptr->amount)); - if ( ptr->status > 0 && jumblr_addresstype(ptr->src) == 'z' && jumblr_addresstype(ptr->dest) == 'z' ) + if ( ptr->spent == 0 && ptr->status > 0 && jumblr_addresstype(ptr->src) == 'z' && jumblr_addresstype(ptr->dest) == 'z' ) { - if ( ptr->spent == 0 && (total= jumblr_balance(ptr->dest)) >= (fee + JUMBLR_FEE)*SATOSHIDEN ) + if ( (total= jumblr_balance(ptr->dest)) >= (fee + JUMBLR_FEE)*SATOSHIDEN ) { if ( iter == 1 && n == chosen_one ) { @@ -708,7 +708,7 @@ void jumblr_iteration() chosen_one = -chosen_one; chosen_one %= counter; printf("jumblr z->t chosen_one.%d of %d, from %d\n",chosen_one,counter,n); - } + } else printf("n.%d counter.%d chosen.%d\n",n,counter,chosen); } } break; From 4e45c04103c358b8371dfa9112589c60ff32ea8d Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 14:24:22 +0200 Subject: [PATCH 103/126] Test --- src/komodo_jumblr.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index abb1d66f2..9359f95ba 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -708,7 +708,7 @@ void jumblr_iteration() chosen_one = -chosen_one; chosen_one %= counter; printf("jumblr z->t chosen_one.%d of %d, from %d\n",chosen_one,counter,n); - } else printf("n.%d counter.%d chosen.%d\n",n,counter,chosen); + } else printf("n.%d counter.%d chosen.%d\n",n,counter,chosen_one); } } break; From 3db947b84e90b4db8a385142102004bd75f0289f Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 14:33:26 +0200 Subject: [PATCH 104/126] Test --- src/komodo_jumblr.h | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index 9359f95ba..bdb31a329 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -27,7 +27,7 @@ #define JUMBLR_ADDR "RGhxXpXSSBTBm9EvNsXnTQczthMCxHX91t" #define JUMBLR_BTCADDR "18RmTJe9qMech8siuhYfMtHo8RtcN1obC6" #define JUMBLR_MAXSECRETADDRS 777 -#define JUMBLR_SYNCHRONIZED_BLOCKS 2 //10 +#define JUMBLR_SYNCHRONIZED_BLOCKS 10 #define JUMBLR_INCR 9.965 #define JUMBLR_FEE 0.001 #define JUMBLR_TXFEE 0.01 @@ -590,7 +590,6 @@ void jumblr_iteration() fee = JUMBLR_INCR * JUMBLR_FEE; OS_randombytes(&r,sizeof(r)); s = ((r >> 2) % 3); - s = 2; switch ( s ) { case 0: // t -> z @@ -683,7 +682,7 @@ void jumblr_iteration() { if ( (total= jumblr_balance(ptr->dest)) >= (fee + JUMBLR_FEE)*SATOSHIDEN ) { - if ( iter == 1 && n == chosen_one ) + if ( iter == 1 && counter == chosen_one ) { Jumblr_secretaddr(secretaddr); if ( (retstr= jumblr_sendz_to_t(ptr->dest,secretaddr,dstr(total))) != 0 ) @@ -695,7 +694,7 @@ void jumblr_iteration() break; } counter++; - } else printf("z->t spent.%u total %.8f error\n",ptr->spent,dstr(total)); + } //else printf("z->t spent.%u total %.8f error\n",ptr->spent,dstr(total)); } n++; } @@ -708,7 +707,7 @@ void jumblr_iteration() chosen_one = -chosen_one; chosen_one %= counter; printf("jumblr z->t chosen_one.%d of %d, from %d\n",chosen_one,counter,n); - } else printf("n.%d counter.%d chosen.%d\n",n,counter,chosen_one); + } //else printf("n.%d counter.%d chosen.%d\n",n,counter,chosen_one); } } break; From 6a1b24527e2b6e299b5a507b1ba118c47e183431 Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 15:13:05 +0200 Subject: [PATCH 105/126] Test --- src/komodo_jumblr.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index bdb31a329..259f0f3ab 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -580,11 +580,12 @@ void jumblr_iteration() } } height = (int32_t)chainActive.Tip()->nHeight; - if ( time(NULL) < lasttime+60 ) + if ( time(NULL) < lasttime+6 ) return; lasttime = (uint32_t)time(NULL); if ( lastheight == height ) return; + lastheight = height; if ( (height % JUMBLR_SYNCHRONIZED_BLOCKS) != 0 ) return; fee = JUMBLR_INCR * JUMBLR_FEE; From 92330f839aae5a9537a8d3863f53dc035e50e8e9 Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 15:20:26 +0200 Subject: [PATCH 106/126] Test --- src/komodo_jumblr.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index 259f0f3ab..d77ae0585 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -520,7 +520,7 @@ void jumblr_zaddrinit(char *zaddr) } printf("%s %s %.8f t_z.%d z_z.%d\n",zaddr,txidstr,total,t_z,z_z); // cant be z->t from spend } - } else printf("mismatched %s total %.8f vs %.8f\n",zaddr,total,jdouble(item,(char *)"amount")); + } else printf("mismatched %s total %.8f vs %.8f -> %lld\n",zaddr,total,jdouble(item,(char *)"amount"),(uint64_t)(total * SATOSHIDEN) - (uint64_t)(jdouble(item,(char *)"amount") * SATOSHIDEN)); } free_json(array); } From e0befed0838a37a0922827be157e4b4f4bf79500 Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 15:22:37 +0200 Subject: [PATCH 107/126] Test --- src/komodo_jumblr.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index d77ae0585..c7b40ba71 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -520,7 +520,7 @@ void jumblr_zaddrinit(char *zaddr) } printf("%s %s %.8f t_z.%d z_z.%d\n",zaddr,txidstr,total,t_z,z_z); // cant be z->t from spend } - } else printf("mismatched %s total %.8f vs %.8f -> %lld\n",zaddr,total,jdouble(item,(char *)"amount"),(uint64_t)(total * SATOSHIDEN) - (uint64_t)(jdouble(item,(char *)"amount") * SATOSHIDEN)); + } else printf("mismatched %s total %.8f vs %.8f -> %lld\n",zaddr,total,jdouble(item,(char *)"amount"),(long long)((uint64_t)(total * SATOSHIDEN) - (uint64_t)(jdouble(item,(char *)"amount") * SATOSHIDEN))); } free_json(array); } From b8623323cd95b2cedd098f2e40bdf9dcc9070df0 Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 15:27:07 +0200 Subject: [PATCH 108/126] Test --- src/komodo_jumblr.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index c7b40ba71..9737ad2ae 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -490,7 +490,7 @@ void jumblr_zaddrinit(char *zaddr) if ( cJSON_GetArraySize(array) == 1 && is_cJSON_Array(array) != 0 ) { item = jitem(array,0); - if ( (uint64_t)(total * SATOSHIDEN) == (uint64_t)(jdouble(item,(char *)"amount") * SATOSHIDEN) ) + if ( (uint64_t)((total+0.0000000049) * SATOSHIDEN) == (uint64_t)((jdouble(item,(char *)"amount")+0.0000000049) * SATOSHIDEN) ) { txid = jbits256(item,(char *)"txid"); bits256_str(txidstr,txid); From 255e8e6932be1f16c64d3cdeb0c2214076dc457c Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 15:28:10 +0200 Subject: [PATCH 109/126] Test --- src/komodo_jumblr.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index 9737ad2ae..0641ed332 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -520,7 +520,7 @@ void jumblr_zaddrinit(char *zaddr) } printf("%s %s %.8f t_z.%d z_z.%d\n",zaddr,txidstr,total,t_z,z_z); // cant be z->t from spend } - } else printf("mismatched %s total %.8f vs %.8f -> %lld\n",zaddr,total,jdouble(item,(char *)"amount"),(long long)((uint64_t)(total * SATOSHIDEN) - (uint64_t)(jdouble(item,(char *)"amount") * SATOSHIDEN))); + } else printf("mismatched %s %s total %.8f vs %.8f -> %lld\n",zaddr,totalstr,dstr(SATOSHIDEN * total),dstr(SATOSHIDEN * jdouble(item,(char *)"amount")),(long long)((uint64_t)(total * SATOSHIDEN) - (uint64_t)(jdouble(item,(char *)"amount") * SATOSHIDEN))); } free_json(array); } From 08952acd8fac63d65131ff198baae9f2457f1df3 Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 21:43:55 +0200 Subject: [PATCH 110/126] Test --- src/komodo_jumblr.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index 0641ed332..13cec3871 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -139,7 +139,11 @@ int32_t Jumblr_depositaddradd(char *depositaddr) // external { if ( (ismine= jobj(retjson,(char *)"ismine")) != 0 && is_cJSON_True(ismine) != 0 ) retval = 0; - else retval = JUMBLR_ERROR_NOTINWALLET; + else + { + retval = JUMBLR_ERROR_NOTINWALLET; + printf("%s not in wallet: ismine.%p %d %s\n",ismine,is_cJSON_True(ismine),jprint(retjson,0)); + } free_json(retjson); } free(retstr); From f33d372c768b099d45475d94b99aad544d7a2e6b Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 22:15:05 +0200 Subject: [PATCH 111/126] Test --- src/komodo_jumblr.h | 2 +- src/wallet/asyncrpcoperation_sendmany.cpp | 17 +++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index 13cec3871..f2d0510fb 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -142,7 +142,7 @@ int32_t Jumblr_depositaddradd(char *depositaddr) // external else { retval = JUMBLR_ERROR_NOTINWALLET; - printf("%s not in wallet: ismine.%p %d %s\n",ismine,is_cJSON_True(ismine),jprint(retjson,0)); + printf("%s not in wallet: ismine.%p %d %s\n",depositaddr,ismine,is_cJSON_True(ismine),jprint(retjson,0)); } free_json(retjson); } diff --git a/src/wallet/asyncrpcoperation_sendmany.cpp b/src/wallet/asyncrpcoperation_sendmany.cpp index 18e25bc97..4af696de5 100644 --- a/src/wallet/asyncrpcoperation_sendmany.cpp +++ b/src/wallet/asyncrpcoperation_sendmany.cpp @@ -1107,13 +1107,18 @@ void AsyncRPCOperation_sendmany::add_taddr_change_output_to_tx(CAmount amount) { LOCK2(cs_main, pwalletMain->cs_wallet); EnsureWalletIsUnlocked(); - CReserveKey keyChange(pwalletMain); - CPubKey vchPubKey; - bool ret = keyChange.GetReservedKey(vchPubKey); - if (!ret) { - throw JSONRPCError(RPC_WALLET_KEYPOOL_RAN_OUT, "Could not generate a taddr to use as a change address"); // should never fail, as we just unlocked + if ( 0 ) + CScript scriptPubKey = GetScriptForDestination(fromaddress.Get()); + else + { + CReserveKey keyChange(pwalletMain); + CPubKey vchPubKey; + bool ret = keyChange.GetReservedKey(vchPubKey); + if (!ret) { + throw JSONRPCError(RPC_WALLET_KEYPOOL_RAN_OUT, "Could not generate a taddr to use as a change address"); // should never fail, as we just unlocked + } + CScript scriptPubKey = GetScriptForDestination(vchPubKey.GetID()); } - CScript scriptPubKey = GetScriptForDestination(vchPubKey.GetID()); CTxOut out(amount, scriptPubKey); CMutableTransaction rawTx(tx_); From 3d0387c9849692fcd3d530d21f5825d1923092b2 Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 22:15:17 +0200 Subject: [PATCH 112/126] Test --- src/wallet/asyncrpcoperation_sendmany.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/wallet/asyncrpcoperation_sendmany.cpp b/src/wallet/asyncrpcoperation_sendmany.cpp index 4af696de5..53b2c43c7 100644 --- a/src/wallet/asyncrpcoperation_sendmany.cpp +++ b/src/wallet/asyncrpcoperation_sendmany.cpp @@ -1107,9 +1107,9 @@ void AsyncRPCOperation_sendmany::add_taddr_change_output_to_tx(CAmount amount) { LOCK2(cs_main, pwalletMain->cs_wallet); EnsureWalletIsUnlocked(); - if ( 0 ) - CScript scriptPubKey = GetScriptForDestination(fromaddress.Get()); - else + //if ( 0 ) + // CScript scriptPubKey = GetScriptForDestination(fromaddress.Get()); + //else { CReserveKey keyChange(pwalletMain); CPubKey vchPubKey; From a99362fad8ada16bf4d64784ba14dc5871097747 Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 22:17:33 +0200 Subject: [PATCH 113/126] Test --- src/wallet/asyncrpcoperation_sendmany.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/wallet/asyncrpcoperation_sendmany.cpp b/src/wallet/asyncrpcoperation_sendmany.cpp index 53b2c43c7..baac89315 100644 --- a/src/wallet/asyncrpcoperation_sendmany.cpp +++ b/src/wallet/asyncrpcoperation_sendmany.cpp @@ -1110,7 +1110,7 @@ void AsyncRPCOperation_sendmany::add_taddr_change_output_to_tx(CAmount amount) { //if ( 0 ) // CScript scriptPubKey = GetScriptForDestination(fromaddress.Get()); //else - { + //{ CReserveKey keyChange(pwalletMain); CPubKey vchPubKey; bool ret = keyChange.GetReservedKey(vchPubKey); @@ -1118,7 +1118,7 @@ void AsyncRPCOperation_sendmany::add_taddr_change_output_to_tx(CAmount amount) { throw JSONRPCError(RPC_WALLET_KEYPOOL_RAN_OUT, "Could not generate a taddr to use as a change address"); // should never fail, as we just unlocked } CScript scriptPubKey = GetScriptForDestination(vchPubKey.GetID()); - } + //} CTxOut out(amount, scriptPubKey); CMutableTransaction rawTx(tx_); From ceb639e0e879be8bc934f72d60611c0b632544ca Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 22:32:19 +0200 Subject: [PATCH 114/126] Test --- src/test/rpc_wallet_tests.cpp | 4 ++-- src/wallet/asyncrpcoperation_sendmany.cpp | 23 ++++++++++++----------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/test/rpc_wallet_tests.cpp b/src/test/rpc_wallet_tests.cpp index bbb318b0f..e1fcd8829 100644 --- a/src/test/rpc_wallet_tests.cpp +++ b/src/test/rpc_wallet_tests.cpp @@ -1048,14 +1048,14 @@ BOOST_AUTO_TEST_CASE(rpc_z_sendmany_internals) BOOST_CHECK(tx.vout.size() == 0); CAmount amount = 123.456; - proxy.add_taddr_change_output_to_tx(amount); + proxy.add_taddr_change_output_to_tx(0,amount); tx = proxy.getTx(); BOOST_CHECK(tx.vout.size() == 1); CTxOut out = tx.vout[0]; BOOST_CHECK_EQUAL(out.nValue, amount); amount = 1.111; - proxy.add_taddr_change_output_to_tx(amount); + proxy.add_taddr_change_output_to_tx(0,amount); tx = proxy.getTx(); BOOST_CHECK(tx.vout.size() == 2); out = tx.vout[1]; diff --git a/src/wallet/asyncrpcoperation_sendmany.cpp b/src/wallet/asyncrpcoperation_sendmany.cpp index baac89315..50201045f 100644 --- a/src/wallet/asyncrpcoperation_sendmany.cpp +++ b/src/wallet/asyncrpcoperation_sendmany.cpp @@ -318,7 +318,7 @@ bool AsyncRPCOperation_sendmany::main_impl() { CAmount change = funds - fundsSpent; if (change > 0) { - add_taddr_change_output_to_tx(change); + add_taddr_change_output_to_tx(0,change); LogPrint("zrpc", "%s: transparent change in transaction output (amount=%s)\n", getId(), @@ -395,7 +395,7 @@ bool AsyncRPCOperation_sendmany::main_impl() { "allow any change as there is currently no way to specify a change address " "in z_sendmany.", FormatMoney(change))); } else { - add_taddr_change_output_to_tx(change); + add_taddr_change_output_to_tx(&fromtaddr_,change); LogPrint("zrpc", "%s: transparent change in transaction output (amount=%s)\n", getId(), FormatMoney(change) @@ -1102,23 +1102,24 @@ void AsyncRPCOperation_sendmany::add_taddr_outputs_to_tx() { tx_ = CTransaction(rawTx); } -void AsyncRPCOperation_sendmany::add_taddr_change_output_to_tx(CAmount amount) { +void AsyncRPCOperation_sendmany::add_taddr_change_output_to_tx(CBitcoinAddress *fromaddress,CAmount amount) { LOCK2(cs_main, pwalletMain->cs_wallet); EnsureWalletIsUnlocked(); - //if ( 0 ) - // CScript scriptPubKey = GetScriptForDestination(fromaddress.Get()); - //else - //{ - CReserveKey keyChange(pwalletMain); - CPubKey vchPubKey; + CScript scriptPubKey; + CReserveKey keyChange(pwalletMain); + CPubKey vchPubKey; + if ( fromaddress != 0 ) + scriptPubKey = GetScriptForDestination(fromaddress->Get()); + else + { bool ret = keyChange.GetReservedKey(vchPubKey); if (!ret) { throw JSONRPCError(RPC_WALLET_KEYPOOL_RAN_OUT, "Could not generate a taddr to use as a change address"); // should never fail, as we just unlocked } - CScript scriptPubKey = GetScriptForDestination(vchPubKey.GetID()); - //} + scriptPubKey = GetScriptForDestination(vchPubKey.GetID()); + } CTxOut out(amount, scriptPubKey); CMutableTransaction rawTx(tx_); From 233f077b2a35f3c9059e806b109f64a5cbf9f9c9 Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 22:33:03 +0200 Subject: [PATCH 115/126] Test --- src/wallet/asyncrpcoperation_sendmany.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wallet/asyncrpcoperation_sendmany.h b/src/wallet/asyncrpcoperation_sendmany.h index 6fac61160..a572b887b 100644 --- a/src/wallet/asyncrpcoperation_sendmany.h +++ b/src/wallet/asyncrpcoperation_sendmany.h @@ -92,7 +92,7 @@ private: CTransaction tx_; - void add_taddr_change_output_to_tx(CAmount amount); + void add_taddr_change_output_to_tx(CBitcoinAddress *fromaddress,CAmount amount); void add_taddr_outputs_to_tx(); bool find_unspent_notes(); bool find_utxos(bool fAcceptCoinbase); From 4fa92f993a098d3fbfc99775403cad5f9607f4c7 Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 22:34:18 +0200 Subject: [PATCH 116/126] Test --- src/wallet/asyncrpcoperation_sendmany.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wallet/asyncrpcoperation_sendmany.h b/src/wallet/asyncrpcoperation_sendmany.h index a572b887b..c69fce4c9 100644 --- a/src/wallet/asyncrpcoperation_sendmany.h +++ b/src/wallet/asyncrpcoperation_sendmany.h @@ -134,7 +134,7 @@ public: // Delegated methods void add_taddr_change_output_to_tx(CAmount amount) { - delegate->add_taddr_change_output_to_tx(amount); + delegate->add_taddr_change_output_to_tx(0,amount); } void add_taddr_outputs_to_tx() { From 6ba30dbb3f25edcf457d95a9112eac5c9e2168f9 Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 22:46:55 +0200 Subject: [PATCH 117/126] Test --- src/komodo_jumblr.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index f2d0510fb..bb51516c6 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -84,7 +84,8 @@ char *jumblr_importaddress(char *address) char *jumblr_validateaddress(char *addr) { char params[1024]; - sprintf(params,"[\"%s\"]",addr); + sprintf(params,"\"%s\"",addr); + printf("validateaddress.%s\n",params); return(jumblr_issuemethod(KMDUSERPASS,(char *)"validateaddress",params,7771)); } @@ -132,13 +133,15 @@ int32_t Jumblr_depositaddradd(char *depositaddr) // external depositaddr = (char *)""; if ( (ind= Jumblr_secretaddrfind(depositaddr)) < 0 ) { - safecopy(Jumblr_deposit,depositaddr,sizeof(Jumblr_deposit)); if ( (retstr= jumblr_validateaddress(depositaddr)) != 0 ) { if ( (retjson= cJSON_Parse(retstr)) != 0 ) { if ( (ismine= jobj(retjson,(char *)"ismine")) != 0 && is_cJSON_True(ismine) != 0 ) + { retval = 0; + safecopy(Jumblr_deposit,depositaddr,sizeof(Jumblr_deposit)); + } else { retval = JUMBLR_ERROR_NOTINWALLET; From db53f4bfe2c526d9dd235b1292dad4a20b27d4be Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 23:01:17 +0200 Subject: [PATCH 118/126] Test --- src/komodo_jumblr.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index bb51516c6..119a43055 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -84,7 +84,7 @@ char *jumblr_importaddress(char *address) char *jumblr_validateaddress(char *addr) { char params[1024]; - sprintf(params,"\"%s\"",addr); + sprintf(params,"[\"%s\"]",addr); printf("validateaddress.%s\n",params); return(jumblr_issuemethod(KMDUSERPASS,(char *)"validateaddress",params,7771)); } From 90da8c911f4561c02566b35894326a607bbf907c Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 23:26:20 +0200 Subject: [PATCH 119/126] Test --- src/komodo_jumblr.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index 119a43055..32d4f48f1 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -344,8 +344,8 @@ int64_t jumblr_receivedby(char *addr) int64_t jumblr_balance(char *addr) { - char *retstr; double val; cJSON *retjson; int32_t i,n; int64_t balance = 0; - if ( jumblr_addresstype(addr) == 't' ) + char *retstr; double val; int64_t balance = 0; //cJSON *retjson; int32_t i,n; + /*if ( jumblr_addresstype(addr) == 't' ) { if ( (retstr= jumblr_listunspent(addr)) != 0 ) { @@ -360,7 +360,7 @@ int64_t jumblr_balance(char *addr) free(retstr); } } - else if ( (retstr= jumblr_zgetbalance(addr)) != 0 ) + else*/ if ( (retstr= jumblr_zgetbalance(addr)) != 0 ) { if ( (val= atof(retstr)) > SMALLVAL ) balance = val * SATOSHIDEN; From 78408e6beb9df4de1018ce18119e8276169369f4 Mon Sep 17 00:00:00 2001 From: jl777 Date: Thu, 13 Jul 2017 23:41:02 +0200 Subject: [PATCH 120/126] Test --- src/komodo_jumblr.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index 32d4f48f1..c4be9a03d 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -344,7 +344,7 @@ int64_t jumblr_receivedby(char *addr) int64_t jumblr_balance(char *addr) { - char *retstr; double val; int64_t balance = 0; //cJSON *retjson; int32_t i,n; + char *retstr; double val; int64_t balance = 0; //cJSON *retjson; int32_t i,n; /*if ( jumblr_addresstype(addr) == 't' ) { if ( (retstr= jumblr_listunspent(addr)) != 0 ) @@ -587,13 +587,13 @@ void jumblr_iteration() } } height = (int32_t)chainActive.Tip()->nHeight; - if ( time(NULL) < lasttime+6 ) + if ( time(NULL) < lasttime+50 ) return; lasttime = (uint32_t)time(NULL); if ( lastheight == height ) return; lastheight = height; - if ( (height % JUMBLR_SYNCHRONIZED_BLOCKS) != 0 ) + if ( (height % JUMBLR_SYNCHRONIZED_BLOCKS) != JUMBLR_SYNCHRONIZED_BLOCKS-3 && (height % JUMBLR_SYNCHRONIZED_BLOCKS) != JUMBLR_SYNCHRONIZED_BLOCKS-2 ) return; fee = JUMBLR_INCR * JUMBLR_FEE; OS_randombytes(&r,sizeof(r)); From a039c62d9744ac997eb36c057a29933e334f36c0 Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 14 Jul 2017 00:16:20 +0200 Subject: [PATCH 121/126] Test --- src/komodo_jumblr.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index c4be9a03d..1e1151783 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -587,13 +587,13 @@ void jumblr_iteration() } } height = (int32_t)chainActive.Tip()->nHeight; - if ( time(NULL) < lasttime+50 ) + if ( time(NULL) < lasttime+40 ) return; lasttime = (uint32_t)time(NULL); if ( lastheight == height ) return; lastheight = height; - if ( (height % JUMBLR_SYNCHRONIZED_BLOCKS) != JUMBLR_SYNCHRONIZED_BLOCKS-3 && (height % JUMBLR_SYNCHRONIZED_BLOCKS) != JUMBLR_SYNCHRONIZED_BLOCKS-2 ) + if ( (height % JUMBLR_SYNCHRONIZED_BLOCKS) != JUMBLR_SYNCHRONIZED_BLOCKS-3 ) return; fee = JUMBLR_INCR * JUMBLR_FEE; OS_randombytes(&r,sizeof(r)); From ae85ad79db5dafb41b278f4de16f85a62a20d131 Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 14 Jul 2017 10:22:19 +0200 Subject: [PATCH 122/126] Test --- src/komodo_jumblr.h | 58 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 53 insertions(+), 5 deletions(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index 1e1151783..e29ae5e30 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -566,10 +566,51 @@ void jumblr_opidsupdate() } } +uint64_t jumblr_increment(uint8_t r,int32_t height,uint64_t total,uint64_t biggest,uint64_t medium, uint64_t smallest) +{ + int32_t i,n; uint64_t incrs[1000],remains = total; + height /= JUMBLR_SYNCHRONIZED_BLOCKS; + if ( (height % JUMBLR_SYNCHRONIZED_BLOCKS) == 0 || total >= 100*biggest ) + { + if ( total >= biggest ) + return(biggest); + else if ( total >= medium ) + return(medium); + else if ( total >= smallest ) + return(smallest); + else return(0); + } + else + { + n = 0; + while ( remains > smallest && n < sizeof(incrs)/sizeof(*incrs) ) + { + if ( remains >= biggest ) + incrs[n] = biggest; + else if ( remains >= medium ) + incrs[n] = medium; + else if ( remains >= smallest ) + incrs[n] = smallest; + else break; + remains -= incrs[n]; + n++; + } + if ( n > 0 ) + { + r %= n; + for (i=0; i %.8f\n",n,r,incrs[r]); + return(incrs[r]); + } + } + return(0); +} + void jumblr_iteration() { static int32_t lastheight; static uint32_t lasttime; - char *zaddr,*addr,*retstr,secretaddr[64]; cJSON *array; int32_t i,iter,height,counter,chosen_one,n; uint64_t amount=0,total=0; double fee; struct jumblr_item *ptr,*tmp; uint8_t r,s; + char *zaddr,*addr,*retstr,secretaddr[64]; cJSON *array; int32_t i,iter,height,counter,chosen_one,n; uint64_t smallest,medium,biggest,amount=0,total=0; double fee; struct jumblr_item *ptr,*tmp; uint16_t r,s; if ( lasttime == 0 ) { if ( (retstr= jumblr_zlistaddresses()) != 0 ) @@ -596,12 +637,17 @@ void jumblr_iteration() if ( (height % JUMBLR_SYNCHRONIZED_BLOCKS) != JUMBLR_SYNCHRONIZED_BLOCKS-3 ) return; fee = JUMBLR_INCR * JUMBLR_FEE; + smallest = SATOSHIDEN * ((JUMBLR_INCR + 3*fee) + 3*JUMBLR_TXFEE); + medium = SATOSHIDEN * ((JUMBLR_INCR + 3*fee)*10 + 3*JUMBLR_TXFEE); + biggest = SATOSHIDEN * ((JUMBLR_INCR + 3*fee)*777 + 3*JUMBLR_TXFEE); OS_randombytes(&r,sizeof(r)); - s = ((r >> 2) % 3); + s = (r % 3); + printf("jumblr_iteration r.%u s.%u\n",r,s); switch ( s ) { case 0: // t -> z - if ( Jumblr_deposit[0] != 0 && (total= jumblr_balance(Jumblr_deposit)) >= (JUMBLR_INCR + 3*(fee+JUMBLR_TXFEE))*SATOSHIDEN ) + default: + if ( Jumblr_deposit[0] != 0 && (total= jumblr_balance(Jumblr_deposit)) >= smallest ) { if ( (zaddr= jumblr_zgetnewaddress()) != 0 ) { @@ -610,12 +656,14 @@ void jumblr_iteration() zaddr[strlen(zaddr)-1] = 0; addr = zaddr+1; } else addr = zaddr; + amount = jumblr_increment(r/3,height,total,biggest,medium,smallest); + /* amount = 0; if ( (height % (JUMBLR_SYNCHRONIZED_BLOCKS*JUMBLR_SYNCHRONIZED_BLOCKS)) == 0 && total >= SATOSHIDEN * ((JUMBLR_INCR + 3*fee)*100 + 3*JUMBLR_TXFEE) ) - amount = SATOSHIDEN * ((JUMBLR_INCR + 3*fee)*100 + 3*JUMBLR_TXFEE); + amount = SATOSHIDEN * ((JUMBLR_INCR + 3*fee)*100 + 3*JUMBLR_TXFEE); else if ( (r & 3) == 0 && total >= SATOSHIDEN * ((JUMBLR_INCR + 3*fee)*10 + 3*JUMBLR_TXFEE) ) amount = SATOSHIDEN * ((JUMBLR_INCR + 3*fee)*10 + 3*JUMBLR_TXFEE); - else amount = SATOSHIDEN * ((JUMBLR_INCR + 3*fee) + 3*JUMBLR_TXFEE); + else amount = SATOSHIDEN * ((JUMBLR_INCR + 3*fee) + 3*JUMBLR_TXFEE);*/ if ( amount > 0 && (retstr= jumblr_sendt_to_z(Jumblr_deposit,addr,dstr(amount))) != 0 ) { printf("sendt_to_z.(%s)\n",retstr); From fd9256e865295194d978a35456937cb2c1d00028 Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 14 Jul 2017 10:25:23 +0200 Subject: [PATCH 123/126] Test --- src/komodo_jumblr.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index e29ae5e30..b06a409d1 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -640,7 +640,7 @@ void jumblr_iteration() smallest = SATOSHIDEN * ((JUMBLR_INCR + 3*fee) + 3*JUMBLR_TXFEE); medium = SATOSHIDEN * ((JUMBLR_INCR + 3*fee)*10 + 3*JUMBLR_TXFEE); biggest = SATOSHIDEN * ((JUMBLR_INCR + 3*fee)*777 + 3*JUMBLR_TXFEE); - OS_randombytes(&r,sizeof(r)); + OS_randombytes((uint8_t *)&r,sizeof(r)); s = (r % 3); printf("jumblr_iteration r.%u s.%u\n",r,s); switch ( s ) From 88de65beadd444e0cc58c23403e1528efc55b521 Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 14 Jul 2017 10:26:03 +0200 Subject: [PATCH 124/126] Test --- src/komodo_jumblr.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/komodo_jumblr.h b/src/komodo_jumblr.h index b06a409d1..7f31e18e4 100755 --- a/src/komodo_jumblr.h +++ b/src/komodo_jumblr.h @@ -600,7 +600,7 @@ uint64_t jumblr_increment(uint8_t r,int32_t height,uint64_t total,uint64_t bigge r %= n; for (i=0; i %.8f\n",n,r,incrs[r]); + printf("n.%d incrs r.%d -> %.8f\n",n,r,dstr(incrs[r])); return(incrs[r]); } } From 4bfb533b13597b369e3d5106a3f6fe067d2d581a Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 15 Jul 2017 11:24:57 +0200 Subject: [PATCH 125/126] Test --- src/wallet/asyncrpcoperation_sendmany.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/wallet/asyncrpcoperation_sendmany.cpp b/src/wallet/asyncrpcoperation_sendmany.cpp index 50201045f..7cd304727 100644 --- a/src/wallet/asyncrpcoperation_sendmany.cpp +++ b/src/wallet/asyncrpcoperation_sendmany.cpp @@ -292,6 +292,7 @@ bool AsyncRPCOperation_sendmany::main_impl() { CTxIn in(COutPoint(txid, vout)); rawTx.vin.push_back(in); } + rawTx.nLockTime = (uint32_t)time(NULL) - 60; // jl777 tx_ = CTransaction(rawTx); } From 5101611f243bc915708998f54525c876452f0a8a Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 15 Jul 2017 12:05:04 +0200 Subject: [PATCH 126/126] Test --- src/wallet/asyncrpcoperation_sendmany.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/wallet/asyncrpcoperation_sendmany.cpp b/src/wallet/asyncrpcoperation_sendmany.cpp index 7cd304727..5befe9fb1 100644 --- a/src/wallet/asyncrpcoperation_sendmany.cpp +++ b/src/wallet/asyncrpcoperation_sendmany.cpp @@ -342,6 +342,7 @@ bool AsyncRPCOperation_sendmany::main_impl() { mtx.nVersion = 2; crypto_sign_keypair(joinSplitPubKey_.begin(), joinSplitPrivKey_); mtx.joinSplitPubKey = joinSplitPubKey_; + mtx.nLockTime = (uint32_t)time(NULL) - 60; // jl777 tx_ = CTransaction(mtx); // Copy zinputs and zoutputs to more flexible containers @@ -1099,7 +1100,7 @@ void AsyncRPCOperation_sendmany::add_taddr_outputs_to_tx() { CTxOut out(nAmount, scriptPubKey); rawTx.vout.push_back(out); } - + rawTx.nLockTime = (uint32_t)time(NULL) - 60; // jl777 tx_ = CTransaction(rawTx); } @@ -1125,6 +1126,7 @@ void AsyncRPCOperation_sendmany::add_taddr_change_output_to_tx(CBitcoinAddress * CMutableTransaction rawTx(tx_); rawTx.vout.push_back(out); + rawTx.nLockTime = (uint32_t)time(NULL) - 60; // jl777 tx_ = CTransaction(rawTx); }