From 3099c9ca230f546a0d47ac240a9e792f8b135d3a Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 23 Apr 2018 11:17:36 +0300 Subject: [PATCH 01/12] Tweak sync constants --- src/main.cpp | 2 +- src/main.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 829d443ef..03e05dbad 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4064,7 +4064,7 @@ bool AcceptBlock(CBlock& block, CValidationState& state, CBlockIndex** ppindex, // blocks which are too close in height to the tip. Apply this test // regardless of whether pruning is enabled; it should generally be safe to // not process unrequested blocks. - bool fTooFarAhead = (pindex->nHeight > int(chainActive.Height() + MIN_BLOCKS_TO_KEEP)); + bool fTooFarAhead = (pindex->nHeight > int(chainActive.Height() + BLOCK_DOWNLOAD_WINDOW));//MIN_BLOCKS_TO_KEEP)); // TODO: deal better with return value and error conditions for duplicate // and unrequested blocks. diff --git a/src/main.h b/src/main.h index f52fa222d..221077acb 100644 --- a/src/main.h +++ b/src/main.h @@ -94,7 +94,7 @@ static const unsigned int MAX_HEADERS_RESULTS = 160; * Larger windows tolerate larger download speed differences between peer, but increase the potential * degree of disordering of blocks on disk (which make reindexing and in the future perhaps pruning * harder). We'll probably want to make this a per-peer adaptive value at some point. */ -static const unsigned int BLOCK_DOWNLOAD_WINDOW = 1024; +static const unsigned int BLOCK_DOWNLOAD_WINDOW = 1024*16; /** Time to wait (in seconds) between writing blocks/block index to disk. */ static const unsigned int DATABASE_WRITE_INTERVAL = 60 * 60; /** Time to wait (in seconds) between flushing chainstate to disk. */ From 71f2c6969cc6eed6dc35d06d569a2d0792fc7250 Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 23 Apr 2018 11:23:05 +0300 Subject: [PATCH 02/12] Revert --- src/main.cpp | 2 +- src/main.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 03e05dbad..829d443ef 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4064,7 +4064,7 @@ bool AcceptBlock(CBlock& block, CValidationState& state, CBlockIndex** ppindex, // blocks which are too close in height to the tip. Apply this test // regardless of whether pruning is enabled; it should generally be safe to // not process unrequested blocks. - bool fTooFarAhead = (pindex->nHeight > int(chainActive.Height() + BLOCK_DOWNLOAD_WINDOW));//MIN_BLOCKS_TO_KEEP)); + bool fTooFarAhead = (pindex->nHeight > int(chainActive.Height() + MIN_BLOCKS_TO_KEEP)); // TODO: deal better with return value and error conditions for duplicate // and unrequested blocks. diff --git a/src/main.h b/src/main.h index 221077acb..f52fa222d 100644 --- a/src/main.h +++ b/src/main.h @@ -94,7 +94,7 @@ static const unsigned int MAX_HEADERS_RESULTS = 160; * Larger windows tolerate larger download speed differences between peer, but increase the potential * degree of disordering of blocks on disk (which make reindexing and in the future perhaps pruning * harder). We'll probably want to make this a per-peer adaptive value at some point. */ -static const unsigned int BLOCK_DOWNLOAD_WINDOW = 1024*16; +static const unsigned int BLOCK_DOWNLOAD_WINDOW = 1024; /** Time to wait (in seconds) between writing blocks/block index to disk. */ static const unsigned int DATABASE_WRITE_INTERVAL = 60 * 60; /** Time to wait (in seconds) between flushing chainstate to disk. */ From 161f617de49123ef2046fd45b869c3102dd58a99 Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 23 Apr 2018 19:58:16 +0300 Subject: [PATCH 03/12] komodo_requestedhash request --- src/main.cpp | 21 +++++++++++++++++++-- src/miner.cpp | 2 +- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 829d443ef..1afb622a6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3977,8 +3977,11 @@ bool ContextualCheckBlock(const CBlock& block, CValidationState& state, CBlockIn return true; } +static uint256 komodo_requestedhash; + bool AcceptBlockHeader(const CBlockHeader& block, CValidationState& state, CBlockIndex** ppindex) { + static uint256 zero; const CChainParams& chainparams = Params(); AssertLockHeld(cs_main); // Check for duplicate @@ -4009,7 +4012,9 @@ bool AcceptBlockHeader(const CBlockHeader& block, CValidationState& state, CBloc BlockMap::iterator mi = mapBlockIndex.find(block.hashPrevBlock); if (mi == mapBlockIndex.end()) { - fprintf(stderr,"AcceptBlockHeader hashPrevBlock %s not found\n",block.hashPrevBlock.ToString().c_str()); + fprintf(stderr,"AcceptBlockHeader hashPrevBlock %s not found req %s\n",block.hashPrevBlock.ToString().c_str(),komodo_requestedhash.ToString().c_cstr()); + if ( komodo_requestedhash == zero ) + komodo_requestedhash = block.hashPrevBlock; // request block.hashPrevBlock return(false); //return state.DoS(10, error("%s: prev block not found", __func__), 0, "bad-prevblk"); @@ -4034,6 +4039,11 @@ bool AcceptBlockHeader(const CBlockHeader& block, CValidationState& state, CBloc } if (ppindex) *ppindex = pindex; + if ( pindex != 0 && hash == komodo_requestedhash ) + { + fprintf(stderr,"AddToBlockIndex komodo_requestedhash %s\n",komodo_requestedhash.ToString().c_str()); + memset(&komodo_requestedhash,0,sizeof(komodo_requestedhash)); + } return true; } @@ -6671,6 +6681,7 @@ bool SendMessages(CNode* pto, bool fSendTrickle) // // Message: getdata (blocks) // + static uint256 zero; vector vGetData; if (!pto->fDisconnect && !pto->fClient && (fFetch || !IsInitialBlockDownload()) && state.nBlocksInFlight < MAX_BLOCKS_IN_TRANSIT_PER_PEER) { vector vToDownload; @@ -6689,7 +6700,13 @@ bool SendMessages(CNode* pto, bool fSendTrickle) } } } - + if ( komodo_requestedhash != zero ) + { + fprintf(stderr,"request %s to nodeid.%d\n",komodo_requestedhash.ToString().c_str(),pto->GetId()); + vGetData.push_back(CInv(MSG_BLOCK, komodo_requestedhash)); + MarkBlockAsInFlight(pto->GetId(), komodo_requestedhash, consensusParams, pindex); + } + // // Message: getdata (non-blocks) // diff --git a/src/miner.cpp b/src/miner.cpp index a8569980d..fed17a652 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -212,7 +212,7 @@ CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn) if (tx.IsCoinBase() || !IsFinalTx(tx, nHeight, nLockTimeCutoff) || IsExpiredTx(tx, nHeight)) continue; - if ( komodo_validate_interest(tx,nHeight,(uint32_t)pblock->nTime,0) < 0 ) + if ( ASSETCHAINS_SYMBOL[0] == 0 && komodo_validate_interest(tx,nHeight,(uint32_t)pblock->nTime,0) < 0 ) { //fprintf(stderr,"CreateNewBlock: komodo_validate_interest failure nHeight.%d nTime.%u vs locktime.%u\n",nHeight,(uint32_t)pblock->nTime,(uint32_t)tx.nLockTime); continue; From e450b1ceaf2c49bfc7c04dbb6e93d50ab90e8465 Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 23 Apr 2018 20:02:40 +0300 Subject: [PATCH 04/12] Test --- src/main.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 1afb622a6..456ed9b22 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4012,7 +4012,7 @@ bool AcceptBlockHeader(const CBlockHeader& block, CValidationState& state, CBloc BlockMap::iterator mi = mapBlockIndex.find(block.hashPrevBlock); if (mi == mapBlockIndex.end()) { - fprintf(stderr,"AcceptBlockHeader hashPrevBlock %s not found req %s\n",block.hashPrevBlock.ToString().c_str(),komodo_requestedhash.ToString().c_cstr()); + fprintf(stderr,"AcceptBlockHeader hashPrevBlock %s not found req %s\n",block.hashPrevBlock.ToString().c_str(),komodo_requestedhash.ToString().c_str()); if ( komodo_requestedhash == zero ) komodo_requestedhash = block.hashPrevBlock; // request block.hashPrevBlock @@ -6700,7 +6700,7 @@ bool SendMessages(CNode* pto, bool fSendTrickle) } } } - if ( komodo_requestedhash != zero ) + if ( komodo_requestedhash != zero && (pindex= mapBlockIndex[komodo_requestedhash]) != 0 ) { fprintf(stderr,"request %s to nodeid.%d\n",komodo_requestedhash.ToString().c_str(),pto->GetId()); vGetData.push_back(CInv(MSG_BLOCK, komodo_requestedhash)); From 99dd19d43e2490e9a325c458fa0ede8ed3d472ca Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 23 Apr 2018 20:04:54 +0300 Subject: [PATCH 05/12] Test --- src/main.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main.cpp b/src/main.cpp index 456ed9b22..8681bf44a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -6700,8 +6700,10 @@ bool SendMessages(CNode* pto, bool fSendTrickle) } } } + CBlockIndex *pindex; if ( komodo_requestedhash != zero && (pindex= mapBlockIndex[komodo_requestedhash]) != 0 ) { + LogPrint("net","request %s to nodeid.%d\n",komodo_requestedhash.ToString().c_str(),pto->GetId()); fprintf(stderr,"request %s to nodeid.%d\n",komodo_requestedhash.ToString().c_str(),pto->GetId()); vGetData.push_back(CInv(MSG_BLOCK, komodo_requestedhash)); MarkBlockAsInFlight(pto->GetId(), komodo_requestedhash, consensusParams, pindex); From b80fef6f77c05b7028079e13f6e566b70ac151a9 Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 23 Apr 2018 20:18:46 +0300 Subject: [PATCH 06/12] Test --- src/main.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main.cpp b/src/main.cpp index 8681bf44a..64e19f01d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3996,6 +3996,11 @@ bool AcceptBlockHeader(const CBlockHeader& block, CValidationState& state, CBloc *ppindex = pindex; if ( pindex != 0 && pindex->nStatus & BLOCK_FAILED_MASK ) return state.Invalid(error("%s: block is marked invalid", __func__), 0, "duplicate"); + if ( pindex != 0 && hash == komodo_requestedhash ) + { + fprintf(stderr,"AddToBlockIndex A komodo_requestedhash %s\n",komodo_requestedhash.ToString().c_str()); + memset(&komodo_requestedhash,0,sizeof(komodo_requestedhash)); + } //if ( pindex == 0 ) // fprintf(stderr,"accepthdr %s already known but no pindex\n",hash.ToString().c_str()); return true; @@ -4044,6 +4049,8 @@ bool AcceptBlockHeader(const CBlockHeader& block, CValidationState& state, CBloc fprintf(stderr,"AddToBlockIndex komodo_requestedhash %s\n",komodo_requestedhash.ToString().c_str()); memset(&komodo_requestedhash,0,sizeof(komodo_requestedhash)); } + else if ( (rand() % 100) == 0 && komodo_requestedhash == zero ) + komodo_requestedhash = hash; return true; } From ecc342b6da7522744aa721dffb4baf78fe8822ae Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 23 Apr 2018 20:25:32 +0300 Subject: [PATCH 07/12] Test --- src/main.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 64e19f01d..124e92e3c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4173,7 +4173,7 @@ bool ProcessNewBlock(bool from_miner,int32_t height,CValidationState &state, CNo bool checked; uint256 hash; auto verifier = libzcash::ProofVerifier::Disabled(); hash = pblock->GetHash(); - //fprintf(stderr,"process newblock %s\n",hash.ToString().c_str()); +fprintf(stderr,"process newblock %s\n",hash.ToString().c_str()); if ( chainActive.Tip() != 0 ) komodo_currentheight_set(chainActive.Tip()->nHeight); checked = CheckBlock(height!=0?height:komodo_block2height(pblock),0,*pblock, state, verifier,0); @@ -4207,7 +4207,7 @@ bool ProcessNewBlock(bool from_miner,int32_t height,CValidationState &state, CNo CheckBlockIndex(); if (!ret) return error("%s: AcceptBlock FAILED", __func__); - //else fprintf(stderr,"added block %s %p\n",pindex->GetBlockHash().ToString().c_str(),pindex->pprev); + else fprintf(stderr,"added block %s %p\n",pindex->GetBlockHash().ToString().c_str(),pindex->pprev); } if (!ActivateBestChain(state, pblock)) From 367265ab29447d633d6ac42084257793828eeec9 Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 23 Apr 2018 20:32:50 +0300 Subject: [PATCH 08/12] Test --- src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index 124e92e3c..245ca21e0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3761,7 +3761,7 @@ bool CheckBlockHeader(int32_t height,CBlockIndex *pindex, const CBlockHeader& bl if (blockhdr.GetBlockTime() > GetAdjustedTime() + 60) { fprintf(stderr,"future block %u vs time.%u + 60\n",(uint32_t)blockhdr.GetBlockTime(),(uint32_t)GetAdjustedTime()); - return state.Invalid(error("CheckBlockHeader(): block timestamp too far in the future"),REJECT_INVALID, "time-too-new"); + return false; //state.Invalid(error("CheckBlockHeader(): block timestamp too far in the future"),REJECT_INVALID, "time-too-new"); } else if ( ASSETCHAINS_STAKED != 0 && pindex != 0 && pindex->pprev != 0 && pindex->nTime <= pindex->pprev->nTime ) { From 027cfdce1547cb5548f1d31513c73b5c097f94fd Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 23 Apr 2018 20:49:28 +0300 Subject: [PATCH 09/12] Test --- src/main.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 245ca21e0..c1cb61fdd 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4017,7 +4017,7 @@ bool AcceptBlockHeader(const CBlockHeader& block, CValidationState& state, CBloc BlockMap::iterator mi = mapBlockIndex.find(block.hashPrevBlock); if (mi == mapBlockIndex.end()) { - fprintf(stderr,"AcceptBlockHeader hashPrevBlock %s not found req %s\n",block.hashPrevBlock.ToString().c_str(),komodo_requestedhash.ToString().c_str()); + fprintf(stderr,"AcceptBlockHeader hashPrevBlock %s not found komodo_requestedhash %s\n",block.hashPrevBlock.ToString().c_str(),komodo_requestedhash.ToString().c_str()); if ( komodo_requestedhash == zero ) komodo_requestedhash = block.hashPrevBlock; // request block.hashPrevBlock @@ -4050,7 +4050,10 @@ bool AcceptBlockHeader(const CBlockHeader& block, CValidationState& state, CBloc memset(&komodo_requestedhash,0,sizeof(komodo_requestedhash)); } else if ( (rand() % 100) == 0 && komodo_requestedhash == zero ) + { + fprintf(stderr,"random komodo_requestedhash %s\n",komodo_requestedhash.ToString().c_str()); komodo_requestedhash = hash; + } return true; } @@ -6711,7 +6714,7 @@ bool SendMessages(CNode* pto, bool fSendTrickle) if ( komodo_requestedhash != zero && (pindex= mapBlockIndex[komodo_requestedhash]) != 0 ) { LogPrint("net","request %s to nodeid.%d\n",komodo_requestedhash.ToString().c_str(),pto->GetId()); - fprintf(stderr,"request %s to nodeid.%d\n",komodo_requestedhash.ToString().c_str(),pto->GetId()); + fprintf(stderr,"komodo_requestedhash request %s to nodeid.%d\n",komodo_requestedhash.ToString().c_str(),pto->GetId()); vGetData.push_back(CInv(MSG_BLOCK, komodo_requestedhash)); MarkBlockAsInFlight(pto->GetId(), komodo_requestedhash, consensusParams, pindex); } From d9cf73430644ff6728c4c8895f26cc8d5b910777 Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 23 Apr 2018 20:56:24 +0300 Subject: [PATCH 10/12] Test --- src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index c1cb61fdd..4eaf46eca 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4049,7 +4049,7 @@ bool AcceptBlockHeader(const CBlockHeader& block, CValidationState& state, CBloc fprintf(stderr,"AddToBlockIndex komodo_requestedhash %s\n",komodo_requestedhash.ToString().c_str()); memset(&komodo_requestedhash,0,sizeof(komodo_requestedhash)); } - else if ( (rand() % 100) == 0 && komodo_requestedhash == zero ) + else //if ( (rand() % 100) == 0 && komodo_requestedhash == zero ) { fprintf(stderr,"random komodo_requestedhash %s\n",komodo_requestedhash.ToString().c_str()); komodo_requestedhash = hash; From bddeaf5e44cc9661565f3cfcae14164599141596 Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 23 Apr 2018 21:09:47 +0300 Subject: [PATCH 11/12] Detect missing prevblock and request it. On some systems, the chain can get into a state where it has the hash for a prevblock, but not the prevblock itself. This condition was treated as a horrible error, but since it can happen, it is better to return a simple error and let the block get processed when it comes back again. --- src/main.cpp | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 4eaf46eca..23d8d65c4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3978,6 +3978,7 @@ bool ContextualCheckBlock(const CBlock& block, CValidationState& state, CBlockIn } static uint256 komodo_requestedhash; +static int32_t komodo_requestedcount; bool AcceptBlockHeader(const CBlockHeader& block, CValidationState& state, CBlockIndex** ppindex) { @@ -4000,6 +4001,7 @@ bool AcceptBlockHeader(const CBlockHeader& block, CValidationState& state, CBloc { fprintf(stderr,"AddToBlockIndex A komodo_requestedhash %s\n",komodo_requestedhash.ToString().c_str()); memset(&komodo_requestedhash,0,sizeof(komodo_requestedhash)); + komodo_requestedcount = 0; } //if ( pindex == 0 ) // fprintf(stderr,"accepthdr %s already known but no pindex\n",hash.ToString().c_str()); @@ -4019,7 +4021,10 @@ bool AcceptBlockHeader(const CBlockHeader& block, CValidationState& state, CBloc { fprintf(stderr,"AcceptBlockHeader hashPrevBlock %s not found komodo_requestedhash %s\n",block.hashPrevBlock.ToString().c_str(),komodo_requestedhash.ToString().c_str()); if ( komodo_requestedhash == zero ) + { komodo_requestedhash = block.hashPrevBlock; + komodo_requestedcount = 0; + } // request block.hashPrevBlock return(false); //return state.DoS(10, error("%s: prev block not found", __func__), 0, "bad-prevblk"); @@ -4048,12 +4053,13 @@ bool AcceptBlockHeader(const CBlockHeader& block, CValidationState& state, CBloc { fprintf(stderr,"AddToBlockIndex komodo_requestedhash %s\n",komodo_requestedhash.ToString().c_str()); memset(&komodo_requestedhash,0,sizeof(komodo_requestedhash)); + komodo_requestedcount = 0; } - else //if ( (rand() % 100) == 0 && komodo_requestedhash == zero ) + /*else //if ( (rand() % 100) == 0 && komodo_requestedhash == zero ) { fprintf(stderr,"random komodo_requestedhash %s\n",komodo_requestedhash.ToString().c_str()); komodo_requestedhash = hash; - } + }*/ return true; } @@ -4176,7 +4182,7 @@ bool ProcessNewBlock(bool from_miner,int32_t height,CValidationState &state, CNo bool checked; uint256 hash; auto verifier = libzcash::ProofVerifier::Disabled(); hash = pblock->GetHash(); -fprintf(stderr,"process newblock %s\n",hash.ToString().c_str()); +//fprintf(stderr,"process newblock %s\n",hash.ToString().c_str()); if ( chainActive.Tip() != 0 ) komodo_currentheight_set(chainActive.Tip()->nHeight); checked = CheckBlock(height!=0?height:komodo_block2height(pblock),0,*pblock, state, verifier,0); @@ -4210,7 +4216,7 @@ fprintf(stderr,"process newblock %s\n",hash.ToString().c_str()); CheckBlockIndex(); if (!ret) return error("%s: AcceptBlock FAILED", __func__); - else fprintf(stderr,"added block %s %p\n",pindex->GetBlockHash().ToString().c_str(),pindex->pprev); + //else fprintf(stderr,"added block %s %p\n",pindex->GetBlockHash().ToString().c_str(),pindex->pprev); } if (!ActivateBestChain(state, pblock)) @@ -6711,12 +6717,18 @@ bool SendMessages(CNode* pto, bool fSendTrickle) } } CBlockIndex *pindex; - if ( komodo_requestedhash != zero && (pindex= mapBlockIndex[komodo_requestedhash]) != 0 ) + if ( komodo_requestedhash != zero && komodo_requestedcount < 16 && (pindex= mapBlockIndex[komodo_requestedhash]) != 0 ) { - LogPrint("net","request %s to nodeid.%d\n",komodo_requestedhash.ToString().c_str(),pto->GetId()); - fprintf(stderr,"komodo_requestedhash request %s to nodeid.%d\n",komodo_requestedhash.ToString().c_str(),pto->GetId()); + LogPrint("net","komodo_requestedhash.%d request %s to nodeid.%d\n",komodo_requestedcount,komodo_requestedhash.ToString().c_str(),pto->GetId()); + fprintf(stderr,"komodo_requestedhash.%d request %s to nodeid.%d\n",komodo_requestedcount,komodo_requestedhash.ToString().c_str(),pto->GetId()); vGetData.push_back(CInv(MSG_BLOCK, komodo_requestedhash)); MarkBlockAsInFlight(pto->GetId(), komodo_requestedhash, consensusParams, pindex); + komodo_requestedcount++; + if ( komodo_requestedcount > 16 ) + { + memset(&komodo_requestedhash,0,sizeof(komodo_requestedhash)); + komodo_requestedcount = 0; + } } // From 37091e704e998ea252ff39f926a7cf306cb20357 Mon Sep 17 00:00:00 2001 From: jl777 Date: Mon, 23 Apr 2018 21:33:18 +0300 Subject: [PATCH 12/12] 30 seconds margin for notary mining --- src/miner.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/miner.cpp b/src/miner.cpp index fed17a652..02327522a 100644 --- a/src/miner.cpp +++ b/src/miner.cpp @@ -463,7 +463,7 @@ CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn) if ( ASSETCHAINS_SYMBOL[0] == 0 && NOTARY_PUBKEY33[0] != 0 && pblock->nTime < pindexPrev->nTime+60 ) { pblock->nTime = pindexPrev->nTime + 60; - while ( pblock->GetBlockTime() > GetAdjustedTime() + 60 ) + while ( pblock->GetBlockTime() > GetAdjustedTime() + 30 ) sleep(1); //fprintf(stderr,"block.nTime %u vs prev.%u, gettime.%u vs adjusted.%u\n",(uint32_t)pblock->nTime,(uint32_t)(pindexPrev->nTime + 60),(uint32_t)pblock->GetBlockTime(),(uint32_t)(GetAdjustedTime() + 60)); }