From 3b7edc03821c79a0a8cd6b81346961193d48e938 Mon Sep 17 00:00:00 2001 From: Scott Nadal Date: Thu, 7 Jun 2012 16:03:01 +0100 Subject: [PATCH] PPCoin: Asking for blocks when checkpoint block is not yet accepted --- src/checkpoints.cpp | 7 +++++-- src/checkpoints.h | 2 +- src/main.cpp | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/checkpoints.cpp b/src/checkpoints.cpp index 4560240..ac86c95 100644 --- a/src/checkpoints.cpp +++ b/src/checkpoints.cpp @@ -62,7 +62,7 @@ namespace Checkpoints CSyncCheckpoint checkpointMessagePending; CCriticalSection cs_hashSyncCheckpoint; - bool CSyncCheckpoint::ProcessSyncCheckpoint() + bool CSyncCheckpoint::ProcessSyncCheckpoint(CNode* pfrom) { if (!CheckSignature()) return false; @@ -71,8 +71,11 @@ namespace Checkpoints { if (!mapBlockIndex.count(hashCheckpoint)) { - // TODO: we don't have this block yet, so ask for it + // We haven't accepted this block, keep the checkpoint as pending checkpointMessagePending = *this; + // Ask this guy to fill in what we're missing + if (pfrom) + pfrom->PushGetBlocks(pindexBest, hashCheckpoint); return false; } diff --git a/src/checkpoints.h b/src/checkpoints.h index 6ef2c14..372f32b 100644 --- a/src/checkpoints.h +++ b/src/checkpoints.h @@ -128,7 +128,7 @@ namespace Checkpoints return true; } - bool ProcessSyncCheckpoint(); + bool ProcessSyncCheckpoint(CNode* pfrom); }; extern uint256 hashSyncCheckpoint; diff --git a/src/main.cpp b/src/main.cpp index 0dca0ae..e1bdac6 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2588,7 +2588,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) Checkpoints::CSyncCheckpoint checkpoint; vRecv >> checkpoint; - if (checkpoint.ProcessSyncCheckpoint()) + if (checkpoint.ProcessSyncCheckpoint(pfrom)) { // Relay pfrom->hashCheckpointKnown = checkpoint.hashCheckpoint; -- 1.7.1