MCPcopy Create free account
hub / github.com/bitcoinxt/bitcoinxt / AcceptBlockHeader

Function AcceptBlockHeader

src/main.cpp:3485–3527  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3483}
3484
3485bool AcceptBlockHeader(const CBlockHeader& block, CValidationState& state, CBlockIndex** ppindex)
3486{
3487 const CChainParams& chainparams = Params();
3488 AssertLockHeld(cs_main);
3489 // Check for duplicate
3490 uint256 hash = block.GetHash();
3491 BlockMap::iterator miSelf = mapBlockIndex.find(hash);
3492 CBlockIndex *pindex = NULL;
3493 if (miSelf != mapBlockIndex.end()) {
3494 // Block header is already known.
3495 pindex = miSelf->second;
3496 if (ppindex)
3497 *ppindex = pindex;
3498 if (pindex->nStatus & BLOCK_FAILED_MASK)
3499 return state.Invalid(error("%s: block is marked invalid", __func__), 0, "duplicate");
3500 return true;
3501 }
3502
3503 if (!CheckBlockHeader(block, state))
3504 return false;
3505
3506 // Get prev block index
3507 CBlockIndex* pindexPrev = NULL;
3508 if (hash != chainparams.GetConsensus().hashGenesisBlock) {
3509 BlockMap::iterator mi = mapBlockIndex.find(block.hashPrevBlock);
3510 if (mi == mapBlockIndex.end())
3511 return state.DoS(10, error("%s: prev block not found", __func__), 0, "bad-prevblk");
3512 pindexPrev = (*mi).second;
3513 if (pindexPrev->nStatus & BLOCK_FAILED_MASK)
3514 return state.DoS(100, error("%s: prev block invalid", __func__), REJECT_INVALID, "bad-prevblk");
3515 }
3516
3517 if (!ContextualCheckBlockHeader(block, state, pindexPrev))
3518 return false;
3519
3520 if (pindex == NULL)
3521 pindex = AddToBlockIndex(block);
3522
3523 if (ppindex)
3524 *ppindex = pindex;
3525
3526 return true;
3527}
3528
3529bool AcceptBlock(CBlock& block, CValidationState& state, CBlockIndex** ppindex, bool fRequested, const CDiskBlockPos* dbp)
3530{

Callers 2

AcceptBlockFunction · 0.85
acceptHeadersMethod · 0.85

Calls 10

errorFunction · 0.85
CheckBlockHeaderFunction · 0.85
AddToBlockIndexFunction · 0.85
findMethod · 0.80
InvalidMethod · 0.80
DoSMethod · 0.80
ParamsClass · 0.70
GetHashMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected