123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- // ECOin - Copyright (c) - 2014/2021 - GPLv3 - epsylon@riseup.net (https://03c8.net)
- #ifndef ECOIN_CHECKPOINT_H
- #define ECOIN_CHECKPOINT_H
- #include <map>
- #include "net.h"
- #include "util.h"
- #define CHECKPOINT_MAX_SPAN (60) // max 1 hour before latest block
- #ifdef WIN32
- #undef STRICT
- #undef PERMISSIVE
- #undef ADVISORY
- #endif
- class uint256;
- class CBlockIndex;
- class CSyncCheckpoint;
- namespace Checkpoints
- {
- 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);
- // Return conservative estimate of total number of blocks, 0 if unknown
- int GetTotalBlocksEstimate();
- // Returns last CBlockIndex* in mapBlockIndex that is a checkpoint
- CBlockIndex* GetLastCheckpoint(const std::map<uint256, CBlockIndex*>& mapBlockIndex);
- // Returns last checkpoint timestamp
- 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();
- }
- // ecoin: synchronized checkpoint
- class CUnsignedSyncCheckpoint
- {
- public:
- int nVersion;
- uint256 hashCheckpoint; // checkpoint block
- IMPLEMENT_SERIALIZE
- (
- READWRITE(this->nVersion);
- nVersion = this->nVersion;
- READWRITE(hashCheckpoint);
- )
- void SetNull()
- {
- 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
- {
- public:
- static const std::string strMasterPubKey;
- static std::string strMasterPrivKey;
- std::vector<unsigned char> vchMsg;
- std::vector<unsigned char> vchSig;
- CSyncCheckpoint()
- {
- SetNull();
- }
- IMPLEMENT_SERIALIZE
- (
- READWRITE(vchMsg);
- READWRITE(vchSig);
- )
- void SetNull()
- {
- CUnsignedSyncCheckpoint::SetNull();
- vchMsg.clear();
- vchSig.clear();
- }
- bool IsNull() const
- {
- return (hashCheckpoint == 0);
- }
- uint256 GetHash() const
- {
- return SerializeHash(*this);
- }
- 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 CheckSignature();
- bool ProcessSyncCheckpoint(CNode* pfrom);
- };
- #endif
|