jl777 8 years ago
parent
commit
992ded915b
  1. 6
      iguana/dPoW.h
  2. 10
      iguana/dpow/dpow_network.c
  3. 30
      iguana/dpow/dpow_tx.c

6
iguana/dPoW.h

@ -66,7 +66,7 @@ struct dpow_entry
int32_t height; int32_t height;
uint16_t ratifysrcvout,ratifydestvout; uint16_t ratifysrcvout,ratifydestvout;
int8_t bestk,ratifybestk; 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; struct dpow_coinentry src,dest;
}; };
@ -97,13 +97,13 @@ struct dpow_block
bits256 hashmsg,desttxid,srctxid,beacon,commit; bits256 hashmsg,desttxid,srctxid,beacon,commit;
struct iguana_info *srccoin,*destcoin; char *opret_symbol; struct iguana_info *srccoin,*destcoin; char *opret_symbol;
uint64_t destsigsmasks[DPOW_MAXRELAYS],srcsigsmasks[DPOW_MAXRELAYS]; 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]; struct dpow_entry notaries[DPOW_MAXRELAYS];
uint32_t state,starttime,timestamp,waiting,sigcrcs[2],txidcrcs[2],utxocrcs[2]; 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]; int32_t height,numnotaries,completed,minsigs,duration,numratified,isratify,require0,scores[DPOW_MAXRELAYS];
int8_t bestk,ratifybestk,pendingbestk,pendingratifybestk; int8_t bestk,ratifybestk,pendingbestk,pendingratifybestk;
cJSON *ratified; 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 handles[DPOW_MAXRELAYS][32];
char signedtx[32768];//,rawtx[32768]; char signedtx[32768];//,rawtx[32768];
}; };

10
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++) 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]); memcpy(bp->notaries[senderind].ratifysigs[i][bestk],sigs[i],siglens[i]);
if ( bestk == bp->pendingratifybestk && bestmask == bp->pendingratifybestmask ) //if ( bestk == bp->pendingratifybestk && bestmask == bp->pendingratifybestmask )
bp->ratifysigmasks[i] |= (1LL << senderind); bp->ratifysigmasks[i][bestk] |= (1LL << senderind);
else bp->ratifysigmasks[i] &= ~(1LL << senderind); //else bp->ratifysigmasks[i][bestk] &= ~(1LL << senderind);
} }
} }
} }

30
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; j<bp->numnotaries; j++) for (j=m=0; j<bp->numnotaries; j++)
{ {
k = j;//DPOW_MODIND(bp,j); k = j;//DPOW_MODIND(bp,j);
siglen = 0;
sig = 0;
if ( ((1LL << k) & bestmask) != 0 ) if ( ((1LL << k) & bestmask) != 0 )
{ {
if ( pubkeys != 0 && numratified > 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; txid = bp->notaries[k].ratifysrcutxo;
vout = bp->notaries[k].ratifysrcvout; vout = bp->notaries[k].ratifysrcvout;
} }
siglen = bp->notaries[k].ratifysiglens[src_or_dest]; if ( bestk >= 0 )
sig = bp->notaries[k].ratifysigs[src_or_dest]; {
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); //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 else
@ -265,12 +270,15 @@ bits256 dpow_notarytx(char *signedtx,int32_t *numsigsp,int32_t isPoS,struct dpow
} }
txid = cp->prev_hash; txid = cp->prev_hash;
vout = cp->prev_vout; vout = cp->prev_vout;
siglen = cp->siglens[bestk]; if ( bestk >= 0 )
sig = cp->sigs[bestk]; {
siglen = cp->siglens[bestk];
sig = cp->sigs[bestk];
}
} }
len += iguana_rwbignum(1,&serialized[len],sizeof(txid),txid.bytes); len += iguana_rwbignum(1,&serialized[len],sizeof(txid),txid.bytes);
len += iguana_rwnum(1,&serialized[len],sizeof(vout),&vout); 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); len += iguana_rwvarint32(1,&serialized[len],(uint32_t *)&siglen);
if ( siglen > 0 && siglen <= sizeof(cp->sigs[bestk]) ) 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); item = jitem(vin,j);
if ( (sobj= jobj(item,"scriptSig")) != 0 && (sigstr= jstr(sobj,"hex")) != 0 && strlen(sigstr) > 32 ) if ( (sobj= jobj(item,"scriptSig")) != 0 && (sigstr= jstr(sobj,"hex")) != 0 && strlen(sigstr) > 32 )
{ {
bp->ratifysiglens[src_or_dest] = (int32_t)strlen(sigstr) >> 1; bp->ratifysiglens[src_or_dest][bestk] = (int32_t)strlen(sigstr) >> 1;
decode_hex(bp->ratifysigs[src_or_dest],bp->ratifysiglens[src_or_dest],sigstr); decode_hex(bp->ratifysigs[src_or_dest][bestk],bp->ratifysiglens[src_or_dest][bestk],sigstr);
bp->notaries[bp->myind].ratifysiglens[src_or_dest] = bp->ratifysiglens[src_or_dest]; bp->notaries[bp->myind].ratifysiglens[src_or_dest][bestk] = bp->ratifysiglens[src_or_dest][bestk];
memcpy(bp->notaries[bp->myind].ratifysigs[src_or_dest],bp->ratifysigs[src_or_dest],bp->ratifysiglens[src_or_dest]); 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] |= (1LL << bp->myind); 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]); printf("RATIFYSIG[%d] <- set notaryid.%d siglen.%d\n",src_or_dest,bp->myind,bp->ratifysiglens[src_or_dest][bestk]);
break; break;
} }
} }

Loading…
Cancel
Save