diff --git a/iguana/exchanges/LP_include.h b/iguana/exchanges/LP_include.h index 8e8f97c6f..5c27b039f 100644 --- a/iguana/exchanges/LP_include.h +++ b/iguana/exchanges/LP_include.h @@ -300,7 +300,7 @@ struct LP_address *_LP_address(struct iguana_info *coin,char *coinaddr); int32_t iguana_signrawtransaction(void *ctx,char *symbol,uint8_t wiftaddr,uint8_t taddr,uint8_t pubtype,uint8_t p2shtype,uint8_t isPoS,int32_t height,struct iguana_msgtx *msgtx,char **signedtxp,bits256 *signedtxidp,struct vin_info *V,int32_t numinputs,char *rawtx,cJSON *vins,cJSON *privkeysjson); int32_t LP_waitmempool(char *symbol,char *coinaddr,bits256 txid,int32_t duration); struct LP_transaction *LP_transactionfind(struct iguana_info *coin,bits256 txid); -int32_t LP_transactioninit(struct iguana_info *coin,bits256 txid,int32_t iter); +int32_t LP_transactioninit(struct iguana_info *coin,bits256 txid,int32_t iter,cJSON *txobj); int32_t LP_mempoolscan(char *symbol,bits256 searchtxid); int32_t LP_txheight(struct iguana_info *coin,bits256 txid); 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); diff --git a/iguana/exchanges/LP_scan.c b/iguana/exchanges/LP_scan.c index 5f0b4175b..6d81a26c0 100644 --- a/iguana/exchanges/LP_scan.c +++ b/iguana/exchanges/LP_scan.c @@ -42,7 +42,7 @@ int32_t LP_blockinit(struct iguana_info *coin,int32_t height) if ( iter == 1 ) for (j=0; j<10; j++) { - if (LP_transactioninit(coin,txid,iter) == 0 ) + if (LP_transactioninit(coin,txid,iter,0) == 0 ) break; printf("transaction ht.%d init error.%d, pause\n",height,j); sleep(1); @@ -52,7 +52,7 @@ int32_t LP_blockinit(struct iguana_info *coin,int32_t height) { for (j=0; j<10; j++) { - if (LP_transactioninit(coin,txid,iter) == 0 ) + if (LP_transactioninit(coin,txid,iter,0) == 0 ) break; printf("transaction ht.%d init error.%d, pause\n",height,j); sleep(1); @@ -435,8 +435,8 @@ int32_t LP_mempoolscan(char *symbol,bits256 searchtxid) txid = jbits256i(array,i); if ( (tx= LP_transactionfind(coin,txid)) == 0 ) { - LP_transactioninit(coin,txid,0); - LP_transactioninit(coin,txid,1); + LP_transactioninit(coin,txid,0,0); + LP_transactioninit(coin,txid,1,0); } if ( bits256_cmp(txid,searchtxid) == 0 ) { diff --git a/iguana/exchanges/LP_socket.c b/iguana/exchanges/LP_socket.c index 480b78d22..750ab4fe1 100644 --- a/iguana/exchanges/LP_socket.c +++ b/iguana/exchanges/LP_socket.c @@ -306,7 +306,7 @@ struct electrum_info *electrum_server(char *symbol,struct electrum_info *ep) int32_t electrum_process_array(struct iguana_info *coin,char *coinaddr,cJSON *array) { - int32_t i,v,n,flag = 0; char str[65]; uint64_t value; bits256 txid; cJSON *item; struct LP_transaction *tx; + int32_t i,v,n,flag = 0; char str[65]; uint64_t value; bits256 txid; cJSON *item,*txobj; struct LP_transaction *tx; if ( array != 0 && coin != 0 && (n= cJSON_GetArraySize(array)) > 0 ) { for (i=0; isymbol,txid)) != 0 ) + struct LP_transaction *tx; int32_t i,height,numvouts,numvins,spentvout; cJSON *vins,*vouts,*vout,*vin; bits256 spenttxid; char str[65]; + if ( txobj != 0 || (txobj= LP_gettx(coin->symbol,txid)) != 0 ) { - printf("LP_transactioninit.(%s)\n",jprint(txobj,0)); if ( coin->electrum == 0 ) height = LP_txheight(coin,txid); else height = -1; @@ -456,10 +455,13 @@ int32_t LP_transactioninit(struct iguana_info *coin,bits256 txid,int32_t iter) printf("spending same tx's %p vout ht.%d %s.[%d] s%d\n",tx,height,bits256_str(str,txid),tx!=0?tx->numvouts:0,spentvout); } } - free_json(txobj); - return(0); + if ( iter == 1 ) + { + free_json(txobj); + return(0); + } else return(txobj); } //else printf("LP_transactioninit error for %s %s\n",coin->symbol,bits256_str(str,txid)); - return(-1); + return(0); } int32_t LP_txheight(struct iguana_info *coin,bits256 txid) @@ -532,7 +534,7 @@ int64_t basilisk_txvalue(char *symbol,bits256 txid,int32_t vout) uint64_t LP_txvalue(char *coinaddr,char *symbol,bits256 txid,int32_t vout) { - struct LP_transaction *tx; cJSON *txobj; uint64_t value; struct iguana_info *coin; char str[65],str2[65],_coinaddr[65]; + struct LP_transaction *tx; cJSON *txobj=0; uint64_t value; struct iguana_info *coin; char str[65],str2[65],_coinaddr[65]; if ( bits256_nonz(txid) == 0 ) return(0); if ( (coin= LP_coinfind(symbol)) == 0 || coin->inactive != 0 ) @@ -541,8 +543,8 @@ uint64_t LP_txvalue(char *coinaddr,char *symbol,bits256 txid,int32_t vout) coinaddr[0] = 0; if ( (tx= LP_transactionfind(coin,txid)) == 0 ) { - LP_transactioninit(coin,txid,0); - LP_transactioninit(coin,txid,1); + txobj = LP_transactioninit(coin,txid,0,0); + LP_transactioninit(coin,txid,1,txobj); tx = LP_transactionfind(coin,txid); } if ( tx != 0 )