0
0
Fork 0
mirror of https://github.com/bitcoin/bitcoin.git synced 2025-02-02 09:46:52 -05:00

Use addrv2 serialization in anchors.dat

This commit is contained in:
Pieter Wuille 2020-11-26 13:59:44 -08:00
parent 8cd8f37dfe
commit e2f0548b52

View file

@ -23,7 +23,7 @@ bool SerializeDB(Stream& stream, const Data& data)
{ {
// Write and commit header, data // Write and commit header, data
try { try {
CHashWriter hasher(SER_DISK, CLIENT_VERSION); CHashWriter hasher(stream.GetType(), stream.GetVersion());
stream << Params().MessageStart() << data; stream << Params().MessageStart() << data;
hasher << Params().MessageStart() << data; hasher << Params().MessageStart() << data;
stream << hasher.GetHash(); stream << hasher.GetHash();
@ -35,7 +35,7 @@ bool SerializeDB(Stream& stream, const Data& data)
} }
template <typename Data> template <typename Data>
bool SerializeFileDB(const std::string& prefix, const fs::path& path, const Data& data) bool SerializeFileDB(const std::string& prefix, const fs::path& path, const Data& data, int version)
{ {
// Generate random temporary filename // Generate random temporary filename
uint16_t randv = 0; uint16_t randv = 0;
@ -45,7 +45,7 @@ bool SerializeFileDB(const std::string& prefix, const fs::path& path, const Data
// open temp output file, and associate with CAutoFile // open temp output file, and associate with CAutoFile
fs::path pathTmp = gArgs.GetDataDirNet() / tmpfn; fs::path pathTmp = gArgs.GetDataDirNet() / tmpfn;
FILE *file = fsbridge::fopen(pathTmp, "wb"); FILE *file = fsbridge::fopen(pathTmp, "wb");
CAutoFile fileout(file, SER_DISK, CLIENT_VERSION); CAutoFile fileout(file, SER_DISK, version);
if (fileout.IsNull()) { if (fileout.IsNull()) {
fileout.fclose(); fileout.fclose();
remove(pathTmp); remove(pathTmp);
@ -106,11 +106,11 @@ bool DeserializeDB(Stream& stream, Data& data, bool fCheckSum = true)
} }
template <typename Data> template <typename Data>
bool DeserializeFileDB(const fs::path& path, Data& data) bool DeserializeFileDB(const fs::path& path, Data& data, int version)
{ {
// open input file, and associate with CAutoFile // open input file, and associate with CAutoFile
FILE* file = fsbridge::fopen(path, "rb"); FILE* file = fsbridge::fopen(path, "rb");
CAutoFile filein(file, SER_DISK, CLIENT_VERSION); CAutoFile filein(file, SER_DISK, version);
if (filein.IsNull()) { if (filein.IsNull()) {
LogPrintf("Missing or invalid file %s\n", path.string()); LogPrintf("Missing or invalid file %s\n", path.string());
return false; return false;
@ -125,12 +125,12 @@ CBanDB::CBanDB(fs::path ban_list_path) : m_ban_list_path(std::move(ban_list_path
bool CBanDB::Write(const banmap_t& banSet) bool CBanDB::Write(const banmap_t& banSet)
{ {
return SerializeFileDB("banlist", m_ban_list_path, banSet); return SerializeFileDB("banlist", m_ban_list_path, banSet, CLIENT_VERSION);
} }
bool CBanDB::Read(banmap_t& banSet) bool CBanDB::Read(banmap_t& banSet)
{ {
return DeserializeFileDB(m_ban_list_path, banSet); return DeserializeFileDB(m_ban_list_path, banSet, CLIENT_VERSION);
} }
CAddrDB::CAddrDB() CAddrDB::CAddrDB()
@ -140,12 +140,12 @@ CAddrDB::CAddrDB()
bool CAddrDB::Write(const CAddrMan& addr) bool CAddrDB::Write(const CAddrMan& addr)
{ {
return SerializeFileDB("peers", pathAddr, addr); return SerializeFileDB("peers", pathAddr, addr, CLIENT_VERSION);
} }
bool CAddrDB::Read(CAddrMan& addr) bool CAddrDB::Read(CAddrMan& addr)
{ {
return DeserializeFileDB(pathAddr, addr); return DeserializeFileDB(pathAddr, addr, CLIENT_VERSION);
} }
bool CAddrDB::Read(CAddrMan& addr, CDataStream& ssPeers) bool CAddrDB::Read(CAddrMan& addr, CDataStream& ssPeers)
@ -161,13 +161,13 @@ bool CAddrDB::Read(CAddrMan& addr, CDataStream& ssPeers)
void DumpAnchors(const fs::path& anchors_db_path, const std::vector<CAddress>& anchors) void DumpAnchors(const fs::path& anchors_db_path, const std::vector<CAddress>& anchors)
{ {
LOG_TIME_SECONDS(strprintf("Flush %d outbound block-relay-only peer addresses to anchors.dat", anchors.size())); LOG_TIME_SECONDS(strprintf("Flush %d outbound block-relay-only peer addresses to anchors.dat", anchors.size()));
SerializeFileDB("anchors", anchors_db_path, anchors); SerializeFileDB("anchors", anchors_db_path, anchors, CLIENT_VERSION | ADDRV2_FORMAT);
} }
std::vector<CAddress> ReadAnchors(const fs::path& anchors_db_path) std::vector<CAddress> ReadAnchors(const fs::path& anchors_db_path)
{ {
std::vector<CAddress> anchors; std::vector<CAddress> anchors;
if (DeserializeFileDB(anchors_db_path, anchors)) { if (DeserializeFileDB(anchors_db_path, anchors, CLIENT_VERSION | ADDRV2_FORMAT)) {
LogPrintf("Loaded %i addresses from %s\n", anchors.size(), anchors_db_path.filename()); LogPrintf("Loaded %i addresses from %s\n", anchors.size(), anchors_db_path.filename());
} else { } else {
anchors.clear(); anchors.clear();