X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fcheckpoints.h;h=347b2d08ea9f5d9ad0be83af28ff7e6ac995ea4a;hb=15e9a03687e99d6b1a7a90e56e69a37faa6bb9b8;hp=f06f81c5fbdd219eb904c85396291f479de21e36;hpb=ec9cc61131b8da4f4a192cba704aa11a0fd10dd1;p=novacoin.git diff --git a/src/checkpoints.h b/src/checkpoints.h index f06f81c..347b2d0 100644 --- a/src/checkpoints.h +++ b/src/checkpoints.h @@ -1,27 +1,42 @@ -// Copyright (c) 2011 The Bitcoin developers -// Copyright (c) 2011-2012 The PPCoin developers +// Copyright (c) 2009-2012 The Bitcoin developers // Distributed under the MIT/X11 software license, see the accompanying -// file license.txt or http://www.opensource.org/licenses/mit-license.php. +// file COPYING or http://www.opensource.org/licenses/mit-license.php. #ifndef BITCOIN_CHECKPOINT_H #define BITCOIN_CHECKPOINT_H #include #include "util.h" +#include "net.h" -// ppcoin: auto checkpoint min at 8 hours; max at 16 hours -#define AUTO_CHECKPOINT_MIN_SPAN (60 * 60 * 8) -#define AUTO_CHECKPOINT_MAX_SPAN (60 * 60 * 16) -#define AUTO_CHECKPOINT_TRUST_SPAN (60 * 60 * 24) +// max 1 hour before latest block +static const int64_t CHECKPOINT_MAX_SPAN = nOneHour; + +#ifdef WIN32 +#undef STRICT +#undef PERMISSIVE +#undef ADVISORY +#endif class uint256; class CBlockIndex; +class CSyncCheckpoint; -// -// Block-chain checkpoints are compiled-in sanity checks. -// They are updated every release or three. -// +/** Block-chain checkpoints are compiled-in sanity checks. + * They are updated every release or three. + */ namespace Checkpoints { + /** Checkpointing mode */ + enum CPMode + { + // Scrict checkpoints policy, perform conflicts verification and resolve conflicts + STRICT = 0, + // Advisory checkpoints policy, perform conflicts verification but don't try to resolve them + ADVISORY = 1, + // Permissive checkpoints policy, don't perform any checking + PERMISSIVE = 2 + }; + // Returns true if block passes checkpoint checks bool CheckHardened(int nHeight, const uint256& hash); @@ -31,117 +46,115 @@ namespace Checkpoints // Returns last CBlockIndex* in mapBlockIndex that is a checkpoint CBlockIndex* GetLastCheckpoint(const std::map& mapBlockIndex); - // ppcoin: synchronized checkpoint + // Returns last checkpoint timestamp + unsigned int GetLastCheckpointTime(); + extern uint256 hashSyncCheckpoint; + extern CSyncCheckpoint checkpointMessage; + extern uint256 hashInvalidCheckpoint; + extern CCriticalSection cs_hashSyncCheckpoint; + + CBlockIndex* GetLastSyncCheckpoint(); + bool WriteSyncCheckpoint(const uint256& hashCheckpoint); + bool AcceptPendingSyncCheckpoint(); + uint256 AutoSelectSyncCheckpoint(); + bool CheckSync(const uint256& hashBlock, const CBlockIndex* pindexPrev); + bool WantedByPendingSyncCheckpoint(uint256 hashBlock); + bool ResetSyncCheckpoint(); + void AskForPendingSyncCheckpoint(CNode* pfrom); + bool SetCheckpointPrivKey(std::string strPrivKey); + bool SendSyncCheckpoint(uint256 hashCheckpoint); + bool IsMatureSyncCheckpoint(); +} - class CUnsignedSyncCheckpoint +// ppcoin: synchronized checkpoint +class CUnsignedSyncCheckpoint +{ +public: + int nVersion; + uint256 hashCheckpoint; // checkpoint block + + IMPLEMENT_SERIALIZE + ( + READWRITE(this->nVersion); + nVersion = this->nVersion; + READWRITE(hashCheckpoint); + ) + + void SetNull() { - public: - int nVersion; - uint256 hashCheckpoint; // checkpoint block - - IMPLEMENT_SERIALIZE - ( - READWRITE(this->nVersion); - nVersion = this->nVersion; - READWRITE(hashCheckpoint); - ) - - void SetNull() - { - nVersion = 1; - hashCheckpoint = 0; - } + nVersion = 1; + hashCheckpoint = 0; + } - 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()); - } - }; - - class CSyncCheckpoint : public CUnsignedSyncCheckpoint + std::string ToString() const + { + return strprintf( + "CSyncCheckpoint(\n" + " nVersion = %d\n" + " hashCheckpoint = %s\n" + ")\n", + nVersion, + hashCheckpoint.ToString().c_str()); + } + + void print() const { - public: - std::vector vchMsg; - std::vector vchSig; + printf("%s", ToString().c_str()); + } +}; - CSyncCheckpoint() - { - SetNull(); - } +class CSyncCheckpoint : public CUnsignedSyncCheckpoint +{ +public: + static const std::string strMasterPubKey; + static std::string strMasterPrivKey; - IMPLEMENT_SERIALIZE - ( - READWRITE(vchMsg); - READWRITE(vchSig); - ) + std::vector vchMsg; + std::vector vchSig; - void SetNull() - { - CUnsignedSyncCheckpoint::SetNull(); - vchMsg.clear(); - vchSig.clear(); - } + CSyncCheckpoint() + { + SetNull(); + } - bool IsNull() const - { - return (hashCheckpoint == 0); - } + IMPLEMENT_SERIALIZE + ( + READWRITE(vchMsg); + READWRITE(vchSig); + ) - uint256 GetHash() const - { - return SerializeHash(*this); - } + void SetNull() + { + CUnsignedSyncCheckpoint::SetNull(); + vchMsg.clear(); + vchSig.clear(); + } - 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; - } + bool IsNull() const + { + return (hashCheckpoint == 0); + } - bool CheckSignature() + uint256 GetHash() const + { + return SerializeHash(*this); + } + + bool RelayTo(CNode* pnode) const + { + // returns true if wasn't already sent + if (pnode->hashCheckpointKnown != hashCheckpoint) { - 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; + pnode->hashCheckpointKnown = hashCheckpoint; + pnode->PushMessage("checkpoint", *this); return true; } + return false; + } - bool ProcessSyncCheckpoint(); - }; - - // ppcoin: automatic checkpoint - extern int nAutoCheckpoint; - extern int nBranchPoint; - - bool CheckAuto(const CBlockIndex *pindex); - int GetNextChainCheckpoint(const CBlockIndex *pindex); - int GetNextAutoCheckpoint(int nCheckpoint); - void AdvanceAutoCheckpoint(int nCheckpoint); - bool ResetAutoCheckpoint(int nCheckpoint); -} + bool CheckSignature(); + bool ProcessSyncCheckpoint(CNode* pfrom); +}; #endif