mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-12 15:09:59 +01:00
Merge #17428: p2p: Try to preserve outbound block-relay-only connections during restart
a490d074b3doc: Add anchors.dat to files.md (Hennadii Stepanov)0a85e5a7bcp2p: Try to connect to anchors once (Hennadii Stepanov)5543c7ab28p2p: Fix off-by-one error in fetching address loop (Hennadii Stepanov)4170b46544p2p: Integrate DumpAnchors() and ReadAnchors() into CConnman (Hennadii Stepanov)bad16aff49p2p: Add CConnman::GetCurrentBlockRelayOnlyConns() (Hennadii Stepanov)c29272a157p2p: Add ReadAnchors() (Hennadii Stepanov)567008d2a0p2p: Add DumpAnchors() (Hennadii Stepanov) Pull request description: This is an implementation of #17326: - all (currently 2) outbound block-relay-only connections (#15759) are dumped to `anchors.dat` file - on restart a node tries to connect to the addresses from `anchors.dat` This PR prevents a type of eclipse attack when an attacker exploits a victim node restart to force it to connect to new, probably adversarial, peers. ACKs for top commit: jnewbery: code review ACKa490d074b3laanwj: Code review ACKa490d074b3Tree-SHA512: 0f5098a3882f2814be1aa21de308cd09e6654f4e7054b79f3cfeaf26bc02b814ca271497ed00018d199ee596a8cb9b126acee8b666a29e225b08eb2a49b02ddd
This commit is contained in:
15
src/net.h
15
src/net.h
@@ -173,7 +173,9 @@ enum class ConnectionType {
|
||||
* attacks. By not relaying transactions or addresses, these connections
|
||||
* are harder to detect by a third party, thus helping obfuscate the
|
||||
* network topology. We automatically attempt to open
|
||||
* MAX_BLOCK_RELAY_ONLY_CONNECTIONS using addresses from our AddrMan.
|
||||
* MAX_BLOCK_RELAY_ONLY_ANCHORS using addresses from our anchors.dat. Then
|
||||
* addresses from our AddrMan if MAX_BLOCK_RELAY_ONLY_CONNECTIONS
|
||||
* isn't reached yet.
|
||||
*/
|
||||
BLOCK_RELAY,
|
||||
|
||||
@@ -460,6 +462,11 @@ private:
|
||||
void RecordBytesRecv(uint64_t bytes);
|
||||
void RecordBytesSent(uint64_t bytes);
|
||||
|
||||
/**
|
||||
* Return vector of current BLOCK_RELAY peers.
|
||||
*/
|
||||
std::vector<CAddress> GetCurrentBlockRelayOnlyConns() const;
|
||||
|
||||
// Whether the node should be passed out in ForEach* callbacks
|
||||
static bool NodeFullyConnected(const CNode* pnode);
|
||||
|
||||
@@ -561,6 +568,12 @@ private:
|
||||
/** Pointer to this node's banman. May be nullptr - check existence before dereferencing. */
|
||||
BanMan* m_banman;
|
||||
|
||||
/**
|
||||
* Addresses that were saved during the previous clean shutdown. We'll
|
||||
* attempt to make block-relay-only connections to them.
|
||||
*/
|
||||
std::vector<CAddress> m_anchors;
|
||||
|
||||
/** SipHasher seeds for deterministic randomness */
|
||||
const uint64_t nSeed0, nSeed1;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user