|
|
|
@ -3449,8 +3449,9 @@ static bool AcceptBlockHeader(const CBlockHeader& block, CValidationState& state
@@ -3449,8 +3449,9 @@ static bool AcceptBlockHeader(const CBlockHeader& block, CValidationState& state
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** Store block on disk. If dbp is non-NULL, the file is known to already reside on disk */ |
|
|
|
|
static bool AcceptBlock(const CBlock& block, CValidationState& state, const CChainParams& chainparams, CBlockIndex** ppindex, bool fRequested, const CDiskBlockPos* dbp) |
|
|
|
|
static bool AcceptBlock(const CBlock& block, CValidationState& state, const CChainParams& chainparams, CBlockIndex** ppindex, bool fRequested, const CDiskBlockPos* dbp, bool* fNewBlock) |
|
|
|
|
{ |
|
|
|
|
if (fNewBlock) *fNewBlock = false; |
|
|
|
|
AssertLockHeld(cs_main); |
|
|
|
|
|
|
|
|
|
CBlockIndex *pindexDummy = NULL; |
|
|
|
@ -3479,6 +3480,7 @@ static bool AcceptBlock(const CBlock& block, CValidationState& state, const CCha
@@ -3479,6 +3480,7 @@ static bool AcceptBlock(const CBlock& block, CValidationState& state, const CCha
|
|
|
|
|
if (!fHasMoreWork) return true; // Don't process less-work chains
|
|
|
|
|
if (fTooFarAhead) return true; // Block height is too high
|
|
|
|
|
} |
|
|
|
|
if (fNewBlock) *fNewBlock = true; |
|
|
|
|
|
|
|
|
|
if ((!CheckBlock(block, state, chainparams.GetConsensus(), GetAdjustedTime())) || !ContextualCheckBlock(block, state, pindex->pprev)) { |
|
|
|
|
if (state.IsInvalid() && !state.CorruptionPossible()) { |
|
|
|
@ -3526,7 +3528,7 @@ static bool IsSuperMajority(int minVersion, const CBlockIndex* pstart, unsigned
@@ -3526,7 +3528,7 @@ static bool IsSuperMajority(int minVersion, const CBlockIndex* pstart, unsigned
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool ProcessNewBlock(CValidationState& state, const CChainParams& chainparams, const CNode* pfrom, const CBlock* pblock, bool fForceProcessing, const CDiskBlockPos* dbp) |
|
|
|
|
bool ProcessNewBlock(CValidationState& state, const CChainParams& chainparams, CNode* pfrom, const CBlock* pblock, bool fForceProcessing, const CDiskBlockPos* dbp) |
|
|
|
|
{ |
|
|
|
|
{ |
|
|
|
|
LOCK(cs_main); |
|
|
|
@ -3535,9 +3537,11 @@ bool ProcessNewBlock(CValidationState& state, const CChainParams& chainparams, c
@@ -3535,9 +3537,11 @@ bool ProcessNewBlock(CValidationState& state, const CChainParams& chainparams, c
|
|
|
|
|
|
|
|
|
|
// Store to disk
|
|
|
|
|
CBlockIndex *pindex = NULL; |
|
|
|
|
bool ret = AcceptBlock(*pblock, state, chainparams, &pindex, fRequested, dbp); |
|
|
|
|
bool fNewBlock = false; |
|
|
|
|
bool ret = AcceptBlock(*pblock, state, chainparams, &pindex, fRequested, dbp, &fNewBlock); |
|
|
|
|
if (pindex && pfrom) { |
|
|
|
|
mapBlockSource[pindex->GetBlockHash()] = pfrom->GetId(); |
|
|
|
|
if (fNewBlock) pfrom->nLastBlockTime = GetTime(); |
|
|
|
|
} |
|
|
|
|
CheckBlockIndex(chainparams.GetConsensus()); |
|
|
|
|
if (!ret) |
|
|
|
@ -4107,7 +4111,7 @@ bool LoadExternalBlockFile(const CChainParams& chainparams, FILE* fileIn, CDiskB
@@ -4107,7 +4111,7 @@ bool LoadExternalBlockFile(const CChainParams& chainparams, FILE* fileIn, CDiskB
|
|
|
|
|
if (mapBlockIndex.count(hash) == 0 || (mapBlockIndex[hash]->nStatus & BLOCK_HAVE_DATA) == 0) { |
|
|
|
|
LOCK(cs_main); |
|
|
|
|
CValidationState state; |
|
|
|
|
if (AcceptBlock(block, state, chainparams, NULL, true, dbp)) |
|
|
|
|
if (AcceptBlock(block, state, chainparams, NULL, true, dbp, NULL)) |
|
|
|
|
nLoaded++; |
|
|
|
|
if (state.IsError()) |
|
|
|
|
break; |
|
|
|
@ -4140,7 +4144,7 @@ bool LoadExternalBlockFile(const CChainParams& chainparams, FILE* fileIn, CDiskB
@@ -4140,7 +4144,7 @@ bool LoadExternalBlockFile(const CChainParams& chainparams, FILE* fileIn, CDiskB
|
|
|
|
|
head.ToString()); |
|
|
|
|
LOCK(cs_main); |
|
|
|
|
CValidationState dummy; |
|
|
|
|
if (AcceptBlock(block, dummy, chainparams, NULL, true, &it->second)) |
|
|
|
|
if (AcceptBlock(block, dummy, chainparams, NULL, true, &it->second, NULL)) |
|
|
|
|
{ |
|
|
|
|
nLoaded++; |
|
|
|
|
queue.push_back(block.GetHash()); |
|
|
|
@ -5040,6 +5044,8 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
@@ -5040,6 +5044,8 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
|
|
|
|
|
RelayTransaction(tx); |
|
|
|
|
vWorkQueue.push_back(inv.hash); |
|
|
|
|
|
|
|
|
|
pfrom->nLastTXTime = GetTime(); |
|
|
|
|
|
|
|
|
|
LogPrint("mempool", "AcceptToMemoryPool: peer=%d: accepted %s (poolsz %u txn, %u kB)\n", |
|
|
|
|
pfrom->id, |
|
|
|
|
tx.GetHash().ToString(), |
|
|
|
|