Browse Source

Test

etomic
jl777 8 years ago
parent
commit
8fc3c056ad
  1. 2
      iguana/exchanges/DEXstats.h
  2. 12
      iguana/exchanges/LP_commands.c
  3. 4
      iguana/exchanges/LP_forwarding.c
  4. 11
      iguana/exchanges/LP_include.h
  5. 68
      iguana/exchanges/LP_nativeDEX.c
  6. 3
      iguana/exchanges/LP_network.c
  7. 28
      iguana/exchanges/LP_ordermatch.c
  8. 20
      iguana/exchanges/LP_peers.c
  9. 14
      iguana/exchanges/LP_rpc.c
  10. 22
      iguana/exchanges/LP_utxos.c
  11. 9
      iguana/exchanges/mm.c
  12. 6
      iguana/exchanges/stats.c

2
iguana/exchanges/DEXstats.h

@ -927,7 +927,7 @@ char *stats_prices(char *symbol,char *dest,struct DEXstats_disp *prices,int32_t
} }
#ifndef FROM_MARKETMAKER #ifndef FROM_MARKETMAKER
char *stats_JSON(char *myipaddr,int32_t mypubsock,double profitmargin,cJSON *argjson,char *remoteaddr,uint16_t port) char *stats_JSON(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; char *method,*agent,*retstr,*source,*dest; struct tai T; uint32_t endtimestamp; struct DEXstats_disp prices[365]; int32_t leftdatenum,seconds,numdates;
if ( (method= jstr(argjson,"method")) == 0 ) if ( (method= jstr(argjson,"method")) == 0 )

12
iguana/exchanges/LP_commands.c

@ -19,7 +19,7 @@
// //
char *stats_JSON(void *ctx,char *myipaddr,int32_t pubsock,double profitmargin,cJSON *argjson,char *remoteaddr,uint16_t port) // from rpc port char *stats_JSON(void *ctx,char *myipaddr,int32_t pubsock,cJSON *argjson,char *remoteaddr,uint16_t port) // from rpc port
{ {
char *method,*ipaddr,*userpass,*base,*rel,*coin,*retstr = 0; uint16_t argport=0,pushport,subport; int32_t otherpeers,othernumutxos,flag = 0; struct LP_peerinfo *peer; cJSON *retjson,*reqjson = 0; struct iguana_info *ptr; char *method,*ipaddr,*userpass,*base,*rel,*coin,*retstr = 0; uint16_t argport=0,pushport,subport; int32_t otherpeers,othernumutxos,flag = 0; struct LP_peerinfo *peer; cJSON *retjson,*reqjson = 0; struct iguana_info *ptr;
//printf("stats_JSON(%s)\n",jprint(argjson,0)); //printf("stats_JSON(%s)\n",jprint(argjson,0));
@ -42,7 +42,7 @@ char *stats_JSON(void *ctx,char *myipaddr,int32_t pubsock,double profitmargin,cJ
peer->numutxos = othernumutxos; peer->numutxos = othernumutxos;
} }
//printf("peer.(%s) found (%d %d) (%d %d) (%s)\n",peer->ipaddr,peer->numpeers,peer->numutxos,otherpeers,othernumutxos,jprint(argjson,0)); //printf("peer.(%s) found (%d %d) (%d %d) (%s)\n",peer->ipaddr,peer->numpeers,peer->numutxos,otherpeers,othernumutxos,jprint(argjson,0));
} else LP_addpeer(LP_mypeer,LP_mypubsock,ipaddr,argport,pushport,subport,jdouble(argjson,"profit"),jint(argjson,"numpeers"),jint(argjson,"numutxos")); } else LP_addpeer(LP_mypeer,LP_mypubsock,ipaddr,argport,pushport,subport,jint(argjson,"numpeers"),jint(argjson,"numutxos"));
} }
} }
if ( (method= jstr(argjson,"method")) == 0 ) if ( (method= jstr(argjson,"method")) == 0 )
@ -145,7 +145,7 @@ trust(pubkey, trust)\n\
{ {
if ( LP_mypriceset(base,rel,price) < 0 ) if ( LP_mypriceset(base,rel,price) < 0 )
return(clonestr("{\"error\":\"couldnt set price\"}")); return(clonestr("{\"error\":\"couldnt set price\"}"));
else return(LP_pricepings(ctx,myipaddr,LP_mypubsock,profitmargin,base,rel,price * LP_profitratio)); else return(LP_pricepings(ctx,myipaddr,LP_mypubsock,base,rel,price * LP_profitratio));
} else return(clonestr("{\"error\":\"no price\"}")); } else return(clonestr("{\"error\":\"no price\"}"));
} }
else if ( strcmp(method,"myprice") == 0 ) else if ( strcmp(method,"myprice") == 0 )
@ -172,7 +172,7 @@ trust(pubkey, trust)\n\
if ( price > SMALLVAL || jobj(argjson,"quote") != 0 ) if ( price > SMALLVAL || jobj(argjson,"quote") != 0 )
{ {
LP_quoteparse(&Q,jobj(argjson,"quote")); LP_quoteparse(&Q,jobj(argjson,"quote"));
return(LP_trade(ctx,myipaddr,pubsock,profitmargin,&Q,price,jint(argjson,"timeout"),jint(argjson,"duration"))); return(LP_trade(ctx,myipaddr,pubsock,&Q,price,jint(argjson,"timeout"),jint(argjson,"duration")));
} else return(clonestr("{\"error\":\"no price set or no quote object\"}")); } else return(clonestr("{\"error\":\"no price set or no quote object\"}"));
} }
else if ( strcmp(method,"autotrade") == 0 ) else if ( strcmp(method,"autotrade") == 0 )
@ -181,7 +181,7 @@ trust(pubkey, trust)\n\
{ {
printf("price set (%s/%s) <- %.8f\n",rel,base,1./price); printf("price set (%s/%s) <- %.8f\n",rel,base,1./price);
LP_mypriceset(rel,base,1./price); LP_mypriceset(rel,base,1./price);
return(LP_autotrade(ctx,myipaddr,pubsock,profitmargin,base,rel,price,jdouble(argjson,"relvolume"),jint(argjson,"timeout"),jint(argjson,"duration"))); return(LP_autotrade(ctx,myipaddr,pubsock,base,rel,price,jdouble(argjson,"relvolume"),jint(argjson,"timeout"),jint(argjson,"duration")));
} else return(clonestr("{\"error\":\"no price set\"}")); } else return(clonestr("{\"error\":\"no price set\"}"));
} }
} }
@ -284,7 +284,7 @@ trust(pubkey, trust)\n\
if ( (reqjson= LP_dereference(argjson,"forward")) != 0 ) if ( (reqjson= LP_dereference(argjson,"forward")) != 0 )
{ {
//printf("FORWARDED.(%s)\n",jprint(argjson,0)); //printf("FORWARDED.(%s)\n",jprint(argjson,0));
if ( LP_forward(ctx,myipaddr,pubsock,profitmargin,jbits256(argjson,"pubkey"),jprint(reqjson,1),1) > 0 ) if ( LP_forward(ctx,myipaddr,pubsock,jbits256(argjson,"pubkey"),jprint(reqjson,1),1) > 0 )
retstr = clonestr("{\"result\":\"success\"}"); retstr = clonestr("{\"result\":\"success\"}");
else retstr = clonestr("{\"result\":\"error forwarding\"}"); else retstr = clonestr("{\"result\":\"error forwarding\"}");
} else retstr = clonestr("{\"result\":\"cant recurse forwards\"}"); } else retstr = clonestr("{\"result\":\"cant recurse forwards\"}");

4
iguana/exchanges/LP_forwarding.c

@ -288,7 +288,7 @@ char *LP_forwardhex(void *ctx,int32_t pubsock,bits256 pubkey,char *hexstr)
return(retstr); return(retstr);
} }
int32_t LP_forward(void *ctx,char *myipaddr,int32_t pubsock,double profitmargin,bits256 pubkey,char *jsonstr,int32_t freeflag) int32_t LP_forward(void *ctx,char *myipaddr,int32_t pubsock,bits256 pubkey,char *jsonstr,int32_t freeflag)
{ {
struct LP_forwardinfo *ptr; struct LP_peerinfo *peer,*tmp; char *msg,*hexstr,*retstr; int32_t len,n=0,mlen; cJSON *reqjson,*argjson; struct LP_forwardinfo *ptr; struct LP_peerinfo *peer,*tmp; char *msg,*hexstr,*retstr; int32_t len,n=0,mlen; cJSON *reqjson,*argjson;
if ( jsonstr == 0 || jsonstr[0] == 0 ) if ( jsonstr == 0 || jsonstr[0] == 0 )
@ -301,7 +301,7 @@ int32_t LP_forward(void *ctx,char *myipaddr,int32_t pubsock,double profitmargin,
printf("GOT FORWARDED.(%s)\n",myipaddr); printf("GOT FORWARDED.(%s)\n",myipaddr);
if ( (argjson= cJSON_Parse(jsonstr)) != 0 ) if ( (argjson= cJSON_Parse(jsonstr)) != 0 )
{ {
if ( (retstr= LP_command_process(ctx,myipaddr,pubsock,argjson,0,0,profitmargin)) != 0 ) if ( (retstr= LP_command_process(ctx,myipaddr,pubsock,argjson,0,0)) != 0 )
free(retstr); free(retstr);
free_json(argjson); free_json(argjson);
} }

11
iguana/exchanges/LP_include.h

@ -175,7 +175,7 @@ struct iguana_info
{ {
UT_hash_handle hh; UT_hash_handle hh;
portable_mutex_t txmutex; struct LP_transaction *transactions; portable_mutex_t txmutex; struct LP_transaction *transactions;
uint64_t txfee; double estimatedrate,profitmargin; uint64_t txfee; double estimatedrate;
int32_t longestchain,firstrefht,firstscanht,lastscanht,bussock; uint16_t busport; int32_t longestchain,firstrefht,firstscanht,lastscanht,bussock; uint16_t busport;
uint32_t counter,inactive,lastmempool,lastgetinfo; uint32_t counter,inactive,lastmempool,lastgetinfo;
uint8_t pubtype,p2shtype,isPoS,wiftype,taddr; uint8_t pubtype,p2shtype,isPoS,wiftype,taddr;
@ -190,7 +190,7 @@ struct LP_utxobob { struct _LP_utxoinfo utxo,deposit; };
struct LP_utxoalice { struct _LP_utxoinfo utxo,fee; }; struct LP_utxoalice { struct _LP_utxoinfo utxo,fee; };
struct LP_utxoswap { bits256 otherpubkey; void *swap; uint64_t satoshis; double profitmargin; }; struct LP_utxoswap { bits256 otherpubkey; void *swap; uint64_t satoshis; };
struct LP_utxoinfo struct LP_utxoinfo
{ {
@ -210,7 +210,6 @@ struct LP_peerinfo
{ {
UT_hash_handle hh; UT_hash_handle hh;
uint64_t ip_port; uint64_t ip_port;
double profitmargin;
uint32_t ipbits,errortime,errors,numpeers,numutxos,lasttime,connected,lastutxos,lastpeers,diduquery,good; uint32_t ipbits,errortime,errors,numpeers,numutxos,lasttime,connected,lastutxos,lastpeers,diduquery,good;
int32_t pushsock,subsock; int32_t pushsock,subsock;
uint16_t port; uint16_t port;
@ -255,14 +254,14 @@ uint32_t LP_swapdata_rawtxsend(int32_t pairsock,struct basilisk_swap *swap,uint3
//double LP_query(char *method,struct LP_quoteinfo *qp,char *base,char *rel,bits256 mypub); //double LP_query(char *method,struct LP_quoteinfo *qp,char *base,char *rel,bits256 mypub);
int32_t LP_rawtx_spendscript(struct basilisk_swap *swap,int32_t height,struct basilisk_rawtx *rawtx,int32_t v,uint8_t *recvbuf,int32_t recvlen,int32_t suppress_pubkeys); int32_t LP_rawtx_spendscript(struct basilisk_swap *swap,int32_t height,struct basilisk_rawtx *rawtx,int32_t v,uint8_t *recvbuf,int32_t recvlen,int32_t suppress_pubkeys);
void LP_quotesinit(char *base,char *rel); void LP_quotesinit(char *base,char *rel);
int32_t LP_forward(void *ctx,char *myipaddr,int32_t pubsock,double profitmargin,bits256 pubkey,char *jsonstr,int32_t freeflag); int32_t LP_forward(void *ctx,char *myipaddr,int32_t pubsock,bits256 pubkey,char *jsonstr,int32_t freeflag);
int32_t LP_ismine(struct LP_utxoinfo *utxo); int32_t LP_ismine(struct LP_utxoinfo *utxo);
int32_t LP_isavailable(struct LP_utxoinfo *utxo); int32_t LP_isavailable(struct LP_utxoinfo *utxo);
struct LP_peerinfo *LP_peerfind(uint32_t ipbits,uint16_t port); struct LP_peerinfo *LP_peerfind(uint32_t ipbits,uint16_t port);
char *LP_command_process(void *ctx,char *myipaddr,int32_t pubsock,cJSON *argjson,uint8_t *data,int32_t datalen,double profitmargin); char *LP_command_process(void *ctx,char *myipaddr,int32_t pubsock,cJSON *argjson,uint8_t *data,int32_t datalen);
void LP_availableset(struct LP_utxoinfo *utxo); void LP_availableset(struct LP_utxoinfo *utxo);
int32_t LP_iseligible(uint64_t *valp,uint64_t *val2p,int32_t iambob,char *symbol,bits256 txid,int32_t vout,uint64_t satoshis,bits256 txid2,int32_t vout2); int32_t LP_iseligible(uint64_t *valp,uint64_t *val2p,int32_t iambob,char *symbol,bits256 txid,int32_t vout,uint64_t satoshis,bits256 txid2,int32_t vout2);
int32_t LP_pullsock_check(void *ctx,char **retstrp,char *myipaddr,int32_t pubsock,int32_t pullsock,double profitmargin); int32_t LP_pullsock_check(void *ctx,char **retstrp,char *myipaddr,int32_t pubsock,int32_t pullsock);
uint16_t LP_psock_get(char *connectaddr,char *publicaddr,int32_t ispaired); uint16_t LP_psock_get(char *connectaddr,char *publicaddr,int32_t ispaired);
void LP_utxo_clientpublish(struct LP_utxoinfo *utxo); void LP_utxo_clientpublish(struct LP_utxoinfo *utxo);
int32_t LP_coinbus(uint16_t coin_busport); int32_t LP_coinbus(uint16_t coin_busport);

68
iguana/exchanges/LP_nativeDEX.c

@ -88,14 +88,14 @@ char *blocktrail_listtransactions(char *symbol,char *coinaddr,int32_t num,int32_
#include "LP_ordermatch.c" #include "LP_ordermatch.c"
#include "LP_commands.c" #include "LP_commands.c"
char *LP_command_process(void *ctx,char *myipaddr,int32_t pubsock,cJSON *argjson,uint8_t *data,int32_t datalen,double profitmargin) char *LP_command_process(void *ctx,char *myipaddr,int32_t pubsock,cJSON *argjson,uint8_t *data,int32_t datalen)
{ {
char *retstr=0; char *retstr=0;
if ( jobj(argjson,"result") != 0 || jobj(argjson,"error") != 0 ) if ( jobj(argjson,"result") != 0 || jobj(argjson,"error") != 0 )
return(0); return(0);
if ( LP_tradecommand(ctx,myipaddr,pubsock,argjson,data,datalen,profitmargin) <= 0 ) if ( LP_tradecommand(ctx,myipaddr,pubsock,argjson,data,datalen) <= 0 )
{ {
if ( (retstr= stats_JSON(ctx,myipaddr,pubsock,profitmargin,argjson,"127.0.0.1",0)) != 0 ) if ( (retstr= stats_JSON(ctx,myipaddr,pubsock,argjson,"127.0.0.1",0)) != 0 )
{ {
//printf("%s PULL.[%d]-> (%s)\n",myipaddr != 0 ? myipaddr : "127.0.0.1",datalen,retstr); //printf("%s PULL.[%d]-> (%s)\n",myipaddr != 0 ? myipaddr : "127.0.0.1",datalen,retstr);
//if ( pubsock >= 0 ) //strncmp("{\"error\":",retstr,strlen("{\"error\":")) != 0 && //if ( pubsock >= 0 ) //strncmp("{\"error\":",retstr,strlen("{\"error\":")) != 0 &&
@ -141,7 +141,7 @@ int32_t LP_crc32find(int32_t *duplicatep,int32_t ind,uint32_t crc32)
} }
} }
char *LP_process_message(void *ctx,char *typestr,char *myipaddr,int32_t pubsock,double profitmargin,uint8_t *ptr,int32_t recvlen,int32_t recvsock) char *LP_process_message(void *ctx,char *typestr,char *myipaddr,int32_t pubsock,uint8_t *ptr,int32_t recvlen,int32_t recvsock)
{ {
int32_t i,len,datalen=0,duplicate=0,encrypted=0; char *retstr=0,*jsonstr=0; cJSON *argjson; uint32_t crc32; uint8_t decoded[LP_ENCRYPTED_MAXSIZE + crypto_box_ZEROBYTES]; int32_t i,len,datalen=0,duplicate=0,encrypted=0; char *retstr=0,*jsonstr=0; cJSON *argjson; uint32_t crc32; uint8_t decoded[LP_ENCRYPTED_MAXSIZE + crypto_box_ZEROBYTES];
crc32 = calc_crc32(0,&ptr[2],recvlen-2); crc32 = calc_crc32(0,&ptr[2],recvlen-2);
@ -202,7 +202,7 @@ char *LP_process_message(void *ctx,char *typestr,char *myipaddr,int32_t pubsock,
/LP_send(pubsock,msg,(int32_t)strlen(msg)+1,1); /LP_send(pubsock,msg,(int32_t)strlen(msg)+1,1);
} }
} }
else*/ if ( (retstr= LP_command_process(ctx,myipaddr,pubsock,argjson,&((uint8_t *)ptr)[len],recvlen - len,profitmargin)) != 0 ) else*/ if ( (retstr= LP_command_process(ctx,myipaddr,pubsock,argjson,&((uint8_t *)ptr)[len],recvlen - len)) != 0 )
{ {
} }
/*if ( LP_COMMAND_RECVSOCK == NN_REP ) /*if ( LP_COMMAND_RECVSOCK == NN_REP )
@ -232,7 +232,7 @@ char *LP_process_message(void *ctx,char *typestr,char *myipaddr,int32_t pubsock,
return(retstr); return(retstr);
} }
/*int32_t LP_pullsock_check(void *ctx,char **retstrp,char *myipaddr,int32_t pubsock,int32_t pullsock,double profitmargin) /*int32_t LP_pullsock_check(void *ctx,char **retstrp,char *myipaddr,int32_t pubsock,int32_t pullsock)
{ {
void *ptr; int32_t recvlen=-1,nonz = 0; void *ptr; int32_t recvlen=-1,nonz = 0;
*retstrp = 0; *retstrp = 0;
@ -241,13 +241,13 @@ char *LP_process_message(void *ctx,char *typestr,char *myipaddr,int32_t pubsock,
while ( (recvlen= nn_recv(pullsock,&ptr,NN_MSG,0)) > 0 ) while ( (recvlen= nn_recv(pullsock,&ptr,NN_MSG,0)) > 0 )
{ {
nonz++; nonz++;
*retstrp = LP_process_message(ctx,"PULL",myipaddr,pubsock,profitmargin,ptr,recvlen,pullsock); *retstrp = LP_process_message(ctx,"PULL",myipaddr,pubsock,ptr,recvlen,pullsock);
} }
} }
return(nonz); return(nonz);
}*/ }*/
void LP_utxo_spentcheck(int32_t pubsock,struct LP_utxoinfo *utxo,double profitmargin) void LP_utxo_spentcheck(int32_t pubsock,struct LP_utxoinfo *utxo)
{ {
struct _LP_utxoinfo u; char str[65]; uint32_t now = (uint32_t)time(NULL); struct _LP_utxoinfo u; char str[65]; uint32_t now = (uint32_t)time(NULL);
//printf("%s lag.%d\n",bits256_str(str,utxo->txid),now-utxo->lastspentcheck); //printf("%s lag.%d\n",bits256_str(str,utxo->txid),now-utxo->lastspentcheck);
@ -268,13 +268,13 @@ void LP_utxo_spentcheck(int32_t pubsock,struct LP_utxoinfo *utxo,double profitma
} }
} }
void LP_myutxo_updates(void *ctx,int32_t pubsock,char *passphrase,double profitmargin) void LP_myutxo_updates(void *ctx,int32_t pubsock,char *passphrase)
{ {
//LP_utxopurge(0); not good to disrupt existing pointers //LP_utxopurge(0); not good to disrupt existing pointers
LP_privkey_updates(ctx,pubsock,passphrase,0); LP_privkey_updates(ctx,pubsock,passphrase,0);
} }
int32_t LP_peer_utxosquery(struct LP_peerinfo *mypeer,uint16_t myport,int32_t pubsock,struct LP_peerinfo *peer,uint32_t now,double profitmargin,int32_t interval) int32_t LP_peer_utxosquery(struct LP_peerinfo *mypeer,uint16_t myport,int32_t pubsock,struct LP_peerinfo *peer,uint32_t now,int32_t interval)
{ {
int32_t lastn,n = -1; int32_t lastn,n = -1;
if ( peer->lastutxos < now-interval ) if ( peer->lastutxos < now-interval )
@ -286,13 +286,13 @@ int32_t LP_peer_utxosquery(struct LP_peerinfo *mypeer,uint16_t myport,int32_t pu
{ {
peer->lastutxos = now; peer->lastutxos = now;
//printf("query utxos from %s\n",peer->ipaddr); //printf("query utxos from %s\n",peer->ipaddr);
n = LP_utxosquery(mypeer,pubsock,peer->ipaddr,peer->port,"",lastn,mypeer != 0 ? mypeer->ipaddr : "127.0.0.1",myport,profitmargin); n = LP_utxosquery(mypeer,pubsock,peer->ipaddr,peer->port,"",lastn,mypeer != 0 ? mypeer->ipaddr : "127.0.0.1",myport);
} }
} //else printf("LP_peer_utxosquery skip.(%s) %u\n",peer->ipaddr,peer->lastutxos); } //else printf("LP_peer_utxosquery skip.(%s) %u\n",peer->ipaddr,peer->lastutxos);
return(n); return(n);
} }
int32_t LP_sock_check(char *typestr,void *ctx,char *myipaddr,int32_t pubsock,int32_t sock,double profitmargin) int32_t LP_sock_check(char *typestr,void *ctx,char *myipaddr,int32_t pubsock,int32_t sock)
{ {
int32_t recvlen=1,nonz = 0; void *ptr; char *retstr; struct nn_pollfd pfd; int32_t recvlen=1,nonz = 0; void *ptr; char *retstr; struct nn_pollfd pfd;
if ( sock >= 0 ) if ( sock >= 0 )
@ -307,7 +307,7 @@ int32_t LP_sock_check(char *typestr,void *ctx,char *myipaddr,int32_t pubsock,int
if ( (recvlen= nn_recv(sock,&ptr,NN_MSG,0)) > 0 ) if ( (recvlen= nn_recv(sock,&ptr,NN_MSG,0)) > 0 )
{ {
nonz++; nonz++;
if ( (retstr= LP_process_message(ctx,typestr,myipaddr,pubsock,profitmargin,ptr,recvlen,sock)) != 0 ) if ( (retstr= LP_process_message(ctx,typestr,myipaddr,pubsock,ptr,recvlen,sock)) != 0 )
free(retstr); free(retstr);
} }
} }
@ -333,7 +333,7 @@ void command_rpcloop(void *myipaddr)
else continue; else continue;
} }
//printf("check %s pubsock.%d\n",peer->ipaddr,peer->subsock); //printf("check %s pubsock.%d\n",peer->ipaddr,peer->subsock);
nonz += LP_sock_check("PULL",ctx,origipaddr,LP_mypubsock,peer->subsock,LP_profitratio - 1.); nonz += LP_sock_check("PULL",ctx,origipaddr,LP_mypubsock,peer->subsock);
} }
/*HASH_ITER(hh,LP_coins,coin,ctmp) // firstrefht,firstscanht,lastscanht /*HASH_ITER(hh,LP_coins,coin,ctmp) // firstrefht,firstscanht,lastscanht
{ {
@ -343,15 +343,15 @@ void command_rpcloop(void *myipaddr)
nonz += LP_sock_check(coin->symbol,ctx,origipaddr,-1,coin->bussock,LP_profitratio - 1.); nonz += LP_sock_check(coin->symbol,ctx,origipaddr,-1,coin->bussock,LP_profitratio - 1.);
}*/ }*/
if ( LP_mypullsock >= 0 ) if ( LP_mypullsock >= 0 )
nonz += LP_sock_check("SUB",ctx,origipaddr,-1,LP_mypullsock,LP_profitratio - 1.); nonz += LP_sock_check("SUB",ctx,origipaddr,-1,LP_mypullsock);
if ( LP_mybussock >= 0 ) if ( LP_mybussock >= 0 )
nonz += LP_sock_check("BUS",ctx,origipaddr,-1,LP_mybussock,LP_profitratio - 1.); nonz += LP_sock_check("BUS",ctx,origipaddr,-1,LP_mybussock);
if ( nonz == 0 ) if ( nonz == 0 )
usleep(10000); usleep(10000);
} }
} }
int32_t LP_mainloop_iter(void *ctx,char *myipaddr,struct LP_peerinfo *mypeer,int32_t pubsock,char *pushaddr,uint16_t myport,char *passphrase,double profitmargin) int32_t LP_mainloop_iter(void *ctx,char *myipaddr,struct LP_peerinfo *mypeer,int32_t pubsock,char *pushaddr,uint16_t myport,char *passphrase)
{ {
static uint32_t counter,numpeers; //lastforward static uint32_t counter,numpeers; //lastforward
struct LP_utxoinfo *utxo,*utmp; struct iguana_info *coin,*ctmp; char *retstr,*origipaddr; struct LP_peerinfo *peer,*tmp; uint32_t now; int32_t nonz = 0,n=0,lastn=-1; struct LP_utxoinfo *utxo,*utmp; struct iguana_info *coin,*ctmp; char *retstr,*origipaddr; struct LP_peerinfo *peer,*tmp; uint32_t now; int32_t nonz = 0,n=0,lastn=-1;
@ -378,14 +378,14 @@ int32_t LP_mainloop_iter(void *ctx,char *myipaddr,struct LP_peerinfo *mypeer,int
if ( IAMLP != 0 && peer->numpeers != numpeers ) if ( IAMLP != 0 && peer->numpeers != numpeers )
printf("%s num.%d vs %d\n",peer->ipaddr,peer->numpeers,numpeers); printf("%s num.%d vs %d\n",peer->ipaddr,peer->numpeers,numpeers);
if ( strcmp(peer->ipaddr,myipaddr) != 0 ) if ( strcmp(peer->ipaddr,myipaddr) != 0 )
LP_peersquery(mypeer,pubsock,peer->ipaddr,peer->port,myipaddr,myport,profitmargin); LP_peersquery(mypeer,pubsock,peer->ipaddr,peer->port,myipaddr,myport);
} }
if ( peer->diduquery == 0 ) if ( peer->diduquery == 0 )
{ {
if ( lastn != n || n < 20 ) if ( lastn != n || n < 20 )
{ {
lastn = n; lastn = n;
n = LP_peer_utxosquery(mypeer,myport,pubsock,peer,now,profitmargin,60); n = LP_peer_utxosquery(mypeer,myport,pubsock,peer,now,60);
} }
LP_peer_pricesquery(peer->ipaddr,peer->port); LP_peer_pricesquery(peer->ipaddr,peer->port);
peer->diduquery = now; peer->diduquery = now;
@ -393,7 +393,7 @@ int32_t LP_mainloop_iter(void *ctx,char *myipaddr,struct LP_peerinfo *mypeer,int
} }
if ( (counter % 600) == 10 ) if ( (counter % 600) == 10 )
{ {
LP_myutxo_updates(ctx,pubsock,passphrase,profitmargin); LP_myutxo_updates(ctx,pubsock,passphrase);
/*if ( lastforward < now-3600 ) /*if ( lastforward < now-3600 )
{ {
if ( (retstr= LP_registerall(0)) != 0 ) if ( (retstr= LP_registerall(0)) != 0 )
@ -403,11 +403,11 @@ int32_t LP_mainloop_iter(void *ctx,char *myipaddr,struct LP_peerinfo *mypeer,int
}*/ }*/
HASH_ITER(hh,LP_utxoinfos[0],utxo,utmp) HASH_ITER(hh,LP_utxoinfos[0],utxo,utmp)
{ {
LP_utxo_spentcheck(pubsock,utxo,profitmargin); LP_utxo_spentcheck(pubsock,utxo);
} }
HASH_ITER(hh,LP_utxoinfos[1],utxo,utmp) HASH_ITER(hh,LP_utxoinfos[1],utxo,utmp)
{ {
LP_utxo_spentcheck(pubsock,utxo,profitmargin); LP_utxo_spentcheck(pubsock,utxo);
if ( utxo->T.spentflag == 0 && utxo->T.lasttime == 0 ) if ( utxo->T.spentflag == 0 && utxo->T.lasttime == 0 )
LP_utxo_clientpublish(utxo); LP_utxo_clientpublish(utxo);
} }
@ -510,12 +510,12 @@ void LP_initcoins(void *ctx,int32_t pubsock,cJSON *coins,char *passphrase)
LP_privkey_updates(ctx,pubsock,passphrase,1); LP_privkey_updates(ctx,pubsock,passphrase,1);
} }
void LP_initpeers(int32_t pubsock,struct LP_peerinfo *mypeer,char *myipaddr,uint16_t myport,char *seednode,double profitmargin) void LP_initpeers(int32_t pubsock,struct LP_peerinfo *mypeer,char *myipaddr,uint16_t myport,char *seednode)
{ {
int32_t i,j; uint32_t r; int32_t i,j; uint32_t r;
if ( IAMLP != 0 ) if ( IAMLP != 0 )
{ {
LP_mypeer = mypeer = LP_addpeer(mypeer,pubsock,myipaddr,myport,0,0,profitmargin,0,0); LP_mypeer = mypeer = LP_addpeer(mypeer,pubsock,myipaddr,myport,0,0,0,0);
if ( myipaddr == 0 || mypeer == 0 ) if ( myipaddr == 0 || mypeer == 0 )
{ {
printf("couldnt get myipaddr or null mypeer.%p\n",mypeer); printf("couldnt get myipaddr or null mypeer.%p\n",mypeer);
@ -527,9 +527,9 @@ void LP_initpeers(int32_t pubsock,struct LP_peerinfo *mypeer,char *myipaddr,uint
{ {
if ( (rand() % 100) > 25 ) if ( (rand() % 100) > 25 )
continue; continue;
LP_peersquery(mypeer,pubsock,default_LPnodes[i],myport,mypeer->ipaddr,myport,profitmargin); LP_peersquery(mypeer,pubsock,default_LPnodes[i],myport,mypeer->ipaddr,myport);
} }
} else LP_peersquery(mypeer,pubsock,seednode,myport,mypeer->ipaddr,myport,profitmargin); } else LP_peersquery(mypeer,pubsock,seednode,myport,mypeer->ipaddr,myport);
} }
else else
{ {
@ -544,13 +544,13 @@ void LP_initpeers(int32_t pubsock,struct LP_peerinfo *mypeer,char *myipaddr,uint
for (j=0; j<sizeof(default_LPnodes)/sizeof(*default_LPnodes); j++) for (j=0; j<sizeof(default_LPnodes)/sizeof(*default_LPnodes); j++)
{ {
i = (r + j) % (sizeof(default_LPnodes)/sizeof(*default_LPnodes)); i = (r + j) % (sizeof(default_LPnodes)/sizeof(*default_LPnodes));
LP_peersquery(mypeer,pubsock,default_LPnodes[i],myport,"127.0.0.1",myport,profitmargin); LP_peersquery(mypeer,pubsock,default_LPnodes[i],myport,"127.0.0.1",myport);
} }
} else LP_peersquery(mypeer,pubsock,seednode,myport,"127.0.0.1",myport,profitmargin); } else LP_peersquery(mypeer,pubsock,seednode,myport,"127.0.0.1",myport);
} }
} }
void LPinit(uint16_t myport,uint16_t mypullport,uint16_t mypubport,uint16_t mybusport,double profitmargin,char *passphrase,int32_t amclient,char *userhome,cJSON *argjson) void LPinit(uint16_t myport,uint16_t mypullport,uint16_t mypubport,uint16_t mybusport,char *passphrase,int32_t amclient,char *userhome,cJSON *argjson)
{ {
char *myipaddr=0; long filesize,n; int32_t timeout,pubsock=-1; struct LP_peerinfo *mypeer=0; char pushaddr[128],subaddr[128],bindaddr[128]; void *ctx = bitcoin_ctx(); char *myipaddr=0; long filesize,n; int32_t timeout,pubsock=-1; struct LP_peerinfo *mypeer=0; char pushaddr[128],subaddr[128],bindaddr[128]; void *ctx = bitcoin_ctx();
if ( passphrase == 0 || passphrase[0] == 0 ) if ( passphrase == 0 || passphrase[0] == 0 )
@ -566,7 +566,6 @@ void LPinit(uint16_t myport,uint16_t mypullport,uint16_t mypubport,uint16_t mybu
exit(-1); exit(-1);
} }
#endif #endif
LP_profitratio += profitmargin;
OS_randombytes((void *)&n,sizeof(n)); OS_randombytes((void *)&n,sizeof(n));
if ( jobj(argjson,"gui") != 0 ) if ( jobj(argjson,"gui") != 0 )
safecopy(LP_gui,jstr(argjson,"gui"),sizeof(LP_gui)); safecopy(LP_gui,jstr(argjson,"gui"),sizeof(LP_gui));
@ -606,11 +605,6 @@ void LPinit(uint16_t myport,uint16_t mypullport,uint16_t mypubport,uint16_t mybu
portable_mutex_init(&LP_psockmutex); portable_mutex_init(&LP_psockmutex);
portable_mutex_init(&LP_coinmutex); portable_mutex_init(&LP_coinmutex);
portable_mutex_init(&LP_pubkeymutex); portable_mutex_init(&LP_pubkeymutex);
if ( profitmargin == 0. || profitmargin == 0.01 )
{
profitmargin = 0.01 + (double)(rand() % 100)/100000;
printf("default profit margin %f\n",profitmargin);
}
printf("getting myipaddr\n"); printf("getting myipaddr\n");
if ( system("curl -s4 checkip.amazonaws.com > /tmp/myipaddr") == 0 ) if ( system("curl -s4 checkip.amazonaws.com > /tmp/myipaddr") == 0 )
{ {
@ -645,7 +639,7 @@ void LPinit(uint16_t myport,uint16_t mypullport,uint16_t mypubport,uint16_t mybu
LP_mypubsock = pubsock; LP_mypubsock = pubsock;
} }
printf("got %s, initpeers\n",myipaddr); printf("got %s, initpeers\n",myipaddr);
LP_initpeers(pubsock,mypeer,myipaddr,myport,jstr(argjson,"seednode"),profitmargin); LP_initpeers(pubsock,mypeer,myipaddr,myport,jstr(argjson,"seednode"));
printf("get public socket\n"); printf("get public socket\n");
LP_mypullsock = LP_initpublicaddr(ctx,&mypullport,pushaddr,myipaddr,mypullport,0); LP_mypullsock = LP_initpublicaddr(ctx,&mypullport,pushaddr,myipaddr,mypullport,0);
strcpy(LP_publicaddr,pushaddr); strcpy(LP_publicaddr,pushaddr);
@ -680,7 +674,7 @@ void LPinit(uint16_t myport,uint16_t mypullport,uint16_t mypubport,uint16_t mybu
while ( 1 ) while ( 1 )
{ {
//fprintf(stderr,"."); //fprintf(stderr,".");
if ( LP_mainloop_iter(ctx,myipaddr,mypeer,pubsock,pushaddr,myport,passphrase,profitmargin) == 0 ) if ( LP_mainloop_iter(ctx,myipaddr,mypeer,pubsock,pushaddr,myport,passphrase) == 0 )
usleep(1000000 / MAINLOOP_PERSEC); usleep(1000000 / MAINLOOP_PERSEC);
/*if ( LP_canbind == 0 ) /*if ( LP_canbind == 0 )
{ {

3
iguana/exchanges/LP_network.c

@ -148,6 +148,7 @@ void queue_loop(void *ignore)
printf("%d no more peers to try at peerind.%d %p Q_LP.%p\n",n,ptr->peerind,ptr,LP_Q); printf("%d no more peers to try at peerind.%d %p Q_LP.%p\n",n,ptr->peerind,ptr,LP_Q);
flag = 1; flag = 1;
} }
flag = 1;
} }
} }
if ( flag != 0 ) if ( flag != 0 )
@ -255,7 +256,7 @@ void LP_broadcast_message(int32_t pubsock,char *base,char *rel,bits256 destpub25
msg = (void *)jprint(argjson,0); msg = (void *)jprint(argjson,0);
msglen = (int32_t)strlen((char *)msg) + 1; msglen = (int32_t)strlen((char *)msg) + 1;
crc32 = calc_crc32(0,&msg[2],msglen - 2); crc32 = calc_crc32(0,&msg[2],msglen - 2);
//printf("CRC32.%u (%s)\n",crc32,(char *)msg); printf("CRC32.%u (%s)\n",crc32,(char *)msg);
//jdelete(argjson,"method"); //jdelete(argjson,"method");
//jaddstr(argjson,"method","broadcast"); //jaddstr(argjson,"method","broadcast");
//msg = (void *)jprint(argjson,0); //msg = (void *)jprint(argjson,0);

28
iguana/exchanges/LP_ordermatch.c

@ -176,7 +176,7 @@ char *LP_quotereceived(cJSON *argjson)
} else return(clonestr("{\"error\":\"nullptr\"}")); } else return(clonestr("{\"error\":\"nullptr\"}"));
} }
char *LP_pricepings(void *ctx,char *myipaddr,int32_t pubsock,double profitmargin,char *base,char *rel,double price) char *LP_pricepings(void *ctx,char *myipaddr,int32_t pubsock,char *base,char *rel,double price)
{ {
bits256 zero; char *msg; cJSON *reqjson = cJSON_CreateObject(); bits256 zero; char *msg; cJSON *reqjson = cJSON_CreateObject();
memset(zero.bytes,0,sizeof(zero)); memset(zero.bytes,0,sizeof(zero));
@ -195,7 +195,7 @@ char *LP_pricepings(void *ctx,char *myipaddr,int32_t pubsock,double profitmargin
{ {
jaddstr(reqjson,"method","forward"); jaddstr(reqjson,"method","forward");
jaddstr(reqjson,"method2","postprice"); jaddstr(reqjson,"method2","postprice");
/LP_forward(ctx,myipaddr,pubsock,profitmargin,zero,jprint(reqjson,1),1); /LP_forward(ctx,myipaddr,pubsock,zero,jprint(reqjson,1),1);
}*/ }*/
jaddstr(reqjson,"method","postprice"); jaddstr(reqjson,"method","postprice");
msg = jprint(reqjson,1); msg = jprint(reqjson,1);
@ -298,7 +298,7 @@ int32_t LP_arrayfind(cJSON *array,bits256 txid,int32_t vout)
return(-1); return(-1);
} }
double LP_query(void *ctx,char *myipaddr,int32_t mypubsock,double profitmargin,char *method,struct LP_quoteinfo *qp) double LP_query(void *ctx,char *myipaddr,int32_t mypubsock,char *method,struct LP_quoteinfo *qp)
{ {
cJSON *reqjson; char *msg; int32_t i,flag = 0; double price = 0.; struct LP_utxoinfo *utxo; cJSON *reqjson; char *msg; int32_t i,flag = 0; double price = 0.; struct LP_utxoinfo *utxo;
if ( strcmp(method,"request") == 0 ) if ( strcmp(method,"request") == 0 )
@ -326,7 +326,7 @@ double LP_query(void *ctx,char *myipaddr,int32_t mypubsock,double profitmargin,c
jaddstr(reqjson,"method2",method); jaddstr(reqjson,"method2",method);
jaddstr(reqjson,"method","forward"); jaddstr(reqjson,"method","forward");
jaddbits256(reqjson,"pubkey",qp->srchash); jaddbits256(reqjson,"pubkey",qp->srchash);
/LP_forward(ctx,myipaddr,mypubsock,profitmargin,qp->srchash,jprint(reqjson,1),1); /LP_forward(ctx,myipaddr,mypubsock,qp->srchash,jprint(reqjson,1),1);
}*/ }*/
jaddstr(reqjson,"method",method); jaddstr(reqjson,"method",method);
msg = jprint(reqjson,1); msg = jprint(reqjson,1);
@ -378,7 +378,7 @@ int32_t LP_nanobind(void *ctx,char *pairstr)
return(pairsock); return(pairsock);
} }
int32_t LP_connectstartbob(void *ctx,int32_t pubsock,struct LP_utxoinfo *utxo,cJSON *argjson,char *myipaddr,char *base,char *rel,double profitmargin,double price,struct LP_quoteinfo *qp) int32_t LP_connectstartbob(void *ctx,int32_t pubsock,struct LP_utxoinfo *utxo,cJSON *argjson,char *myipaddr,char *base,char *rel,double price,struct LP_quoteinfo *qp)
{ {
char pairstr[512],*msg; cJSON *retjson; bits256 privkey; int32_t pair=-1,retval = -1,DEXselector = 0; struct basilisk_swap *swap; struct iguana_info *coin; char pairstr[512],*msg; cJSON *retjson; bits256 privkey; int32_t pair=-1,retval = -1,DEXselector = 0; struct basilisk_swap *swap; struct iguana_info *coin;
printf("LP_connectstartbob.(%s) with.(%s) %s\n",myipaddr,jprint(argjson,0),LP_myipaddr); printf("LP_connectstartbob.(%s) with.(%s) %s\n",myipaddr,jprint(argjson,0),LP_myipaddr);
@ -414,7 +414,7 @@ int32_t LP_connectstartbob(void *ctx,int32_t pubsock,struct LP_utxoinfo *utxo,cJ
jdelete(retjson,"method"); jdelete(retjson,"method");
jaddstr(retjson,"method2","connected"); jaddstr(retjson,"method2","connected");
jaddstr(retjson,"method","forward"); jaddstr(retjson,"method","forward");
LP_forward(ctx,myipaddr,pubsock,profitmargin,utxo->S.otherpubkey,jprint(retjson,1),1);*/ LP_forward(ctx,myipaddr,pubsock,utxo->S.otherpubkey,jprint(retjson,1),1);*/
msg = jprint(retjson,1); msg = jprint(retjson,1);
LP_broadcast_message(pubsock,base,rel,utxo->S.otherpubkey,msg); LP_broadcast_message(pubsock,base,rel,utxo->S.otherpubkey,msg);
retval = 0; retval = 0;
@ -503,7 +503,7 @@ char *LP_connectedalice(cJSON *argjson) // alice
} }
} }
int32_t LP_tradecommand(void *ctx,char *myipaddr,int32_t pubsock,cJSON *argjson,uint8_t *data,int32_t datalen,double profitmargin) int32_t LP_tradecommand(void *ctx,char *myipaddr,int32_t pubsock,cJSON *argjson,uint8_t *data,int32_t datalen)
{ {
char *method,*msg; cJSON *retjson; double qprice,price,bid,ask; struct LP_utxoinfo *autxo,*butxo; int32_t retval = -1; struct LP_quoteinfo Q; char *method,*msg; cJSON *retjson; double qprice,price,bid,ask; struct LP_utxoinfo *autxo,*butxo; int32_t retval = -1; struct LP_quoteinfo Q;
if ( (method= jstr(argjson,"method")) != 0 && (strcmp(method,"request") == 0 ||strcmp(method,"connect") == 0) ) if ( (method= jstr(argjson,"method")) != 0 && (strcmp(method,"request") == 0 ||strcmp(method,"connect") == 0) )
@ -551,7 +551,7 @@ int32_t LP_tradecommand(void *ctx,char *myipaddr,int32_t pubsock,cJSON *argjson,
jdelete(retjson,"method"); jdelete(retjson,"method");
jaddstr(retjson,"method2","reserved"); jaddstr(retjson,"method2","reserved");
jaddstr(retjson,"method","forward"); jaddstr(retjson,"method","forward");
/LP_forward(ctx,myipaddr,pubsock,profitmargin,butxo->S.otherpubkey,jprint(retjson,1),1);*/ /LP_forward(ctx,myipaddr,pubsock,butxo->S.otherpubkey,jprint(retjson,1),1);*/
msg = jprint(retjson,1); msg = jprint(retjson,1);
LP_broadcast_message(pubsock,Q.srccoin,Q.destcoin,butxo->S.otherpubkey,msg); LP_broadcast_message(pubsock,Q.srccoin,Q.destcoin,butxo->S.otherpubkey,msg);
butxo->T.lasttime = (uint32_t)time(NULL); butxo->T.lasttime = (uint32_t)time(NULL);
@ -562,7 +562,7 @@ int32_t LP_tradecommand(void *ctx,char *myipaddr,int32_t pubsock,cJSON *argjson,
{ {
retval = 4; retval = 4;
if ( butxo->T.swappending != 0 && butxo->S.swap == 0 ) if ( butxo->T.swappending != 0 && butxo->S.swap == 0 )
LP_connectstartbob(ctx,pubsock,butxo,argjson,myipaddr,Q.srccoin,Q.destcoin,profitmargin,qprice,&Q); LP_connectstartbob(ctx,pubsock,butxo,argjson,myipaddr,Q.srccoin,Q.destcoin,qprice,&Q);
else printf("pend.%u swap %p when connect came in (%s)\n",butxo->T.swappending,butxo->S.swap,jprint(argjson,0)); else printf("pend.%u swap %p when connect came in (%s)\n",butxo->T.swappending,butxo->S.swap,jprint(argjson,0));
} }
} }
@ -683,7 +683,7 @@ char *LP_ordermatch(char *base,int64_t txfee,double maxprice,char *rel,bits256 t
return(jprint(LP_quotejson(&Q),1)); return(jprint(LP_quotejson(&Q),1));
} }
char *LP_trade(void *ctx,char *myipaddr,int32_t mypubsock,double profitmargin,struct LP_quoteinfo *qp,double maxprice,int32_t timeout,int32_t duration) char *LP_trade(void *ctx,char *myipaddr,int32_t mypubsock,struct LP_quoteinfo *qp,double maxprice,int32_t timeout,int32_t duration)
{ {
struct LP_utxoinfo *bobutxo,*aliceutxo; cJSON *bestitem=0; int32_t DEXselector=0; uint32_t expiration; double price; struct LP_pubkeyinfo *pubp; struct LP_utxoinfo *bobutxo,*aliceutxo; cJSON *bestitem=0; int32_t DEXselector=0; uint32_t expiration; double price; struct LP_pubkeyinfo *pubp;
if ( (aliceutxo= LP_utxopairfind(0,qp->desttxid,qp->destvout,qp->feetxid,qp->feevout)) == 0 ) if ( (aliceutxo= LP_utxopairfind(0,qp->desttxid,qp->destvout,qp->feetxid,qp->feevout)) == 0 )
@ -696,13 +696,13 @@ char *LP_trade(void *ctx,char *myipaddr,int32_t mypubsock,double profitmargin,st
bobutxo->T.bestflag = (uint32_t)time(NULL); bobutxo->T.bestflag = (uint32_t)time(NULL);
//if ( (retstr= LP_registerall(0)) != 0 ) //if ( (retstr= LP_registerall(0)) != 0 )
// free(retstr); // free(retstr);
price = LP_query(ctx,myipaddr,mypubsock,profitmargin,"request",qp); price = LP_query(ctx,myipaddr,mypubsock,"request",qp);
bestitem = LP_quotejson(qp); bestitem = LP_quotejson(qp);
if ( price > SMALLVAL ) if ( price > SMALLVAL )
{ {
if ( price <= maxprice ) if ( price <= maxprice )
{ {
price = LP_query(ctx,myipaddr,mypubsock,profitmargin,"connect",qp); price = LP_query(ctx,myipaddr,mypubsock,"connect",qp);
LP_requestinit(&qp->R,qp->srchash,qp->desthash,bobutxo->coin,qp->satoshis,qp->destcoin,qp->destsatoshis,qp->timestamp,qp->quotetime,DEXselector); LP_requestinit(&qp->R,qp->srchash,qp->desthash,bobutxo->coin,qp->satoshis,qp->destcoin,qp->destsatoshis,qp->timestamp,qp->quotetime,DEXselector);
expiration = (uint32_t)time(NULL) + timeout; expiration = (uint32_t)time(NULL) + timeout;
while ( time(NULL) < expiration ) while ( time(NULL) < expiration )
@ -740,7 +740,7 @@ char *LP_trade(void *ctx,char *myipaddr,int32_t mypubsock,double profitmargin,st
return(jprint(bestitem,0)); return(jprint(bestitem,0));
} }
char *LP_autotrade(void *ctx,char *myipaddr,int32_t mypubsock,double profitmargin,char *base,char *rel,double maxprice,double relvolume,int32_t timeout,int32_t duration) char *LP_autotrade(void *ctx,char *myipaddr,int32_t mypubsock,char *base,char *rel,double maxprice,double relvolume,int32_t timeout,int32_t duration)
{ {
int64_t desttxfee,txfee,bestdestsatoshis=0; struct LP_utxoinfo *autxo,*butxo,*bestutxo = 0; double qprice,ordermatchprice=0.; struct LP_quoteinfo Q; int64_t desttxfee,txfee,bestdestsatoshis=0; struct LP_utxoinfo *autxo,*butxo,*bestutxo = 0; double qprice,ordermatchprice=0.; struct LP_quoteinfo Q;
if ( duration <= 0 ) if ( duration <= 0 )
@ -770,7 +770,7 @@ char *LP_autotrade(void *ctx,char *myipaddr,int32_t mypubsock,double profitmargi
return(clonestr("{\"error\":\"quote validation error\"}")); return(clonestr("{\"error\":\"quote validation error\"}"));
} }
printf("do quote.(%s)\n",jprint(LP_quotejson(&Q),1)); printf("do quote.(%s)\n",jprint(LP_quotejson(&Q),1));
return(LP_trade(ctx,myipaddr,mypubsock,profitmargin,&Q,maxprice,timeout,duration)); return(LP_trade(ctx,myipaddr,mypubsock,&Q,maxprice,timeout,duration));
} }

20
iguana/exchanges/LP_peers.c

@ -33,7 +33,7 @@ cJSON *LP_peerjson(struct LP_peerinfo *peer)
cJSON *item = cJSON_CreateObject(); cJSON *item = cJSON_CreateObject();
jaddstr(item,"ipaddr",peer->ipaddr); jaddstr(item,"ipaddr",peer->ipaddr);
jaddnum(item,"port",peer->port); jaddnum(item,"port",peer->port);
jaddnum(item,"profit",peer->profitmargin); //jaddnum(item,"profit",peer->profitmargin);
return(item); return(item);
} }
@ -48,7 +48,7 @@ char *LP_peers()
return(jprint(peersjson,1)); return(jprint(peersjson,1));
} }
struct LP_peerinfo *LP_addpeer(struct LP_peerinfo *mypeer,int32_t mypubsock,char *ipaddr,uint16_t port,uint16_t pushport,uint16_t subport,double profitmargin,int32_t numpeers,int32_t numutxos) struct LP_peerinfo *LP_addpeer(struct LP_peerinfo *mypeer,int32_t mypubsock,char *ipaddr,uint16_t port,uint16_t pushport,uint16_t subport,int32_t numpeers,int32_t numutxos)
{ {
uint32_t ipbits; int32_t pushsock,subsock,timeout; char checkip[64],pushaddr[64],subaddr[64]; struct LP_peerinfo *peer = 0; uint32_t ipbits; int32_t pushsock,subsock,timeout; char checkip[64],pushaddr[64],subaddr[64]; struct LP_peerinfo *peer = 0;
ipbits = (uint32_t)calc_ipbits(ipaddr); ipbits = (uint32_t)calc_ipbits(ipaddr);
@ -57,8 +57,8 @@ struct LP_peerinfo *LP_addpeer(struct LP_peerinfo *mypeer,int32_t mypubsock,char
{ {
if ( (peer= LP_peerfind(ipbits,port)) != 0 ) if ( (peer= LP_peerfind(ipbits,port)) != 0 )
{ {
if ( profitmargin != 0. ) //if ( profitmargin != 0. )
peer->profitmargin = profitmargin; // peer->profitmargin = profitmargin;
if ( numpeers > peer->numpeers ) if ( numpeers > peer->numpeers )
peer->numpeers = numpeers; peer->numpeers = numpeers;
if ( numutxos > peer->numutxos ) if ( numutxos > peer->numutxos )
@ -101,7 +101,7 @@ struct LP_peerinfo *LP_addpeer(struct LP_peerinfo *mypeer,int32_t mypubsock,char
printf("error connecting to push.(%s)\n",pushaddr); printf("error connecting to push.(%s)\n",pushaddr);
} }
} else printf("%s pushport.%u subport.%u pushsock.%d\n",ipaddr,pushport,subport,pushsock); } else printf("%s pushport.%u subport.%u pushsock.%d\n",ipaddr,pushport,subport,pushsock);
peer->profitmargin = profitmargin; //peer->profitmargin = profitmargin;
peer->ipbits = ipbits; peer->ipbits = ipbits;
peer->port = port; peer->port = port;
peer->ip_port = ((uint64_t)port << 32) | ipbits; peer->ip_port = ((uint64_t)port << 32) | ipbits;
@ -186,7 +186,7 @@ int32_t LP_peersparse(struct LP_peerinfo *mypeer,int32_t mypubsock,char *destipa
argipbits = (uint32_t)calc_ipbits(argipaddr); argipbits = (uint32_t)calc_ipbits(argipaddr);
if ( (peer= LP_peerfind(argipbits,argport)) == 0 ) if ( (peer= LP_peerfind(argipbits,argport)) == 0 )
{ {
peer = LP_addpeer(mypeer,mypubsock,argipaddr,argport,pushport,subport,jdouble(item,"profit"),jint(item,"numpeers"),jint(item,"numutxos")); peer = LP_addpeer(mypeer,mypubsock,argipaddr,argport,pushport,subport,jint(item,"numpeers"),jint(item,"numutxos"));
} }
if ( peer != 0 ) if ( peer != 0 )
{ {
@ -202,11 +202,11 @@ int32_t LP_peersparse(struct LP_peerinfo *mypeer,int32_t mypubsock,char *destipa
return(n); return(n);
} }
void LP_peersquery(struct LP_peerinfo *mypeer,int32_t mypubsock,char *destipaddr,uint16_t destport,char *myipaddr,uint16_t myport,double myprofit) void LP_peersquery(struct LP_peerinfo *mypeer,int32_t mypubsock,char *destipaddr,uint16_t destport,char *myipaddr,uint16_t myport)
{ {
char *retstr; struct LP_peerinfo *peer,*tmp; uint32_t now,flag = 0; char *retstr; struct LP_peerinfo *peer,*tmp; uint32_t now,flag = 0;
peer = LP_peerfind((uint32_t)calc_ipbits(destipaddr),destport); peer = LP_peerfind((uint32_t)calc_ipbits(destipaddr),destport);
if ( (retstr= issue_LP_getpeers(destipaddr,destport,myipaddr,myport,myprofit,mypeer!=0?mypeer->numpeers:0,mypeer!=0?mypeer->numutxos:0)) != 0 ) if ( (retstr= issue_LP_getpeers(destipaddr,destport,myipaddr,myport,mypeer!=0?mypeer->numpeers:0,mypeer!=0?mypeer->numutxos:0)) != 0 )
{ {
//printf("got.(%s)\n",retstr); //printf("got.(%s)\n",retstr);
now = (uint32_t)time(NULL); now = (uint32_t)time(NULL);
@ -218,9 +218,9 @@ void LP_peersquery(struct LP_peerinfo *mypeer,int32_t mypubsock,char *destipaddr
{ {
if ( peer->lasttime != now ) if ( peer->lasttime != now )
{ {
printf("{%s:%u %.6f}.%d ",peer->ipaddr,peer->port,peer->profitmargin,peer->lasttime - now); printf("{%s:%u}.%d ",peer->ipaddr,peer->port,peer->lasttime - now);
flag++; flag++;
if ( (retstr= issue_LP_notify(destipaddr,destport,peer->ipaddr,peer->port,peer->profitmargin,peer->numpeers,0)) != 0 ) if ( (retstr= issue_LP_notify(destipaddr,destport,peer->ipaddr,peer->port,peer->numpeers,0)) != 0 )
free(retstr); free(retstr);
} }
} }

14
iguana/exchanges/LP_rpc.c

@ -48,17 +48,17 @@ char *LP_isitme(char *destip,uint16_t destport)
} else return(0); } else return(0);
} }
char *issue_LP_getpeers(char *destip,uint16_t destport,char *ipaddr,uint16_t port,double profitmargin,int32_t numpeers,int32_t numutxos) char *issue_LP_getpeers(char *destip,uint16_t destport,char *ipaddr,uint16_t port,int32_t numpeers,int32_t numutxos)
{ {
char url[512]; char url[512];
sprintf(url,"http://%s:%u/api/stats/getpeers?ipaddr=%s&port=%u&profit=%.6f&numpeers=%d&numutxos=%d",destip,destport,ipaddr,port,profitmargin,numpeers,numutxos); sprintf(url,"http://%s:%u/api/stats/getpeers?ipaddr=%s&port=%u&numpeers=%d&numutxos=%d",destip,destport,ipaddr,port,numpeers,numutxos);
return(LP_issue_curl("getpeers",destip,port,url)); return(LP_issue_curl("getpeers",destip,port,url));
} }
char *issue_LP_getutxos(char *destip,uint16_t destport,char *coin,int32_t lastn,char *ipaddr,uint16_t port,double profitmargin,int32_t numpeers,int32_t numutxos) char *issue_LP_getutxos(char *destip,uint16_t destport,char *coin,int32_t lastn,char *ipaddr,uint16_t port,int32_t numpeers,int32_t numutxos)
{ {
char url[512]; char url[512];
sprintf(url,"http://%s:%u/api/stats/getutxos?coin=%s&lastn=%d&ipaddr=%s&port=%u&profit=%.6f&numpeers=%d&numutxos=%d",destip,destport,coin,lastn,ipaddr,port,profitmargin,numpeers,numutxos); sprintf(url,"http://%s:%u/api/stats/getutxos?coin=%s&lastn=%d&ipaddr=%s&port=%u&numpeers=%d&numutxos=%d",destip,destport,coin,lastn,ipaddr,port,numpeers,numutxos);
return(LP_issue_curl("getutxos",destip,destport,url)); return(LP_issue_curl("getutxos",destip,destport,url));
//return(issue_curlt(url,LP_HTTP_TIMEOUT)); //return(issue_curlt(url,LP_HTTP_TIMEOUT));
} }
@ -73,12 +73,12 @@ char *issue_LP_clientgetutxos(char *destip,uint16_t destport,char *coin,int32_t
//return(retstr); //return(retstr);
} }
char *issue_LP_notify(char *destip,uint16_t destport,char *ipaddr,uint16_t port,double profitmargin,int32_t numpeers,int32_t numutxos) char *issue_LP_notify(char *destip,uint16_t destport,char *ipaddr,uint16_t port,int32_t numpeers,int32_t numutxos)
{ {
char url[512],*retstr; char url[512],*retstr;
if ( (retstr= LP_isitme(destip,destport)) != 0 ) if ( (retstr= LP_isitme(destip,destport)) != 0 )
return(retstr); return(retstr);
sprintf(url,"http://%s:%u/api/stats/notify?ipaddr=%s&port=%u&profit=%.6f&numpeers=%d&numutxos=%d",destip,destport,ipaddr,port,profitmargin,numpeers,numutxos); sprintf(url,"http://%s:%u/api/stats/notify?ipaddr=%s&port=%u&numpeers=%d&numutxos=%d",destip,destport,ipaddr,port,numpeers,numutxos);
return(LP_issue_curl("notify",destip,destport,url)); return(LP_issue_curl("notify",destip,destport,url));
//return(issue_curlt(url,LP_HTTP_TIMEOUT)); //return(issue_curlt(url,LP_HTTP_TIMEOUT));
} }
@ -96,7 +96,7 @@ char *issue_LP_notify(char *destip,uint16_t destport,char *ipaddr,uint16_t port,
u = (utxo->iambob != 0) ? utxo->deposit : utxo->fee; u = (utxo->iambob != 0) ? utxo->deposit : utxo->fee;
if ( LP_iseligible(&val,&val2,utxo->iambob,utxo->coin,utxo->payment.txid,utxo->payment.vout,utxo->S.satoshis,u.txid,u.vout) > 0 ) if ( LP_iseligible(&val,&val2,utxo->iambob,utxo->coin,utxo->payment.txid,utxo->payment.vout,utxo->S.satoshis,u.txid,u.vout) > 0 )
{ {
sprintf(url,"http://%s:%u/api/stats/notified?iambob=%d&pubkey=%s&profit=%.6f&coin=%s&txid=%s&vout=%d&value=%llu&txid2=%s&vout2=%d&value2=%llu&script=%s&address=%s&timestamp=%u&gui=%s",destip,destport,utxo->iambob,bits256_str(str3,utxo->pubkey),utxo->S.profitmargin,utxo->coin,bits256_str(str,utxo->payment.txid),utxo->payment.vout,(long long)utxo->payment.value,bits256_str(str2,utxo->deposit.txid),utxo->deposit.vout,(long long)utxo->deposit.value,utxo->spendscript,utxo->coinaddr,(uint32_t)time(NULL),utxo->gui); sprintf(url,"http://%s:%u/api/stats/notified?iambob=%d&pubkey=%s&coin=%s&txid=%s&vout=%d&value=%llu&txid2=%s&vout2=%d&value2=%llu&script=%s&address=%s&timestamp=%u&gui=%s",destip,destport,utxo->iambob,bits256_str(str3,utxo->pubkey),utxo->coin,bits256_str(str,utxo->payment.txid),utxo->payment.vout,(long long)utxo->payment.value,bits256_str(str2,utxo->deposit.txid),utxo->deposit.vout,(long long)utxo->deposit.value,utxo->spendscript,utxo->coinaddr,(uint32_t)time(NULL),utxo->gui);
if ( strlen(url) > 1024 ) if ( strlen(url) > 1024 )
printf("WARNING long url.(%s)\n",url); printf("WARNING long url.(%s)\n",url);
return(LP_issue_curl("notifyutxo",destip,destport,url)); return(LP_issue_curl("notifyutxo",destip,destport,url));

22
iguana/exchanges/LP_utxos.c

@ -279,7 +279,7 @@ cJSON *LP_utxojson(struct LP_utxoinfo *utxo)
cJSON *item = cJSON_CreateObject(); cJSON *item = cJSON_CreateObject();
item = LP_inventoryjson(item,utxo); item = LP_inventoryjson(item,utxo);
jaddbits256(item,"pubkey",utxo->pubkey); jaddbits256(item,"pubkey",utxo->pubkey);
jaddnum(item,"profit",utxo->S.profitmargin); //jaddnum(item,"profit",utxo->S.profitmargin);
jaddstr(item,"base",utxo->coin); jaddstr(item,"base",utxo->coin);
jaddstr(item,"script",utxo->spendscript); jaddstr(item,"script",utxo->spendscript);
return(item); return(item);
@ -495,7 +495,7 @@ void LP_utxo_clientpublish(struct LP_utxoinfo *utxo)
return(n);*/ return(n);*/
} }
struct LP_utxoinfo *LP_utxoadd(int32_t iambob,int32_t mypubsock,char *symbol,bits256 txid,int32_t vout,int64_t value,bits256 txid2,int32_t vout2,int64_t value2,char *spendscript,char *coinaddr,bits256 pubkey,double profitmargin,char *gui) struct LP_utxoinfo *LP_utxoadd(int32_t iambob,int32_t mypubsock,char *symbol,bits256 txid,int32_t vout,int64_t value,bits256 txid2,int32_t vout2,int64_t value2,char *spendscript,char *coinaddr,bits256 pubkey,char *gui)
{ {
uint64_t val,val2=0,tmpsatoshis,bigtxfee = 100000; int32_t spendvini,selector; bits256 spendtxid; struct iguana_info *coin; struct _LP_utxoinfo u; struct LP_utxoinfo *utxo = 0; uint64_t val,val2=0,tmpsatoshis,bigtxfee = 100000; int32_t spendvini,selector; bits256 spendtxid; struct iguana_info *coin; struct _LP_utxoinfo u; struct LP_utxoinfo *utxo = 0;
if ( symbol == 0 || symbol[0] == 0 || spendscript == 0 || spendscript[0] == 0 || coinaddr == 0 || coinaddr[0] == 0 || bits256_nonz(txid) == 0 || bits256_nonz(txid2) == 0 || vout < 0 || vout2 < 0 || value <= 0 || value2 <= 0 ) if ( symbol == 0 || symbol[0] == 0 || spendscript == 0 || spendscript[0] == 0 || coinaddr == 0 || coinaddr[0] == 0 || bits256_nonz(txid) == 0 || bits256_nonz(txid2) == 0 || vout < 0 || vout2 < 0 || value <= 0 || value2 <= 0 )
@ -552,13 +552,13 @@ struct LP_utxoinfo *LP_utxoadd(int32_t iambob,int32_t mypubsock,char *symbol,bit
utxo = 0; utxo = 0;
} }
} }
else if ( profitmargin > SMALLVAL ) //else if ( profitmargin > SMALLVAL )
utxo->S.profitmargin = profitmargin; // utxo->S.profitmargin = profitmargin;
if ( utxo != 0 ) if ( utxo != 0 )
return(utxo); return(utxo);
} }
utxo = calloc(1,sizeof(*utxo)); utxo = calloc(1,sizeof(*utxo));
utxo->S.profitmargin = profitmargin; //utxo->S.profitmargin = profitmargin;
utxo->pubkey = pubkey; utxo->pubkey = pubkey;
safecopy(utxo->gui,gui,sizeof(utxo->gui)); safecopy(utxo->gui,gui,sizeof(utxo->gui));
safecopy(utxo->coin,symbol,sizeof(utxo->coin)); safecopy(utxo->coin,symbol,sizeof(utxo->coin));
@ -610,7 +610,7 @@ struct LP_utxoinfo *LP_utxoaddjson(int32_t iambob,int32_t pubsock,cJSON *argjson
return(0); return(0);
} }
portable_mutex_lock(&LP_UTXOmutex); portable_mutex_lock(&LP_UTXOmutex);
utxo = LP_utxoadd(iambob,pubsock,jstr(argjson,"coin"),jbits256(argjson,"txid"),jint(argjson,"vout"),j64bits(argjson,"value"),jbits256(argjson,"txid2"),jint(argjson,"vout2"),j64bits(argjson,"value2"),jstr(argjson,"script"),jstr(argjson,"address"),jbits256(argjson,"pubkey"),jdouble(argjson,"profit"),jstr(argjson,"gui")); utxo = LP_utxoadd(iambob,pubsock,jstr(argjson,"coin"),jbits256(argjson,"txid"),jint(argjson,"vout"),j64bits(argjson,"value"),jbits256(argjson,"txid2"),jint(argjson,"vout2"),j64bits(argjson,"value2"),jstr(argjson,"script"),jstr(argjson,"address"),jbits256(argjson,"pubkey"),jstr(argjson,"gui"));
portable_mutex_unlock(&LP_UTXOmutex); portable_mutex_unlock(&LP_UTXOmutex);
return(utxo); return(utxo);
} }
@ -634,7 +634,7 @@ int32_t LP_utxosparse(char *destipaddr,uint16_t destport,char *retstr,uint32_t n
subport = argport + 2; subport = argport + 2;
argipbits = (uint32_t)calc_ipbits(argipaddr); argipbits = (uint32_t)calc_ipbits(argipaddr);
if ( (peer= LP_peerfind(argipbits,argport)) == 0 ) if ( (peer= LP_peerfind(argipbits,argport)) == 0 )
peer = LP_addpeer(0,-1,argipaddr,argport,pushport,subport,jdouble(item,"profit"),jint(item,"numpeers"),jint(item,"numutxos")); peer = LP_addpeer(0,-1,argipaddr,argport,pushport,subport,jint(item,"numpeers"),jint(item,"numutxos"));
} }
if ( jobj(item,"txid") != 0 ) if ( jobj(item,"txid") != 0 )
{ {
@ -654,7 +654,7 @@ int32_t LP_utxosparse(char *destipaddr,uint16_t destport,char *retstr,uint32_t n
return(n); return(n);
} }
int32_t LP_utxosquery(struct LP_peerinfo *mypeer,int32_t mypubsock,char *destipaddr,uint16_t destport,char *coin,int32_t lastn,char *myipaddr,uint16_t myport,double myprofit) int32_t LP_utxosquery(struct LP_peerinfo *mypeer,int32_t mypubsock,char *destipaddr,uint16_t destport,char *coin,int32_t lastn,char *myipaddr,uint16_t myport)
{ {
char *retstr; struct LP_peerinfo *peer; uint32_t now; int32_t retval = -1; char *retstr; struct LP_peerinfo *peer; uint32_t now; int32_t retval = -1;
peer = LP_peerfind((uint32_t)calc_ipbits(destipaddr),destport); peer = LP_peerfind((uint32_t)calc_ipbits(destipaddr),destport);
@ -662,7 +662,7 @@ int32_t LP_utxosquery(struct LP_peerinfo *mypeer,int32_t mypubsock,char *destipa
coin = ""; coin = "";
//printf("utxo query.(%s)\n",destipaddr); //printf("utxo query.(%s)\n",destipaddr);
if ( IAMLP != 0 ) if ( IAMLP != 0 )
retstr = issue_LP_getutxos(destipaddr,destport,coin,lastn,myipaddr,myport,myprofit,mypeer != 0 ? mypeer->numpeers : 0,mypeer != 0 ? mypeer->numutxos : 0); retstr = issue_LP_getutxos(destipaddr,destport,coin,lastn,myipaddr,myport,mypeer != 0 ? mypeer->numpeers : 0,mypeer != 0 ? mypeer->numutxos : 0);
else retstr = issue_LP_clientgetutxos(destipaddr,destport,coin,100); else retstr = issue_LP_clientgetutxos(destipaddr,destport,coin,100);
if ( retstr != 0 ) if ( retstr != 0 )
{ {
@ -809,13 +809,13 @@ uint64_t LP_privkey_init(int32_t mypubsock,struct iguana_info *coin,bits256 mypr
portable_mutex_lock(&LP_UTXOmutex); portable_mutex_lock(&LP_UTXOmutex);
if ( iambob != 0 ) if ( iambob != 0 )
{ {
if ( (utxo= LP_utxoadd(1,mypubsock,coin->symbol,txid,vout,value,deposittxid,depositvout,depositval,script,coin->smartaddr,mypub,LP_mypeer != 0 ? LP_mypeer->profitmargin : 0.01,LP_gui)) != 0 ) if ( (utxo= LP_utxoadd(1,mypubsock,coin->symbol,txid,vout,value,deposittxid,depositvout,depositval,script,coin->smartaddr,mypub,LP_gui)) != 0 )
{ {
} }
} }
else else
{ {
if ( (utxo= LP_utxoadd(0,mypubsock,coin->symbol,deposittxid,depositvout,depositval,txid,vout,value,script,coin->smartaddr,mypub,0.,LP_gui)) != 0 ) if ( (utxo= LP_utxoadd(0,mypubsock,coin->symbol,deposittxid,depositvout,depositval,txid,vout,value,script,coin->smartaddr,mypub,LP_gui)) != 0 )
{ {
} }
} }

9
iguana/exchanges/mm.c

@ -24,7 +24,7 @@
#include <stdint.h> #include <stdint.h>
#include "OS_portable.h" #include "OS_portable.h"
#define MAX(a,b) ((a) > (b) ? (a) : (b)) #define MAX(a,b) ((a) > (b) ? (a) : (b))
char *stats_JSON(void *ctx,char *myipaddr,int32_t pubsock,double profitmargin,cJSON *argjson,char *remoteaddr,uint16_t port); char *stats_JSON(void *ctx,char *myipaddr,int32_t pubsock,cJSON *argjson,char *remoteaddr,uint16_t port);
#include "stats.c" #include "stats.c"
void LP_priceupdate(char *base,char *rel,double price,double avebid,double aveask,double highbid,double lowask,double PAXPRICES[32]); void LP_priceupdate(char *base,char *rel,double price,double avebid,double aveask,double highbid,double lowask,double PAXPRICES[32]);
@ -179,10 +179,10 @@ char *iguana_walletpassphrase(char *passphrase,int32_t timeout)
return(bitcoind_RPC(0,"",url,0,"listunspent",postdata)); return(bitcoind_RPC(0,"",url,0,"listunspent",postdata));
}*/ }*/
/*char *issue_LP_intro(char *destip,uint16_t destport,char *ipaddr,uint16_t port,double profitmargin,int32_t numpeers) /*char *issue_LP_intro(char *destip,uint16_t destport,char *ipaddr,uint16_t port,int32_t numpeers)
{ {
char url[512]; char url[512];
sprintf(url,"http://%s:%u/api/stats/intro?ipaddr=%s&port=%u&profit=%.6f&numpeers=%d",destip,destport,ipaddr,port,profitmargin,numpeers); sprintf(url,"http://%s:%u/api/stats/intro?ipaddr=%s&port=%u&numpeers=%d",destip,destport,ipaddr,port,numpeers);
printf("(%s)\n",url); printf("(%s)\n",url);
return(issue_curl(url)); return(issue_curl(url));
}*/ }*/
@ -790,7 +790,8 @@ void LP_main(void *ptr)
if ( (passphrase= jstr(argjson,"passphrase")) != 0 ) if ( (passphrase= jstr(argjson,"passphrase")) != 0 )
{ {
profitmargin = jdouble(argjson,"profitmargin"); profitmargin = jdouble(argjson,"profitmargin");
LPinit(7779,7780,7781,7782,profitmargin,passphrase,jint(argjson,"client"),jstr(argjson,"userhome"),argjson); LP_profitratio += profitmargin;
LPinit(7779,7780,7781,7782,passphrase,jint(argjson,"client"),jstr(argjson,"userhome"),argjson);
} }
} }

6
iguana/exchanges/stats.c

@ -307,7 +307,7 @@ extern void *bitcoin_ctx();
char *stats_rpcparse(char *retbuf,int32_t bufsize,int32_t *jsonflagp,int32_t *postflagp,char *urlstr,char *remoteaddr,char *filetype,uint16_t port) char *stats_rpcparse(char *retbuf,int32_t bufsize,int32_t *jsonflagp,int32_t *postflagp,char *urlstr,char *remoteaddr,char *filetype,uint16_t port)
{ {
static void *ctx; static void *ctx;
cJSON *tokens,*argjson,*origargjson,*tmpjson=0,*json = 0; long filesize; double profitmargin = 0.; char *myipaddr="127.0.0.1",symbol[64],buf[4096],*userpass=0,urlmethod[16],*data,url[8192],furl[8192],*retstr,*filestr,*token = 0; int32_t i,j,n,num=0; cJSON *tokens,*argjson,*origargjson,*tmpjson=0,*json = 0; long filesize; char *myipaddr="127.0.0.1",symbol[64],buf[4096],*userpass=0,urlmethod[16],*data,url[8192],furl[8192],*retstr,*filestr,*token = 0; int32_t i,j,n,num=0;
//printf("rpcparse.(%s)\n",urlstr); //printf("rpcparse.(%s)\n",urlstr);
if ( ctx == 0 ) if ( ctx == 0 )
ctx = bitcoin_ctx(); ctx = bitcoin_ctx();
@ -493,7 +493,7 @@ char *stats_rpcparse(char *retbuf,int32_t bufsize,int32_t *jsonflagp,int32_t *po
if ( userpass != 0 && jstr(argjson,"userpass") == 0 ) if ( userpass != 0 && jstr(argjson,"userpass") == 0 )
jaddstr(argjson,"userpass",userpass); jaddstr(argjson,"userpass",userpass);
//printf("after urlconv.(%s) argjson.(%s)\n",jprint(json,0),jprint(argjson,0)); //printf("after urlconv.(%s) argjson.(%s)\n",jprint(json,0),jprint(argjson,0));
if ( (retstr= stats_JSON(ctx,myipaddr,-1,profitmargin,argjson,remoteaddr,port)) != 0 ) if ( (retstr= stats_JSON(ctx,myipaddr,-1,argjson,remoteaddr,port)) != 0 )
{ {
if ( (retitem= cJSON_Parse(retstr)) != 0 ) if ( (retitem= cJSON_Parse(retstr)) != 0 )
jaddi(retarray,retitem); jaddi(retarray,retitem);
@ -516,7 +516,7 @@ char *stats_rpcparse(char *retbuf,int32_t bufsize,int32_t *jsonflagp,int32_t *po
//printf("ARGJSON.(%s)\n",jprint(arg,0)); //printf("ARGJSON.(%s)\n",jprint(arg,0));
if ( userpass != 0 && jstr(arg,"userpass") == 0 ) if ( userpass != 0 && jstr(arg,"userpass") == 0 )
jaddstr(arg,"userpass",userpass); jaddstr(arg,"userpass",userpass);
retstr = stats_JSON(ctx,myipaddr,-1,profitmargin,arg,remoteaddr,port); retstr = stats_JSON(ctx,myipaddr,-1,arg,remoteaddr,port);
} }
free_json(argjson); free_json(argjson);
free_json(json); free_json(json);

Loading…
Cancel
Save