f13e512712
Build All Platforms / test-linux-unit (push) Failing after 40s
Build All Platforms / build-linux-qt (push) Failing after 40s
Build All Platforms / build-linux-daemon (push) Failing after 40s
Build All Platforms / build-windows-qt (push) Has been cancelled
Build All Platforms / build-windows-daemon (push) Has been cancelled
Build All Platforms / build-macos (push) Has been cancelled
Build All Platforms / release (push) Has been cancelled
Build All Platforms / Trigger TRI-PI ARM64 Build (push) Has been cancelled
M1.2 (mechanical):
Convert every CTxDB& parameter and reference across main.{h,cpp},
wallet.{h,cpp}, and smessage.cpp to CTxDBBase&. Local instantiations
like `CTxDB txdb("r");` are deliberately left as concrete LevelDB —
they'll move behind a factory in M1.4 once the parity harness exists.
CTxDB IS-A CTxDBBase, so all existing call sites continue to compile:
a CTxDB instance binds to a CTxDBBase& parameter automatically.
Forward declaration `class CTxDB;` in main.h replaced with
`class CTxDBBase;`.
Parallel work (snapshotnet + version bump to 5.9.4 + checkpoints/init
/protocol/version edits) included so origin/master matches the local
working tree in one push.
NOT YET COMPILE-TESTED: pushed at the user's explicit request before
the build verification step. If CI fails, expected breakage is in
files that include main.h transitively but not txdb-base.h — fix is
to add `#include "txdb-base.h"` (or rely on the existing txdb.h which
pulls it in).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
165 lines
4.3 KiB
C++
165 lines
4.3 KiB
C++
// Copyright (c) 2009-2012 The Bitcoin developers
|
|
// Distributed under the MIT/X11 software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
#ifndef TRIANGLES_CHECKPOINT_H
|
|
#define TRIANGLES_CHECKPOINT_H
|
|
|
|
#include <map>
|
|
#include "net.h"
|
|
#include "util.h"
|
|
|
|
#define CHECKPOINT_MAX_SPAN (60 * 60 * 2) // max 2 hours before latest block
|
|
|
|
#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.
|
|
*/
|
|
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);
|
|
|
|
// Returns true only if (nHeight, hash) is an exact entry in mapCheckpoints
|
|
bool IsKnownCheckpoint(int nHeight, const uint256& hash);
|
|
|
|
// Return conservative estimate of total number of blocks, 0 if unknown
|
|
int GetTotalBlocksEstimate();
|
|
|
|
// Return the highest checkpoint height that has a published UTXO snapshot
|
|
// hash, along with the snapshot's file SHA256. Returns 0 height if none.
|
|
int GetBestSnapshotHeight();
|
|
bool GetSnapshotHash(int nHeight, uint256& fileHashOut);
|
|
|
|
// Returns last CBlockIndex* in mapBlockIndex that is a checkpoint
|
|
CBlockIndex* GetLastCheckpoint(const std::map<uint256, CBlockIndex*>& mapBlockIndex);
|
|
|
|
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();
|
|
}
|
|
|
|
// triangles: 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
|