From 2308f7fb197da0cc1a74e95f0cbeb29ee78e617d Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 10 Nov 2017 05:21:11 +0200 Subject: [PATCH 01/19] Avoid bot pause --- iguana/exchanges/LP_tradebots.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/iguana/exchanges/LP_tradebots.c b/iguana/exchanges/LP_tradebots.c index 862d68883..55d1ddabe 100644 --- a/iguana/exchanges/LP_tradebots.c +++ b/iguana/exchanges/LP_tradebots.c @@ -291,7 +291,7 @@ double LP_orderbook_maxrel(char *base,char *rel,double maxprice) void LP_tradebot_timeslice(void *ctx,struct LP_tradebot *bot) { - double remaining,maxrel; int32_t i,maxiters = 10; uint32_t tradeid; bits256 destpubkey; char *retstr,*liststr; cJSON *retjson,*retjson2,*pending; + double remaining,maxrel; struct LP_tradebot_trade *tp; int32_t i,maxiters = 10; uint32_t tradeid; bits256 destpubkey; char *retstr,*liststr; cJSON *retjson,*retjson2,*pending; memset(destpubkey.bytes,0,sizeof(destpubkey)); if ( bot->dead == 0 && bot->pause == 0 && bot->numtrades < sizeof(bot->trades)/sizeof(*bot->trades) ) { @@ -317,10 +317,10 @@ void LP_tradebot_timeslice(void *ctx,struct LP_tradebot *bot) { if ( (pending= jobj(retjson2,"pending")) != 0 && juint(pending,"tradeid") == tradeid ) { - bot->trades[bot->numtrades++] = LP_tradebot_pending(bot,pending,tradeid); + bot->trades[bot->numtrades++] = tp = LP_tradebot_pending(bot,pending,tradeid); if ( bot->relsum >= 0.99*bot->totalrelvolume-SMALLVAL || bot->basesum >= 0.99*bot->totalbasevolume-SMALLVAL ) bot->dead = (uint32_t)time(NULL); - else if ( (bot->pendrelsum+bot->relsum) >= 0.99*bot->totalrelvolume-SMALLVAL || (bot->basesum+bot->pendbasesum) >= 0.99*bot->totalbasevolume-SMALLVAL ) + else if ( tp->requestid != 0 && ((bot->pendrelsum+bot->relsum) >= 0.99*bot->totalrelvolume-SMALLVAL || (bot->basesum+bot->pendbasesum) >= 0.99*bot->totalbasevolume-SMALLVAL) ) bot->pause = (uint32_t)time(NULL); printf("issued bot trade.%u %s\n",tradeid,retstr); free_json(retjson2); From 752d4fa637043fa43fe826f171e2eb06df963e52 Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 10 Nov 2017 05:23:44 +0200 Subject: [PATCH 02/19] Test --- iguana/exchanges/LP_tradebots.c | 1 + 1 file changed, 1 insertion(+) diff --git a/iguana/exchanges/LP_tradebots.c b/iguana/exchanges/LP_tradebots.c index 55d1ddabe..144786a77 100644 --- a/iguana/exchanges/LP_tradebots.c +++ b/iguana/exchanges/LP_tradebots.c @@ -318,6 +318,7 @@ void LP_tradebot_timeslice(void *ctx,struct LP_tradebot *bot) if ( (pending= jobj(retjson2,"pending")) != 0 && juint(pending,"tradeid") == tradeid ) { bot->trades[bot->numtrades++] = tp = LP_tradebot_pending(bot,pending,tradeid); + sleep(3); if ( bot->relsum >= 0.99*bot->totalrelvolume-SMALLVAL || bot->basesum >= 0.99*bot->totalbasevolume-SMALLVAL ) bot->dead = (uint32_t)time(NULL); else if ( tp->requestid != 0 && ((bot->pendrelsum+bot->relsum) >= 0.99*bot->totalrelvolume-SMALLVAL || (bot->basesum+bot->pendbasesum) >= 0.99*bot->totalbasevolume-SMALLVAL) ) From 0374147cc0d3c5e0fdba07dcda83fb82f92eeaa5 Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 10 Nov 2017 06:07:59 +0200 Subject: [PATCH 03/19] Test --- iguana/exchanges/LP_tradebots.c | 57 +++++++++++++++++++++------------ 1 file changed, 36 insertions(+), 21 deletions(-) diff --git a/iguana/exchanges/LP_tradebots.c b/iguana/exchanges/LP_tradebots.c index 144786a77..f9ae94852 100644 --- a/iguana/exchanges/LP_tradebots.c +++ b/iguana/exchanges/LP_tradebots.c @@ -26,7 +26,7 @@ struct LP_tradebot_trade double maxprice,totalrelvolume,basevol,relvol; uint64_t aliceid; int32_t dispdir; - uint32_t started,finished,requestid,quoteid,tradeid; + uint32_t started,finished,requestid,quoteid,tradeid,completed; char base[32],rel[32],event[32]; }; @@ -255,9 +255,9 @@ struct LP_tradebot_trade *LP_tradebot_pending(struct LP_tradebot *bot,cJSON *pen tp->basevol = jdouble(pending,"basevalue"); tp->relvol = jdouble(pending,"relvalue"); printf("tradebot pending basevol %.8f relvol %.8f\n",tp->basevol,tp->relvol); - bot->pendrelsum += tp->relvol; - bot->pendbasesum += tp->basevol; - bot->numpending++; + //bot->pendrelsum += tp->relvol; + //bot->pendbasesum += tp->basevol; + //bot->numpending++; return(tp); } @@ -318,11 +318,6 @@ void LP_tradebot_timeslice(void *ctx,struct LP_tradebot *bot) if ( (pending= jobj(retjson2,"pending")) != 0 && juint(pending,"tradeid") == tradeid ) { bot->trades[bot->numtrades++] = tp = LP_tradebot_pending(bot,pending,tradeid); - sleep(3); - if ( bot->relsum >= 0.99*bot->totalrelvolume-SMALLVAL || bot->basesum >= 0.99*bot->totalbasevolume-SMALLVAL ) - bot->dead = (uint32_t)time(NULL); - else if ( tp->requestid != 0 && ((bot->pendrelsum+bot->relsum) >= 0.99*bot->totalrelvolume-SMALLVAL || (bot->basesum+bot->pendbasesum) >= 0.99*bot->totalbasevolume-SMALLVAL) ) - bot->pause = (uint32_t)time(NULL); printf("issued bot trade.%u %s\n",tradeid,retstr); free_json(retjson2); free(retstr); @@ -376,11 +371,11 @@ void LP_tradebot_finished(uint32_t tradeid,uint32_t requestid,uint32_t quoteid) { tp->requestid = requestid; tp->quoteid = quoteid; - bot->pendbasesum -= tp->basevol, bot->basesum += tp->basevol; - bot->pendrelsum -= tp->relvol, bot->relsum += tp->relvol; - bot->numpending--, bot->completed++; + //bot->pendbasesum -= tp->basevol, bot->basesum += tp->basevol; + //bot->pendrelsum -= tp->relvol, bot->relsum += tp->relvol; + //bot->numpending--, bot->completed++; printf("bot.%u detected completion tradeid.%u aliceid.%llx r.%u q.%u, numpending.%d completed.%d\n",bot->id,tp->tradeid,(long long)tp->aliceid,tp->requestid,tp->quoteid,bot->numpending,bot->completed); - tp->finished = (uint32_t)time(NULL); + tp->completed = tp->finished = (uint32_t)time(NULL); break; } } @@ -398,22 +393,42 @@ void LP_tradebots_timeslice(void *ctx) if ( bot->numpending > 0 && LP_numfinished > lastnumfinished ) { // expire pending trades and see if any still need their requestid/quoteid + bot->basesum = bot->pendbasesum = 0.;//-= tp->basevol; + bot->relsum = bot->pendrelsum = 0.;//-= tp->relvol; + bot->completed = bot->numpending = 0;//--; for (i=0; inumtrades; i++) { - if ( (tp= bot->trades[i]) != 0 && tp->finished == 0 ) + if ( (tp= bot->trades[i]) != 0 ) { - if ( time(NULL) > tp->started+INSTANTDEX_LOCKTIME*2 ) + if (tp->finished == 0 ) { - bot->pendbasesum -= tp->basevol; - bot->pendrelsum -= tp->relvol; - bot->numpending--; - tp->finished = (uint32_t)time(NULL); - printf("%s trade.%d of %d expired\n",bot->name,i,bot->numtrades); + if ( time(NULL) > tp->started+INSTANTDEX_LOCKTIME*2 ) + { + tp->finished = (uint32_t)time(NULL); + printf("%s trade.%d of %d expired\n",bot->name,i,bot->numtrades); + } + } + if ( tp->finished != 0 && tp->completed != 0 ) + { + bot->basesum += tp->basevol; + bot->relsum += tp->relvol; + bot->completed++; + } + else if ( tp->finished == 0 && tp->requestid != 0 && tp->quoteid != 0 ) + { + bot->pendbasesum += tp->basevol; + bot->pendrelsum += tp->relvol; + bot->numpending++; } } } } - else if ( bot->numpending == 0 ) + if ( bot->relsum >= 0.99*bot->totalrelvolume-SMALLVAL || bot->basesum >= 0.99*bot->totalbasevolume-SMALLVAL ) + bot->dead = (uint32_t)time(NULL); + else if ( (bot->pendrelsum+bot->relsum) >= 0.99*bot->totalrelvolume-SMALLVAL || (bot->basesum+bot->pendbasesum) >= 0.99*bot->totalbasevolume-SMALLVAL ) + bot->pause = (uint32_t)time(NULL); + else bot->pause = 0; + if ( bot->numpending == 0 ) LP_tradebot_timeslice(ctx,bot); } lastnumfinished = LP_numfinished; From bdf651e6f8a727f1e02c7ea8ee631514840aab31 Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 10 Nov 2017 06:15:03 +0200 Subject: [PATCH 04/19] Test --- iguana/exchanges/LP_tradebots.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/iguana/exchanges/LP_tradebots.c b/iguana/exchanges/LP_tradebots.c index f9ae94852..e80eac6e1 100644 --- a/iguana/exchanges/LP_tradebots.c +++ b/iguana/exchanges/LP_tradebots.c @@ -36,7 +36,7 @@ struct LP_tradebot char name[128],base[32],rel[32]; int32_t numtrades,numpending,completed,dispdir; double maxprice,totalrelvolume,totalbasevolume,basesum,relsum,pendbasesum,pendrelsum; - uint32_t dead,pause,started,id; + uint32_t dead,pause,userpause,started,id; struct LP_tradebot_trade *trades[LP_TRADEBOTS_MAXTRADES]; } *LP_tradebots; @@ -134,8 +134,8 @@ cJSON *LP_tradebot_json(struct LP_tradebot *bot) jaddstr(json,"name",bot->name); jaddnum(json,"botid",bot->id); jaddnum(json,"started",bot->started); - if ( bot->pause != 0 ) - jaddnum(json,"paused",bot->pause); + if ( bot->pause != 0 || bot->userpause != 0 ) + jaddnum(json,"paused",bot->userpause != 0 ? bot->userpause : bot->pause); if ( bot->dead != 0 ) jaddnum(json,"stopped",bot->dead); if ( bot->dispdir > 0 ) @@ -293,7 +293,7 @@ void LP_tradebot_timeslice(void *ctx,struct LP_tradebot *bot) { double remaining,maxrel; struct LP_tradebot_trade *tp; int32_t i,maxiters = 10; uint32_t tradeid; bits256 destpubkey; char *retstr,*liststr; cJSON *retjson,*retjson2,*pending; memset(destpubkey.bytes,0,sizeof(destpubkey)); - if ( bot->dead == 0 && bot->pause == 0 && bot->numtrades < sizeof(bot->trades)/sizeof(*bot->trades) ) + if ( bot->dead == 0 && bot->pause == 0 && bot->userpause == 0 && bot->numtrades < sizeof(bot->trades)/sizeof(*bot->trades) ) { if ( (liststr= LP_recent_swaps(0)) != 0 ) { @@ -427,7 +427,8 @@ void LP_tradebots_timeslice(void *ctx) bot->dead = (uint32_t)time(NULL); else if ( (bot->pendrelsum+bot->relsum) >= 0.99*bot->totalrelvolume-SMALLVAL || (bot->basesum+bot->pendbasesum) >= 0.99*bot->totalbasevolume-SMALLVAL ) bot->pause = (uint32_t)time(NULL); - else bot->pause = 0; + else if ( bot->userpause == 0 ) + bot->pause = 0; if ( bot->numpending == 0 ) LP_tradebot_timeslice(ctx,bot); } @@ -629,7 +630,7 @@ char *LP_tradebot_pause(void *ctx,int32_t pubsock,cJSON *argjson,uint32_t botid) { if ( bot->dead != 0 ) return(clonestr("{\"error\":\"botid aleady stopped\"}")); - bot->pause = (uint32_t)time(NULL); + bot->userpause = (uint32_t)time(NULL); return(clonestr("{\"result\":\"success\"}")); } return(clonestr("{\"error\":\"couldnt find botid\"}")); @@ -642,9 +643,9 @@ char *LP_tradebot_resume(void *ctx,int32_t pubsock,cJSON *argjson,uint32_t botid { if ( bot->dead != 0 ) return(clonestr("{\"error\":\"botid aleady stopped\"}")); - if ( bot->pause == 0 ) + if ( bot->userpause == 0 ) return(clonestr("{\"result\":\"success\",\"status\":\"botid not paused\"}")); - bot->pause = 0; + bot->userpause = 0; return(clonestr("{\"result\":\"success\"}")); } return(clonestr("{\"error\":\"couldnt find botid\"}")); From b985f7988409490777755eca8b958c7cde0525d5 Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 10 Nov 2017 06:23:50 +0200 Subject: [PATCH 05/19] Test --- iguana/exchanges/LP_tradebots.c | 1 + 1 file changed, 1 insertion(+) diff --git a/iguana/exchanges/LP_tradebots.c b/iguana/exchanges/LP_tradebots.c index e80eac6e1..5894009dc 100644 --- a/iguana/exchanges/LP_tradebots.c +++ b/iguana/exchanges/LP_tradebots.c @@ -348,6 +348,7 @@ void LP_aliceid(uint32_t tradeid,uint64_t aliceid,char *event,uint32_t requestid if ( (tp= bot->trades[i]) != 0 && tp->finished == 0 && tp->tradeid == tradeid ) { tp->aliceid = aliceid; + printf("bot event tradeid.%u aliceid.%llu %s r.%u q.%u\n",tradeid,(long long)aliceid,event,requestid,quoteid); if ( requestid != 0 && quoteid != 0 ) { tp->requestid = requestid; From 33dc83ecbcd1a1ef9cf9157f0a8f2858b24283fb Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 10 Nov 2017 06:32:53 +0200 Subject: [PATCH 06/19] Test --- iguana/exchanges/LP_network.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/iguana/exchanges/LP_network.c b/iguana/exchanges/LP_network.c index f553aca6c..101313348 100644 --- a/iguana/exchanges/LP_network.c +++ b/iguana/exchanges/LP_network.c @@ -409,7 +409,11 @@ void LP_broadcast_finish(int32_t pubsock,char *base,char *rel,uint8_t *msg,cJSON msglen = (int32_t)strlen((char *)msg) + 1; if ( crc32 == 0 ) crc32 = calc_crc32(0,&msg[2],msglen - 2); +#ifdef FROM_MARKETMAKER if ( G.LP_IAMLP == 0 ) +#else + if ( IAMLP == 0 ) +#endif { free(msg); //printf("broadcast %s\n",jstr(argjson,"method")); From cf9c06843be53d1ac1af8b8a62510bf4db8fb095 Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 10 Nov 2017 06:35:50 +0200 Subject: [PATCH 07/19] Test --- iguana/exchanges/stats.c | 1 + 1 file changed, 1 insertion(+) diff --git a/iguana/exchanges/stats.c b/iguana/exchanges/stats.c index 51c68d9c8..4fbe699d1 100644 --- a/iguana/exchanges/stats.c +++ b/iguana/exchanges/stats.c @@ -822,6 +822,7 @@ continue; #ifndef FROM_MARKETMAKER portable_mutex_t LP_commandmutex; +uint16_t LP_RPCPORT; void stats_kvjson(FILE *logfp,int32_t height,int32_t savedheight,uint32_t timestamp,char *key,cJSON *kvjson,bits256 pubkey,bits256 sigprev) { From 53358d03c037e8fbcc3d275abee087921f59f93f Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 10 Nov 2017 06:38:19 +0200 Subject: [PATCH 08/19] Test --- iguana/exchanges/stats.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/iguana/exchanges/stats.c b/iguana/exchanges/stats.c index 4fbe699d1..6453b85d5 100644 --- a/iguana/exchanges/stats.c +++ b/iguana/exchanges/stats.c @@ -1134,6 +1134,7 @@ char *stats_update(FILE *logfp,char *destdir,char *statefname,char *komodofname) return(jprint(retjson,1)); } +#ifndef FROM_PRIVATEBET int main(int argc, const char * argv[]) { struct tai T; uint32_t timestamp; struct DEXstats_disp prices[365]; int32_t i,n,seconds,leftdatenum; FILE *fp,*logfp; char *filestr,*retstr,*statefname,logfname[512],komodofile[512]; uint16_t port = LP_RPCPORT; @@ -1184,3 +1185,4 @@ int main(int argc, const char * argv[]) return 0; } #endif +#endif From 4dd934982b5d11cad28cdcbdf0a38ce9d35625ab Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 10 Nov 2017 06:42:32 +0200 Subject: [PATCH 09/19] Test --- iguana/exchanges/DEXstats.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/iguana/exchanges/DEXstats.h b/iguana/exchanges/DEXstats.h index e31ff68e3..edf2157cb 100644 --- a/iguana/exchanges/DEXstats.h +++ b/iguana/exchanges/DEXstats.h @@ -927,6 +927,7 @@ char *stats_prices(char *symbol,char *dest,struct DEXstats_disp *prices,int32_t } #ifndef FROM_MARKETMAKER +#ifndef FROM_PRIVATEBET char *stats_JSON(void *ctx,char *myipaddr,int32_t mypubsock,cJSON *argjson,char *remoteaddr,uint16_t port) { char *method,*agent,*retstr,*source,*dest; struct tai T; uint32_t endtimestamp; struct DEXstats_disp prices[365]; int32_t leftdatenum,seconds,numdates; @@ -953,5 +954,6 @@ char *stats_JSON(void *ctx,char *myipaddr,int32_t mypubsock,cJSON *argjson,char return(clonestr(jprint(argjson,0))); } #endif +#endif #endif /* DEXstats_h */ From 6e53f5adee3bc844d597d98388e7a9140ade8686 Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 10 Nov 2017 07:03:09 +0200 Subject: [PATCH 10/19] Test --- iguana/exchanges/LP_ordermatch.c | 4 ++-- iguana/exchanges/bot_settings | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/iguana/exchanges/LP_ordermatch.c b/iguana/exchanges/LP_ordermatch.c index f6e1f325f..e220291eb 100644 --- a/iguana/exchanges/LP_ordermatch.c +++ b/iguana/exchanges/LP_ordermatch.c @@ -146,12 +146,12 @@ double LP_quote_validate(struct LP_utxoinfo *autxo,struct LP_utxoinfo *butxo,str if ( strcmp(autxo->coinaddr,qp->destaddr) != 0 ) return(-10); } - if ( autxo != 0 && destvalue < 2*qp->desttxfee+qp->destsatoshis ) + if ( autxo != 0 && destvalue < qp->desttxfee+qp->destsatoshis ) { printf("destvalue %.8f destsatoshis %.8f is too small txfee %.8f?\n",dstr(destvalue),dstr(qp->destsatoshis),dstr(qp->desttxfee)); return(-11); } - if ( butxo != 0 && srcvalue < 2*qp->txfee+qp->satoshis ) + if ( butxo != 0 && srcvalue < qp->txfee+qp->satoshis ) { printf("srcvalue %.8f [%.8f] satoshis %.8f is too small txfee %.8f?\n",dstr(srcvalue),dstr(srcvalue) - dstr(qp->txfee+qp->satoshis),dstr(qp->satoshis),dstr(qp->txfee)); return(-33); diff --git a/iguana/exchanges/bot_settings b/iguana/exchanges/bot_settings index f619f92e3..f02ca3016 100755 --- a/iguana/exchanges/bot_settings +++ b/iguana/exchanges/bot_settings @@ -1,3 +1,3 @@ #!/bin/bash source userpass -curl --url "http://127.0.0.1:7783" --data "{\"userpass\":\"$userpass\",\"method\":\"bot_settings\",\"botid\":$1,\"newprice\":$1,\"newvolume\":$2}" +curl --url "http://127.0.0.1:7783" --data "{\"userpass\":\"$userpass\",\"method\":\"bot_settings\",\"botid\":$1,\"newprice\":$2,\"newvolume\":$3}" From 3f397e22fbd88b77e883d3288d9695c9414d4420 Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 10 Nov 2017 07:09:47 +0200 Subject: [PATCH 11/19] Test --- iguana/exchanges/LP_tradebots.c | 1 + 1 file changed, 1 insertion(+) diff --git a/iguana/exchanges/LP_tradebots.c b/iguana/exchanges/LP_tradebots.c index 5894009dc..8a0ad850b 100644 --- a/iguana/exchanges/LP_tradebots.c +++ b/iguana/exchanges/LP_tradebots.c @@ -377,6 +377,7 @@ void LP_tradebot_finished(uint32_t tradeid,uint32_t requestid,uint32_t quoteid) //bot->numpending--, bot->completed++; printf("bot.%u detected completion tradeid.%u aliceid.%llx r.%u q.%u, numpending.%d completed.%d\n",bot->id,tp->tradeid,(long long)tp->aliceid,tp->requestid,tp->quoteid,bot->numpending,bot->completed); tp->completed = tp->finished = (uint32_t)time(NULL); + strcpy(tp->event,"finished"); break; } } From b072b80191492b1c6460875a78749df8902c44b7 Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 10 Nov 2017 07:16:15 +0200 Subject: [PATCH 12/19] Test --- iguana/exchanges/LP_tradebots.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/iguana/exchanges/LP_tradebots.c b/iguana/exchanges/LP_tradebots.c index 8a0ad850b..710c9367a 100644 --- a/iguana/exchanges/LP_tradebots.c +++ b/iguana/exchanges/LP_tradebots.c @@ -340,7 +340,7 @@ void LP_tradebot_timeslice(void *ctx,struct LP_tradebot *bot) void LP_aliceid(uint32_t tradeid,uint64_t aliceid,char *event,uint32_t requestid,uint32_t quoteid) { - struct LP_tradebot *bot,*tmp; int32_t i; struct LP_tradebot_trade *tp; + struct LP_tradebot *bot,*tmp; int32_t i,matched = 0; struct LP_tradebot_trade *tp; DL_FOREACH_SAFE(LP_tradebots,bot,tmp) { for (i=0; inumtrades; i++) @@ -348,17 +348,22 @@ void LP_aliceid(uint32_t tradeid,uint64_t aliceid,char *event,uint32_t requestid if ( (tp= bot->trades[i]) != 0 && tp->finished == 0 && tp->tradeid == tradeid ) { tp->aliceid = aliceid; - printf("bot event tradeid.%u aliceid.%llu %s r.%u q.%u\n",tradeid,(long long)aliceid,event,requestid,quoteid); + printf("bot event tradeid.%u aliceid.%llu (%s) r.%u q.%u\n",tradeid,(long long)aliceid,event,requestid,quoteid); if ( requestid != 0 && quoteid != 0 ) { tp->requestid = requestid; tp->quoteid = quoteid; } strcpy(tp->event,event); + matched = 0; break; } } + if ( matched != 0 ) + break; } + if ( matched == 0 ) + printf("NO MATCH: bot event tradeid.%u aliceid.%llu (%s) r.%u q.%u\n",tradeid,(long long)aliceid,event,requestid,quoteid); } void LP_tradebot_finished(uint32_t tradeid,uint32_t requestid,uint32_t quoteid) From cd02831a0e54734a88c1d6ddb837368eba16540f Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 10 Nov 2017 07:17:38 +0200 Subject: [PATCH 13/19] Test --- iguana/exchanges/LP_tradebots.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/iguana/exchanges/LP_tradebots.c b/iguana/exchanges/LP_tradebots.c index 710c9367a..02672eaca 100644 --- a/iguana/exchanges/LP_tradebots.c +++ b/iguana/exchanges/LP_tradebots.c @@ -341,6 +341,8 @@ void LP_tradebot_timeslice(void *ctx,struct LP_tradebot *bot) void LP_aliceid(uint32_t tradeid,uint64_t aliceid,char *event,uint32_t requestid,uint32_t quoteid) { struct LP_tradebot *bot,*tmp; int32_t i,matched = 0; struct LP_tradebot_trade *tp; + if ( tradeid == 0 ) + return; DL_FOREACH_SAFE(LP_tradebots,bot,tmp) { for (i=0; inumtrades; i++) From b53fde0c239e1ea77459ec3889d299a2d9135d29 Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 10 Nov 2017 12:05:27 +0200 Subject: [PATCH 14/19] Test --- iguana/exchanges/LP_nativeDEX.c | 7 +++++-- iguana/exchanges/LP_tradebots.c | 11 +++++++---- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/iguana/exchanges/LP_nativeDEX.c b/iguana/exchanges/LP_nativeDEX.c index b51741787..c8950c7c7 100644 --- a/iguana/exchanges/LP_nativeDEX.c +++ b/iguana/exchanges/LP_nativeDEX.c @@ -18,8 +18,11 @@ // LP_nativeDEX.c // marketmaker // -// bot status 1600% ? - +// swap started, pending, locked, finished, ... +// aliceid +//there is still a pending one with `-1 wait for bobpayment bYoNxkfvwQ42Yufry8J5y8BYi6mQxokvW9 numconfs.1 MNZ c0ea4aa808a653222a15122d96692fecf734dbbacfb9a54cb4711306ea0c3cef`, but that tx is already spent including 6 confirmation +// bot safe to exit? +// // BCH signing // dPoW security -> 4: KMD notarized, 5: BTC notarized, after next notary elections // bigendian architectures need to use little endian for sighash calcs diff --git a/iguana/exchanges/LP_tradebots.c b/iguana/exchanges/LP_tradebots.c index 02672eaca..424909766 100644 --- a/iguana/exchanges/LP_tradebots.c +++ b/iguana/exchanges/LP_tradebots.c @@ -18,8 +18,8 @@ // marketmaker // -#define TRADEBOTS_GAPTIME 60 -#define LP_TRADEBOTS_MAXTRADES 100 +#define TRADEBOTS_GAPTIME 120 +#define LP_TRADEBOTS_MAXTRADES 10 struct LP_tradebot_trade { @@ -36,7 +36,7 @@ struct LP_tradebot char name[128],base[32],rel[32]; int32_t numtrades,numpending,completed,dispdir; double maxprice,totalrelvolume,totalbasevolume,basesum,relsum,pendbasesum,pendrelsum; - uint32_t dead,pause,userpause,started,id; + uint32_t lasttime,dead,pause,userpause,started,id; struct LP_tradebot_trade *trades[LP_TRADEBOTS_MAXTRADES]; } *LP_tradebots; @@ -438,8 +438,11 @@ void LP_tradebots_timeslice(void *ctx) bot->pause = (uint32_t)time(NULL); else if ( bot->userpause == 0 ) bot->pause = 0; - if ( bot->numpending == 0 ) + if ( bot->numpending == 0 && time(NULL) > bot->lasttime+TRADEBOTS_GAPTIME ) + { LP_tradebot_timeslice(ctx,bot); + bot->lasttime = (uint32_t)time(NULL); + } } lastnumfinished = LP_numfinished; } From 63d89d4d0a916b6adef08f9a3924c7e365993f61 Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 10 Nov 2017 12:21:11 +0200 Subject: [PATCH 15/19] Test --- iguana/exchanges/LP_rpc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iguana/exchanges/LP_rpc.c b/iguana/exchanges/LP_rpc.c index 661c476e6..f7bf6a38f 100644 --- a/iguana/exchanges/LP_rpc.c +++ b/iguana/exchanges/LP_rpc.c @@ -635,7 +635,7 @@ cJSON *LP_listunspent(char *symbol,char *coinaddr) sprintf(buf,"[%d, 99999999, [\"%s\"]]",numconfs,coinaddr); return(bitcoin_json(coin,"listunspent",buf)); } else return(LP_address_utxos(coin,coinaddr,0)); - } else return(electrum_address_listunspent(symbol,coin->electrum,&retjson,coinaddr,1)); + } else return(electrum_address_listunspent(symbol,coin->electrum,&retjson,coinaddr,2)); } int32_t LP_listunspent_issue(char *symbol,char *coinaddr,int32_t fullflag) From 0bf0a7e981679dce41984990db55ebfd6994edc5 Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 10 Nov 2017 12:26:04 +0200 Subject: [PATCH 16/19] Test --- iguana/exchanges/LP_socket.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iguana/exchanges/LP_socket.c b/iguana/exchanges/LP_socket.c index 8f9f899e9..8faaedaaf 100644 --- a/iguana/exchanges/LP_socket.c +++ b/iguana/exchanges/LP_socket.c @@ -605,7 +605,7 @@ cJSON *electrum_address_listunspent(char *symbol,struct electrum_info *ep,cJSON { if ( jobj(retjson,"error") == 0 && is_cJSON_Array(retjson) != 0 ) { - if ( 0 && electrumflag > 1 ) + if ( 1 && electrumflag > 1 ) printf("%s.%d u.%u/%d t.%ld %s LISTUNSPENT.(%d)\n",coin->symbol,height,ap->unspenttime,ap->unspentheight,time(NULL),addr,(int32_t)strlen(jprint(retjson,0))); updatedflag = 0; if ( electrum_process_array(coin,ep,addr,retjson,electrumflag) != 0 ) From 4211a33565957792d7c8234651c69b266b97d6bf Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 10 Nov 2017 12:37:33 +0200 Subject: [PATCH 17/19] Test --- iguana/exchanges/LP_socket.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/iguana/exchanges/LP_socket.c b/iguana/exchanges/LP_socket.c index 8faaedaaf..bbf31294e 100644 --- a/iguana/exchanges/LP_socket.c +++ b/iguana/exchanges/LP_socket.c @@ -408,6 +408,8 @@ int32_t electrum_kickstart(struct electrum_info *ep) return(0); } +int32_t zeroval() { return(0); } + cJSON *electrum_submit(char *symbol,struct electrum_info *ep,cJSON **retjsonp,char *method,char *params,int32_t timeout) { // queue id and string and callback @@ -416,6 +418,12 @@ cJSON *electrum_submit(char *symbol,struct electrum_info *ep,cJSON **retjsonp,ch ep = electrum_server(symbol,0); while ( ep != 0 ) { + if ( strcmp(ep->symbol,symbol) != 0 ) + { + printf("ep.%p %s %s:%u called for [%s]???\n",ep,ep->symbol,ep->ipaddr,ep->port,symbol); + int32_t i = 1 / zeroval(); + printf("it should be dead already.%d\n",i); + } if ( ep != 0 && ep->sock >= 0 && retjsonp != 0 ) { *retjsonp = 0; From 84febf8028e9362ba8162f2df21647153e1ece9a Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 10 Nov 2017 13:00:49 +0200 Subject: [PATCH 18/19] Test --- iguana/exchanges/LP_socket.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/iguana/exchanges/LP_socket.c b/iguana/exchanges/LP_socket.c index bbf31294e..b40c74ccb 100644 --- a/iguana/exchanges/LP_socket.c +++ b/iguana/exchanges/LP_socket.c @@ -391,8 +391,7 @@ void electrum_initial_requests(struct electrum_info *ep) int32_t electrum_kickstart(struct electrum_info *ep) { - closesocket(ep->sock), ep->sock = -1; - sleep(1); + closesocket(ep->sock);//, ep->sock = -1; if ( (ep->sock= LP_socket(0,ep->ipaddr,ep->port)) < 0 ) { printf("error RE-connecting to %s:%u\n",ep->ipaddr,ep->port); From 13cdad3437c30be673361dbb5493f7285669316f Mon Sep 17 00:00:00 2001 From: jl777 Date: Fri, 10 Nov 2017 13:03:45 +0200 Subject: [PATCH 19/19] Test --- iguana/exchanges/LP_rpc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/iguana/exchanges/LP_rpc.c b/iguana/exchanges/LP_rpc.c index f7bf6a38f..661c476e6 100644 --- a/iguana/exchanges/LP_rpc.c +++ b/iguana/exchanges/LP_rpc.c @@ -635,7 +635,7 @@ cJSON *LP_listunspent(char *symbol,char *coinaddr) sprintf(buf,"[%d, 99999999, [\"%s\"]]",numconfs,coinaddr); return(bitcoin_json(coin,"listunspent",buf)); } else return(LP_address_utxos(coin,coinaddr,0)); - } else return(electrum_address_listunspent(symbol,coin->electrum,&retjson,coinaddr,2)); + } else return(electrum_address_listunspent(symbol,coin->electrum,&retjson,coinaddr,1)); } int32_t LP_listunspent_issue(char *symbol,char *coinaddr,int32_t fullflag)