|
|
|
@ -1848,7 +1848,7 @@ bool SetBestChain(CValidationState &state, CBlockIndex* pindexNew)
@@ -1848,7 +1848,7 @@ bool SetBestChain(CValidationState &state, CBlockIndex* pindexNew)
|
|
|
|
|
// an overestimation, as most will delete an existing entry or
|
|
|
|
|
// overwrite one. Still, use a conservative safety factor of 2.
|
|
|
|
|
if (!CheckDiskSpace(100 * 2 * 2 * pcoinsTip->GetCacheSize())) |
|
|
|
|
return state.Error(); |
|
|
|
|
return state.Error("out of disk space"); |
|
|
|
|
FlushBlockFile(); |
|
|
|
|
pblocktree->Sync(); |
|
|
|
|
if (!pcoinsTip->Flush()) |
|
|
|
@ -1924,7 +1924,7 @@ bool AddToBlockIndex(CBlock& block, CValidationState& state, const CDiskBlockPos
@@ -1924,7 +1924,7 @@ bool AddToBlockIndex(CBlock& block, CValidationState& state, const CDiskBlockPos
|
|
|
|
|
// Check for duplicate
|
|
|
|
|
uint256 hash = block.GetHash(); |
|
|
|
|
if (mapBlockIndex.count(hash)) |
|
|
|
|
return state.Invalid(error("AddToBlockIndex() : %s already exists", hash.ToString())); |
|
|
|
|
return state.Invalid(error("AddToBlockIndex() : %s already exists", hash.ToString()), 0, "duplicate"); |
|
|
|
|
|
|
|
|
|
// Construct new block index object
|
|
|
|
|
CBlockIndex* pindexNew = new CBlockIndex(block); |
|
|
|
@ -2014,7 +2014,7 @@ bool FindBlockPos(CValidationState &state, CDiskBlockPos &pos, unsigned int nAdd
@@ -2014,7 +2014,7 @@ bool FindBlockPos(CValidationState &state, CDiskBlockPos &pos, unsigned int nAdd
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
return state.Error(); |
|
|
|
|
return state.Error("out of disk space"); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -2060,7 +2060,7 @@ bool FindUndoPos(CValidationState &state, int nFile, CDiskBlockPos &pos, unsigne
@@ -2060,7 +2060,7 @@ bool FindUndoPos(CValidationState &state, int nFile, CDiskBlockPos &pos, unsigne
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
return state.Error(); |
|
|
|
|
return state.Error("out of disk space"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
@ -2138,7 +2138,7 @@ bool AcceptBlock(CBlock& block, CValidationState& state, CDiskBlockPos* dbp)
@@ -2138,7 +2138,7 @@ bool AcceptBlock(CBlock& block, CValidationState& state, CDiskBlockPos* dbp)
|
|
|
|
|
// Check for duplicate
|
|
|
|
|
uint256 hash = block.GetHash(); |
|
|
|
|
if (mapBlockIndex.count(hash)) |
|
|
|
|
return state.Invalid(error("AcceptBlock() : block already in mapBlockIndex")); |
|
|
|
|
return state.Invalid(error("AcceptBlock() : block already in mapBlockIndex"), 0, "duplicate"); |
|
|
|
|
|
|
|
|
|
// Get prev block index
|
|
|
|
|
CBlockIndex* pindexPrev = NULL; |
|
|
|
@ -2146,7 +2146,7 @@ bool AcceptBlock(CBlock& block, CValidationState& state, CDiskBlockPos* dbp)
@@ -2146,7 +2146,7 @@ bool AcceptBlock(CBlock& block, CValidationState& state, CDiskBlockPos* dbp)
|
|
|
|
|
if (hash != Params().HashGenesisBlock()) { |
|
|
|
|
map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.find(block.hashPrevBlock); |
|
|
|
|
if (mi == mapBlockIndex.end()) |
|
|
|
|
return state.DoS(10, error("AcceptBlock() : prev block not found")); |
|
|
|
|
return state.DoS(10, error("AcceptBlock() : prev block not found"), 0, "bad-prevblk"); |
|
|
|
|
pindexPrev = (*mi).second; |
|
|
|
|
nHeight = pindexPrev->nHeight+1; |
|
|
|
|
|
|
|
|
@ -2269,9 +2269,9 @@ bool ProcessBlock(CValidationState &state, CNode* pfrom, CBlock* pblock, CDiskBl
@@ -2269,9 +2269,9 @@ bool ProcessBlock(CValidationState &state, CNode* pfrom, CBlock* pblock, CDiskBl
|
|
|
|
|
// Check for duplicate
|
|
|
|
|
uint256 hash = pblock->GetHash(); |
|
|
|
|
if (mapBlockIndex.count(hash)) |
|
|
|
|
return state.Invalid(error("ProcessBlock() : already have block %d %s", mapBlockIndex[hash]->nHeight, hash.ToString())); |
|
|
|
|
return state.Invalid(error("ProcessBlock() : already have block %d %s", mapBlockIndex[hash]->nHeight, hash.ToString()), 0, "duplicate"); |
|
|
|
|
if (mapOrphanBlocks.count(hash)) |
|
|
|
|
return state.Invalid(error("ProcessBlock() : already have block (orphan) %s", hash.ToString())); |
|
|
|
|
return state.Invalid(error("ProcessBlock() : already have block (orphan) %s", hash.ToString()), 0, "duplicate"); |
|
|
|
|
|
|
|
|
|
// Preliminary checks
|
|
|
|
|
if (!CheckBlock(*pblock, state)) |
|
|
|
|