From 973fa0bbe767d11cf3217e55c88cd1a121d1a1be Mon Sep 17 00:00:00 2001 From: jl777 Date: Sat, 4 Mar 2017 23:26:00 +0200 Subject: [PATCH] Test --- basilisk/basilisk_MSG.c | 12 +++++++++ basilisk/basilisk_swap.c | 51 +++++++++++++++++++++++++++++--------- basilisk/jumblr.c | 2 +- iguana/dPoW.h | 2 ++ iguana/dpow/dpow_network.c | 26 ++++++++++++++++--- iguana/main.c | 2 +- 6 files changed, 77 insertions(+), 18 deletions(-) diff --git a/basilisk/basilisk_MSG.c b/basilisk/basilisk_MSG.c index 156cbef3d..4f7ccc9ab 100755 --- a/basilisk/basilisk_MSG.c +++ b/basilisk/basilisk_MSG.c @@ -263,6 +263,18 @@ char *basilisk_respond_MSG(struct supernet_info *myinfo,char *CMD,void *addr,cha return(retstr); } +cJSON *dpow_getmessage(struct supernet_info *myinfo,char *jsonstr) +{ + cJSON *valsobj,*retjson = 0; char *retstr; + if ( (valsobj= cJSON_Parse(jsonstr)) != 0 ) + { + retstr = basilisk_iterate_MSG(myinfo,juint(valsobj,"channel"),juint(valsobj,"msgid"),jbits256(valsobj,"srchash"),jbits256(valsobj,"desthash"),juint(valsobj,"width")); + retjson = cJSON_Parse(retstr); + free(retstr); + } + return(retjson); +} + #include "../includes/iguana_apidefs.h" #include "../includes/iguana_apideclares.h" diff --git a/basilisk/basilisk_swap.c b/basilisk/basilisk_swap.c index 67bd43ae6..c94fa93d7 100755 --- a/basilisk/basilisk_swap.c +++ b/basilisk/basilisk_swap.c @@ -414,7 +414,7 @@ int32_t basilisk_verify_otherfee(struct supernet_info *myinfo,void *ptr,uint8_t return(0); } -int32_t basilisk_rawtx_spendscript(struct supernet_info *myinfo,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 basilisk_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 datalen=0,retval=-1,hexlen,n; uint8_t *data; cJSON *txobj,*skey,*vouts,*vout; char *hexstr; datalen = recvbuf[0]; @@ -495,7 +495,7 @@ int32_t basilisk_swapuserdata(struct basilisk_swap *swap,uint8_t *userdata,bits2 int32_t basilisk_verify_bobdeposit(struct supernet_info *myinfo,void *ptr,uint8_t *data,int32_t datalen) { uint8_t userdata[512]; int32_t i,retval,len = 0; static bits256 zero; struct basilisk_swap *swap = ptr; - if ( basilisk_rawtx_spendscript(&swap->myinfo,swap,swap->bobcoin->blocks.hwmchain.height,&swap->bobdeposit,0,data,datalen,0) == 0 ) + if ( basilisk_rawtx_spendscript(swap,swap->bobcoin->blocks.hwmchain.height,&swap->bobdeposit,0,data,datalen,0) == 0 ) { len = basilisk_swapuserdata(swap,userdata,zero,1,swap->I.myprivs[0],swap->bobdeposit.redeemscript,swap->bobdeposit.I.redeemlen); if ( (retval= basilisk_rawtx_sign(&swap->myinfo,swap->bobcoin->blocks.hwmchain.height,swap,&swap->aliceclaim,&swap->bobdeposit,swap->I.myprivs[0],0,userdata,len,1)) == 0 ) @@ -556,7 +556,7 @@ int32_t basilisk_verify_bobpaid(struct supernet_info *myinfo,void *ptr,uint8_t * { uint8_t userdata[512]; int32_t i,retval,len = 0; bits256 revAm; struct basilisk_swap *swap = ptr; memset(revAm.bytes,0,sizeof(revAm)); - if ( basilisk_rawtx_spendscript(&swap->myinfo,swap,swap->bobcoin->blocks.hwmchain.height,&swap->bobpayment,0,data,datalen,0) == 0 ) + if ( basilisk_rawtx_spendscript(swap,swap->bobcoin->blocks.hwmchain.height,&swap->bobpayment,0,data,datalen,0) == 0 ) { for (i=0; i<32; i++) revAm.bytes[i] = swap->I.privAm.bytes[31-i]; @@ -598,7 +598,7 @@ int32_t basilisk_alicepayment_spend(struct supernet_info *myinfo,struct basilisk int32_t basilisk_verify_alicepaid(struct supernet_info *myinfo,void *ptr,uint8_t *data,int32_t datalen) { struct basilisk_swap *swap = ptr; - if ( basilisk_rawtx_spendscript(&swap->myinfo,swap,swap->alicecoin->blocks.hwmchain.height,&swap->alicepayment,0,data,datalen,0) == 0 ) + if ( basilisk_rawtx_spendscript(swap,swap->alicecoin->blocks.hwmchain.height,&swap->alicepayment,0,data,datalen,0) == 0 ) return(0); else return(-1); } @@ -881,16 +881,43 @@ int32_t basilisk_process_swapverify(struct supernet_info *myinfo,void *ptr,int32 int32_t basilisk_swapget(struct supernet_info *myinfo,struct basilisk_swap *swap,uint32_t msgbits,uint8_t *data,int32_t maxlen,int32_t (*basilisk_verify_func)(struct supernet_info *myinfo,void *ptr,uint8_t *data,int32_t datalen)) { - int32_t datalen; uint32_t crc; - if ( (crc= basilisk_crcrecv(&swap->myinfo,0,swap->verifybuf,sizeof(swap->verifybuf),&datalen,swap->I.otherhash,swap->I.myhash,swap->I.req.quoteid,msgbits)) != 0 ) - { - if ( datalen > 0 && datalen < maxlen ) + cJSON *valsobj,*array,*item; int32_t i,n,datalen,retval = -1; char *retstr,*hexstr=0; + //int32_t datalen; uint32_t crc; + //if ( (crc= basilisk_crcrecv(&swap->myinfo,0,swap->verifybuf,sizeof(swap->verifybuf),&datalen,swap->I.otherhash,swap->I.myhash,swap->I.req.quoteid,msgbits)) != 0 ) + valsobj = cJSON_CreateObject(); + jaddnum(valsobj,"channel",swap->I.req.quoteid); + jaddnum(valsobj,"msgid",msgbits); + jaddbits256(valsobj,"srchash",swap->I.otherhash); + jaddbits256(valsobj,"desthash",swap->I.myhash); + jaddnum(valsobj,"width",0); + if ( (retstr= _dex_getmessage(myinfo,jprint(valsobj,1))) != 0 ) + { + if ( (array= cJSON_Parse(retstr)) != 0 ) { - memcpy(data,swap->verifybuf,datalen); - return((*basilisk_verify_func)(&swap->myinfo,swap,data,datalen)); + if ( (n= cJSON_GetArraySize(array)) > 0 ) + { + for (i=0; i> 1; + if ( datalen > 0 && datalen < maxlen ) + { + decode_hex(data,datalen,hexstr); + if ( (retval= (*basilisk_verify_func)(&swap->myinfo,swap,data,datalen)) == 0 ) + { + break; + } + } + } + } + } + free_json(array); } + free(retstr); } - return(-1); + return(retval); } uint32_t basilisk_swapsend(struct supernet_info *myinfo,struct basilisk_swap *swap,uint32_t msgbits,uint8_t *data,int32_t datalen,uint32_t nextbits,uint32_t crcs[2]) @@ -1949,7 +1976,7 @@ struct basilisk_swap *basilisk_thread_start(struct supernet_info *myinfo,bits256 swap = calloc(1,sizeof(*swap)); vcalc_sha256(0,swap->I.orderhash.bytes,(uint8_t *)rp,sizeof(*rp)); swap->I.req = *rp; - //swap->myinfo = myinfo; + swap->myinfo = *myinfo; swap->myinfo.ctx = myinfo->ctx; bitcoin_pubkey33(myinfo->ctx,pubkey33,privkey); pubkey25519 = curve25519(privkey,curve25519_basepoint9()); diff --git a/basilisk/jumblr.c b/basilisk/jumblr.c index 2530a51b4..e1ffb7f58 100755 --- a/basilisk/jumblr.c +++ b/basilisk/jumblr.c @@ -413,7 +413,7 @@ void jumblr_iteration(struct supernet_info *myinfo,struct iguana_info *coin,int3 } fee = JUMBLR_INCR * JUMBLR_FEE; OS_randombytes(&r,sizeof(r)); -r = 0; +//r = 0; if ( strcmp(coin->symbol,"KMD") == 0 && coin->FULLNODE < 0 ) { //printf("JUMBLR selector.%d modval.%d r.%d\n",selector,modval,r&7); diff --git a/iguana/dPoW.h b/iguana/dPoW.h index e6e8f9d80..7ddef6ce3 100755 --- a/iguana/dPoW.h +++ b/iguana/dPoW.h @@ -167,6 +167,7 @@ char *dpow_alladdresses(struct supernet_info *myinfo,struct iguana_info *coin); cJSON *dpow_kvupdate(struct supernet_info *myinfo,struct iguana_info *coin,char *key,char *value,int32_t flags); cJSON *dpow_kvsearch(struct supernet_info *myinfo,struct iguana_info *coin,char *key); void init_alladdresses(struct supernet_info *myinfo,struct iguana_info *coin); +cJSON *dpow_getmessage(struct supernet_info *myinfo,char *jsonstr); char *_dex_getinfo(struct supernet_info *myinfo,char *symbol); char *_dex_getrawtransaction(struct supernet_info *myinfo,char *symbol,bits256 txid); @@ -178,6 +179,7 @@ char *_dex_gettxout(struct supernet_info *myinfo,char *symbol,bits256 txid,int32 char *_dex_gettxin(struct supernet_info *myinfo,char *symbol,bits256 txid,int32_t vout); char *_dex_importaddress(struct supernet_info *myinfo,char *symbol,char *address); char *_dex_validateaddress(struct supernet_info *myinfo,char *symbol,char *address); +char *_dex_getmessage(struct supernet_info *myinfo,char *jsonstr); char *_dex_listunspent(struct supernet_info *myinfo,char *symbol,char *address); char *_dex_listunspent2(struct supernet_info *myinfo,char *symbol,char *address); char *_dex_listspent(struct supernet_info *myinfo,char *symbol,char *address); diff --git a/iguana/dpow/dpow_network.c b/iguana/dpow/dpow_network.c index d68b36283..87985e7d3 100755 --- a/iguana/dpow/dpow_network.c +++ b/iguana/dpow/dpow_network.c @@ -416,14 +416,14 @@ char *_dex_reqsend(struct supernet_info *myinfo,char *handler,uint8_t *key,int32 printf("%d: subscribe connect (%s)\n",myinfo->numdexipbits,str); } } -//#ifndef __APPLE__ +#ifndef __APPLE__ if ( (rand() % 100) < 40 ) { nanomsg_tcpname(0,str,ipaddr,REP_SOCK); nn_connect(myinfo->reqsock,str); printf("%d: req connect (%s)\n",myinfo->numdexipbits,str); } -//#endif +#endif } } if ( freeptr != 0 ) @@ -644,6 +644,14 @@ char *dex_response(int32_t *broadcastflagp,struct supernet_info *myinfo,struct d retstr = jprint(retjson,1); } } + else if ( dexreq.func == 'M' ) + { + if ( (retjson= dpow_getmessage(myinfo,(char *)&dexp->packet[datalen])) != 0 ) + { + dpow_randipbits(myinfo,coin,retjson); + retstr = jprint(retjson,1); + } + } else if ( dexreq.func == 'N' ) { uint8_t pubkeys[64][33]; char str[128]; int32_t numnotaries; cJSON *array,*item; @@ -993,6 +1001,15 @@ char *_dex_validateaddress(struct supernet_info *myinfo,char *symbol,char *addre return(_dex_sendrequeststr(myinfo,&dexreq,address,0,1,"")); } +char *_dex_getmessage(struct supernet_info *myinfo,char *jsonstr) +{ + struct dex_request dexreq; + memset(&dexreq,0,sizeof(dexreq)); + safecopy(dexreq.name,"KMD",sizeof(dexreq.name)); + dexreq.func = 'M'; + return(_dex_sendrequeststr(myinfo,&dexreq,jsonstr,0,1,"")); +} + char *_dex_listunspentarg(struct supernet_info *myinfo,char *symbol,char *address,uint8_t arg) { struct dex_request dexreq; char *retstr; @@ -1992,8 +2009,9 @@ int32_t dpow_nanomsg_update(struct supernet_info *myinfo) free(retstr); if ( broadcastflag != 0 ) { - //printf("BROADCAST dexp request.[%d]\n",size); + printf("BROADCAST dexp request.[%d]\n",size); signed_nn_send(myinfo,myinfo->ctx,myinfo->persistent_priv,myinfo->dexsock,dexp,size); + signed_nn_send(myinfo,myinfo->ctx,myinfo->persistent_priv,myinfo->pubsock,dexp,size); } } else @@ -2007,7 +2025,7 @@ int32_t dpow_nanomsg_update(struct supernet_info *myinfo) if ( dex_packetcheck(myinfo,dexp,size) == 0 ) { signed_nn_send(myinfo,myinfo->ctx,myinfo->persistent_priv,myinfo->dexsock,dexp,size); - signed_nn_send(myinfo,myinfo->ctx,myinfo->persistent_priv,myinfo->pubsock,dexp,size); + //signed_nn_send(myinfo,myinfo->ctx,myinfo->persistent_priv,myinfo->pubsock,dexp,size); //printf("REP.%08x -> dexbus and pub, t.%d lag.%d\n",dexp->crc32,dexp->timestamp,(int32_t)(time(NULL)-dexp->timestamp)); dex_packet(myinfo,dexp,size); } //else printf("failed dexpacketcheck\n"); diff --git a/iguana/main.c b/iguana/main.c index 55ca8824c..986764423 100755 --- a/iguana/main.c +++ b/iguana/main.c @@ -747,7 +747,7 @@ void iguana_urlinit(struct supernet_info *myinfo,int32_t ismainnet,int32_t usess void jumblr_loop(void *ptr) { - struct iguana_info *coin; uint32_t t; struct supernet_info *myinfo = ptr; int32_t mult = 1; + struct iguana_info *coin; uint32_t t; struct supernet_info *myinfo = ptr; int32_t mult = 10; printf("JUMBLR loop\n"); while ( 1 ) {