Browse Source

Merge pull request #940 from jl777/jl777

tweak utxo selection
patch-4
jl777 6 years ago
committed by GitHub
parent
commit
78eeaf4304
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 6
      iguana/exchanges/LP_instantdex.c
  2. 7
      iguana/exchanges/LP_ordermatch.c
  3. 22
      iguana/exchanges/LP_rpc.c
  4. 2
      iguana/exchanges/LP_transaction.c
  5. 8
      iguana/exchanges/LP_utxo.c

6
iguana/exchanges/LP_instantdex.c

@ -639,7 +639,7 @@ int64_t LP_dynamictrust(int64_t credits,bits256 pubkey,int64_t kmdvalue)
printf("unfinished alice %llu r%u-r%u src.%s %.8f dest.%s %.8f -> price %.8f value %.8f\n",(long long)sp->aliceid,sp->Q.R.requestid,sp->Q.R.quoteid,sp->Q.srccoin,dstr(sp->Q.satoshis),sp->Q.destcoin,dstr(sp->Q.destsatoshis),(double)sp->Q.destsatoshis/(sp->Q.satoshis+1),dstr(LP_kmdvalue(sp->Q.destcoin,sp->Q.destsatoshis))); printf("unfinished alice %llu r%u-r%u src.%s %.8f dest.%s %.8f -> price %.8f value %.8f\n",(long long)sp->aliceid,sp->Q.R.requestid,sp->Q.R.quoteid,sp->Q.srccoin,dstr(sp->Q.satoshis),sp->Q.destcoin,dstr(sp->Q.destsatoshis),(double)sp->Q.destsatoshis/(sp->Q.satoshis+1),dstr(LP_kmdvalue(sp->Q.destcoin,sp->Q.destsatoshis)));
} }
} }
//printf("REJECT: %s instantdex_credits %.8f vs (%.8f + current %.8f)\n",coinaddr,dstr(credits),dstr(swaps_kmdvalue),dstr(kmdvalue)); printf("REJECT: %s instantdex_credits %.8f vs (%.8f + current %.8f)\n",coinaddr,dstr(credits),dstr(swaps_kmdvalue),dstr(kmdvalue));
} }
if ( 0 && credits != 0 ) if ( 0 && credits != 0 )
printf("%s %s othercredits %.8f debits %.8f + %.8f -> %.8f\n",coin->symbol,coinaddr,dstr(credits),dstr(swaps_kmdvalue),dstr(kmdvalue),dstr(credits - (swaps_kmdvalue+kmdvalue))); printf("%s %s othercredits %.8f debits %.8f + %.8f -> %.8f\n",coin->symbol,coinaddr,dstr(credits),dstr(swaps_kmdvalue),dstr(kmdvalue),dstr(credits - (swaps_kmdvalue+kmdvalue)));
@ -679,9 +679,9 @@ int64_t LP_instantdex_proofcheck(char *symbol,char *coinaddr,cJSON *proof,int32_
credits = ap->instantdex_credits; credits = ap->instantdex_credits;
ap->didinstantdex = 1; ap->didinstantdex = 1;
ap->instantdextime = (uint32_t)time(NULL); ap->instantdextime = (uint32_t)time(NULL);
if ( 0 && ap->instantdex_credits > 0 ) if ( 1 && ap->instantdex_credits > 0 )
printf("validated instantdex %s.[%d] proof.(%s) credits %.8f\n",othersmartaddr,num,jprint(proof,0),dstr(ap->instantdex_credits)); printf("validated instantdex %s.[%d] proof.(%s) credits %.8f\n",othersmartaddr,num,jprint(proof,0),dstr(ap->instantdex_credits));
} //else printf("cant find ap.%p or already did %d %.8f\n",ap,ap!=0?ap->didinstantdex:-1,ap!=0?dstr(ap->instantdex_credits):-1); } else printf("cant find ap.%p or already did %d %.8f\n",ap,ap!=0?ap->didinstantdex:-1,ap!=0?dstr(ap->instantdex_credits):-1);
} }
return(credits); return(credits);
} }

7
iguana/exchanges/LP_ordermatch.c

@ -445,7 +445,7 @@ struct LP_utxoinfo *LP_address_myutxopair(struct LP_utxoinfo *butxo,int32_t iamb
{ {
if ( (m= LP_address_utxo_ptrs(coin,iambob,utxos,max,ap,coinaddr)) > 1 ) if ( (m= LP_address_utxo_ptrs(coin,iambob,utxos,max,ap,coinaddr)) > 1 )
{ {
if ( 0 ) if ( 1 )
{ {
int32_t i; int32_t i;
for (i=0; i<m; i++) for (i=0; i<m; i++)
@ -1123,13 +1123,14 @@ printf("bob %s received REQUEST.(%s) mpnet.%d fill.%d gtc.%d\n",bits256_str(str,
return(0); return(0);
} }
} }
LP_address_utxo_reset(&num,coin);
i = 0; i = 0;
while ( i < priceiters && price >= myprice ) while ( i < priceiters && price >= myprice )
{ {
for (j=0; j<voliters; j++) for (j=0; j<voliters; j++)
{ {
printf("priceiter.%d voliter.%d price %.8f vol %.8f\n",i,j,price,dstr(qp->destsatoshis)); printf("priceiter.%d voliter.%d price %.8f vol %.8f\n",i,j,price,dstr(qp->destsatoshis));
if ( (butxo= LP_address_myutxopair(&B,1,utxos,max,LP_coinfind(qp->srccoin),qp->coinaddr,qp->txfee,dstr(qp->destsatoshis),price,qp->desttxfee)) != 0 ) if ( (butxo= LP_address_myutxopair(&B,1,utxos,max,coin,qp->coinaddr,qp->txfee,dstr(qp->destsatoshis),price,qp->desttxfee)) != 0 )
{ {
strcpy(qp->gui,G.gui); strcpy(qp->gui,G.gui);
strcpy(qp->coinaddr,coin->smartaddr); strcpy(qp->coinaddr,coin->smartaddr);
@ -1181,7 +1182,7 @@ printf("bob %s received REQUEST.(%s) mpnet.%d fill.%d gtc.%d\n",bits256_str(str,
else if ( qp->fill != 0 || i == priceiters ) else if ( qp->fill != 0 || i == priceiters )
{ {
printf("i.%d cant find utxopair aliceid.%llu %s/%s %.8f -> relvol %.8f txfee %.8f\n",i,(long long)qp->aliceid,qp->srccoin,qp->destcoin,dstr(LP_basesatoshis(dstr(qp->destsatoshis),price,qp->txfee,qp->desttxfee)),dstr(qp->destsatoshis),dstr(qp->txfee)); printf("i.%d cant find utxopair aliceid.%llu %s/%s %.8f -> relvol %.8f txfee %.8f\n",i,(long long)qp->aliceid,qp->srccoin,qp->destcoin,dstr(LP_basesatoshis(dstr(qp->destsatoshis),price,qp->txfee,qp->desttxfee)),dstr(qp->destsatoshis),dstr(qp->txfee));
if ( qp->gtc != 0 && qp->fill != 0 && coin != 0 ) if ( qp->gtc != 0 && qp->fill != 0 && coin != 0 && coin->electrum == 0 )
{ {
LP_address_utxo_reset(&num,coin); LP_address_utxo_reset(&num,coin);
satoshis = LP_basesatoshis(dstr(qp->destsatoshis),price,qp->txfee,qp->desttxfee) + 3*qp->txfee; satoshis = LP_basesatoshis(dstr(qp->destsatoshis),price,qp->txfee,qp->desttxfee) + 3*qp->txfee;

22
iguana/exchanges/LP_rpc.c

@ -254,14 +254,17 @@ cJSON *LP_gettxout(char *symbol,char *coinaddr,bits256 txid,int32_t vout)
return(cJSON_Parse("{\"error\":\"no coin\"}")); return(cJSON_Parse("{\"error\":\"no coin\"}"));
if ( bits256_nonz(txid) == 0 ) if ( bits256_nonz(txid) == 0 )
return(cJSON_Parse("{\"error\":\"null txid\"}")); return(cJSON_Parse("{\"error\":\"null txid\"}"));
if ( (tx= LP_transactionfind(coin,txid)) != 0 && vout < tx->numvouts )
{
if ( tx->outpoints[vout].spendheight > 0 )
return(0);
//return(LP_gettxout_json(txid,vout,tx->height,tx->outpoints[vout].coinaddr,tx->outpoints[vout].value));
}
if ( coin->electrum == 0 ) if ( coin->electrum == 0 )
{ {
if ( (tx= LP_transactionfind(coin,txid)) != 0 && vout < tx->numvouts )
{
if ( tx->outpoints[vout].spendheight > 0 )
{
//fprintf(stderr,"LP_gettxout (%s) tx->outpoints[vout].spendheight > 0\n",coinaddr);
return(0);
}
//return(LP_gettxout_json(txid,vout,tx->height,tx->outpoints[vout].coinaddr,tx->outpoints[vout].value));
}
sprintf(buf,"[\"%s\", %d, true]",bits256_str(str,txid),vout); sprintf(buf,"[\"%s\", %d, true]",bits256_str(str,txid),vout);
return(bitcoin_json(coin,"gettxout",buf)); return(bitcoin_json(coin,"gettxout",buf));
} }
@ -281,7 +284,10 @@ cJSON *LP_gettxout(char *symbol,char *coinaddr,bits256 txid,int32_t vout)
if ( (up= LP_address_utxofind(coin,coinaddr,txid,vout)) != 0 ) if ( (up= LP_address_utxofind(coin,coinaddr,txid,vout)) != 0 )
{ {
if ( up->spendheight > 0 ) if ( up->spendheight > 0 )
{
//fprintf(stderr,"LP_gettxout (%s) up->spendheight > 0\n",coinaddr);
return(0); return(0);
}
//return(LP_gettxout_json(txid,vout,up->U.height,coinaddr,up->U.value)); //return(LP_gettxout_json(txid,vout,up->U.height,coinaddr,up->U.value));
} }
memset(zero.bytes,0,sizeof(zero)); memset(zero.bytes,0,sizeof(zero));
@ -1145,7 +1151,7 @@ int32_t LP_txhasnotarization(bits256 *notarizedhashp,struct iguana_info *coin,bi
{ {
cJSON *txobj,*vins,*vin,*vouts,*vout,*spentobj,*sobj; char *hexstr; uint8_t script[1024]; bits256 spenttxid; uint64_t notarymask; int32_t i,j,numnotaries,len,spentvout,numvins,numvouts,hasnotarization = 0; cJSON *txobj,*vins,*vin,*vouts,*vout,*spentobj,*sobj; char *hexstr; uint8_t script[1024]; bits256 spenttxid; uint64_t notarymask; int32_t i,j,numnotaries,len,spentvout,numvins,numvouts,hasnotarization = 0;
memset(notarizedhashp,0,sizeof(*notarizedhashp)); memset(notarizedhashp,0,sizeof(*notarizedhashp));
if ( (txobj= LP_gettx("LP_txhasnotarization",coin->symbol,txid,0)) != 0 ) if ( (txobj= LP_gettx("LP_txhasnotarization",coin->symbol,txid,1)) != 0 )
{ {
if ( (vins= jarray(&numvins,txobj,"vin")) != 0 ) if ( (vins= jarray(&numvins,txobj,"vin")) != 0 )
{ {
@ -1157,7 +1163,7 @@ int32_t LP_txhasnotarization(bits256 *notarizedhashp,struct iguana_info *coin,bi
vin = jitem(vins,i); vin = jitem(vins,i);
spenttxid = jbits256(vin,"txid"); spenttxid = jbits256(vin,"txid");
spentvout = jint(vin,"vout"); spentvout = jint(vin,"vout");
if ( (spentobj= LP_gettx("LP_txhasnotarization",coin->symbol,spenttxid,0)) != 0 ) if ( (spentobj= LP_gettx("LP_txhasnotarization",coin->symbol,spenttxid,1)) != 0 )
{ {
if ( (vouts= jarray(&numvouts,spentobj,"vout")) != 0 ) if ( (vouts= jarray(&numvouts,spentobj,"vout")) != 0 )
{ {

2
iguana/exchanges/LP_transaction.c

@ -2319,7 +2319,7 @@ int32_t LP_swap_getcoinaddr(char *symbol,char *coinaddr,bits256 txid,int32_t vou
{ {
cJSON *retjson; cJSON *retjson;
coinaddr[0] = 0; coinaddr[0] = 0;
if ( (retjson= LP_gettx("LP_swap_getcoinaddr",symbol,txid,0)) != 0 ) if ( (retjson= LP_gettx("LP_swap_getcoinaddr",symbol,txid,1)) != 0 )
{ {
LP_txdestaddr(coinaddr,txid,vout,retjson); LP_txdestaddr(coinaddr,txid,vout,retjson);
free_json(retjson); free_json(retjson);

8
iguana/exchanges/LP_utxo.c

@ -906,7 +906,7 @@ cJSON *LP_transactioninit(struct iguana_info *coin,bits256 txid,int32_t iter,cJS
struct LP_transaction *tx; int32_t i,height,numvouts,numvins,spentvout; cJSON *vins,*vouts,*vout,*vin; bits256 spenttxid; char str[65]; struct LP_transaction *tx; int32_t i,height,numvouts,numvins,spentvout; cJSON *vins,*vouts,*vout,*vin; bits256 spenttxid; char str[65];
if ( coin->inactive != 0 ) if ( coin->inactive != 0 )
return(0); return(0);
if ( txobj != 0 || (txobj= LP_gettx("LP_transactioninit",coin->symbol,txid,0)) != 0 ) if ( txobj != 0 || (txobj= LP_gettx("LP_transactioninit",coin->symbol,txid,1)) != 0 )
{ {
if ( coin->electrum == 0 ) if ( coin->electrum == 0 )
height = LP_txheight(coin,txid); height = LP_txheight(coin,txid);
@ -972,7 +972,7 @@ int32_t LP_txheight(struct iguana_info *coin,bits256 txid)
return(height); return(height);
if ( coin->electrum == 0 ) if ( coin->electrum == 0 )
{ {
if ( (txobj= LP_gettx("LP_txheight",coin->symbol,txid,0)) != 0 ) if ( (txobj= LP_gettx("LP_txheight",coin->symbol,txid,1)) != 0 )
{ {
//*timestampp = juint(txobj,"locktime"); //*timestampp = juint(txobj,"locktime");
//*blocktimep = juint(txobj,"blocktime"); //*blocktimep = juint(txobj,"blocktime");
@ -1075,7 +1075,7 @@ uint64_t LP_txinterestvalue(uint64_t *interestp,char *destaddr,struct iguana_inf
{ {
if ( (value= LP_value_extract(txobj,0,txid)) == 0 ) if ( (value= LP_value_extract(txobj,0,txid)) == 0 )
{ {
char str[65]; printf("%s LP_txvalue.%s strange utxo.(%s) vout.%d\n",coin->symbol,bits256_str(str,txid),jprint(txobj,0),vout); // char str[65]; printf("%s LP_txvalue.%s strange utxo.(%s) vout.%d\n",coin->symbol,bits256_str(str,txid),jprint(txobj,0),vout);
} }
else if ( strcmp(coin->symbol,"KMD") == 0 ) else if ( strcmp(coin->symbol,"KMD") == 0 )
{ {
@ -1226,7 +1226,7 @@ int32_t LP_iseligible(uint64_t *valp,uint64_t *val2p,int32_t iambob,char *symbol
} }
else free_json(txobj); else free_json(txobj);
if ( (txobj= LP_gettxout(coin->symbol,destaddr,txid2,vout2)) == 0 ) { if ( (txobj= LP_gettxout(coin->symbol,destaddr,txid2,vout2)) == 0 ) {
printf("Could not find tx out: %s %d\n", txid_str, vout2); printf("Could not find tx out2: %s %d\n", txid_str, vout2);
return (0); return (0);
} }
else free_json(txobj); else free_json(txobj);

Loading…
Cancel
Save