P2P-Netzwerke sind die wichtigste technische Funktion in allen Kryptowährungsimplementierungen. Die dezentrale Natur von Bitcoin, AVAX, Ethereum und anderen erfordert, dass Peers rund um die Uhr miteinander kommunizieren, um sich über Transaktionen, neue Blöcke, Eckpunkte (für DAG-basierte Kryptowährungen wie AVAX) und so weiter zu informieren.

Selbst wenn man die leistungsfähigste Mining-Infrastruktur der Welt hätte, könnte man die Blöcke ohne ein schnelles und stabiles P2P-Netzwerk nicht allen zur Kenntnis bringen. Das Verständnis der Funktionsweise jedes P2P-Systems ist entscheidend, um das Beste aus jeder Kryptowährung zu machen, insbesondere aus 100% netzwerkbasierten wie Avalanche AVAX. Die Vernetzung ist bei Avalanche- und Proof of Stake-Kryptowährungen sogar noch wichtiger, da die Netzwerkkonversation selbst für die Transaktionsvalidierung verwendet wird.

Während Bitcoin einfach Gigawatt an Strom verbrennt, um Blöcke zu Scrape AVAX-Netzwerk-Peers mit avax-python, benötigen Kryptowährungen der nächsten Generation wie AVAX intensive Netzwerkkonversationen, um einen Konsens herzustellen.

In einem solchen Szenario gilt: Je mehr Gleichgesinnte man findet, desto größer sind die Chancen, Transaktionen schnell zu versenden und effizient zu empfangen.

Scrape AVAX-Netzwerk-Peers mit avax-python

Dies gilt insbesondere, wenn Sie einen Infrastrukturdienst wie eine Zahlungslösung oder einen Transaktions-Explorer betreiben. In diesem Artikel beschreiben wir ein Python-Skript, das das AVAX P2P-Netzwerk abhört und versucht, Peers zu finden.

Es gibt Listen der Peers aus, die es beim Abhören des Avalanche-Netzwerks findet. avax-python Peer Scraper Wie Sie wahrscheinlich wissen, ist avax-python eines unserer Lieblingshobbys hier bei crypto.bi. Vor kurzem haben wir beschlossen, einen Netzwerk-Listener zu implementieren, der das AVAX P2P-Netzwerk nach Peers durchsucht. Es handelt sich dabei um eine Art dumbed-down AVAX-Knoten, der einfach Netzwerk-Peer-Gossip-Nachrichten verarbeitet und nach weiteren Peers sucht, mit denen er sich verbinden kann.

AVAX-Protokoll Die AVAX-Protokollspezifikationen besagen, dass Knoten beim Aufbau einer gültigen Verbindung eine Peers-Nachricht an andere Knoten senden. Es wird auch eine Peers-Nachricht als Antwort auf eine GetPeers-Anfrage senden, obwohl dies nicht der einzige Fall ist. Die Referenz-Golang-Implementierung sendet automatisch eine Peer-Liste, sobald ein Peer verbunden ist und ihm eine Versionsnachricht geschickt hat (Teil des Standard-Handshakes), wie man in Zeile 660 von network//peer.go sehen kann: func (p *peer) version(msg Msg) { Scrape AVAX-Netzwerk-Peers mit avax-python p.gotVersion.GetValue() { p.net.log.Verbo(/dropping duplicated version message from %s/, p.id) return } //// .snip.

p.SendPeerList() Wie Sie sehen können, wenn die Golang-Implementierung eine gültige Versionsnachricht empfängt, besteht ihr letzter Befehl in diesem Unterprogramm darin, eine PeerList zurückzusenden. Das macht durchaus Sinn: wenn man versucht, das am weitesten verbreitete P2P-Netzwerk aufzubauen, sollte der Austausch von Peer-Listen im Vorfeld (und regelmäßig während der gesamten Netzwerkkonversation) erfolgen.

Eine Liste von Peers erhalten Basierend auf der Funktionsweise des Go-Codes müssen wir also Folgendes tun, um eine Liste von AVAX-Peers zu erstellen: Verbinden Sie sich mit zufälligen AVAX-Knoten, beginnend mit einer Liste vertrauenswürdiger Beacons.Führen Sie einen ordentlichen Handshake durch.Warten Sie auf PeerList-Nachrichten.

Klingt gut. Versuchen wir es! Im Folgenden sehen Sie, wie wir dies in Python implementiert haben. Zuerst haben wir einen Dummy-Protokoll-Handler implementiert, der alle Nachrichten außer PeerList ignoriert. def peerlist(self, msg: Scrape AVAX-Netzwerk-Peers mit avax-python, peer: Peer): ///Beim Empfang einer Peers-Nachricht sollte ein Knoten die in der Nachricht erscheinenden Knoten mit seiner eigenen Liste von Nachbarn vergleichen und Verbindungen zu allen neuen Knoten herstellen./// self.avax_config.logger().debug(/Handling Scrape AVAX-Netzwerk-Peers mit avax-python : Msg {} Peer {}/.format(msg, peer)) for p in msg.fields: print(p) Wir haben diesen Handler class HostLister(Handler) genannt.

Sie fragen sich vielleicht, warum wir das 5. Feld der empfangenen Nachricht in msg.fields[5] ausgedruckt haben? Hier ist die Definition einer PeerList: Op.PeerList: [Feld.Peers], Moment! Es hat nur EIN Feld. Warum fragen wir dann die Nummer 5 ab? Nun, es stellt sich heraus, dass AVAX-Nachrichten keine Arrays sind. Sie sind Maps! Wir fordern nicht das 6. Feld aus einem nullbasierten Array an! Wir fordern ein Feld an, das zufällig als Nummer 5 kodiert ist, wie Sie hier sehen können: class Field: # Felder, die gepackt werden können.

Diese Werte werden nicht über die Leitung gesendet. VersionStr = 0 NetworkID = 1 NodeID = 2 MyTime = 3 IP = 4 Peers = 5 Das ist es also. Wir müssen jeden Peer in einem Peers-Feld innerhalb der Nachricht lesen, das die Nummer fünf ist. (Wahrscheinlich hätten wir diese Zahl nicht fest kodieren sollen und stattdessen Field.Peers verwenden sollen).

Also, weiter gehts. Als nächstes instanziieren wir einen avax-python Node und übergeben ihm HostLister als Netzwerk-Handler: hl = HostLister(avax_config) avax_config.set(/network_handler/, hl) # [.snip.] node = Node(avax_config=avax_config) Wenn wir dies ausführen, ignoriert der HostLister-Handler alle Netzwerkmeldungen außer PeerList.

Wenn wir bin//list_peers.py ausführen, wird es eine Reihe von IP:Port-Einträgen ausgeben, sobald PeerList-Nachrichten zufällig eintreffen: $ python3 bin//list_peers.py 139.59.44.108:9651 95.179.221.40:9651 3.236.27.81:9651 51.81.80.185:9651 88.157.23.186:9651 13.244.63.181:9651 144.91.115.220:9651 167.99.245.2:9651 51.137.131.148:9651 143.110.174.29:9651 54.184.27.142:9651 95.111.255.251:9651 54.251.208.21:9651 168.119.87.192:9651 208.190.138.53:9651 134.209.146.7:9651 174.138.6.31:9651 144.172.120.104:9651 95.111.241.166:9651 167.86.93.251:9651 184.72.11.192:9651 178.128.23.199:9651 78.141.208.143:9651 188.166.157.92:9651 223.25.78.232:9651 34.71.3.127:9651 .

So, das ist er! Ein AVAX-Peer-Finder! Das Skript wird die Peers ausgeben, sobald eine neue PeerList-Nachricht empfangen wird. Das kann eine Weile dauern. Wenn Sie das Skript einfach laufen lassen, wird es wahrscheinlich jede Stunde oder so ein paar hundert Peers sammeln.

Scrape AVAX-Netzwerk-Peers mit avax-python hoffen, dass Ihnen die Erforschung von Avalanche AVAX genauso viel Spaß macht wie uns. Bleiben Sie dran für weitere Experimente! Links avax-python AVAX-Erkundungstools in Python Vollständiges list_peers.py-Skript


25 30 16