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;
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];
};

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++)
{
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);
}
}
}

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++)
{
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;
}
}

Loading…
Cancel
Save