diff --git a/src/addrdb.h b/src/addrdb.h --- a/src/addrdb.h +++ b/src/addrdb.h @@ -80,4 +80,14 @@ const fs::path &anchors_db_path, const std::vector &anchors); +/** + * Read the anchor IP address database (anchors.dat) + * + * Deleting anchors.dat is intentional as it avoids renewed peering to anchors + * after an unclean shutdown and thus potential exploitation of the anchor peer + * policy. + */ +std::vector ReadAnchors(const CChainParams &chainParams, + const fs::path &anchors_db_path); + #endif // BITCOIN_ADDRDB_H diff --git a/src/addrdb.cpp b/src/addrdb.cpp --- a/src/addrdb.cpp +++ b/src/addrdb.cpp @@ -163,3 +163,17 @@ anchors.size())); SerializeFileDB(chainParams, "anchors", anchors_db_path, anchors); } + +std::vector ReadAnchors(const CChainParams &chainParams, + const fs::path &anchors_db_path) { + std::vector anchors; + if (DeserializeFileDB(chainParams, anchors_db_path, anchors)) { + LogPrintf("Loaded %i addresses from %s\n", anchors.size(), + anchors_db_path.filename()); + } else { + anchors.clear(); + } + + fs::remove(anchors_db_path); + return anchors; +}