diff --git a/iguana/dpow/dpow_fsm.c b/iguana/dpow/dpow_fsm.c index ff4fa6d6b..6d5abf36f 100755 --- a/iguana/dpow/dpow_fsm.c +++ b/iguana/dpow/dpow_fsm.c @@ -563,6 +563,9 @@ void dpow_statemachinestart(void *ptr) src_or_dest = 0; else src_or_dest = 1; extralen = dpow_paxpending(myinfo,extras,sizeof(extras),&bp->paxwdcrc,bp->MoM,bp->MoMdepth,bp->CCid,src_or_dest,bp); + // if MoMoM is not avalible yet, then stop this round and try again later. + if ( extralen == -1 ) + break; bp->notaries[bp->myind].paxwdcrc = bp->paxwdcrc; } if ( dp->checkpoint.blockhash.height > checkpoint.blockhash.height ) //(checkpoint.blockhash.height % 100) != 0 && diff --git a/iguana/dpow/dpow_rpc.c b/iguana/dpow/dpow_rpc.c index da11a5770..7671d8ff1 100755 --- a/iguana/dpow/dpow_rpc.c +++ b/iguana/dpow/dpow_rpc.c @@ -312,6 +312,12 @@ int32_t dpow_paxpending(struct supernet_info *myinfo,uint8_t *hex,int32_t hexsiz } if ( (retjson= dpow_MoMoMdata(kmdcoin,bp->srccoin->symbol,kmdheight,bp->CCid)) != 0 ) { + if ( jstr(retjson,"error")) != 0 ) + { + // bail out MoMoM is indeterminate + free_json(retjson); + return(-1); + } if ( (hexstr= jstr(retjson,"data")) != 0 && (hexlen= (int32_t)strlen(hexstr)) > 0 && n+hexlen/2 <= hexsize ) { hexlen >>= 1; diff --git a/iguana/dpow/dpow_tx.c b/iguana/dpow/dpow_tx.c index 33ad64b92..17f236c74 100755 --- a/iguana/dpow/dpow_tx.c +++ b/iguana/dpow/dpow_tx.c @@ -639,7 +639,17 @@ void dpow_sigscheck(struct supernet_info *myinfo,struct dpow_info *dp,struct dpo { bp->desttxid = txid; dpow_signedtxgen(myinfo,dp,bp->srccoin,bp,bestk,bestmask,myind,DPOW_SIGCHANNEL,0,numratified != 0); - } else bp->srctxid = txid; + } else + { + bp->srctxid = txid; +#ifdef LOGTX + FILE * fptr; + fptr = fopen("/home/node/complete_notarizations", "a+"); + // SRC SRC_TXID DEST DEST_TXID HEIGHT + fprintf(fptr, "%s %s %s\n", bp->srccoin->symbol,bp->srctxid,bp->destcoin->symbol,bp->desttxid,bp->height); + fclose(fptr); +#endif + } len = (int32_t)strlen(bp->signedtx) >> 1; decode_hex(txdata+32,len,bp->signedtx); for (j=0; jstate = 0xffffffff; printf("dpow_sigscheck: [src.%s] mismatched txid.%s vs %s\n",bp->srccoin->symbol,bits256_str(str,txid),retstr); -#ifdef LOGTX - FILE * fptr; - fptr = fopen("/home/node/failed_notarizations", "a+"); - unsigned long dwy_timestamp = time(NULL); - fprintf(fptr, "%lu %s %s %d %s\n", dwy_timestamp, bp->srccoin->symbol,bp->destcoin->symbol,src_or_dest,bp->signedtx); - fclose(fptr); -#endif } free(retstr); retstr = 0;