diff --git a/src/komodo.h b/src/komodo.h index c47d51d26..aa88ad09d 100644 --- a/src/komodo.h +++ b/src/komodo.h @@ -213,7 +213,7 @@ int32_t komodo_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numno { if ( fread(&ht,1,sizeof(ht),fp) != sizeof(ht) ) errs++; - printf("func.(%d %c) ht.%d\n",func,func,height); + //printf("func.(%d %c) ht.%d\n",func,func,height); if ( func == 'P' ) { if ( (num= fgetc(fp)) < 64 ) @@ -223,7 +223,7 @@ int32_t komodo_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numno else printf("updated %d pubkeys\n",num); } else printf("illegal num.%d\n",num); - printf("P[%d]\n",num); + //printf("P[%d]\n",num); } else if ( func == 'N' ) { @@ -240,7 +240,7 @@ int32_t komodo_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numno uint8_t n,nid; uint256 hash; uint64_t mask; n = fgetc(fp); nid = fgetc(fp); - printf("U %d %d\n",n,nid); + //printf("U %d %d\n",n,nid); if ( fread(&mask,1,sizeof(mask),fp) != sizeof(mask) ) errs++; if ( fread(&hash,1,sizeof(hash),fp) != sizeof(hash) ) @@ -249,7 +249,7 @@ int32_t komodo_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numno } else if ( func == 'D' ) { - printf("D[%d]\n",ht); + //printf("D[%d]\n",ht); } else printf("illegal func.(%d %c)\n",func,func); } @@ -260,14 +260,15 @@ int32_t komodo_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numno { if ( height < 0 ) { - printf("func D[%d] errs.%d\n",height,errs); + height = -height; + //printf("func D[%d] errs.%d\n",height,errs); fputc('D',fp); if ( fwrite(&height,1,sizeof(height),fp) != sizeof(height) ) errs++; } - if ( notarypubs != 0 && numnotaries > 0 ) + else if ( notarypubs != 0 && numnotaries > 0 ) { - printf("func P[%d] errs.%d\n",numnotaries,errs); + //printf("func P[%d] errs.%d\n",numnotaries,errs); fputc('P',fp); if ( fwrite(&height,1,sizeof(height),fp) != sizeof(height) ) errs++; @@ -277,7 +278,7 @@ int32_t komodo_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numno } else if ( voutmask != 0 && numvouts > 0 ) { - printf("func U %d %d errs.%d hashsize.%ld\n",numvouts,notaryid,errs,sizeof(txhash)); + //printf("func U %d %d errs.%d hashsize.%ld\n",numvouts,notaryid,errs,sizeof(txhash)); fputc('U',fp); if ( fwrite(&height,1,sizeof(height),fp) != sizeof(height) ) errs++; @@ -290,7 +291,7 @@ int32_t komodo_stateupdate(int32_t height,uint8_t notarypubs[][33],uint8_t numno } else { - printf("func N ht.%d errs.%d\n",NOTARIZED_HEIGHT,errs); + //printf("func N ht.%d errs.%d\n",NOTARIZED_HEIGHT,errs); fputc('N',fp); if ( fwrite(&height,1,sizeof(height),fp) != sizeof(height) ) errs++; @@ -509,15 +510,16 @@ void komodo_connectblock(CBlockIndex *pindex,CBlock& block) void komodo_disconnect(CBlockIndex *pindex,CBlock& block) { - uint256 zero; - printf("disconnect ht.%d\n",pindex->nHeight); - memset(&zero,0,sizeof(zero)); - komodo_stateupdate(-pindex->nHeight,0,0,0,zero,0,0); + //uint256 zero; + //printf("disconnect ht.%d\n",pindex->nHeight); + //memset(&zero,0,sizeof(zero)); + //komodo_stateupdate(-pindex->nHeight,0,0,0,zero,0,0); } -void komodo_index2pubkey33(uint8_t *pubkey33,CBlockIndex *pindex) +int32_t komodo_heightnotary(int32_t height,uint8_t *pubkey33) { - + return(0); + // -1 if not notary, 0 if notary, 1 if special notary } void komodo_block2pubkey33(uint8_t *pubkey33,CBlock& block) @@ -527,6 +529,13 @@ void komodo_block2pubkey33(uint8_t *pubkey33,CBlock& block) memcpy(pubkey33,ptr+1,33); } +void komodo_index2pubkey33(uint8_t *pubkey33,CBlockIndex *pindex) +{ + CBlock block; + if ( ReadBlockFromDisk(block,(const CBlockIndex *)pindex) != 0 ) + komodo_block2pubkey33(pubkey33,block); +} + /*int32_t komodo_blockindexcheck(CBlockIndex *pindex,uint32_t *nBitsp) { // 1 -> valid notary block, change nBits to KOMODO_MINDIFF_NBITS diff --git a/src/pow.cpp b/src/pow.cpp index 7a8d2c96c..1ac28c73b 100644 --- a/src/pow.cpp +++ b/src/pow.cpp @@ -106,13 +106,24 @@ bool CheckEquihashSolution(const CBlockHeader *pblock, const CChainParams& param return true; } +int32_t komodo_heightnotary(int32_t height,uint8_t *pubkey33); + bool CheckProofOfWork(int32_t height,uint8_t *pubkey33,uint256 hash, unsigned int nBits, const Consensus::Params& params) { - bool fNegative; - bool fOverflow; + bool fNegative,fOverflow; int32_t special; arith_uint256 bnTarget; bnTarget.SetCompact(nBits, &fNegative, &fOverflow); + if ( (special= komodo_heightnotary(height,pubkey33)) != 0 ) + { + int32_t i; + for (i=0; i<33; i++) + fprintf(stderr,"%02x",pubkey33[i]); + fprintf(stderr," height.%d special.%d\n",height,special); + if ( special < 0 ) + bnTarget /= 8; + else bnTarget.SetCompact(KOMODO_MINDIFF_NBITS,&fNegative,&fOverflow); + } // Check range if (fNegative || bnTarget == 0 || fOverflow || bnTarget > UintToArith256(params.powLimit))