|
|
@ -2377,7 +2377,6 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
CTxUndo undoDummy; |
|
|
|
if (i > 0) { |
|
|
|
blockundo.vtxundo.push_back(CTxUndo()); |
|
|
@ -2443,6 +2442,41 @@ bool ConnectBlock(const CBlock& block, CValidationState& state, CBlockIndex* pin |
|
|
|
if (!pblocktree->WriteTxIndex(vPos)) |
|
|
|
return AbortNode(state, "Failed to write transaction index"); |
|
|
|
|
|
|
|
if (fAddressIndex) { |
|
|
|
if (!pblocktree->WriteAddressIndex(addressIndex)) { |
|
|
|
return AbortNode(state, "Failed to write address index"); |
|
|
|
} |
|
|
|
|
|
|
|
if (!pblocktree->UpdateAddressUnspentIndex(addressUnspentIndex)) { |
|
|
|
return AbortNode(state, "Failed to write address unspent index"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (fSpentIndex) |
|
|
|
if (!pblocktree->UpdateSpentIndex(spentIndex)) |
|
|
|
return AbortNode(state, "Failed to write transaction index"); |
|
|
|
|
|
|
|
if (fTimestampIndex) { |
|
|
|
unsigned int logicalTS = pindex->nTime; |
|
|
|
unsigned int prevLogicalTS = 0; |
|
|
|
|
|
|
|
// retrieve logical timestamp of the previous block
|
|
|
|
if (pindex->pprev) |
|
|
|
if (!pblocktree->ReadTimestampBlockIndex(pindex->pprev->GetBlockHash(), prevLogicalTS)) |
|
|
|
LogPrintf("%s: Failed to read previous block's logical timestamp\n", __func__); |
|
|
|
|
|
|
|
if (logicalTS <= prevLogicalTS) { |
|
|
|
logicalTS = prevLogicalTS + 1; |
|
|
|
LogPrintf("%s: Previous logical timestamp is newer Actual[%d] prevLogical[%d] Logical[%d]\n", __func__, pindex->nTime, prevLogicalTS, logicalTS); |
|
|
|
} |
|
|
|
|
|
|
|
if (!pblocktree->WriteTimestampIndex(CTimestampIndexKey(logicalTS, pindex->GetBlockHash()))) |
|
|
|
return AbortNode(state, "Failed to write timestamp index"); |
|
|
|
|
|
|
|
if (!pblocktree->WriteTimestampBlockIndex(CTimestampBlockIndexKey(pindex->GetBlockHash()), CTimestampBlockIndexValue(logicalTS))) |
|
|
|
return AbortNode(state, "Failed to write blockhash index"); |
|
|
|
} |
|
|
|
|
|
|
|
// add this block to the view's block chain
|
|
|
|
view.SetBestBlock(pindex->GetBlockHash()); |
|
|
|
|
|
|
|