From 992ded915b6f9eac72ff120a99d73adde7b459f6 Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 14 Nov 2016 17:45:28 -0300 Subject: [PATCH] test --- iguana/dPoW.h | 6 +++--- iguana/dpow/dpow_network.c | 10 +++++----- iguana/dpow/dpow_tx.c | 30 +++++++++++++++++++----------- 3 files changed, 27 insertions(+), 19 deletions(-) diff --git a/iguana/dPoW.h b/iguana/dPoW.h index a740bb564..31914d3ea 100755 --- a/iguana/dPoW.h +++ b/iguana/dPoW.h @@ -66,7 +66,7 @@ struct dpow_entry int32_t height; uint16_t ratifysrcvout,ratifydestvout; int8_t bestk,ratifybestk; - uint8_t pubkey[33],ratifysigs[2][76],ratifysiglens[2]; + uint8_t pubkey[33],ratifysigs[2][DPOW_MAXRELAYS][76],ratifysiglens[2][DPOW_MAXRELAYS]; struct dpow_coinentry src,dest; }; @@ -97,13 +97,13 @@ struct dpow_block bits256 hashmsg,desttxid,srctxid,beacon,commit; struct iguana_info *srccoin,*destcoin; char *opret_symbol; uint64_t destsigsmasks[DPOW_MAXRELAYS],srcsigsmasks[DPOW_MAXRELAYS]; - uint64_t recvmask,bestmask,ratifybestmask,ratifyrecvmask,pendingbestmask,pendingratifybestmask,ratifysigmasks[2]; + uint64_t recvmask,bestmask,ratifybestmask,ratifyrecvmask,pendingbestmask,pendingratifybestmask,ratifysigmasks[2][DPOW_MAXRELAYS]; struct dpow_entry notaries[DPOW_MAXRELAYS]; uint32_t state,starttime,timestamp,waiting,sigcrcs[2],txidcrcs[2],utxocrcs[2]; int32_t height,numnotaries,completed,minsigs,duration,numratified,isratify,require0,scores[DPOW_MAXRELAYS]; int8_t bestk,ratifybestk,pendingbestk,pendingratifybestk; cJSON *ratified; - uint8_t myind,ratified_pubkeys[DPOW_MAXRELAYS][33],ratifysigs[2][76],ratifysiglens[2]; + uint8_t myind,ratified_pubkeys[DPOW_MAXRELAYS][33],ratifysigs[2][DPOW_MAXRELAYS][76],ratifysiglens[2][DPOW_MAXRELAYS]; char handles[DPOW_MAXRELAYS][32]; char signedtx[32768];//,rawtx[32768]; }; diff --git a/iguana/dpow/dpow_network.c b/iguana/dpow/dpow_network.c index bd19ee73c..7ffc86b79 100755 --- a/iguana/dpow/dpow_network.c +++ b/iguana/dpow/dpow_network.c @@ -199,12 +199,12 @@ void dpow_ratify_update(struct supernet_info *myinfo,struct dpow_info *dp,struct { for (i=0; i<2; i++) { - if ( (bp->notaries[senderind].ratifysiglens[i]= siglens[i]) != 0 ) + if ( (bp->notaries[senderind].ratifysiglens[i][bestk]= siglens[i]) != 0 ) { - memcpy(bp->notaries[senderind].ratifysigs[i],sigs[i],siglens[i]); - if ( bestk == bp->pendingratifybestk && bestmask == bp->pendingratifybestmask ) - bp->ratifysigmasks[i] |= (1LL << senderind); - else bp->ratifysigmasks[i] &= ~(1LL << senderind); + memcpy(bp->notaries[senderind].ratifysigs[i][bestk],sigs[i],siglens[i]); + //if ( bestk == bp->pendingratifybestk && bestmask == bp->pendingratifybestmask ) + bp->ratifysigmasks[i][bestk] |= (1LL << senderind); + //else bp->ratifysigmasks[i][bestk] &= ~(1LL << senderind); } } } diff --git a/iguana/dpow/dpow_tx.c b/iguana/dpow/dpow_tx.c index 4a86d38cd..f2862a70f 100755 --- a/iguana/dpow/dpow_tx.c +++ b/iguana/dpow/dpow_tx.c @@ -236,6 +236,8 @@ bits256 dpow_notarytx(char *signedtx,int32_t *numsigsp,int32_t isPoS,struct dpow for (j=m=0; jnumnotaries; j++) { k = j;//DPOW_MODIND(bp,j); + siglen = 0; + sig = 0; if ( ((1LL << k) & bestmask) != 0 ) { if ( pubkeys != 0 && numratified > 0 ) @@ -250,8 +252,11 @@ bits256 dpow_notarytx(char *signedtx,int32_t *numsigsp,int32_t isPoS,struct dpow txid = bp->notaries[k].ratifysrcutxo; vout = bp->notaries[k].ratifysrcvout; } - siglen = bp->notaries[k].ratifysiglens[src_or_dest]; - sig = bp->notaries[k].ratifysigs[src_or_dest]; + if ( bestk >= 0 ) + { + siglen = bp->notaries[k].ratifysiglens[src_or_dest][bestk]; + sig = bp->notaries[k].ratifysigs[src_or_dest][bestk]; + } //char str[65]; printf("j.%d k.%d m.%d vin.(%s) v%d siglen.%d\n",j,k,m,bits256_str(str,txid),vout,siglen); } else @@ -265,12 +270,15 @@ bits256 dpow_notarytx(char *signedtx,int32_t *numsigsp,int32_t isPoS,struct dpow } txid = cp->prev_hash; vout = cp->prev_vout; - siglen = cp->siglens[bestk]; - sig = cp->sigs[bestk]; + if ( bestk >= 0 ) + { + siglen = cp->siglens[bestk]; + sig = cp->sigs[bestk]; + } } len += iguana_rwbignum(1,&serialized[len],sizeof(txid),txid.bytes); len += iguana_rwnum(1,&serialized[len],sizeof(vout),&vout); - if ( usesigs != 0 ) + if ( usesigs != 0 && bestk >= 0 ) { len += iguana_rwvarint32(1,&serialized[len],(uint32_t *)&siglen); if ( siglen > 0 && siglen <= sizeof(cp->sigs[bestk]) ) @@ -435,12 +443,12 @@ int32_t dpow_signedtxgen(struct supernet_info *myinfo,struct dpow_info *dp,struc item = jitem(vin,j); if ( (sobj= jobj(item,"scriptSig")) != 0 && (sigstr= jstr(sobj,"hex")) != 0 && strlen(sigstr) > 32 ) { - bp->ratifysiglens[src_or_dest] = (int32_t)strlen(sigstr) >> 1; - decode_hex(bp->ratifysigs[src_or_dest],bp->ratifysiglens[src_or_dest],sigstr); - bp->notaries[bp->myind].ratifysiglens[src_or_dest] = bp->ratifysiglens[src_or_dest]; - memcpy(bp->notaries[bp->myind].ratifysigs[src_or_dest],bp->ratifysigs[src_or_dest],bp->ratifysiglens[src_or_dest]); - bp->ratifysigmasks[src_or_dest] |= (1LL << bp->myind); - printf("RATIFYSIG[%d] <- set notaryid.%d siglen.%d\n",src_or_dest,bp->myind,bp->ratifysiglens[src_or_dest]); + bp->ratifysiglens[src_or_dest][bestk] = (int32_t)strlen(sigstr) >> 1; + decode_hex(bp->ratifysigs[src_or_dest][bestk],bp->ratifysiglens[src_or_dest][bestk],sigstr); + bp->notaries[bp->myind].ratifysiglens[src_or_dest][bestk] = bp->ratifysiglens[src_or_dest][bestk]; + memcpy(bp->notaries[bp->myind].ratifysigs[src_or_dest][bestk],bp->ratifysigs[src_or_dest][bestk],bp->ratifysiglens[src_or_dest][bestk]); + bp->ratifysigmasks[src_or_dest][bestk] |= (1LL << bp->myind); + printf("RATIFYSIG[%d] <- set notaryid.%d siglen.%d\n",src_or_dest,bp->myind,bp->ratifysiglens[src_or_dest][bestk]); break; } }