From 4df6716b14c2c2c30d49fe7273b3a7adea9b1557 Mon Sep 17 00:00:00 2001
From: jl777 <mac@MacBook-Pro-Vladimir.local>
Date: Sat, 4 Mar 2017 13:19:45 +0200
Subject: [PATCH] Test

---
 basilisk/jumblr.c | 68 ++++++++++++++++++++++++++++++++++++++++-------
 iguana/main.c     |  2 +-
 2 files changed, 59 insertions(+), 11 deletions(-)

diff --git a/basilisk/jumblr.c b/basilisk/jumblr.c
index f61e07090..c7679b234 100755
--- a/basilisk/jumblr.c
+++ b/basilisk/jumblr.c
@@ -63,6 +63,34 @@ struct jumblr_item *jumblr_opidadd(struct supernet_info *myinfo,struct iguana_in
     return(ptr);
 }
 
+char *jumblr_validateaddress(struct supernet_info *myinfo,struct iguana_info *coin,char *addr)
+{
+    char params[1024];
+    if ( coin->FULLNODE < 0 )
+    {
+        sprintf(params,"[\"%s\"]",addr);
+        return(bitcoind_passthru(coin->symbol,coin->chain->serverport,coin->chain->userpass,"validateaddress",params));
+    } else return(_dex_validateaddress(myinfo,coin->symbol,addr));
+}
+
+int32_t jumblr_ismine(struct supernet_info *myinfo,struct iguana_info *coin,char *addr)
+{
+    char params[1024],*retstr; cJSON *retjson,*obj; int32_t retval = -1;
+    sprintf(params,"[\"%s\"]",addr);
+    if ( (retstr= jumblr_validateaddress(myinfo,coin,addr)) != 0 )
+    {
+        if ( (retjson= cJSON_Parse(retstr)) != 0 )
+        {
+            if ( (obj= jobj(retjson,"ismine")) != 0 && is_cJSON_True(obj) != 0 )
+                retval = 1;
+            else retval = 0;
+            free_json(retjson);
+        }
+        free(retstr);
+    }
+    return(retval);
+}
+
 char *jumblr_zgetnewaddress(struct supernet_info *myinfo,struct iguana_info *coin)
 {
     return(bitcoind_passthru(coin->symbol,coin->chain->serverport,coin->chain->userpass,"z_getnewaddress",""));
@@ -165,17 +193,27 @@ int64_t jumblr_balance(struct supernet_info *myinfo,struct iguana_info *coin,cha
     char *retstr; double val; cJSON *retjson; int32_t i,n; int64_t balance = 0;
     if ( jumblr_addresstype(myinfo,coin,addr) == 't' )
     {
-        if ( (retstr= jumblr_listunspent(myinfo,coin,addr)) != 0 )
+        if ( jumblr_ismine(myinfo,coin,addr) > 0 )
+        {
+            if ( (retstr= jumblr_listunspent(myinfo,coin,addr)) != 0 )
+            {
+                if ( (retjson= cJSON_Parse(retstr)) != 0 )
+                {
+                    if ( (n= cJSON_GetArraySize(retjson)) > 0 )
+                        for (i=0; i<n; i++)
+                            balance += SATOSHIDEN * jdouble(jitem(retjson,i),"amount");
+                    free_json(retjson);
+                }
+                free(retstr);
+            }
+        }
+        else if ( (retstr= _dex_getbalance(myinfo,coin->symbol,addr)) != 0 )
         {
             if ( (retjson= cJSON_Parse(retstr)) != 0 )
             {
-                if ( (n= cJSON_GetArraySize(retjson)) > 0 )
-                    for (i=0; i<n; i++)
-                        balance += SATOSHIDEN * jdouble(jitem(retjson,i),"amount");
+                balance = jdouble(retjson,"balance") * SATOSHIDEN;
                 free_json(retjson);
             }
-            //if ( balance == 0 )
-            //    printf("listunspent.(%s)\n",addr);
             free(retstr);
         }
     }
@@ -325,21 +363,31 @@ bits256 jumblr_privkey(struct supernet_info *myinfo,char *BTCaddr,char *KMDaddr,
     return(privkey);
 }
 
+void jumblr_DEXcheck(struct supernet_info *myinfo,struct iguana_info *coinkmd,char *BTCaddr,char *KMDaddr,bits256 privkey)
+{
+    double btcavail,minbtc; struct iguana_info *coinbtc = iguana_coinfind("BTC");
+    if ( coinbtc != 0 && (btcavail= jumblr_balance(myinfo,coinbtc,BTCaddr)) > minbtc )
+    {
+        
+    }
+}
+
 void jumblr_iteration(struct supernet_info *myinfo,struct iguana_info *coin,int32_t selector,int32_t modval)
 {
-    char BTCaddr[64],KMDaddr[64],*zaddr,*retstr; bits256 priv0; uint64_t amount=0,total=0; double fee; struct jumblr_item *ptr,*tmp; uint8_t r;
+    char BTCaddr[64],KMDaddr[64],*zaddr,*retstr; bits256 privkey; uint64_t amount=0,total=0; double fee; struct jumblr_item *ptr,*tmp; uint8_t r;
     // if BTC has arrived in deposit address, invoke DEX -> KMD
     // if BTC has arrived in destination address, invoke DEX -> BTC
+    privkey = jumblr_privkey(myinfo,BTCaddr,KMDaddr,JUMBLR_DEPOSITPREFIX);
+    jumblr_DEXcheck(myinfo,coin,BTCaddr,KMDaddr,privkey);
     fee = JUMBLR_INCR * JUMBLR_FEE;
     OS_randombytes(&r,sizeof(r));
-//r = 0;
+r = 0;
     if ( strcmp(coin->symbol,"KMD") == 0 && coin->FULLNODE < 0 )
     {
-        //printf("JUMBLR selector.%d modval.%d r.%d\n",selector,modval,r&7);
+        printf("JUMBLR selector.%d modval.%d r.%d\n",selector,modval,r&7);
         switch ( selector )
         {
             case 0: // public -> z, need to importprivkey
-                priv0 = jumblr_privkey(myinfo,BTCaddr,KMDaddr,JUMBLR_DEPOSITPREFIX);
                 if ( (total= jumblr_balance(myinfo,coin,KMDaddr)) >= (JUMBLR_INCR + 3*(fee+JUMBLR_TXFEE))*SATOSHIDEN )
                 {
                     if ( (r & 1) == 0 )
diff --git a/iguana/main.c b/iguana/main.c
index 986764423..55ca8824c 100755
--- a/iguana/main.c
+++ b/iguana/main.c
@@ -747,7 +747,7 @@ void iguana_urlinit(struct supernet_info *myinfo,int32_t ismainnet,int32_t usess
 
 void jumblr_loop(void *ptr)
 {
-    struct iguana_info *coin; uint32_t t; struct supernet_info *myinfo = ptr; int32_t mult = 10;
+    struct iguana_info *coin; uint32_t t; struct supernet_info *myinfo = ptr; int32_t mult = 1;
     printf("JUMBLR loop\n");
     while ( 1 )
     {