diff --git a/iguana/exchanges/LP_commands.c b/iguana/exchanges/LP_commands.c index 160ea295f..431996de2 100644 --- a/iguana/exchanges/LP_commands.c +++ b/iguana/exchanges/LP_commands.c @@ -157,7 +157,7 @@ bot_settings(botid, newprice, newvolume)\n\ bot_status(botid)\n\ bot_stop(botid)\n\ bot_pause(botid)\n\ -instantdex_deposit(weeks, amount, broadcast=0)\n\ +instantdex_deposit(weeks, amount, broadcast=1)\n\ instantdex_claim()\n\ \"}")); //sell(base, rel, price, basevolume, timeout=10, duration=3600)\n\ @@ -208,7 +208,7 @@ instantdex_claim()\n\ { if ( jint(argjson,"weeks") <= 0 || jdouble(argjson,"amount") < 10. ) return(clonestr("{\"error\":\"instantdex_deposit needs to have weeks and amount\"}")); - else return(LP_instantdex_deposit(ptr,juint(argjson,"weeks"),jdouble(argjson,"amount"),jint(argjson,"broadcast"))); + else return(LP_instantdex_deposit(ptr,juint(argjson,"weeks"),jdouble(argjson,"amount"),jobj(argjson,"broadcast") != 0 ? jint(argjson,"broadcast") : 1)); } return(clonestr("{\"error\":\"cant find KMD\"}")); } diff --git a/iguana/exchanges/LP_instantdex.c b/iguana/exchanges/LP_instantdex.c index d0564cc0b..d06d6714a 100644 --- a/iguana/exchanges/LP_instantdex.c +++ b/iguana/exchanges/LP_instantdex.c @@ -25,16 +25,11 @@ void LP_instantdex_txidaddfname(char *fname,char *afname) sprintf(afname,"%s/instantdex_append.json",GLOBAL_DBDIR); } -cJSON *LP_instantdex_txids() +cJSON *LP_instantdex_txids(int32_t appendonly) { char *filestr,fname[1024],afname[1024]; long fsize; cJSON *retjson=0; LP_instantdex_txidaddfname(fname,afname); - if ( (filestr= OS_filestr(&fsize,afname)) != 0 ) - { - retjson = cJSON_Parse(filestr); - free(filestr); - } - else if ( (filestr= OS_filestr(&fsize,fname)) != 0 ) + if ( (filestr= OS_filestr(&fsize,appendonly != 0 ? afname : fname)) != 0 ) { retjson = cJSON_Parse(filestr); free(filestr); @@ -55,25 +50,89 @@ void LP_instantdex_filewrite(int32_t appendfile,cJSON *array) } } -void LP_instantdex_txidadd(bits256 txid) +void LP_instantdex_deposituniq(FILE *fp,bits256 txid) { - cJSON *array; int32_t i,n; - if ( (array= LP_instantdex_txids()) == 0 ) - array = cJSON_CreateArray(); - if ( (n= cJSON_GetArraySize(array)) >= 0 ) + int32_t i,n; bits256 prevtxid; + n = (int32_t)(ftell(fp) / sizeof(txid)); + for (i=0; i 0 ) + { + for (i=0; i 0 ) @@ -295,6 +353,7 @@ char *LP_instantdex_claim(struct iguana_info *coin) } free_json(array); } + firsttime = 0; if ( cJSON_GetArraySize(newarray) > 0 ) LP_instantdex_filewrite(0,newarray); free_json(newarray); @@ -315,8 +374,6 @@ int64_t LP_instantdex_credit(int32_t dispflag,char *coinaddr,int64_t satoshis,in { ap->instantdex_credits += satoshis; ap->didinstantdex = 1; - if ( strcmp(coinaddr,coin->smartaddr) == 0 ) - LP_instantdex_txidadd(txid); if ( dispflag != 0 ) printf("InstantDEX credit.(%s) %.8f weeki.%d (%s) -> sum %.8f\n",coinaddr,dstr(satoshis),weeki,p2shaddr,dstr(ap->instantdex_credits)); return(satoshis); @@ -420,7 +477,7 @@ int64_t LP_dynamictrust(bits256 pubkey,int64_t kmdvalue) int64_t LP_instantdex_proofcheck(char *coinaddr,cJSON *proof,int32_t num) { - uint8_t rmd160[20],addrtype; int32_t i; char othersmartaddr[64]; struct iguana_info *coin; struct LP_address *ap = 0; + uint8_t rmd160[20],addrtype; int32_t i,j; bits256 prevtxid,txid; char othersmartaddr[64]; struct iguana_info *coin; struct LP_address *ap = 0; if ( (coin= LP_coinfind("KMD")) != 0 ) { bitcoin_addr2rmd160(0,&addrtype,rmd160,coinaddr); @@ -429,7 +486,17 @@ int64_t LP_instantdex_proofcheck(char *coinaddr,cJSON *proof,int32_t num) { ap->instantdex_credits = 0; for (i=0; ididinstantdex = 1; if ( ap->instantdex_credits > 0 ) printf("validated instantdex %s.[%d] proof.(%s) credits %.8f\n",othersmartaddr,num,jprint(proof,0),dstr(ap->instantdex_credits)); @@ -443,7 +510,7 @@ int64_t LP_myzcredits() cJSON *proof; struct iguana_info *coin; int64_t zcredits; if ( (coin= LP_coinfind("KMD")) != 0 ) { - if ( (proof= LP_instantdex_txids()) != 0 ) + if ( (proof= LP_instantdex_txids(0)) != 0 ) { zcredits = LP_instantdex_proofcheck(coin->smartaddr,proof,cJSON_GetArraySize(proof)); free_json(proof); diff --git a/iguana/exchanges/LP_nativeDEX.c b/iguana/exchanges/LP_nativeDEX.c index e3875a70a..13dc2287c 100644 --- a/iguana/exchanges/LP_nativeDEX.c +++ b/iguana/exchanges/LP_nativeDEX.c @@ -712,7 +712,10 @@ void LP_initcoins(void *ctx,int32_t pubsock,cJSON *coins) { LP_unspents_load(coin->symbol,coin->smartaddr); if ( strcmp(coin->symbol,"KMD") == 0 ) + { LP_importaddress("KMD",BOTS_BONDADDRESS); + LP_instantdex_filescreate(); + } } if ( coin->txfee == 0 && strcmp(coin->symbol,"BTC") != 0 ) coin->txfee = LP_MIN_TXFEE; diff --git a/iguana/exchanges/LP_ordermatch.c b/iguana/exchanges/LP_ordermatch.c index ff8d15968..850a5e255 100644 --- a/iguana/exchanges/LP_ordermatch.c +++ b/iguana/exchanges/LP_ordermatch.c @@ -492,7 +492,7 @@ int32_t LP_connectstartbob(void *ctx,int32_t pubsock,char *base,char *rel,double reqjson = LP_quotejson(qp); jaddstr(reqjson,"method","connected"); jaddstr(reqjson,"pair",pairstr); - jadd(reqjson,"proof",LP_instantdex_txids()); + jadd(reqjson,"proof",LP_instantdex_txids(0)); char str[65]; printf("BOB pubsock.%d binds to %d (%s)\n",pubsock,pair,bits256_str(str,qp->desthash)); bits256 zero; memset(zero.bytes,0,sizeof(zero)); diff --git a/iguana/exchanges/LP_signatures.c b/iguana/exchanges/LP_signatures.c index 4fce8ca7f..74cf86fee 100644 --- a/iguana/exchanges/LP_signatures.c +++ b/iguana/exchanges/LP_signatures.c @@ -665,7 +665,7 @@ void LP_query(void *ctx,char *myipaddr,int32_t mypubsock,char *method,struct LP_ if ( jobj(reqjson,"timestamp") == 0 ) jaddnum(reqjson,"timestamp",time(NULL)); if ( strcmp(method,"connect") == 0 ) - jadd(reqjson,"proof",LP_instantdex_txids()); + jadd(reqjson,"proof",LP_instantdex_txids(0)); msg = jprint(reqjson,1); printf("QUERY.(%s)\n",msg); //if ( bits256_nonz(qp->srchash) == 0 || strcmp(method,"request") != 0 ) diff --git a/iguana/exchanges/LP_statemachine.c b/iguana/exchanges/LP_statemachine.c index 733530943..c8e3988a5 100644 --- a/iguana/exchanges/LP_statemachine.c +++ b/iguana/exchanges/LP_statemachine.c @@ -447,6 +447,28 @@ void issue_LP_uitem(char *destip,uint16_t destport,char *symbol,char *coinaddr,b portable_mutex_unlock(&LP_cJSONmutex); } //else printf("cJSON_unregister of unknown %p %u\n",item,item->cjsonid); }*/ + +void LP_instantdex_txidadd(bits256 txid) +{ + cJSON *array; int32_t i,n; + if ( (array= LP_instantdex_txids()) == 0 ) + array = cJSON_CreateArray(); + if ( (n= cJSON_GetArraySize(array)) >= 0 ) + { + for (i=0; i