diff --git a/iguana/swaps/iguana_BTCswap.c b/iguana/swaps/iguana_BTCswap.c index 23c98ec63..4ae54ed4f 100755 --- a/iguana/swaps/iguana_BTCswap.c +++ b/iguana/swaps/iguana_BTCswap.c @@ -73,13 +73,14 @@ int32_t instantdex_alicescript(uint8_t *script,int32_t n,char *msigaddr,uint8_t return(n); } -int32_t instantdex_outputinsurance(uint8_t *script,int64_t insurance,uint64_t r,uint64_t dest) +int32_t instantdex_outputinsurance(char *coinaddr,uint8_t addrtype,uint8_t *script,int64_t insurance,uint64_t r,uint64_t dest) { uint8_t rmd160[20]; int32_t n = 0; decode_hex(rmd160,sizeof(rmd160),(dest % 10) == 9 ? TIERNOLAN_RMD160 : INSTANTDEX_RMD160); //script[n++] = sizeof(r); //n += iguana_rwnum(1,&script[n],sizeof(r),&r); //script[n++] = SCRIPT_OP_DROP; + bitcoin_address(coinaddr,addrtype,rmd160,20); n = bitcoin_standardspend(script,n,rmd160); return(n); } @@ -183,19 +184,20 @@ struct bitcoin_statetx *instantdex_signtx(struct supernet_info *myinfo,struct ig struct bitcoin_statetx *instantdex_feetx(struct supernet_info *myinfo,struct instantdex_accept *A,struct bitcoin_swapinfo *swap,struct iguana_info *coin) { - int32_t n; uint8_t paymentscript[128]; char scriptstr[512]; struct bitcoin_statetx *ptr = 0; uint64_t r; + int32_t n; uint8_t paymentscript[128]; char scriptstr[512],coinaddr[64]; struct bitcoin_statetx *ptr = 0; uint64_t r; r = swap->mine.orderid; - n = instantdex_outputinsurance(paymentscript,swap->insurance,r,r * (strcmp("BTC",coin->symbol) == 0)); + n = instantdex_outputinsurance(coinaddr,coin->chain->pubtype,paymentscript,swap->insurance,r,r * (strcmp("BTC",coin->symbol) == 0)); init_hexbytes_noT(scriptstr,paymentscript,n); printf("instantdex_feetx %s %.8f (%s)\n",coin->symbol,dstr(swap->insurance),scriptstr); - ptr = instantdex_signtx(myinfo,coin,0,scriptstr,swap->insurance,coin->txfee,0,A->offer.myside); + if ( (ptr= instantdex_signtx(myinfo,coin,0,scriptstr,swap->insurance,coin->txfee,0,A->offer.myside)) != 0 ) + strcpy(ptr->destaddr,coinaddr); return(ptr); } int32_t instantdex_feetxverify(struct supernet_info *myinfo,struct iguana_info *coin,struct bitcoin_swapinfo *swap,cJSON *argjson) { cJSON *txobj; bits256 txid; uint32_t n; int32_t i,retval = -1; int64_t insurance; uint64_t r; - struct iguana_msgtx msgtx; uint8_t script[512]; + struct iguana_msgtx msgtx; uint8_t script[512]; char coinaddr[64]; if ( swap->otherfee != 0 && swap->otherfee->numconfirms < 0 ) { if ( (txobj= bitcoin_hex2json(coin,&txid,&msgtx,swap->otherfee->txbytes)) != 0 ) @@ -204,7 +206,7 @@ int32_t instantdex_feetxverify(struct supernet_info *myinfo,struct iguana_info * if ( strcmp(coin->symbol,"BTC") == 0 ) insurance = swap->insurance; else insurance = swap->altinsurance; - n = instantdex_outputinsurance(script,insurance,r,r * (strcmp("BTC",coin->symbol) == 0)); + n = instantdex_outputinsurance(coinaddr,coin->chain->pubtype,script,insurance,r,r * (strcmp("BTC",coin->symbol) == 0)); if ( n == msgtx.vouts[0].pk_scriptlen ) { if ( memcmp(script,msgtx.vouts[0].pk_script,n) == 0 ) @@ -241,7 +243,11 @@ struct bitcoin_statetx *instantdex_bobtx(struct supernet_info *myinfo,struct bit n = instantdex_bobscript(script,0,&secretstart,locktime,pub1,secret,pub2); satoshis = amount + depositflag*swap->insurance*100; init_hexbytes_noT(scriptstr,script,n); - ptr = instantdex_signtx(myinfo,coin,locktime,scriptstr,satoshis,coin->txfee,swap->mine.minconfirms,swap->mine.offer.myside); + if ( (ptr= instantdex_signtx(myinfo,coin,locktime,scriptstr,satoshis,coin->txfee,swap->mine.minconfirms,swap->mine.offer.myside)) != 0 ) + { + bitcoin_address(ptr->destaddr,coin->chain->p2shtype,script,n); + printf("BOBTX.%d (%s) -> %s\n",depositflag,ptr->txbytes,ptr->destaddr); + } return(ptr); } @@ -327,7 +333,11 @@ struct bitcoin_statetx *instantdex_alicetx(struct supernet_info *myinfo,struct i { n = instantdex_alicescript(script,0,msigaddr,altcoin->chain->p2shtype,pubAm,pubBn); init_hexbytes_noT(scriptstr,script,n); - ptr = instantdex_signtx(myinfo,altcoin,0,scriptstr,amount,altcoin->txfee,swap->mine.minconfirms,swap->mine.offer.myside); + if ( (ptr= instantdex_signtx(myinfo,altcoin,0,scriptstr,amount,altcoin->txfee,swap->mine.minconfirms,swap->mine.offer.myside)) != 0 ) + { + strcpy(ptr->destaddr,msigaddr); + printf("ALICETX (%s) -> %s\n",ptr->txbytes,ptr->destaddr); + } } return(ptr); } @@ -336,7 +346,7 @@ cJSON *BOB_reclaimfunc(struct supernet_info *myinfo,struct exchange_info *exchan { *serdatap = 0, *serdatalenp = 0; if ( swap->deposit != 0 ) - printf("reclaim deposit.(%s) to %s\n",swap->deposit->txbytes,myinfo->myaddr.BTC); + printf("reclaim deposit.(%s) to %s\n",swap->deposit->txbytes,swap->deposit->destaddr); strcpy(swap->waitfortx,"bre"); // reclaim deposit return(newjson); @@ -346,7 +356,7 @@ cJSON *BOB_feereclaimfunc(struct supernet_info *myinfo,struct exchange_info *exc { *serdatap = 0, *serdatalenp = 0; if ( swap->myfee != 0 ) - printf("reclaim fee.(%s)\n",swap->myfee->txbytes); + printf("reclaim fee.(%s) -> %s\n",swap->myfee->txbytes,swap->myfee->destaddr); strcpy(swap->waitfortx,"bfr"); // reclaim deposit return(newjson); @@ -354,9 +364,9 @@ cJSON *BOB_feereclaimfunc(struct supernet_info *myinfo,struct exchange_info *exc cJSON *BOB_claimaltfunc(struct supernet_info *myinfo,struct exchange_info *exchange,struct bitcoin_swapinfo *swap,cJSON *argjson,cJSON *newjson,uint8_t **serdatap,int32_t *serdatalenp) { - *serdatap = 0, *serdatalenp = 0; char altcoinaddr[64]; - if ( swap->altpayment != 0 ) - printf("spend altpayment.(%s) -> %s\n",swap->altpayment->txbytes,altcoinaddr); + *serdatap = 0, *serdatalenp = 0; + if ( 0 && swap->altpayment != 0 ) + printf("spend altpayment.(%s) -> %s\n",swap->altpayment->txbytes,swap->altpayment->destaddr); strcpy(swap->waitfortx,"bcl"); // spend altpayment return(newjson); @@ -364,10 +374,10 @@ cJSON *BOB_claimaltfunc(struct supernet_info *myinfo,struct exchange_info *excha cJSON *ALICE_reclaimfunc(struct supernet_info *myinfo,struct exchange_info *exchange,struct bitcoin_swapinfo *swap,cJSON *argjson,cJSON *newjson,uint8_t **serdatap,int32_t *serdatalenp) { - *serdatap = 0, *serdatalenp = 0; char altcoinaddr[64]; + *serdatap = 0, *serdatalenp = 0; // reclaim altpayment if ( swap->altpayment != 0 ) - printf("reclaim altpayment.(%s) -> %s\n",swap->altpayment->txbytes,altcoinaddr); + printf("reclaim altpayment.(%s) -> %s\n",swap->altpayment->txbytes,swap->altpayment->destaddr); strcpy(swap->waitfortx,"are"); return(newjson); } @@ -377,7 +387,7 @@ cJSON *ALICE_feereclaimfunc(struct supernet_info *myinfo,struct exchange_info *e *serdatap = 0, *serdatalenp = 0; // reclaim fee if ( swap->myfee != 0 ) - printf("reclaim fee.(%s)\n",swap->myfee->txbytes); + printf("reclaim fee.(%s) -> %s\n",swap->myfee->txbytes,swap->myfee->destaddr); strcpy(swap->waitfortx,"afr"); return(newjson); } @@ -386,7 +396,7 @@ cJSON *ALICE_claimdepositfunc(struct supernet_info *myinfo,struct exchange_info { *serdatap = 0, *serdatalenp = 0; if ( swap->deposit != 0 ) - printf("reclaim deposit.(%s)\n",swap->deposit->txbytes); + printf("reclaim deposit.(%s) -> %s\n",swap->deposit->txbytes,swap->deposit->destaddr); strcpy(swap->waitfortx,"adp"); // reclaim deposit return(newjson); @@ -396,7 +406,7 @@ cJSON *ALICE_claimbtcfunc(struct supernet_info *myinfo,struct exchange_info *exc { *serdatap = 0, *serdatalenp = 0; if ( swap->payment != 0 ) - printf("spend BTC payment.(%s) -> %s\n",swap->payment->txbytes,myinfo->myaddr.BTC); + printf("spend BTC payment.(%s) -> %s\n",swap->payment->txbytes,swap->payment->destaddr); strcpy(swap->waitfortx,"acl"); // spend BTC return(newjson); @@ -605,7 +615,7 @@ cJSON *instantdex_parseargjson(struct supernet_info *myinfo,struct exchange_info swap->otherverifiedcut = 1; if ( juint(argjson,"have") != 0 ) swap->otherhavestate |= juint(argjson,"have"); - printf("got other.%x myhave.%x\n",swap->otherhavestate,swap->havestate); + //printf("got other.%x myhave.%x\n",swap->otherhavestate,swap->havestate); jaddnum(newjson,"verified",swap->otherverifiedcut); if ( instantdex_pubkeyargs(myinfo,swap,newjson,2 + deckflag*INSTANTDEX_DECKSIZE,myinfo->persistent_priv,swap->myorderhash,0x02+instantdex_isbob(swap)) == 2 + deckflag*INSTANTDEX_DECKSIZE ) instantdex_getpubs(swap,argjson,newjson); @@ -700,7 +710,7 @@ cJSON *BOB_waitprivMfunc(struct supernet_info *myinfo,struct exchange_info *exch cJSON *BOB_waitaltconfirmfunc(struct supernet_info *myinfo,struct exchange_info *exchange,struct bitcoin_swapinfo *swap,cJSON *argjson,cJSON *newjson,uint8_t **serdatap,int32_t *serdatalenp) { - char *retstr; struct iguana_info *altcoin; //uint32_t reftime; + char *retstr; struct iguana_info *altcoin; altcoin = iguana_coinfind(swap->mine.offer.base); *serdatap = 0, *serdatalenp = 0; strcpy(swap->waitfortx,"alt"); @@ -745,7 +755,7 @@ cJSON *ALICE_waitdepositfunc(struct supernet_info *myinfo,struct exchange_info * altcoin = iguana_coinfind(swap->mine.offer.base); strcpy(swap->waitfortx,"dep"); *serdatap = 0, *serdatalenp = 0; - if ( swap->deposit != 0 && (retstr= BTC_txconfirmed(myinfo,coinbtc,swap,newjson,swap->deposit->txid,&swap->deposit->numconfirms,"depfound",0.5)) != 0 ) + if ( altcoin != 0 && coinbtc != 0 && swap->deposit != 0 && (retstr= BTC_txconfirmed(myinfo,coinbtc,swap,newjson,swap->deposit->txid,&swap->deposit->numconfirms,"depfound",0.5)) != 0 ) { free(retstr); if ( instantdex_paymentverify(myinfo,coinbtc,swap,argjson,1) < 0 ) @@ -1109,7 +1119,7 @@ char *instantdex_statemachine(struct instantdex_stateinfo *states,int32_t numsta { jaddbits256(newjson,"altpaymenttxid",swap->altpayment->txid); jaddstr(newjson,"altpayment",swap->altpayment->txbytes); - printf("add altpayment have.%x\n",swap->havestate); + printf("add altpayment.(%s) have.%x\n",swap->altpayment->txbytes,swap->havestate); } } else @@ -1118,13 +1128,13 @@ char *instantdex_statemachine(struct instantdex_stateinfo *states,int32_t numsta { jaddbits256(newjson,"deposittxid",swap->deposit->txid); jaddstr(newjson,"deposit",swap->deposit->txbytes); - printf("add deposit have.%x\n",swap->havestate); + printf("add deposit.(%s) have.%x\n",swap->deposit->txbytes,swap->havestate); } else if ( (swap->otherhavestate & INSTANTDEX_ORDERSTATE_HAVEPAYMENT) == 0 && swap->payment != 0 ) { jaddbits256(newjson,"paymenttxid",swap->payment->txid); jaddstr(newjson,"payment",swap->payment->txbytes); - printf("add payment have.%x\n",swap->havestate); + printf("add payment.(%s) have.%x\n",swap->payment->txbytes,swap->havestate); } } jaddnum(newjson,"have",swap->havestate); @@ -1149,7 +1159,7 @@ void instantdex_statemachine_iter(struct supernet_info *myinfo,struct exchange_i //printf("state(%s) %llx/%llx\n",swap->state->name,(long long)swap->mine.orderid,(long long)swap->other.orderid); while ( (ptr= queue_dequeue(&swap->eventsQ,0)) != 0 ) { - printf("dequeued (%s)\n",ptr->cmd); + //printf("dequeued (%s)\n",ptr->cmd); if ( (str= instantdex_statemachine(BTC_states,BTC_numstates,myinfo,exchange,swap,ptr->cmd,ptr->argjson,ptr->newjson,ptr->serdata,ptr->serdatalen)) != 0 ) free(str); instantdex_eventfree(ptr);