Wie viele Adressen werden als Antwort auf eine getaddr-Nachricht gesendet?

Ich habe versucht, die Anzahl der Adressen zu bestimmen, die ein Knoten sendet, wenn er eine getaddr-Nachricht erhält, aber ich bin etwas verwirrt.

Einerseits kann ich auf addrman.h/.cpp Folgendes sehen:

// the maximum percentage of nodes to return in a getaddr call
#define ADDRMAN_GETADDR_MAX_PCT 23

// the maximum number of nodes to return in a getaddr call
#define ADDRMAN_GETADDR_MAX 2500

[...]

int nNodes = ADDRMAN_GETADDR_MAX_PCT*vRandom.size()/100;
if (nNodes > ADDRMAN_GETADDR_MAX)
    nNodes = ADDRMAN_GETADDR_MAX;

Es scheint also, dass die Anzahl der gesendeten Adressen die kleinere der beiden Bedingungen ist, nämlich 23 % der (aktiven bekannten) Knoten oder 2500 Knoten.

Aber andererseits aus dem Bitcoin-Wiki :

Die getaddr-Nachricht sendet eine Anfrage an einen Knoten, der nach Informationen über bekannte aktive Peers fragt, um bei der Identifizierung potenzieller Knoten im Netzwerk zu helfen. Die Antwort auf den Empfang dieser Nachricht besteht darin, eine Addr-Nachricht mit einem oder mehreren Peers aus einer Datenbank bekannter aktiver Peers zu übertragen.

...und...

[Über Adressnachrichten] Wenn der Absender mehr als 1000 Adressen gesendet hat, werden sie alle ignoriert.

Warum also versucht ein Knoten, 2500 Adressen zu senden, wenn der Empfänger sie verwerfen wird? Warum nicht höchstens 1000 Adressen senden?

Antworten (2)

Das Ergebnis von CAddrMan::GetAddr()wird an gespeist CNode::PushAddress, das Adressen herausfiltert, die der Peer bereits hat, und sie in einen temporären Puffer von bis zu 1000 Adressen einfügt.

Später, in SendMessages(), wird der Inhalt dieses Puffers regelmäßig gesendet.

Laut Wiki scheint es sich um "laufende "addr"-Werbung" zu handeln, also um unerwünschte Werbung.