diff --git a/iguana/iguana_notary.c b/iguana/iguana_notary.c index 62270a974..a9d2987c4 100755 --- a/iguana/iguana_notary.c +++ b/iguana/iguana_notary.c @@ -90,15 +90,24 @@ int32_t dpow_rwopret(int32_t rwflag,uint8_t *opret,bits256 *hashmsg,int32_t *hei return(opretlen); } -int32_t dpow_rwutxobuf(int32_t rwflag,uint8_t *data,bits256 *hashmsg,bits256 *txid,int32_t *voutp,bits256 *commit) +int32_t dpow_rwutxobuf(int32_t rwflag,uint8_t *data,bits256 *hashmsg,bits256 *txid,int32_t *voutp,bits256 *commit,uint8_t *senderpub) { - int32_t len = 0; + int32_t i,len = 0; len += iguana_rwbignum(rwflag,&data[len],sizeof(*hashmsg),hashmsg->bytes); len += iguana_rwbignum(rwflag,&data[len],sizeof(*txid),txid->bytes); len += iguana_rwbignum(rwflag,&data[len],sizeof(*commit),commit->bytes); if ( rwflag != 0 ) + { data[len++] = *voutp; - else *voutp = data[len++]; + for (i=0; i<33; i++) + data[len++] = senderpub[i]; + } + else + { + *voutp = data[len++]; + for (i=0; i<33; i++) + senderpub[i] = data[len++]; + } return(len); } @@ -503,7 +512,7 @@ int32_t dpow_haveutxo(struct supernet_info *myinfo,struct iguana_info *coin,bits return(haveutxo); } -int32_t dpow_message_utxo(bits256 *hashmsgp,bits256 *txidp,int32_t *voutp,bits256 *commitp,cJSON *json) +int32_t dpow_message_utxo(uint8_t *senderpub,bits256 *hashmsgp,bits256 *txidp,int32_t *voutp,bits256 *commitp,cJSON *json) { cJSON *msgobj,*item; uint8_t key[BASILISK_KEYSIZE],data[512]; char *keystr,*hexstr,str[65],str2[65]; int32_t i,n,datalen,retval = -1; *voutp = -1; @@ -519,7 +528,7 @@ int32_t dpow_message_utxo(bits256 *hashmsgp,bits256 *txidp,int32_t *voutp,bits25 decode_hex(key,BASILISK_KEYSIZE,keystr); datalen >>= 1; decode_hex(data,datalen,hexstr); - retval = dpow_rwutxobuf(0,data,hashmsgp,txidp,voutp,commitp); + retval = dpow_rwutxobuf(0,data,hashmsgp,txidp,voutp,commitp,senderpub); printf("notary.%d hashmsg.(%s) txid.(%s) v%d\n",i,bits256_str(str,*hashmsgp),bits256_str(str2,*txidp),*voutp); } } @@ -774,42 +783,44 @@ int32_t dpow_mostsignedtx(struct supernet_info *myinfo,struct dpow_info *dp,stru void dpow_txidupdate(struct supernet_info *myinfo,struct dpow_info *dp,struct iguana_info *coin,uint64_t *recvmaskp,uint32_t channel,int32_t height,struct dpow_entry notaries[DPOW_MAXRELAYS],int32_t numnotaries,int32_t myind,bits256 hashmsg) { - int32_t i,j,k,m,vout; cJSON *item,*retarray; bits256 desthash,commit,srchash,checkmsg,txid; + int32_t j,k,m,vout,flag; cJSON *item,*retarray; uint8_t senderpub[33]; bits256 desthash,commit,srchash,checkmsg,txid; for (j=0; jDPOW.minerkey33[j+1]; - for (i=0; iDPOW.minerkey33[j+1]; + if ( (retarray= basilisk_channelget(myinfo,srchash,desthash,channel,height,0)) != 0 ) { - //if ( (*recvmaskp & (1LL << i)) != 0 ) - // continue; - for (j=0; j 0 ) { - item = jitem(retarray,k); - if ( dpow_message_utxo(&checkmsg,&txid,&vout,&commit,item) > 0 ) + if ( bits256_cmp(checkmsg,hashmsg) == 0 ) { - if ( bits256_cmp(checkmsg,hashmsg) == 0 ) + for (j=0; j= 0 && vout < 0x100 ) { - len = dpow_rwutxobuf(1,data,&hashmsg,&txid,&vout,&commit); + len = dpow_rwutxobuf(1,data,&hashmsg,&txid,&vout,&commit,myinfo->DPOW.minerkey33); for (i=0; i