X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fcheckpoints.h;h=8ea1ec7f430c07a8bababa3b4cdcae9a56b96304;hb=d56fde1346ccd32ca6a6e98d9a0a84c8fa9939e7;hp=f06f81c5fbdd219eb904c85396291f479de21e36;hpb=ec9cc61131b8da4f4a192cba704aa11a0fd10dd1;p=novacoin.git diff --git a/src/checkpoints.h b/src/checkpoints.h index f06f81c..8ea1ec7 100644 --- a/src/checkpoints.h +++ b/src/checkpoints.h @@ -16,122 +16,126 @@ class uint256; class CBlockIndex; -// -// Block-chain checkpoints are compiled-in sanity checks. -// They are updated every release or three. -// -namespace Checkpoints +// ppcoin: synchronized checkpoint +class CUnsignedSyncCheckpoint { - // Returns true if block passes checkpoint checks - bool CheckHardened(int nHeight, const uint256& hash); - - // Return conservative estimate of total number of blocks, 0 if unknown - int GetTotalBlocksEstimate(); +public: + int nVersion; + uint256 hashCheckpoint; // checkpoint block + + IMPLEMENT_SERIALIZE + ( + READWRITE(this->nVersion); + nVersion = this->nVersion; + READWRITE(hashCheckpoint); + ) + + void SetNull() + { + nVersion = 1; + hashCheckpoint = 0; + } - // Returns last CBlockIndex* in mapBlockIndex that is a checkpoint - CBlockIndex* GetLastCheckpoint(const std::map& mapBlockIndex); + std::string ToString() const + { + return strprintf( + "CSyncCheckpoint(\n" + " nVersion = %d\n" + " hashCheckpoint = %s\n" + ")\n", + nVersion, + hashCheckpoint.ToString().c_str()); + } + + void print() const + { + printf("%s", ToString().c_str()); + } +}; - // ppcoin: synchronized checkpoint - extern uint256 hashSyncCheckpoint; +class CSyncCheckpoint : public CUnsignedSyncCheckpoint +{ +public: + std::vector vchMsg; + std::vector vchSig; - class CUnsignedSyncCheckpoint + CSyncCheckpoint() { - public: - int nVersion; - uint256 hashCheckpoint; // checkpoint block - - IMPLEMENT_SERIALIZE - ( - READWRITE(this->nVersion); - nVersion = this->nVersion; - READWRITE(hashCheckpoint); - ) - - void SetNull() - { - nVersion = 1; - hashCheckpoint = 0; - } + SetNull(); + } - std::string ToString() const - { - return strprintf( - "CSyncCheckpoint(\n" - " nVersion = %d\n" - " hashCheckpoint = %s\n" - ")\n", - nVersion, - hashCheckpoint.ToString().c_str()); - } + IMPLEMENT_SERIALIZE + ( + READWRITE(vchMsg); + READWRITE(vchSig); + ) - void print() const - { - printf("%s", ToString().c_str()); - } - }; + void SetNull() + { + CUnsignedSyncCheckpoint::SetNull(); + vchMsg.clear(); + vchSig.clear(); + } - class CSyncCheckpoint : public CUnsignedSyncCheckpoint + bool IsNull() const { - public: - std::vector vchMsg; - std::vector vchSig; + return (hashCheckpoint == 0); + } - CSyncCheckpoint() + uint256 GetHash() const + { + return SerializeHash(*this); + } + + bool RelayTo(CNode* pnode) const + { + // returns true if wasn't already sent + if (pnode->hashCheckpointKnown != hashCheckpoint) { - SetNull(); + pnode->hashCheckpointKnown = hashCheckpoint; + pnode->PushMessage("checkpoint", *this); + return true; } + return false; + } - IMPLEMENT_SERIALIZE - ( - READWRITE(vchMsg); - READWRITE(vchSig); - ) + bool CheckSignature() + { + CKey key; + if (!key.SetPubKey(ParseHex("04ea21daea8c15559870b5e93750ddc2f0c16bd0cb16636ba88c0746cfac07912ec7ad14111cc4aedda12c2687c920c7b7b62fd67ca14eed53f2d1704ec72362ce"))) + return error("CSyncCheckpoint::CheckSignature() : SetPubKey failed"); + if (!key.Verify(Hash(vchMsg.begin(), vchMsg.end()), vchSig)) + return error("CSyncCheckpoint::CheckSignature() : verify signature failed"); - void SetNull() - { - CUnsignedSyncCheckpoint::SetNull(); - vchMsg.clear(); - vchSig.clear(); - } + // Now unserialize the data + CDataStream sMsg(vchMsg); + sMsg >> *(CUnsignedSyncCheckpoint*)this; + return true; + } - bool IsNull() const - { - return (hashCheckpoint == 0); - } + bool ProcessSyncCheckpoint(CNode* pfrom); +}; - uint256 GetHash() const - { - return SerializeHash(*this); - } +// +// Block-chain checkpoints are compiled-in sanity checks. +// They are updated every release or three. +// +namespace Checkpoints +{ + // Returns true if block passes checkpoint checks + bool CheckHardened(int nHeight, const uint256& hash); - bool 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; - } + // Return conservative estimate of total number of blocks, 0 if unknown + int GetTotalBlocksEstimate(); - bool CheckSignature() - { - CKey key; - if (!key.SetPubKey(ParseHex("0487ca85b6ae9d311f996c7616d20d0c88a5b4f07d25e78f419019f35cce6522acf978b2d99f0e7a58db1f120439e5c1889266927854aa57c93956c2569188a539"))) - return error("CSyncCheckpoint::CheckSignature() : SetPubKey failed"); - if (!key.Verify(Hash(vchMsg.begin(), vchMsg.end()), vchSig)) - return error("CSyncCheckpoint::CheckSignature() : verify signature failed"); - - // Now unserialize the data - CDataStream sMsg(vchMsg); - sMsg >> *(CUnsignedSyncCheckpoint*)this; - return true; - } + // Returns last CBlockIndex* in mapBlockIndex that is a checkpoint + CBlockIndex* GetLastCheckpoint(const std::map& mapBlockIndex); + + extern uint256 hashSyncCheckpoint; + extern CSyncCheckpoint checkpointMessage; + extern CCriticalSection cs_hashSyncCheckpoint; - bool ProcessSyncCheckpoint(); - }; + bool AcceptPendingSyncCheckpoint(uint256 hashAcceptedBlock); // ppcoin: automatic checkpoint extern int nAutoCheckpoint;