using namespace std;
+extern unsigned int nStakeMinAge;
+
namespace Checkpoints
{
typedef map<int, pair<uint256, unsigned int> > MapCheckpoints;
}
// ppcoin: only descendant of current sync-checkpoint is allowed
- bool ValidateSyncCheckpoint(uint256 hashCheckpoint)
+ bool ValidateSyncCheckpoint(const uint256 &hashCheckpoint)
{
if (!mapBlockIndex.count(hashSyncCheckpoint))
return error("ValidateSyncCheckpoint: block index missing for current sync-checkpoint %s", hashSyncCheckpoint.ToString().c_str());
return true;
}
- bool WantedByPendingSyncCheckpoint(uint256 hashBlock)
+ bool WantedByPendingSyncCheckpoint(const uint256 &hashBlock)
{
LOCK(cs_hashSyncCheckpoint);
if (hashPendingCheckpoint == 0)
pfrom->AskFor(CInv(MSG_BLOCK, hashPendingCheckpoint));
}
- bool SetCheckpointPrivKey(string strPrivKey)
+ bool SetCheckpointPrivKey(const string &strPrivKey)
{
// Test signing a sync-checkpoint with genesis block
CSyncCheckpoint checkpoint;
return true;
}
- bool SendSyncCheckpoint(uint256 hashCheckpoint)
+ bool SendSyncCheckpoint(const uint256 &hashCheckpoint)
{
CSyncCheckpoint checkpoint;
checkpoint.hashCheckpoint = hashCheckpoint;
}
}
+void CUnsignedSyncCheckpoint::SetNull()
+{
+ nVersion = 1;
+ hashCheckpoint = 0;
+}
+
+std::string CUnsignedSyncCheckpoint::ToString() const
+{
+ return strprintf(
+ "CSyncCheckpoint(\n"
+ " nVersion = %" PRId32 "\n"
+ " hashCheckpoint = %s\n"
+ ")\n",
+ nVersion,
+ hashCheckpoint.ToString().c_str());
+}
+
// ppcoin: sync-checkpoint master key
const string CSyncCheckpoint::strMasterPubKey = "04a51b735f816de4ec3f891d5b38bbc91e1f7245c7c08d17990760b86b4d8fc3910a850ffecf73bfa8886f01739a0c4c4322201282d07b6e48ce931cc92af94850";
string CSyncCheckpoint::strMasterPrivKey = "";
+CSyncCheckpoint::CSyncCheckpoint()
+{
+ SetNull();
+}
+
+void CSyncCheckpoint::SetNull()
+{
+ CUnsignedSyncCheckpoint::SetNull();
+ vchMsg.clear();
+ vchSig.clear();
+}
+
+bool CSyncCheckpoint::IsNull() const
+{
+ return (hashCheckpoint == 0);
+}
+
+uint256 CSyncCheckpoint::GetHash() const
+{
+ return SerializeHash(*this);
+}
+
+bool CSyncCheckpoint::RelayTo(CNode* pnode) const
+{
+ // returns true if wasn't already sent
+ if (pnode->hashCheckpointKnown != hashCheckpoint)
+ {
+ pnode->hashCheckpointKnown = hashCheckpoint;
+ pnode->PushMessage("checkpoint", *this);
+ return true;
+ }
+ return false;
+}
+
// ppcoin: verify signature of sync-checkpoint message
bool CSyncCheckpoint::CheckSignature()
{
return false;
CTxDB txdb;
- CBlockIndex* pindexCheckpoint = mapBlockIndex[hashCheckpoint];
+ auto pindexCheckpoint = mapBlockIndex[hashCheckpoint];
if (!pindexCheckpoint->IsInMainChain())
{
// checkpoint chain received but not yet main chain