Browse Source

Test

etomic
jl777 7 years ago
parent
commit
affb03ba5a
  1. 10
      iguana/exchanges/LP_RTmetrics.c
  2. 2
      iguana/exchanges/LP_commands.c
  3. 20
      iguana/exchanges/LP_include.h
  4. 7
      iguana/exchanges/LP_nativeDEX.c
  5. 8
      iguana/exchanges/LP_ordermatch.c
  6. 40
      iguana/exchanges/LP_prices.c
  7. 10
      iguana/exchanges/LP_signatures.c
  8. 25
      iguana/exchanges/LP_stats.c
  9. 2
      iguana/exchanges/LP_zeroconf.c
  10. 3
      iguana/exchanges/tradesarray

10
iguana/exchanges/LP_RTmetrics.c

@ -118,7 +118,9 @@ void LP_RTmetrics_swapsinfo(char *refbase,char *refrel,cJSON *swaps,int32_t nums
base = ""; base = "";
if ( (rel= jstr(item,"rel")) == 0 ) if ( (rel= jstr(item,"rel")) == 0 )
rel = ""; rel = "";
if ( strcmp(base,refbase) != 0 && strcmp(base,refrel) != 0 && strcmp(rel,refbase) != 0 && strcmp(rel,refrel) != 0 ) if ( refbase[0] != 0 && strcmp(base,refbase) != 0 && strcmp(base,refrel) != 0 )
continue;
if ( refrel[0] != 0 && strcmp(rel,refbase) != 0 && strcmp(rel,refrel) != 0 )
continue; continue;
aliceid = j64bits(item,"aliceid"); aliceid = j64bits(item,"aliceid");
basesatoshis = SATOSHIDEN * jdouble(item,"basevol"); basesatoshis = SATOSHIDEN * jdouble(item,"basevol");
@ -147,9 +149,9 @@ void LP_RTmetrics_swapsinfo(char *refbase,char *refrel,cJSON *swaps,int32_t nums
} }
} }
void LP_RTmetrics_update(char *base,char *rel) void LP_RTmetrics_init()
{ {
struct LP_pubkeyinfo *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));
HASH_ITER(hh,LP_pubkeyinfos,pubp,tmp) HASH_ITER(hh,LP_pubkeyinfos,pubp,tmp)
{ {
@ -167,7 +169,7 @@ void LP_RTmetrics_update(char *base,char *rel)
{ {
//printf("LP_RTmetrics_update for (%s)\n",jprint(swaps,0)); //printf("LP_RTmetrics_update for (%s)\n",jprint(swaps,0));
if ( numswaps > 0 ) if ( numswaps > 0 )
LP_RTmetrics_swapsinfo(base,rel,swaps,numswaps); LP_RTmetrics_swapsinfo("","",swaps,numswaps);
} }
free_json(statsjson); free_json(statsjson);
} }

2
iguana/exchanges/LP_commands.c

@ -103,7 +103,7 @@ disable(coin)\n\
notarizations(coin)\n\ notarizations(coin)\n\
parselog()\n\ parselog()\n\
statsdisp(starttime=0, endtime=0, gui="", pubkey="", base="", rel="")\n\ statsdisp(starttime=0, endtime=0, gui="", pubkey="", base="", rel="")\n\
tradesarray(base, rel, starttime=<now>-timescale*1024, endtime=<now>, timescale=60) -> [timestamp, high, low, open, close, relvolume, basevolume, aveprice]\n\ tradesarray(base, rel, starttime=<now>-timescale*1024, endtime=<now>, timescale=60) -> [timestamp, high, low, open, close, relvolume, basevolume, aveprice, numtrades]\n\
pricearray(base, rel, starttime=0, endtime=0, timescale=60) -> [timestamp, avebid, aveask, highbid, lowask]\n\ pricearray(base, rel, starttime=0, endtime=0, timescale=60) -> [timestamp, avebid, aveask, highbid, lowask]\n\
getrawtransaction(coin, txid)\n\ getrawtransaction(coin, txid)\n\
inventory(coin, reset=0, [passphrase=])\n\ inventory(coin, reset=0, [passphrase=])\n\

20
iguana/exchanges/LP_include.h

@ -378,12 +378,26 @@ struct LP_pubkey_quote
uint8_t baseind,relind,numutxos,scale; uint8_t baseind,relind,numutxos,scale;
}; };
struct LP_swapstats
{
UT_hash_handle hh;
struct LP_quoteinfo Q;
bits256 bobdeposit,alicepayment,bobpayment,paymentspent,Apaymentspent,depositspent;
double qprice;
uint64_t aliceid;
uint32_t ind,methodind,finished,expired;
char alicegui[32],bobgui[32];
};
struct LP_pubswap { struct LP_pubswap *next,*prev; struct LP_swapstats *swap; };
#define LP_MAXPRICEINFOS 256 #define LP_MAXPRICEINFOS 256
struct LP_pubkeyinfo struct LP_pubkey_info
{ {
UT_hash_handle hh; UT_hash_handle hh;
bits256 pubkey; bits256 pubkey;
struct LP_pubkey_quote *quotes; struct LP_pubkey_quote *quotes;
struct LP_pubswap *bobswaps,*aliceswaps;
uint64_t bondvalue,swaps_kmdvalue; uint64_t bondvalue,swaps_kmdvalue;
uint32_t timestamp,numerrors,lasttime; uint32_t timestamp,numerrors,lasttime;
int32_t istrusted; int32_t istrusted;
@ -404,7 +418,7 @@ struct electrum_info
}; };
uint32_t LP_sighash(char *symbol,int32_t zcash); uint32_t LP_sighash(char *symbol,int32_t zcash);
int32_t LP_pubkey_sigcheck(struct LP_pubkeyinfo *pubp,cJSON *item); int32_t LP_pubkey_sigcheck(struct LP_pubkey_info *pubp,cJSON *item);
int32_t LP_pubkey_sigadd(cJSON *item,uint32_t timestamp,bits256 priv,bits256 pub,uint8_t *rmd160,uint8_t *pubsecp); int32_t LP_pubkey_sigadd(cJSON *item,uint32_t timestamp,bits256 priv,bits256 pub,uint8_t *rmd160,uint8_t *pubsecp);
int32_t LP_quoteparse(struct LP_quoteinfo *qp,cJSON *argjson); int32_t LP_quoteparse(struct LP_quoteinfo *qp,cJSON *argjson);
struct LP_address *LP_address(struct iguana_info *coin,char *coinaddr); struct LP_address *LP_address(struct iguana_info *coin,char *coinaddr);
@ -479,7 +493,7 @@ void LP_postutxos(char *symbol,char *coinaddr);
int32_t LP_listunspent_both(char *symbol,char *coinaddr,int32_t fullflag); int32_t LP_listunspent_both(char *symbol,char *coinaddr,int32_t fullflag);
uint16_t LP_randpeer(char *destip); uint16_t LP_randpeer(char *destip);
uint32_t LP_atomic_locktime(char *base,char *rel); uint32_t LP_atomic_locktime(char *base,char *rel);
struct LP_pubkeyinfo *LP_pubkeyfind(bits256 pubkey); struct LP_pubkey_info *LP_pubkeyfind(bits256 pubkey);
char *issue_LP_psock(char *destip,uint16_t destport,int32_t ispaired); char *issue_LP_psock(char *destip,uint16_t destport,int32_t ispaired);
char *LP_unspents_filestr(char *symbol,char *addr); char *LP_unspents_filestr(char *symbol,char *addr);
cJSON *bitcoin_data2json(char *symbol,uint8_t taddr,uint8_t pubtype,uint8_t p2shtype,uint8_t isPoS,int32_t height,bits256 *txidp,struct iguana_msgtx *msgtx,uint8_t *extraspace,int32_t extralen,uint8_t *serialized,int32_t len,cJSON *vins,int32_t suppress_pubkeys,int32_t zcash); cJSON *bitcoin_data2json(char *symbol,uint8_t taddr,uint8_t pubtype,uint8_t p2shtype,uint8_t isPoS,int32_t height,bits256 *txidp,struct iguana_msgtx *msgtx,uint8_t *extraspace,int32_t extralen,uint8_t *serialized,int32_t len,cJSON *vins,int32_t suppress_pubkeys,int32_t zcash);

7
iguana/exchanges/LP_nativeDEX.c

@ -28,9 +28,7 @@
// MNZ getcoin strangeness // MNZ getcoin strangeness
// portfolio value based on ask? // portfolio value based on ask?
// listunspent triplicate // listunspent triplicate
// RTmetrics update from tradecommand
// verify encrypted destpubkey, broadcast:0 setprice // verify encrypted destpubkey, broadcast:0 setprice
// [{"date":1405699200,"high":0.0045388,"low":0.00403001,"open":0.00404545,"close":0.00435873,"relvol":44.34555992,"basevol":10311.88079097,"aveprice":0.00430043}, // minute,
// improve critical section detection when parallel trades // improve critical section detection when parallel trades
// previously, it used to show amount, kmd equiv, perc // previously, it used to show amount, kmd equiv, perc
@ -99,7 +97,7 @@ int32_t num_Reserved_msgs[2],max_Reserved_msgs[2];
struct LP_peerinfo *LP_peerinfos,*LP_mypeer; struct LP_peerinfo *LP_peerinfos,*LP_mypeer;
struct LP_forwardinfo *LP_forwardinfos; struct LP_forwardinfo *LP_forwardinfos;
struct iguana_info *LP_coins; struct iguana_info *LP_coins;
struct LP_pubkeyinfo *LP_pubkeyinfos; struct LP_pubkey_info *LP_pubkeyinfos;
struct rpcrequest_info *LP_garbage_collector; struct rpcrequest_info *LP_garbage_collector;
struct LP_address_utxo *LP_garbage_collector2; struct LP_address_utxo *LP_garbage_collector2;
@ -209,7 +207,7 @@ char *LP_command_process(void *ctx,char *myipaddr,int32_t pubsock,cJSON *argjson
//if ( pubsock >= 0 ) //strncmp("{\"error\":",retstr,strlen("{\"error\":")) != 0 && //if ( pubsock >= 0 ) //strncmp("{\"error\":",retstr,strlen("{\"error\":")) != 0 &&
//LP_send(pubsock,retstr,(int32_t)strlen(retstr)+1,0); //LP_send(pubsock,retstr,(int32_t)strlen(retstr)+1,0);
} }
} //else printf("finished tradecommand (%s)\n",jprint(argjson,0)); } else LP_statslog_parse();
return(retstr); return(retstr);
} }
@ -1255,6 +1253,7 @@ void LPinit(uint16_t myport,uint16_t mypullport,uint16_t mypubport,uint16_t mybu
exit(-1); exit(-1);
} }
int32_t nonz; int32_t nonz;
LP_statslog_parse();
while ( 1 ) while ( 1 )
{ {
nonz = 0; nonz = 0;

8
iguana/exchanges/LP_ordermatch.c

@ -614,7 +614,7 @@ char *LP_connectedalice(cJSON *argjson) // alice
LP_aliceid(Q.tradeid,Q.aliceid,"error5",0,0); LP_aliceid(Q.tradeid,Q.aliceid,"error5",0,0);
return(clonestr("{\"error\":\"no price set\"}")); return(clonestr("{\"error\":\"no price set\"}"));
} }
LP_RTmetrics_update(Q.srccoin,Q.destcoin); //LP_RTmetrics_update(Q.srccoin,Q.destcoin);
printf("%s/%s bid %.8f ask %.8f values %.8f %.8f\n",Q.srccoin,Q.destcoin,bid,ask,dstr(butxo->payment.value),dstr(butxo->deposit.value)); printf("%s/%s bid %.8f ask %.8f values %.8f %.8f\n",Q.srccoin,Q.destcoin,bid,ask,dstr(butxo->payment.value),dstr(butxo->deposit.value));
price = bid; price = bid;
if ( (coin= LP_coinfind(Q.destcoin)) == 0 ) if ( (coin= LP_coinfind(Q.destcoin)) == 0 )
@ -908,7 +908,7 @@ int32_t LP_tradecommand(void *ctx,char *myipaddr,int32_t pubsock,cJSON *argjson,
if ( counter > 3 || price > bestprice ) // skip if late or bad price if ( counter > 3 || price > bestprice ) // skip if late or bad price
return(retval); return(retval);
} else return(retval); } else return(retval);
LP_RTmetrics_update(Q.srccoin,Q.destcoin); //LP_RTmetrics_update(Q.srccoin,Q.destcoin);
if ( LP_RTmetrics_blacklisted(Q.desthash) >= 0 ) if ( LP_RTmetrics_blacklisted(Q.desthash) >= 0 )
{ {
printf("request from blacklisted %s, ignore\n",bits256_str(str,Q.desthash)); printf("request from blacklisted %s, ignore\n",bits256_str(str,Q.desthash));
@ -1020,7 +1020,7 @@ struct LP_utxoinfo *LP_ordermatch_iter(struct LP_address_utxo **utxos,int32_t ma
struct LP_utxoinfo *LP_buyutxo(double *ordermatchpricep,int64_t *bestsatoshisp,int64_t *bestdestsatoshisp,struct LP_utxoinfo *autxo,char *base,double maxprice,int32_t duration,uint64_t txfee,uint64_t desttxfee,char *gui,bits256 *avoids,int32_t numavoids,bits256 destpubkey) struct LP_utxoinfo *LP_buyutxo(double *ordermatchpricep,int64_t *bestsatoshisp,int64_t *bestdestsatoshisp,struct LP_utxoinfo *autxo,char *base,double maxprice,int32_t duration,uint64_t txfee,uint64_t desttxfee,char *gui,bits256 *avoids,int32_t numavoids,bits256 destpubkey)
{ {
bits256 pubkey; char *obookstr,coinaddr[64]; cJSON *orderbook,*asks,*rawasks,*item; int32_t maxiters,i,j,numasks,max; struct LP_address_utxo **utxos; double price; struct LP_pubkeyinfo *pubp; uint64_t asatoshis; struct iguana_info *basecoin; struct LP_utxoinfo *bestutxo = 0; bits256 pubkey; char *obookstr,coinaddr[64]; cJSON *orderbook,*asks,*rawasks,*item; int32_t maxiters,i,j,numasks,max; struct LP_address_utxo **utxos; double price; struct LP_pubkey_info *pubp; uint64_t asatoshis; struct iguana_info *basecoin; struct LP_utxoinfo *bestutxo = 0;
maxiters = 100; maxiters = 100;
*ordermatchpricep = 0.; *ordermatchpricep = 0.;
*bestsatoshisp = *bestdestsatoshisp = 0; *bestsatoshisp = *bestdestsatoshisp = 0;
@ -1182,7 +1182,7 @@ char *LP_autobuy(void *ctx,char *myipaddr,int32_t mypubsock,char *base,char *rel
LP_mypriceset(&changed,autxo->coin,base,1. / maxprice); LP_mypriceset(&changed,autxo->coin,base,1. / maxprice);
return(LP_trade(ctx,myipaddr,mypubsock,&Q,maxprice,timeout,duration,tradeid,destpubkey)); return(LP_trade(ctx,myipaddr,mypubsock,&Q,maxprice,timeout,duration,tradeid,destpubkey));
#ifdef oldway #ifdef oldway
LP_RTmetrics_update(base,rel); //LP_RTmetrics_update(base,rel);
while ( 1 ) while ( 1 )
{ {
if ( (bestutxo= LP_buyutxo(&ordermatchprice,&bestsatoshis,&bestdestsatoshis,autxo,base,maxprice,duration,txfee,desttxfee,gui,pubkeys,numpubs,destpubkey)) == 0 || ordermatchprice == 0. || bestdestsatoshis == 0 ) if ( (bestutxo= LP_buyutxo(&ordermatchprice,&bestsatoshis,&bestdestsatoshis,autxo,base,maxprice,duration,txfee,desttxfee,gui,pubkeys,numpubs,destpubkey)) == 0 || ordermatchprice == 0. || bestdestsatoshis == 0 )

40
iguana/exchanges/LP_prices.c

@ -49,7 +49,7 @@ struct LP_cacheinfo
} *LP_cacheinfos; } *LP_cacheinfos;
float LP_pubkey_price(int32_t *numutxosp,int64_t *avesatoshisp,int64_t *maxsatoshisp,struct LP_pubkeyinfo *pubp,uint32_t baseind,uint32_t relind) float LP_pubkey_price(int32_t *numutxosp,int64_t *avesatoshisp,int64_t *maxsatoshisp,struct LP_pubkey_info *pubp,uint32_t baseind,uint32_t relind)
{ {
struct LP_pubkey_quote *pq,*tmp; int32_t scale; int64_t scale64; struct LP_pubkey_quote *pq,*tmp; int32_t scale; int64_t scale64;
*numutxosp = 0; *numutxosp = 0;
@ -75,7 +75,7 @@ float LP_pubkey_price(int32_t *numutxosp,int64_t *avesatoshisp,int64_t *maxsatos
return(0); return(0);
} }
void LP_pubkey_update(struct LP_pubkeyinfo *pubp,uint32_t baseind,uint32_t relind,float price,int64_t balance,char *utxocoin,int32_t numutxos,int64_t minutxo,int64_t maxutxo) void LP_pubkey_update(struct LP_pubkey_info *pubp,uint32_t baseind,uint32_t relind,float price,int64_t balance,char *utxocoin,int32_t numutxos,int64_t minutxo,int64_t maxutxo)
{ {
struct LP_pubkey_quote *pq,*tmp; int64_t aveutxo,scale64,ave64,max64; int32_t scale; struct LP_pubkey_quote *pq,*tmp; int64_t aveutxo,scale64,ave64,max64; int32_t scale;
DL_FOREACH_SAFE(pubp->quotes,pq,tmp) DL_FOREACH_SAFE(pubp->quotes,pq,tmp)
@ -214,9 +214,9 @@ struct LP_cacheinfo *LP_cachefind(char *base,char *rel,bits256 txid,int32_t vout
return(ptr); return(ptr);
} }
struct LP_pubkeyinfo *LP_pubkey_rmd160find(uint8_t rmd160[20]) struct LP_pubkey_info *LP_pubkey_rmd160find(uint8_t rmd160[20])
{ {
struct LP_pubkeyinfo *pubp=0,*tmp; struct LP_pubkey_info *pubp=0,*tmp;
portable_mutex_lock(&LP_pubkeymutex); portable_mutex_lock(&LP_pubkeymutex);
HASH_ITER(hh,LP_pubkeyinfos,pubp,tmp) HASH_ITER(hh,LP_pubkeyinfos,pubp,tmp)
{ {
@ -230,7 +230,7 @@ struct LP_pubkeyinfo *LP_pubkey_rmd160find(uint8_t rmd160[20])
struct LP_address *_LP_addressfind(struct iguana_info *coin,char *coinaddr) struct LP_address *_LP_addressfind(struct iguana_info *coin,char *coinaddr)
{ {
uint8_t rmd160[20],addrtype; struct LP_address *ap; struct LP_pubkeyinfo *pubp; uint8_t rmd160[20],addrtype; struct LP_address *ap; struct LP_pubkey_info *pubp;
HASH_FIND(hh,coin->addresses,coinaddr,strlen(coinaddr),ap); HASH_FIND(hh,coin->addresses,coinaddr,strlen(coinaddr),ap);
if ( ap != 0 && bits256_nonz(ap->pubkey) == 0 ) if ( ap != 0 && bits256_nonz(ap->pubkey) == 0 )
{ {
@ -246,7 +246,7 @@ struct LP_address *_LP_addressfind(struct iguana_info *coin,char *coinaddr)
struct LP_address *_LP_addressadd(struct iguana_info *coin,char *coinaddr) struct LP_address *_LP_addressadd(struct iguana_info *coin,char *coinaddr)
{ {
uint8_t rmd160[20],addrtype; struct LP_address *ap; struct LP_pubkeyinfo *pubp; uint8_t rmd160[20],addrtype; struct LP_address *ap; struct LP_pubkey_info *pubp;
ap = calloc(1,sizeof(*ap)); ap = calloc(1,sizeof(*ap));
safecopy(ap->coinaddr,coinaddr,sizeof(ap->coinaddr)); safecopy(ap->coinaddr,coinaddr,sizeof(ap->coinaddr));
bitcoin_addr2rmd160(coin->taddr,&addrtype,rmd160,coinaddr); bitcoin_addr2rmd160(coin->taddr,&addrtype,rmd160,coinaddr);
@ -260,18 +260,18 @@ struct LP_address *_LP_addressadd(struct iguana_info *coin,char *coinaddr)
return(ap); return(ap);
} }
struct LP_pubkeyinfo *LP_pubkeyfind(bits256 pubkey) struct LP_pubkey_info *LP_pubkeyfind(bits256 pubkey)
{ {
struct LP_pubkeyinfo *pubp=0; struct LP_pubkey_info *pubp=0;
portable_mutex_lock(&LP_pubkeymutex); portable_mutex_lock(&LP_pubkeymutex);
HASH_FIND(hh,LP_pubkeyinfos,&pubkey,sizeof(pubkey),pubp); HASH_FIND(hh,LP_pubkeyinfos,&pubkey,sizeof(pubkey),pubp);
portable_mutex_unlock(&LP_pubkeymutex); portable_mutex_unlock(&LP_pubkeymutex);
return(pubp); return(pubp);
} }
struct LP_pubkeyinfo *LP_pubkeyadd(bits256 pubkey) struct LP_pubkey_info *LP_pubkeyadd(bits256 pubkey)
{ {
char str[65]; struct LP_pubkeyinfo *pubp=0; char str[65]; struct LP_pubkey_info *pubp=0;
portable_mutex_lock(&LP_pubkeymutex); portable_mutex_lock(&LP_pubkeymutex);
HASH_FIND(hh,LP_pubkeyinfos,&pubkey,sizeof(pubkey),pubp); HASH_FIND(hh,LP_pubkeyinfos,&pubkey,sizeof(pubkey),pubp);
if ( pubp == 0 ) if ( pubp == 0 )
@ -294,7 +294,7 @@ struct LP_pubkeyinfo *LP_pubkeyadd(bits256 pubkey)
int32_t LP_pubkey_istrusted(bits256 pubkey) int32_t LP_pubkey_istrusted(bits256 pubkey)
{ {
struct LP_pubkeyinfo *pubp; struct LP_pubkey_info *pubp;
if ( (pubp= LP_pubkeyadd(pubkey)) != 0 ) if ( (pubp= LP_pubkeyadd(pubkey)) != 0 )
return(pubp->istrusted != 0); return(pubp->istrusted != 0);
return(0); return(0);
@ -302,7 +302,7 @@ int32_t LP_pubkey_istrusted(bits256 pubkey)
char *LP_pubkey_trustset(bits256 pubkey,uint32_t trustval) char *LP_pubkey_trustset(bits256 pubkey,uint32_t trustval)
{ {
struct LP_pubkeyinfo *pubp; struct LP_pubkey_info *pubp;
if ( (pubp= LP_pubkeyadd(pubkey)) != 0 ) if ( (pubp= LP_pubkeyadd(pubkey)) != 0 )
{ {
pubp->istrusted = trustval; pubp->istrusted = trustval;
@ -313,7 +313,7 @@ char *LP_pubkey_trustset(bits256 pubkey,uint32_t trustval)
char *LP_pubkey_trusted() char *LP_pubkey_trusted()
{ {
struct LP_pubkeyinfo *pubp,*tmp; cJSON *array = cJSON_CreateArray(); struct LP_pubkey_info *pubp,*tmp; cJSON *array = cJSON_CreateArray();
HASH_ITER(hh,LP_pubkeyinfos,pubp,tmp) HASH_ITER(hh,LP_pubkeyinfos,pubp,tmp)
{ {
if ( pubp->istrusted != 0 ) if ( pubp->istrusted != 0 )
@ -343,7 +343,7 @@ uint64_t LP_unspents_metric(struct iguana_info *coin,char *coinaddr)
return(metric); return(metric);
} }
cJSON *LP_pubkeyjson(struct LP_pubkeyinfo *pubp) cJSON *LP_pubkeyjson(struct LP_pubkey_info *pubp)
{ {
int32_t baseid,relid,numutxos; int64_t avesatoshis,maxsatoshis; char *base,hexstr[67],hexstr2[67],sigstr[256]; double price; cJSON *item,*array,*obj; int32_t baseid,relid,numutxos; int64_t avesatoshis,maxsatoshis; char *base,hexstr[67],hexstr2[67],sigstr[256]; double price; cJSON *item,*array,*obj;
obj = cJSON_CreateObject(); obj = cJSON_CreateObject();
@ -380,7 +380,7 @@ cJSON *LP_pubkeyjson(struct LP_pubkeyinfo *pubp)
char *LP_prices() char *LP_prices()
{ {
struct LP_pubkeyinfo *pubp,*tmp; cJSON *array = cJSON_CreateArray(); struct LP_pubkey_info *pubp,*tmp; cJSON *array = cJSON_CreateArray();
HASH_ITER(hh,LP_pubkeyinfos,pubp,tmp) HASH_ITER(hh,LP_pubkeyinfos,pubp,tmp)
{ {
jaddi(array,LP_pubkeyjson(pubp)); jaddi(array,LP_pubkeyjson(pubp));
@ -390,7 +390,7 @@ char *LP_prices()
/*void LP_prices_parse(struct LP_peerinfo *peer,cJSON *obj) /*void LP_prices_parse(struct LP_peerinfo *peer,cJSON *obj)
{ {
struct LP_pubkeyinfo *pubp; struct LP_priceinfo *basepp,*relpp; uint32_t timestamp; bits256 pubkey; cJSON *asks,*item; uint8_t rmd160[20]; int32_t i,n,relid,mismatch; char *base,*rel,*hexstr; double askprice; uint32_t now; struct LP_pubkey_info *pubp; struct LP_priceinfo *basepp,*relpp; uint32_t timestamp; bits256 pubkey; cJSON *asks,*item; uint8_t rmd160[20]; int32_t i,n,relid,mismatch; char *base,*rel,*hexstr; double askprice; uint32_t now;
now = (uint32_t)time(NULL); now = (uint32_t)time(NULL);
pubkey = jbits256(obj,"pubkey"); pubkey = jbits256(obj,"pubkey");
if ( bits256_nonz(pubkey) != 0 && (pubp= LP_pubkeyadd(pubkey)) != 0 ) if ( bits256_nonz(pubkey) != 0 && (pubp= LP_pubkeyadd(pubkey)) != 0 )
@ -555,7 +555,7 @@ char *LP_myprices()
int32_t LP_mypriceset(int32_t *changedp,char *base,char *rel,double price) int32_t LP_mypriceset(int32_t *changedp,char *base,char *rel,double price)
{ {
struct LP_priceinfo *basepp,*relpp; struct LP_pubkeyinfo *pubp; struct LP_priceinfo *basepp,*relpp; struct LP_pubkey_info *pubp;
*changedp = 0; *changedp = 0;
if ( base != 0 && rel != 0 && (basepp= LP_priceinfofind(base)) != 0 && (relpp= LP_priceinfofind(rel)) != 0 ) if ( base != 0 && rel != 0 && (basepp= LP_priceinfofind(base)) != 0 && (relpp= LP_priceinfofind(rel)) != 0 )
{ {
@ -773,7 +773,7 @@ struct LP_orderbookentry *LP_orderbookentry(char *address,char *base,char *rel,d
void LP_pubkeys_query() void LP_pubkeys_query()
{ {
uint8_t zeroes[20]; bits256 zero; cJSON *reqjson; struct LP_pubkeyinfo *pubp=0,*tmp; uint8_t zeroes[20]; bits256 zero; cJSON *reqjson; struct LP_pubkey_info *pubp=0,*tmp;
memset(zero.bytes,0,sizeof(zero)); memset(zero.bytes,0,sizeof(zero));
memset(zeroes,0,sizeof(zeroes)); memset(zeroes,0,sizeof(zeroes));
HASH_ITER(hh,LP_pubkeyinfos,pubp,tmp) HASH_ITER(hh,LP_pubkeyinfos,pubp,tmp)
@ -792,7 +792,7 @@ void LP_pubkeys_query()
int32_t LP_orderbook_utxoentries(uint32_t now,int32_t polarity,char *base,char *rel,struct LP_orderbookentry *(**arrayp),int32_t num,int32_t cachednum,int32_t duration) int32_t LP_orderbook_utxoentries(uint32_t now,int32_t polarity,char *base,char *rel,struct LP_orderbookentry *(**arrayp),int32_t num,int32_t cachednum,int32_t duration)
{ {
char coinaddr[64]; uint8_t zeroes[20]; struct LP_pubkeyinfo *pubp=0,*tmp; struct LP_priceinfo *basepp; struct LP_orderbookentry *op; struct LP_address *ap; struct iguana_info *basecoin; uint32_t oldest; double price; int32_t baseid,relid,n; int64_t maxsatoshis,balance,avesatoshis; char coinaddr[64]; uint8_t zeroes[20]; struct LP_pubkey_info *pubp=0,*tmp; struct LP_priceinfo *basepp; struct LP_orderbookentry *op; struct LP_address *ap; struct iguana_info *basecoin; uint32_t oldest; double price; int32_t baseid,relid,n; int64_t maxsatoshis,balance,avesatoshis;
if ( (basepp= LP_priceinfoptr(&relid,base,rel)) != 0 ) if ( (basepp= LP_priceinfoptr(&relid,base,rel)) != 0 )
baseid = basepp->ind; baseid = basepp->ind;
else return(num); else return(num);
@ -1122,7 +1122,7 @@ cJSON *LP_pricearray(char *base,char *rel,uint32_t firsttime,uint32_t lasttime,i
void LP_pricefeedupdate(bits256 pubkey,char *base,char *rel,double price,char *utxocoin,int32_t numrelutxos,int64_t balance,int64_t minutxo,int64_t maxutxo) void LP_pricefeedupdate(bits256 pubkey,char *base,char *rel,double price,char *utxocoin,int32_t numrelutxos,int64_t balance,int64_t minutxo,int64_t maxutxo)
{ {
struct LP_priceinfo *basepp,*relpp; uint32_t now; uint64_t price64; struct LP_pubkeyinfo *pubp; char str[65],fname[512]; FILE *fp; struct LP_priceinfo *basepp,*relpp; uint32_t now; uint64_t price64; struct LP_pubkey_info *pubp; char str[65],fname[512]; FILE *fp;
//printf("check PRICEFEED UPDATE.(%s/%s) %.8f %s\n",base,rel,price,bits256_str(str,pubkey)); //printf("check PRICEFEED UPDATE.(%s/%s) %.8f %s\n",base,rel,price,bits256_str(str,pubkey));
if ( LP_pricevalid(price) > 0 && (basepp= LP_priceinfofind(base)) != 0 && (relpp= LP_priceinfofind(rel)) != 0 ) if ( LP_pricevalid(price) > 0 && (basepp= LP_priceinfofind(base)) != 0 && (relpp= LP_priceinfofind(rel)) != 0 )
{ {

10
iguana/exchanges/LP_signatures.c

@ -276,7 +276,7 @@ bits256 LP_utxos_sighash(uint32_t timestamp,uint8_t *pubsecp,bits256 pubkey,bits
int32_t LP_utxos_sigcheck(uint32_t timestamp,char *sigstr,char *pubsecpstr,bits256 pubkey,bits256 utxoshash) int32_t LP_utxos_sigcheck(uint32_t timestamp,char *sigstr,char *pubsecpstr,bits256 pubkey,bits256 utxoshash)
{ {
static void *ctx; int32_t retval=-1; uint8_t pub33[33],pubsecp[33],sig[65]; bits256 sighash; char str[65]; struct LP_pubkeyinfo *pubp; static void *ctx; int32_t retval=-1; uint8_t pub33[33],pubsecp[33],sig[65]; bits256 sighash; char str[65]; struct LP_pubkey_info *pubp;
if ( ctx == 0 ) if ( ctx == 0 )
ctx = bitcoin_ctx(); ctx = bitcoin_ctx();
pubp = LP_pubkeyfind(pubkey); pubp = LP_pubkeyfind(pubkey);
@ -362,7 +362,7 @@ struct LP_utxos_qitem { struct queueitem DL; cJSON *argjson; };
char *LP_postutxos_recv(cJSON *argjson) char *LP_postutxos_recv(cJSON *argjson)
{ {
struct LP_utxos_qitem *uitem; struct iguana_info *coin; char *coinaddr,*symbol; bits256 utxoshash,pubkey; cJSON *obj; struct LP_pubkeyinfo *pubp; struct LP_utxos_qitem *uitem; struct iguana_info *coin; char *coinaddr,*symbol; bits256 utxoshash,pubkey; cJSON *obj; struct LP_pubkey_info *pubp;
printf("LP_postutxos_recv deprecated\n"); printf("LP_postutxos_recv deprecated\n");
pubkey = jbits256(argjson,"pubkey"); pubkey = jbits256(argjson,"pubkey");
pubp = LP_pubkeyfind(pubkey); pubp = LP_pubkeyfind(pubkey);
@ -416,7 +416,7 @@ int32_t LP_utxosQ_process()
int32_t LP_price_sigcheck(uint32_t timestamp,char *sigstr,char *pubsecpstr,bits256 pubkey,char *base,char *rel,uint64_t price64) int32_t LP_price_sigcheck(uint32_t timestamp,char *sigstr,char *pubsecpstr,bits256 pubkey,char *base,char *rel,uint64_t price64)
{ {
static void *ctx; int32_t retval=-1; uint8_t pub33[33],pubsecp[33],sig[65]; bits256 sighash; struct LP_pubkeyinfo *pubp; static void *ctx; int32_t retval=-1; uint8_t pub33[33],pubsecp[33],sig[65]; bits256 sighash; struct LP_pubkey_info *pubp;
if ( ctx == 0 ) if ( ctx == 0 )
ctx = bitcoin_ctx(); ctx = bitcoin_ctx();
pubp = LP_pubkeyfind(pubkey); pubp = LP_pubkeyfind(pubkey);
@ -521,7 +521,7 @@ int32_t LP_pubkey_sigadd(cJSON *item,uint32_t timestamp,bits256 priv,bits256 pub
return(LP_bitcoinsig_add(item,priv,pubsecp,sighash)); return(LP_bitcoinsig_add(item,priv,pubsecp,sighash));
} }
int32_t LP_pubkey_sigcheck(struct LP_pubkeyinfo *pubp,cJSON *item) int32_t LP_pubkey_sigcheck(struct LP_pubkey_info *pubp,cJSON *item)
{ {
int32_t i,len,siglen,retval=-1; uint8_t rmd160[20],checkrmd160[20],pubsecp[33],sig[65],zeroes[20]; char *sigstr,*hexstr,*pubsecpstr; int32_t i,len,siglen,retval=-1; uint8_t rmd160[20],checkrmd160[20],pubsecp[33],sig[65],zeroes[20]; char *sigstr,*hexstr,*pubsecpstr;
if ( (hexstr= jstr(item,"rmd160")) != 0 && strlen(hexstr) == 2*sizeof(rmd160) ) if ( (hexstr= jstr(item,"rmd160")) != 0 && strlen(hexstr) == 2*sizeof(rmd160) )
@ -603,7 +603,7 @@ void LP_notify_pubkeys(void *ctx,int32_t pubsock)
char *LP_notify_recv(cJSON *argjson) char *LP_notify_recv(cJSON *argjson)
{ {
bits256 pub; struct LP_pubkeyinfo *pubp; char *ipaddr; bits256 pub; struct LP_pubkey_info *pubp; char *ipaddr;
pub = jbits256(argjson,"pub"); pub = jbits256(argjson,"pub");
if ( bits256_nonz(pub) != 0 ) if ( bits256_nonz(pub) != 0 )
{ {

25
iguana/exchanges/LP_stats.c

@ -20,16 +20,7 @@
#define LP_STATSLOG_FNAME "stats.log" #define LP_STATSLOG_FNAME "stats.log"
struct LP_swapstats struct LP_swapstats *LP_swapstats;
{
UT_hash_handle hh;
struct LP_quoteinfo Q;
bits256 bobdeposit,alicepayment,bobpayment,paymentspent,Apaymentspent,depositspent;
double qprice;
uint64_t aliceid;
uint32_t ind,methodind,finished,expired;
char alicegui[32],bobgui[32];
} *LP_swapstats;
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" };
@ -215,7 +206,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; 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,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];
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));
@ -306,6 +297,18 @@ 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 )
{
ptr = calloc(1,sizeof(*ptr));
ptr->swap = sp;
DL_APPEND(pubp->bobswaps,ptr);
}
if ( (pubp= LP_pubkeyadd(sp->Q.desthash)) != 0 )
{
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);
} else printf("unexpected LP_swapstats_add failure\n"); } else printf("unexpected LP_swapstats_add failure\n");

2
iguana/exchanges/LP_zeroconf.c

@ -233,7 +233,7 @@ void LP_zeroconf_deposits(struct iguana_info *coin)
int32_t LP_dynamictrust(bits256 pubkey,int64_t kmdvalue) int32_t LP_dynamictrust(bits256 pubkey,int64_t kmdvalue)
{ {
struct LP_pubkeyinfo *pubp; struct LP_pubkey_info *pubp;
if ( (pubp= LP_pubkeyfind(pubkey)) != 0 ) if ( (pubp= LP_pubkeyfind(pubkey)) != 0 )
{ {
if ( pubp->bondvalue > pubp->swaps_kmdvalue+kmdvalue ) if ( pubp->bondvalue > pubp->swaps_kmdvalue+kmdvalue )

3
iguana/exchanges/tradesarray

@ -0,0 +1,3 @@
#!/bin/bash
source userpass
curl --url "http://127.0.0.1:7783" --data "{\"userpass\":\"$userpass\",\"method\":\"tradesarray\",\"base\":\"REVS\",\"rel\":\"KMD\",\"timescale\":3600}"
Loading…
Cancel
Save