jl777 7 years ago
parent
commit
415351f36c
  1. 1
      iguana/exchanges/LP_coins.c
  2. 2
      iguana/exchanges/LP_include.h
  3. 4
      iguana/exchanges/LP_nativeDEX.c
  4. 2
      iguana/exchanges/LP_scan.c
  5. 20
      iguana/exchanges/LP_utxo.c

1
iguana/exchanges/LP_coins.c

@ -243,6 +243,7 @@ struct iguana_info *LP_coinadd(struct iguana_info *cdata)
//printf("%s: (%s) (%s)\n",symbol,cdata.serverport,cdata.userpass); //printf("%s: (%s) (%s)\n",symbol,cdata.serverport,cdata.userpass);
*coin = *cdata; *coin = *cdata;
portable_mutex_init(&coin->txmutex); portable_mutex_init(&coin->txmutex);
portable_mutex_init(&coin->addrmutex);
portable_mutex_lock(&LP_coinmutex); portable_mutex_lock(&LP_coinmutex);
HASH_ADD_KEYPTR(hh,LP_coins,coin->symbol,strlen(coin->symbol),coin); HASH_ADD_KEYPTR(hh,LP_coins,coin->symbol,strlen(coin->symbol),coin);
portable_mutex_unlock(&LP_coinmutex); portable_mutex_unlock(&LP_coinmutex);

2
iguana/exchanges/LP_include.h

@ -179,7 +179,7 @@ struct LP_transaction
struct iguana_info struct iguana_info
{ {
UT_hash_handle hh; UT_hash_handle hh;
portable_mutex_t txmutex; struct LP_transaction *transactions; struct LP_address *addresses; portable_mutex_t txmutex,addrmutex; struct LP_transaction *transactions; struct LP_address *addresses;
uint64_t txfee; uint64_t txfee;
int32_t longestchain,firstrefht,firstscanht,lastscanht,bussock,height; uint16_t busport; int32_t longestchain,firstrefht,firstscanht,lastscanht,bussock,height; uint16_t busport;
uint32_t counter,inactive,lastmempool,lastgetinfo,ratetime,heighttime,lastmonitor,unspenttime; uint32_t counter,inactive,lastmempool,lastgetinfo,ratetime,heighttime,lastmonitor,unspenttime;

4
iguana/exchanges/LP_nativeDEX.c

@ -429,7 +429,7 @@ int32_t LP_mainloop_iter(void *ctx,char *myipaddr,struct LP_peerinfo *mypeer,int
continue; continue;
if ( time(NULL) > coin->lastmonitor+60 ) if ( time(NULL) > coin->lastmonitor+60 )
{ {
portable_mutex_lock(&coin->txmutex); portable_mutex_lock(&coin->addrmutex);
HASH_ITER(hh,coin->addresses,ap,atmp) HASH_ITER(hh,coin->addresses,ap,atmp)
{ {
if ( coin->electrum == 0 ) if ( coin->electrum == 0 )
@ -449,7 +449,7 @@ int32_t LP_mainloop_iter(void *ctx,char *myipaddr,struct LP_peerinfo *mypeer,int
free_json(retjson); free_json(retjson);
} }
} }
portable_mutex_unlock(&coin->txmutex); portable_mutex_unlock(&coin->addrmutex);
coin->lastmonitor = (uint32_t)time(NULL); coin->lastmonitor = (uint32_t)time(NULL);
} }
if ( coin->electrum != 0 ) if ( coin->electrum != 0 )

2
iguana/exchanges/LP_scan.c

@ -184,6 +184,7 @@ cJSON *LP_snapshot(struct iguana_info *coin,int32_t height)
} }
} }
portable_mutex_lock(&coin->txmutex); portable_mutex_lock(&coin->txmutex);
portable_mutex_lock(&coin->addrmutex);
HASH_ITER(hh,coin->addresses,ap,atmp) HASH_ITER(hh,coin->addresses,ap,atmp)
{ {
ap->balance = 0; ap->balance = 0;
@ -220,6 +221,7 @@ cJSON *LP_snapshot(struct iguana_info *coin,int32_t height)
} }
} }
HASH_SORT(coin->addresses,sort_balance); HASH_SORT(coin->addresses,sort_balance);
portable_mutex_unlock(&coin->addrmutex);
portable_mutex_unlock(&coin->txmutex); portable_mutex_unlock(&coin->txmutex);
printf("%s balance %.8f at height.%d\n",coin->symbol,dstr(balance),height); printf("%s balance %.8f at height.%d\n",coin->symbol,dstr(balance),height);
array = cJSON_CreateArray(); array = cJSON_CreateArray();

20
iguana/exchanges/LP_utxo.c

@ -90,16 +90,16 @@ struct LP_address *_LP_address(struct iguana_info *coin,char *coinaddr)
struct LP_address *LP_addressfind(struct iguana_info *coin,char *coinaddr) struct LP_address *LP_addressfind(struct iguana_info *coin,char *coinaddr)
{ {
struct LP_address *ap; struct LP_address *ap;
portable_mutex_lock(&coin->txmutex); portable_mutex_lock(&coin->addrmutex);
ap = _LP_addressfind(coin,coinaddr); ap = _LP_addressfind(coin,coinaddr);
portable_mutex_unlock(&coin->txmutex); portable_mutex_unlock(&coin->addrmutex);
return(ap); return(ap);
} }
int32_t LP_address_utxoadd(struct iguana_info *coin,char *coinaddr,bits256 txid,int32_t vout,uint64_t value,int32_t height,int32_t spendheight) int32_t LP_address_utxoadd(struct iguana_info *coin,char *coinaddr,bits256 txid,int32_t vout,uint64_t value,int32_t height,int32_t spendheight)
{ {
struct LP_address *ap; struct LP_address_utxo *up,*tmp; int32_t flag,retval = 0; struct LP_address *ap; struct LP_address_utxo *up,*tmp; int32_t flag,retval = 0;
printf("%s add addr.%s ht.%d\n",coin->symbol,coinaddr,height); //printf("%s add addr.%s ht.%d\n",coin->symbol,coinaddr,height);
if ( (ap= _LP_address(coin,coinaddr)) != 0 ) if ( (ap= _LP_address(coin,coinaddr)) != 0 )
{ {
flag = 0; flag = 0;
@ -123,16 +123,16 @@ int32_t LP_address_utxoadd(struct iguana_info *coin,char *coinaddr,bits256 txid,
up->U.height = height; up->U.height = height;
up->U.value = value; up->U.value = value;
up->spendheight = spendheight; up->spendheight = spendheight;
portable_mutex_lock(&coin->txmutex); portable_mutex_lock(&coin->addrmutex);
DL_APPEND(ap->utxos,up); DL_APPEND(ap->utxos,up);
portable_mutex_unlock(&coin->txmutex); portable_mutex_unlock(&coin->addrmutex);
retval = 1; retval = 1;
char str[65]; char str[65];
if ( height > 0 ) if ( height > 0 )
printf(">>>>>>>>>> %s %s %s/v%d ht.%d %.8f\n",coin->symbol,coinaddr,bits256_str(str,txid),vout,height,dstr(value)); printf(">>>>>>>>>> %s %s %s/v%d ht.%d %.8f\n",coin->symbol,coinaddr,bits256_str(str,txid),vout,height,dstr(value));
} }
} }
printf("done %s add addr.%s ht.%d\n",coin->symbol,coinaddr,height); //printf("done %s add addr.%s ht.%d\n",coin->symbol,coinaddr,height);
return(retval); return(retval);
} }
@ -163,7 +163,7 @@ cJSON *LP_address_utxos(struct iguana_info *coin,char *coinaddr,int32_t electrum
array = cJSON_CreateArray(); array = cJSON_CreateArray();
if ( coinaddr != 0 && coinaddr[0] != 0 ) if ( coinaddr != 0 && coinaddr[0] != 0 )
{ {
portable_mutex_lock(&coin->txmutex); portable_mutex_lock(&coin->addrmutex);
if ( (ap= _LP_addressfind(coin,coinaddr)) != 0 ) if ( (ap= _LP_addressfind(coin,coinaddr)) != 0 )
{ {
DL_FOREACH_SAFE(ap->utxos,up,tmp) DL_FOREACH_SAFE(ap->utxos,up,tmp)
@ -176,7 +176,7 @@ cJSON *LP_address_utxos(struct iguana_info *coin,char *coinaddr,int32_t electrum
} }
} }
} }
portable_mutex_unlock(&coin->txmutex); portable_mutex_unlock(&coin->addrmutex);
} }
//printf("%s %s utxos.(%s) ap.%p\n",coin->symbol,coinaddr,jprint(array,0),ap); //printf("%s %s utxos.(%s) ap.%p\n",coin->symbol,coinaddr,jprint(array,0),ap);
return(array); return(array);
@ -256,12 +256,12 @@ char *LP_postedutxos(cJSON *argjson)
HASH_ITER(hh,LP_coins,coin,tmp) HASH_ITER(hh,LP_coins,coin,tmp)
{ {
bitcoin_address(coinaddr,coin->taddr,coin->pubtype,pubp->rmd160,sizeof(pubp->rmd160)); bitcoin_address(coinaddr,coin->taddr,coin->pubtype,pubp->rmd160,sizeof(pubp->rmd160));
portable_mutex_lock(&coin->txmutex); portable_mutex_lock(&coin->addrmutex);
if ( (ap= _LP_address(coin,coinaddr)) != 0 ) if ( (ap= _LP_address(coin,coinaddr)) != 0 )
{ {
ap->monitor = (uint32_t)time(NULL); ap->monitor = (uint32_t)time(NULL);
} }
portable_mutex_unlock(&coin->txmutex); portable_mutex_unlock(&coin->addrmutex);
if ( coin->electrum != 0 ) if ( coin->electrum != 0 )
{ {
if ( (retjson= electrum_address_subscribe(coin->symbol,coin->electrum,&retjson,coinaddr)) != 0 ) if ( (retjson= electrum_address_subscribe(coin->symbol,coin->electrum,&retjson,coinaddr)) != 0 )

Loading…
Cancel
Save