Browse Source

Test

etomic
jl777 7 years ago
parent
commit
6cad73a720
  1. 6
      iguana/exchanges/LP_RTmetrics.c
  2. 2
      iguana/exchanges/LP_nativeDEX.c
  3. 2
      iguana/exchanges/LP_ordermatch.c
  4. 143
      iguana/exchanges/LP_stats.c
  5. 2
      iguana/exchanges/install

6
iguana/exchanges/LP_RTmetrics.c

@ -149,7 +149,7 @@ void LP_RTmetrics_swapsinfo(char *refbase,char *refrel,cJSON *swaps,int32_t nums
} }
} }
void LP_RTmetrics_init() /*void LP_RTmetrics_init()
{ {
struct LP_pubkey_info *pubp,*tmp; uint32_t futuretime; int32_t i,numswaps; bits256 pubkey,zero; cJSON *statsjson,*swaps; struct LP_pubkey_info *pubp,*tmp; uint32_t futuretime; int32_t i,numswaps; bits256 pubkey,zero; cJSON *statsjson,*swaps;
memset(&LP_RTmetrics,0,sizeof(LP_RTmetrics)); memset(&LP_RTmetrics,0,sizeof(LP_RTmetrics));
@ -188,7 +188,9 @@ void LP_RTmetrics_init()
} }
} }
//printf("%d pubkeys have pending swaps, whitelist.%d blacklist.%d avoidtxids.%d\n",LP_RTmetrics.numpendings,LP_RTmetrics.numwhitelist,LP_RTmetrics.numblacklist,LP_RTmetrics.numavoidtxids); //printf("%d pubkeys have pending swaps, whitelist.%d blacklist.%d avoidtxids.%d\n",LP_RTmetrics.numpendings,LP_RTmetrics.numwhitelist,LP_RTmetrics.numblacklist,LP_RTmetrics.numavoidtxids);
} }*/
double _LP_RTmetric_calc(struct LP_metricinfo *mp,double bestprice,double maxprice,double relvolume) double _LP_RTmetric_calc(struct LP_metricinfo *mp,double bestprice,double maxprice,double relvolume)
{ {

2
iguana/exchanges/LP_nativeDEX.c

@ -104,7 +104,7 @@ struct LP_address_utxo *LP_garbage_collector2;
//uint32_t LP_deadman_switch; //uint32_t LP_deadman_switch;
uint16_t LP_fixed_pairport,LP_publicport; uint16_t LP_fixed_pairport,LP_publicport;
uint32_t LP_lastnonce,LP_counter,LP_swap_endcritical,LP_swap_critical; uint32_t LP_lastnonce,LP_counter,LP_swap_endcritical,LP_swap_critical,LP_RTcount,LP_swapscount;
int32_t LP_mybussock = -1; int32_t LP_mybussock = -1;
int32_t LP_mypubsock = -1; int32_t LP_mypubsock = -1;
int32_t LP_mypullsock = -1; int32_t LP_mypullsock = -1;

2
iguana/exchanges/LP_ordermatch.c

@ -787,7 +787,7 @@ int32_t LP_tradecommand(void *ctx,char *myipaddr,int32_t pubsock,cJSON *argjson,
LP_quoteparse(&Q,argjson); LP_quoteparse(&Q,argjson);
LP_requestinit(&Q.R,Q.srchash,Q.desthash,Q.srccoin,Q.satoshis-Q.txfee,Q.destcoin,Q.destsatoshis-Q.desttxfee,Q.timestamp,Q.quotetime,DEXselector); LP_requestinit(&Q.R,Q.srchash,Q.desthash,Q.srccoin,Q.satoshis-Q.txfee,Q.destcoin,Q.destsatoshis-Q.desttxfee,Q.timestamp,Q.quotetime,DEXselector);
LP_tradecommand_log(argjson); LP_tradecommand_log(argjson);
printf("(%-10u %10u) %12s aliceid.%22llu %5s/%-5s %12.8f -> %12.8f price %12.8f\n",Q.R.requestid,Q.R.quoteid,method,(long long)Q.aliceid,Q.srccoin,Q.destcoin,dstr(Q.satoshis),dstr(Q.destsatoshis),(double)Q.destsatoshis/Q.satoshis); printf("(%-10u %10u) %12s aliceid.%22llu %5s/%-5s %12.8f -> %12.8f price %12.8f | RT.%d %d\n",Q.R.requestid,Q.R.quoteid,method,(long long)Q.aliceid,Q.srccoin,Q.destcoin,dstr(Q.satoshis),dstr(Q.destsatoshis),(double)Q.destsatoshis/Q.satoshis,LP_RTcount,LP_swapscount);
retval = 1; retval = 1;
autxo = &A; autxo = &A;
butxo = &B; butxo = &B;

143
iguana/exchanges/LP_stats.c

@ -20,7 +20,7 @@
#define LP_STATSLOG_FNAME "stats.log" #define LP_STATSLOG_FNAME "stats.log"
struct LP_swapstats *LP_swapstats; struct LP_swapstats *LP_swapstats,*LP_RTstats;
int32_t LP_statslog_parsequote(char *method,cJSON *lineobj); int32_t LP_statslog_parsequote(char *method,cJSON *lineobj);
char *LP_stats_methods[] = { "unknown", "request", "reserved", "connect", "connected", "tradestatus" }; char *LP_stats_methods[] = { "unknown", "request", "reserved", "connect", "connected", "tradestatus" };
@ -114,18 +114,22 @@ int32_t LP_statslog_parse()
struct LP_swapstats *LP_swapstats_find(uint64_t aliceid) struct LP_swapstats *LP_swapstats_find(uint64_t aliceid)
{ {
struct LP_swapstats *sp; struct LP_swapstats *sp;
HASH_FIND(hh,LP_swapstats,&aliceid,sizeof(aliceid),sp); HASH_FIND(hh,LP_RTstats,&aliceid,sizeof(aliceid),sp);
if ( sp == 0 )
HASH_FIND(hh,LP_swapstats,&aliceid,sizeof(aliceid),sp);
return(sp); return(sp);
} }
struct LP_swapstats *LP_swapstats_add(uint64_t aliceid) struct LP_swapstats *LP_swapstats_add(uint64_t aliceid,int32_t RTflag)
{ {
struct LP_swapstats *sp; struct LP_swapstats *sp;
if ( (sp= LP_swapstats_find(aliceid)) == 0 ) if ( (sp= LP_swapstats_find(aliceid)) == 0 )
{ {
sp = calloc(1,sizeof(*sp)); sp = calloc(1,sizeof(*sp));
sp->aliceid = aliceid; sp->aliceid = aliceid;
HASH_ADD(hh,LP_swapstats,aliceid,sizeof(aliceid),sp); if ( RTflag != 0 )
HASH_ADD(hh,LP_RTstats,aliceid,sizeof(aliceid),sp);
else HASH_ADD(hh,LP_swapstats,aliceid,sizeof(aliceid),sp);
} }
return(LP_swapstats_find(aliceid)); return(LP_swapstats_find(aliceid));
} }
@ -206,7 +210,7 @@ int32_t LP_swapstats_update(struct LP_swapstats *sp,struct LP_quoteinfo *qp,cJSO
int32_t LP_statslog_parsequote(char *method,cJSON *lineobj) int32_t LP_statslog_parsequote(char *method,cJSON *lineobj)
{ {
static uint32_t unexpected; static uint32_t unexpected;
struct LP_swapstats *sp,*tmp; struct LP_pubkey_info *pubp; struct LP_pubswap *ptr; double qprice; uint32_t requestid,quoteid,timestamp; int32_t i,flag,numtrades[LP_MAXPRICEINFOS],methodind,destvout,feevout,duplicate=0; char *gui,*base,*rel; uint64_t aliceid,txfee,satoshis,destsatoshis; bits256 desttxid,feetxid; struct LP_quoteinfo Q; uint64_t basevols[LP_MAXPRICEINFOS],relvols[LP_MAXPRICEINFOS]; struct LP_swapstats *sp,*tmp; struct LP_pubkey_info *pubp; struct LP_pubswap *ptr; double qprice; uint32_t requestid,quoteid,timestamp; int32_t i,RTflag,flag,numtrades[LP_MAXPRICEINFOS],methodind,destvout,feevout,duplicate=0; char *statusstr,*gui,*base,*rel; uint64_t aliceid,txfee,satoshis,destsatoshis; bits256 desttxid,feetxid; struct LP_quoteinfo Q; uint64_t basevols[LP_MAXPRICEINFOS],relvols[LP_MAXPRICEINFOS];
memset(numtrades,0,sizeof(numtrades)); memset(numtrades,0,sizeof(numtrades));
memset(basevols,0,sizeof(basevols)); memset(basevols,0,sizeof(basevols));
memset(relvols,0,sizeof(relvols)); memset(relvols,0,sizeof(relvols));
@ -274,6 +278,9 @@ int32_t LP_statslog_parsequote(char *method,cJSON *lineobj)
destvout = jint(lineobj,"destvout"); destvout = jint(lineobj,"destvout");
feetxid = jbits256(lineobj,"feetxid"); feetxid = jbits256(lineobj,"feetxid");
feevout = jint(lineobj,"feevout"); feevout = jint(lineobj,"feevout");
if ( (statusstr= jstr(lineobj,"status")) != 0 && strcmp(statusstr,"finished") == 0 )
RTflag = 0;
else RTflag = 1;
qprice = ((double)destsatoshis / (satoshis - txfee)); qprice = ((double)destsatoshis / (satoshis - txfee));
//printf("%s/v%d %s/v%d\n",bits256_str(str,desttxid),destvout,bits256_str(str2,feetxid),feevout); //printf("%s/v%d %s/v%d\n",bits256_str(str,desttxid),destvout,bits256_str(str2,feetxid),feevout);
aliceid = LP_aliceid_calc(desttxid,destvout,feetxid,feevout); aliceid = LP_aliceid_calc(desttxid,destvout,feetxid,feevout);
@ -289,7 +296,7 @@ int32_t LP_statslog_parsequote(char *method,cJSON *lineobj)
} }
else else
{ {
if ( (sp= LP_swapstats_add(aliceid)) != 0 ) if ( (sp= LP_swapstats_add(aliceid,RTflag)) != 0 )
{ {
sp->Q = Q; sp->Q = Q;
sp->qprice = qprice; sp->qprice = qprice;
@ -297,17 +304,20 @@ int32_t LP_statslog_parsequote(char *method,cJSON *lineobj)
sp->ind = LP_aliceids++; sp->ind = LP_aliceids++;
strcpy(sp->bobgui,"nogui"); strcpy(sp->bobgui,"nogui");
strcpy(sp->alicegui,"nogui"); strcpy(sp->alicegui,"nogui");
if ( (pubp= LP_pubkeyadd(sp->Q.srchash)) != 0 ) if ( sp->finished == 0 && sp->expired == 0 )
{ {
ptr = calloc(1,sizeof(*ptr)); if ( (pubp= LP_pubkeyadd(sp->Q.srchash)) != 0 )
ptr->swap = sp; {
DL_APPEND(pubp->bobswaps,ptr); ptr = calloc(1,sizeof(*ptr));
} ptr->swap = sp;
if ( (pubp= LP_pubkeyadd(sp->Q.desthash)) != 0 ) DL_APPEND(pubp->bobswaps,ptr);
{ }
ptr = calloc(1,sizeof(*ptr)); if ( (pubp= LP_pubkeyadd(sp->Q.desthash)) != 0 )
ptr->swap = sp; {
DL_APPEND(pubp->aliceswaps,ptr); ptr = calloc(1,sizeof(*ptr));
ptr->swap = sp;
DL_APPEND(pubp->aliceswaps,ptr);
}
} }
//LP_swapstats_line(numtrades,basevols,relvols,line,sp); //LP_swapstats_line(numtrades,basevols,relvols,line,sp);
//printf("%s\n",line); //printf("%s\n",line);
@ -326,9 +336,57 @@ int32_t LP_statslog_parsequote(char *method,cJSON *lineobj)
return(duplicate == 0); return(duplicate == 0);
} }
int32_t LP_stats_dispiter(cJSON *array,struct LP_swapstats *sp,uint32_t starttime,uint32_t endtime,char *refbase,char *refrel,char *refgui,bits256 refpubkey)
{
int32_t dispflag,retval = 0; cJSON *item;
if ( sp->finished == 0 && sp->expired == 0 && time(NULL) > sp->Q.timestamp+LP_atomic_locktime(sp->Q.srccoin,sp->Q.destcoin)*2 )
sp->expired = (uint32_t)time(NULL);
if ( sp->finished != 0 || sp->expired != 0 )
retval = 1;
dispflag = 0;
if ( starttime == 0 && endtime == 0 )
dispflag = 1;
else if ( starttime > time(NULL) && endtime == starttime && sp->finished == 0 && sp->expired == 0 )
dispflag = 1;
else if ( sp->Q.timestamp >= starttime && sp->Q.timestamp <= endtime )
dispflag = 1;
if ( refbase != 0 && strcmp(refbase,sp->Q.srccoin) != 0 && strcmp(refbase,sp->Q.destcoin) != 0 )
dispflag = 0;
if ( refrel != 0 && strcmp(refrel,sp->Q.srccoin) != 0 && strcmp(refrel,sp->Q.destcoin) != 0 )
dispflag = 0;
if ( dispflag != 0 )
{
dispflag = 0;
if ( refgui == 0 || refgui[0] == 0 || strcmp(refgui,sp->bobgui) == 0 || strcmp(refgui,sp->alicegui) == 0 )
{
if ( bits256_nonz(refpubkey) == 0 || bits256_cmp(refpubkey,sp->Q.srchash) == 0 || bits256_cmp(refpubkey,sp->Q.desthash) == 0 )
dispflag = 1;
}
}
if ( dispflag != 0 )
{
//LP_swapstats_line(numtrades,basevols,relvols,line,sp);
item = cJSON_CreateObject();
jaddnum(item,"timestamp",sp->Q.timestamp);
jadd64bits(item,"aliceid",sp->aliceid);
jaddbits256(item,"src",sp->Q.srchash);
jaddstr(item,"base",sp->Q.srccoin);
jaddnum(item,"basevol",dstr(sp->Q.satoshis));
jaddbits256(item,"dest",sp->Q.desthash);
jaddstr(item,"rel",sp->Q.destcoin);
jaddnum(item,"relvol",dstr(sp->Q.destsatoshis));
jaddnum(item,"price",sp->qprice);
jaddnum(item,"requestid",sp->Q.R.requestid);
jaddnum(item,"quoteid",sp->Q.R.quoteid);
//jaddstr(item,"line",line);
jaddi(array,item);
}
return(retval);
}
cJSON *LP_statslog_disp(uint32_t starttime,uint32_t endtime,char *refgui,bits256 refpubkey,char *refbase,char *refrel) cJSON *LP_statslog_disp(uint32_t starttime,uint32_t endtime,char *refgui,bits256 refpubkey,char *refbase,char *refrel)
{ {
cJSON *retjson,*array,*item; struct LP_swapstats *sp,*tmp; int32_t i,n,dispflag,numtrades[LP_MAXPRICEINFOS]; uint64_t basevols[LP_MAXPRICEINFOS],relvols[LP_MAXPRICEINFOS]; cJSON *retjson,*array,*item; struct LP_swapstats *sp,*tmp; int32_t i,n,numtrades[LP_MAXPRICEINFOS]; uint64_t basevols[LP_MAXPRICEINFOS],relvols[LP_MAXPRICEINFOS];
if ( starttime > endtime ) if ( starttime > endtime )
starttime = endtime; starttime = endtime;
n = LP_statslog_parse(); n = LP_statslog_parse();
@ -339,48 +397,19 @@ cJSON *LP_statslog_disp(uint32_t starttime,uint32_t endtime,char *refgui,bits256
jaddstr(retjson,"result","success"); jaddstr(retjson,"result","success");
jaddnum(retjson,"newlines",n); jaddnum(retjson,"newlines",n);
array = cJSON_CreateArray(); array = cJSON_CreateArray();
HASH_ITER(hh,LP_swapstats,sp,tmp) LP_RTcount = LP_swapscount = 0;
HASH_ITER(hh,LP_RTstats,sp,tmp)
{ {
if ( sp->finished == 0 && time(NULL) > sp->Q.timestamp+LP_atomic_locktime(sp->Q.srccoin,sp->Q.destcoin)*2 ) if ( LP_stats_dispiter(array,sp,starttime,endtime,refbase,refrel,refgui,refpubkey) > 0 )
sp->expired = (uint32_t)time(NULL);
dispflag = 0;
if ( starttime == 0 && endtime == 0 )
dispflag = 1;
else if ( starttime > time(NULL) && endtime == starttime && sp->finished == 0 && sp->expired == 0 )
dispflag = 1;
else if ( sp->Q.timestamp >= starttime && sp->Q.timestamp <= endtime )
dispflag = 1;
if ( refbase != 0 && strcmp(refbase,sp->Q.srccoin) != 0 && strcmp(refbase,sp->Q.destcoin) != 0 )
dispflag = 0;
if ( refrel != 0 && strcmp(refrel,sp->Q.srccoin) != 0 && strcmp(refrel,sp->Q.destcoin) != 0 )
dispflag = 0;
if ( dispflag != 0 )
{
dispflag = 0;
if ( refgui == 0 || refgui[0] == 0 || strcmp(refgui,sp->bobgui) == 0 || strcmp(refgui,sp->alicegui) == 0 )
{
if ( bits256_nonz(refpubkey) == 0 || bits256_cmp(refpubkey,sp->Q.srchash) == 0 || bits256_cmp(refpubkey,sp->Q.desthash) == 0 )
dispflag = 1;
}
}
if ( dispflag != 0 )
{ {
//LP_swapstats_line(numtrades,basevols,relvols,line,sp); HASH_DELETE(hh,LP_RTstats,sp);
item = cJSON_CreateObject(); HASH_ADD(hh,LP_swapstats,aliceid,sizeof(sp->aliceid),sp);
jaddnum(item,"timestamp",sp->Q.timestamp); } else LP_RTcount++;
jadd64bits(item,"aliceid",sp->aliceid); }
jaddbits256(item,"src",sp->Q.srchash); HASH_ITER(hh,LP_swapstats,sp,tmp)
jaddstr(item,"base",sp->Q.srccoin); {
jaddnum(item,"basevol",dstr(sp->Q.satoshis)); LP_stats_dispiter(array,sp,starttime,endtime,refbase,refrel,refgui,refpubkey);
jaddbits256(item,"dest",sp->Q.desthash); LP_swapscount++;
jaddstr(item,"rel",sp->Q.destcoin);
jaddnum(item,"relvol",dstr(sp->Q.destsatoshis));
jaddnum(item,"price",sp->qprice);
jaddnum(item,"requestid",sp->Q.R.requestid);
jaddnum(item,"quoteid",sp->Q.R.quoteid);
//jaddstr(item,"line",line);
jaddi(array,item);
}
} }
jadd(retjson,"swaps",array); jadd(retjson,"swaps",array);
array = cJSON_CreateArray(); array = cJSON_CreateArray();

2
iguana/exchanges/install

@ -1,5 +1,5 @@
#!/bin/bash #!/bin/bash
cp claim deposit invreset sendrawtransaction processfiles stop millis mnzservers bot_buy bot_list bot_statuslist bot_pause bot_resume bot_sell bot_settings bot_status bot_stop guistats pubkeystats pendings coinswaps baserelswaps setpassphrase notarizations getrawtransaction parselog statsdisp m_js trust trusted setconfirms balance listunspent electrum snapshot_balance snapshot_loop secretaddresses dividends snapshot goals goal portfolio autoprice deletemessages getmessages debug buy sell bestfit orderbook client run_osx client_osx run coins disable enable myprice myprices getcoins getpeers getpeersIP getprices help inv setprice status ../dexscripts cp tradesarray claim deposit invreset sendrawtransaction processfiles stop millis mnzservers bot_buy bot_list bot_statuslist bot_pause bot_resume bot_sell bot_settings bot_status bot_stop guistats pubkeystats pendings coinswaps baserelswaps setpassphrase notarizations getrawtransaction parselog statsdisp m_js trust trusted setconfirms balance listunspent electrum snapshot_balance snapshot_loop secretaddresses dividends snapshot goals goal portfolio autoprice deletemessages getmessages debug buy sell bestfit orderbook client run_osx client_osx run coins disable enable myprice myprices getcoins getpeers getpeersIP getprices help inv setprice status ../dexscripts
cp coins.json .. cp coins.json ..
cd ../dexscripts cd ../dexscripts
#cp ../exchanges/passphrase ../exchanges/userpass . #cp ../exchanges/passphrase ../exchanges/userpass .

Loading…
Cancel
Save