mirror of
https://github.com/dashpay/dash.git
synced 2024-12-27 04:52:59 +01:00
Don't store or send side-chain blocks lower than last checkpoint.
This commit is contained in:
parent
dd7c1cf534
commit
d8b4b49667
25
src/main.cpp
25
src/main.cpp
@ -2154,6 +2154,11 @@ bool AcceptBlock(CBlock& block, CValidationState& state, CDiskBlockPos* dbp)
|
|||||||
return state.DoS(100, error("AcceptBlock() : rejected by checkpoint lock-in at %d", nHeight),
|
return state.DoS(100, error("AcceptBlock() : rejected by checkpoint lock-in at %d", nHeight),
|
||||||
REJECT_CHECKPOINT, "checkpoint mismatch");
|
REJECT_CHECKPOINT, "checkpoint mismatch");
|
||||||
|
|
||||||
|
// Don't accept any forks from the main chain prior to last checkpoint
|
||||||
|
CBlockIndex* pcheckpoint = Checkpoints::GetLastCheckpoint(mapBlockIndex);
|
||||||
|
if (pcheckpoint && nHeight < pcheckpoint->nHeight)
|
||||||
|
return state.DoS(100, error("AcceptBlock() : forked chain older than last checkpoint (height %d)", nHeight));
|
||||||
|
|
||||||
// Reject block.nVersion=1 blocks when 95% (75% on testnet) of the network has upgraded:
|
// Reject block.nVersion=1 blocks when 95% (75% on testnet) of the network has upgraded:
|
||||||
if (block.nVersion < 2)
|
if (block.nVersion < 2)
|
||||||
{
|
{
|
||||||
@ -3025,10 +3030,28 @@ void static ProcessGetData(CNode* pfrom)
|
|||||||
|
|
||||||
if (inv.type == MSG_BLOCK || inv.type == MSG_FILTERED_BLOCK)
|
if (inv.type == MSG_BLOCK || inv.type == MSG_FILTERED_BLOCK)
|
||||||
{
|
{
|
||||||
// Send block from disk
|
bool send = false;
|
||||||
map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.find(inv.hash);
|
map<uint256, CBlockIndex*>::iterator mi = mapBlockIndex.find(inv.hash);
|
||||||
if (mi != mapBlockIndex.end())
|
if (mi != mapBlockIndex.end())
|
||||||
{
|
{
|
||||||
|
// If the requested block is at a height below our last
|
||||||
|
// checkpoint, only serve it if it's in the checkpointed chain
|
||||||
|
int nHeight = mi->second->nHeight;
|
||||||
|
CBlockIndex* pcheckpoint = Checkpoints::GetLastCheckpoint(mapBlockIndex);
|
||||||
|
if (pcheckpoint && nHeight < pcheckpoint->nHeight) {
|
||||||
|
if (!chainActive.Contains(mi->second))
|
||||||
|
{
|
||||||
|
LogPrintf("ProcessGetData(): ignoring request for old block that isn't in the main chain\n");
|
||||||
|
} else {
|
||||||
|
send = true;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
send = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (send)
|
||||||
|
{
|
||||||
|
// Send block from disk
|
||||||
CBlock block;
|
CBlock block;
|
||||||
ReadBlockFromDisk(block, (*mi).second);
|
ReadBlockFromDisk(block, (*mi).second);
|
||||||
if (inv.type == MSG_BLOCK)
|
if (inv.type == MSG_BLOCK)
|
||||||
|
Loading…
Reference in New Issue
Block a user