Protokoll-Dokumentation

Protokoll-Dokumentation

diese pagina beschreibt das Verhalten des Referenz-Client. Das Bitcoin-Protokoll wird durch das Verhalten der Referenz Client angegeben, nicht von dieser pagina. Ter insbesondere während dieser pagina recht ist fertig das Netzwerkprotokoll te beschreiben, es nicht versucht, alle Regeln für Block oder Transaktion Gültigkeit aufzulisten.

Typnamen te dieser Dokumentation verwendet werden, sind aus dem C99-Standard.

Zum Protokoll te Bergbau, siehe getblocktemplate.

Inhalt

gemeinsame Standards

Hashes

Normalerweise, wenn ein Hash innerhalb bitcoin berechnet wird zweimal berechnet. Die meiste Zeit SHA-256-Hashes verwendet werden jedoch RIPEMD-160 wird auch verwendet, wenn eine kürzere Hash wünschenswert ist (zum Beispiel wenn eine Adresse bitcoin erstellen).

Beispiel doppelsträngiger SHA-256-Kodierung der Zeichenfolge „Hallo“:

Für Bitcoin-Adressen (RIPEMD-160) dies würde:

Hash-Baum

Merkle Bäume sind binäre Bäume von Hashes. Merkle Bäume ter bitcoin Verwendung eines Dual SHA-256, SHA-256 Hash-Wert des SHA-256 Hash von etwas.

Wenn, als eine Reihe te Baum (mit Ausnahme der Wurzel des Baumes) bilden, wäre es eine ungerade Anzahl von Elementen haben, die letzte Doppel Hash dupliziert, um sicherzustellen, dass die Reihe eine gerade Anzahl von Hash-Werte hat.

Erste mit dem geordneten Doppel-SHA-256-Hashes des Bytes rivulets der Transaktionen ter den Block die untere Reihe des Baumes bilden.

Dann darüber die Reihe besteht aus Hälfte dieser Zahl von Hashes. Jeder Eintrag ist die Doppel-SHA-256 der 64-Byte-Verkettungs der entsprechenden beiden Hashes darunter ter den Baum.

Diese proces rekursiv wiederholt, bis eine Zeile wij erreichen, bestehend aus nur einem einzigen doppelt hash. Dies ist das Merkle Wurzel des Baumes.

Zum Beispiel vorstellen, einen Block mit drei Transaktionen ein, b und c. Der Hash-Baum ist:

d7 ist die Merkle Wurzel der drei Transaktionen ter diesen Block.

Hinweis: Hashes ter Merkle-Baum angezeigt ter der Block-Explorer ist von Little-Endian-Notation. Bei einigen Implementierungen und Berechnungen, auf dem onvriendelijk Bedarf rückgängig gemacht werden, bevor sie gehasht werden, und wieder nach der Hashing-Operation.

Unterschriften

Öffentliche Schlüssel (ter Skripte) sind spil 04 gegeben <, x>, <, y>, wobei x und y 32 Byte big-endian ganzen Zahlen, die Koordinaten eines Punktes auf der Kurve oder Terpolymere komprimierter Form gegeben spil bedeutet <, sign>, <, x>, wobei <, sign> ist 0x02 wenn y ist sogar und 0x03 wenn y ist ungerade.

Signaturen verwendet DIE-Codierung den packen r und s Komponenten in einen einzigen Byte-Strom (dies ist auch das, was OpenSSL standardmäßig produziert).

Transaktions Verification

Die Transaktionen werden verschlüsselt Aufzeichnungen unterzeichnet, das Eigentum an Bitcoins an die frische Adressen zuweisen. Transaktionen Eingänge – Aufzeichnungen, die die Mittel aus anderen früheren Transaktionen verweisen – und Ausgänge – Aufzeichnungen, die den frischen Inhaber der übertragenen Bitcoins und welche verwiesen spil Eingänge zukünftigen Transaktionen werden bestimmen te spil diese Mittel respent sind.

Jeder Eingang vereistes hat eine kryptographische digitale Signatur, die die Mittel aus dem Stand der Transaktion aufschließt. Nur die Person, die passenden privaten Schlüssel besitzen, die Lage ist, eine zufriedenstellende Signatur zu erstellen, dieser te Effekt sorgt dafür, dass die Mittel nur von ihren Besitzern ausgegeben werden.

Jeder Ausgabe bestimmt, welches Bitcoin-Adresse (oder andere Kriterien, siehe Script) ist der Empfänger der Mittel.

Te eine Transaktion, die Summe aller Eingänge vereiste oder größer ist als die Summe aller Ausgänge gleich sein. Wenn die Eingänge die Ausgänge überschreitet, wird die Differenz einen Transaktions toverfee betrachtet und einlösbar durch wer erste die Transaktion in die Blockkette umfasst.

Eine spezielle zuigeling Transaktionsart, einer coinbase Transaktion aufgerufen, hat keine Eingänge. Es wird von Bergleuten geschaffen, und es gibt eine coinbase Transaktion vanaf Block. Da jeder Block (für die ersten 210.000 Blöcke beispielsweise 50 BTC), die erste Transaktion von einem Block ist, mit wenigen Ausnahmen mit einem Preis von frisch erstellt Bitcoins kommt, die Transaktion, die diese Münzen an den Empfänger (die Bergmann) gewährt. Te Neben den frisch erstellten Bitcoins, die coinbase Transaktion wird auch für die Zuordnung des Empfängers der Transaktionsgebühren verwendet, die in den anderen Geschäften bezahlt wurden ter dem gleichen Block enthalten ist. Die coinbase Transaktion kann den gesamten Preis an einen einzigen Bitcoin Adresse zuweisen oder spaltete es tér Abschnitte unter zahlreichen Adressen, wie jede andere Transaktion. Coinbase Transaktionen enthalten immer gibt die Summe des Blocks Preis in Höhe von insgesamt sowie alle Transaktionsgebühren aus den anderen Geschäften gesammelt te den gleichen Block.

Die coinbase Transaktion ter Block Null kann nicht ausgegeben werden. Dies ist auf eine Marotte der Referenz-Client-Implementierung, die das Potenzial für eine Blockkette Gabel öffnen würde, wenn einige Knoten die Ausgaben akzeptiert und andere nicht [1].

Die meisten Bitcoin Ausgaben belasten die frisch übertragen Münzen mit einem einzigen ECDSA privaten Schlüssel. Die eigentliche Aufzeichnung mit Ein- und Ausgängen gespeichert ist nicht unbedingt ein Schlüssel, aber ein Skript. Bitcoin verwendet ein interpretierte Skriptsystem, um zu bestimmen, ob ein Kriterium des Ausgangs erfreut hat, BIETET, mit der aufwendigeren Operationen möglich sind, wie zum spil Ausgängen, die zwei ECDSA Signaturen erfordern, oder zwei-of-drei-Signaturschemen. Eine Ausgabe, die eine einzelne Adresse verweist Bitcoin ist ein typisch Ausgang, ein Ausgang enthält diese Informationen tatsächlich ter Form eines Skripts, das eine einzelne ECDSA Signatur (siehe OP_CHECKSIG) erfordert. Die Ausgabe Skript gibt an, welche voorwaarde die Mittel straks zu entsperren zur Verfügung gestellt werden, und wenn die Zeit ter der Zukunft kommt die Transaktion ter einen anderen Eingang zu verbringen, dass Eingang voorwaarde alle der Sache (n), die von der ursprünglichen Ausgabe definierten Anforderungen Geben Sie bitte Skript.

Adressen

A bitcoin Adresse ist die Hash eines öffentlichen Schlüssels ECDSA ter der Tat, diese Art und Weise berechnet:

Die Base58-Codierung verwendet wird, ist huis gemacht, und hat einige Unterschiede. Insbesondere werden führende Nullen SPIL einzigen Nullen gehalten, wenn Umwandlung geschieht.

gemeinsame Strukturen

Fast alle ganzen Zahlen te Little-Endian codiert. Nur IP oder Port-Nummer sind Big-Endian codiert.

Nachrichtenstruktur

Bekannte magische Werte:

Variabler Länge rechtschapen

Rechtschapen kann auf dem dargestellten Wert codiert werden, abhängig Platz zu sparen. Variable Länge ganze Zahlen stehen immer ein Array / Vektor eines Typs von gegevens, die ter Länge variieren. Längere Zahlen ter Little-Endian codiert.

Wenn Sie den Satoshi Client-Code (BitcoinQT) gerade lesen bezieht er sich auf dieser Codierung spil ein „CompactSize“. Moderne BitcoinQT hat auch die CVarInt Klasse, die einen noch klein rechtschapen zum Zweck des lokalen Speichers implementiert (die mit „CompactSize“ beschrieben hier nicht kompatibel ist). CVarInt ist nicht Teil des Protokolls.

Zeichenkette variabler Länge

Zeichenkette variabler Länge kann mit einer variablen Länge rechtschapen durch den String selbst verfolgt werden gespeichert.

Netzwerkadresse

Wenn eine Netzwerkadresse benötigt wird, irgendwo wird diese Struktur verwendet. Netzwerkadressen werden nicht mit einem Zeitstempel te Version Nachricht vorangestellt.

(12 Bytes 00 00 00 00 00 00 00 00 00 00 FF FF, durch die vier Bytes der IPv4-Adresse gefolgt).

Hexdump Beispiel für Netzwerkadressstruktur

Inventar Vektoren

Bestandsvektoren zum Mitteilen anderen Knoten über Objekte verwendet sie haben oder gegevens, die angefordert wird.

Bestands Vektoren bestehen aus folgenden gegevens Format:

Der Objekttyp wird gegenwärtig spil eine der folgenden Möglichkeiten festgelegt:

Andere Gegevens Typ Werte gelten für zukünftige Implementierungen vorbehalten.

Block Headers

Block-Header werden te Paket ein Header ter Reaktion auf eine getHeaders Nachricht gesendet hat.

Differentialcodierung

Mehrere Verwendungen von CompactSize unten sind „differentiell codierten“. Für Arbeit statt rohe Indizes zu verwenden, codiert die Zahl ist der Unterschied dazwischen aktuellen Index und dem vorherigen Index, minus eins. Zum Beispiel kann ein erster Index von 0 realen Index von 0 bedeutet, ein zweiter Index 0 bezieht sich danach zu einem echten Index von 1 usw.

PrefilledTransaction

Eine PrefilledTransaction Struktur te HeaderAndShortIDs verwendet explizit eine Liste von ein paar Transaktionen.

Siehe BIP 152 für weitere Informationen.

HeaderAndShortIDs

Eine HeaderAndShortIDs Struktur wird verwendet, um einen Blockkopf zu legen, die kurzen IDs Transaktionen zur Anpassung bereits verfügbaren Transaktionen, und einige wenige ausgewählte Transaktionen, die ein Peer wij erwarten können fehlen.

Siehe BIP 152 für weitere Informationen.

BlockTransactionsRequest

Eine BlockTransactionsRequest Struktur wird verwendet Transaktion Indizes zur Liste te ein Block angefordert wird.

Siehe BIP 152 für weitere Informationen.

BlockTransactions

Eine BlockTransactions Struktur wird verwendet, angefordert einige der Transaktionen ter einem Block, spil bereitzustellen.

Siehe BIP 152 für weitere Informationen.

Kurz Transaktions-ID

Kurze Transaktions-IDs werden verwendet, um eine Transaktion zu stellen, ohne insgesamt 256-Bit-Hash sendet. Sie werden folgendermaßen berechnet:

  1. Single-SHA256 den Block-Header mit dem Nonce Hashing hängten (ter little-endian)
  2. Lauf SipHash-2-4 mit der Eingabe der Transaktions-ID und die Schlüssel zu sein (k0 / k1) auf die ersten beide Little-Endian-64-Bit-Ganzzahl aus der obigen hash, respectively.
  3. Ziehen Sie die beiden höchstwertigen Bytes von dem SipHash Ausgang, um es 6 Bytes.

Siehe BIP 152 für weitere Informationen.

Nachrichtentypen

Ausführung

Wenn ein Knoten eine ausgehende Verbindung schafft, wird er sofort seine Version werben. Der Remote-Knoten wird mit seiner Version reagieren. Keine weitere Kommunikation möglich ist, bis beide Peers ihre Version ausgetauscht haben.

Ein „verack“ -Paket wird, wenn die Version Paket akzeptiert wasgoed gesendet werden.

Folgende Leistungen sind derzeit zugewiesen:

Hexdump Beispiel Versionsnachricht (OBSOLETE Beispiel: In diesem Beispiel fehlt eine Prüfsumme und User-Agenten):

Und hier ist eine moderne (60002) Protokollversion Client Werbung selbst zu einem lokalen Peer.

Neuere Protokoll des Prüfsumme enthält nun, diese von einer Hauptstrecke ist (Satoshi) Client während einer abgehenden Verbindung zu einem anderen lokalen Client, feststellen, dass es nicht heraus überhaupt die Adresse nicht packen Informationen, wenn die Quelle oder das Ziel „unroutable“ ist.

verack

Das verack Nachricht wird gesendet te antworten Ausführung. Diese Meldung besteht nur aus einem Nachrichtenheader mit der Befehlsfolge „verack“.

Hexdump der verack Nachricht:

Bereitstellung von Informationen über bekannte Knoten des Netzes. Nicht beworbenen Knoten soll nach der Regel Trio Stunden vergessen werden

Hinweis: Einschiffen Version 31402 werden die Adressen mit einem Zeitstempel vorangestellt. Wenn kein Zeitstempel vorhanden ist, sollten die Adressen nicht an andere Peers weitergeleitet werden, es sei denn, es in der Tat bestätigt sie sind nach oben.

Hexdump Beispiel Adr Botschaft:

Erlaubt einen Knoten seine Fähigkeit von einem oder mehreren Objekten zu werben. Es kann unaufgefordert empfangen werden, oder ter Antwort auf getblocks.

Payload (maximal 50.000 Einträge, die 1,8 Megabyte nur overheen ist):

Daten bekommen

getdata wird ter Reaktion verwendet wird, bis INV den Inhalt eines bestimmten Objekts abzurufen, und ist in der Regel nach dem Empfang eines gesendeten inv Paket nach bekannten Elementen Filterung. Es kann verwendet werden, um Transaktionen abzurufen, aber nur, wenn sie ter dem Speicherpool oder Relais-Set sind – willkürliche Zugriff auf Transaktionen ter die Kette nicht Kunden erlaubt ist, um zu vermeiden, beginnen auf Knoten mit äußerster Transaktion Indizes abhängen (die moderne Knoten nicht ).

Payload (maximal 50.000 Einträge, die 1,8 Megabyte nur overheen ist):

nicht gefunden

notfound ist eine Antwort auf einen getdata, gesendet, wenn alle angeforderten gegevens Elemente können nicht zum Beispiel weitergeleitet werden, da die angeforderte Transaktion wasgoed nicht den Speicherpool ter oder eingestellt Relais.

getblocks

Kommen Sie zurück ein inv Paket, welche die Liste von Blöcken enthält, direkt nach dem letzten bekannten Hash einsteigen te das Block-Locator-Objekt bis hash_stop oder 500 Blöcken, je nachdem, was zuerst kommt sehr.

Die Positionierstifte Hashes werden von einem Knoten ter der Reihenfolge verarbeitet spil sie auftauchen te die Nachricht. Wenn ein Block Hash-te der Knoten der Hauptkette, die Liste seiner Kinder zurück zurück über die gefunden wird inv Nachricht und die übrigen Locators übersehen, ganz gleich, ob die Grenze angefordert wasgoed erreicht, oder nicht.

Um den nächsten Blöcke Hashes zu erhalten, muss man getblocks wieder mit einem frischen Block-Locator-Objekt stochern. Halten Sie te daran, dass einige Kunden zur Verfügung stellen können Blöcke, die ungültig sind, wenn das Block-Locator-Objekt einen Hash auf dem ungültigen Zweig enthält.

Um das Block-Locator-Hashes zu erstellen, hält Hashes schieben, bis Sie zurück auf die Entstehungsgeschichte Block gehen. Nach dem Drücken Ten Hashes zurück, verdoppelt sich der Schritt rückwärts jede Schleife:

Beachten Sie, dass es erlaubt ist, ter weniger bekannt Hashes bis zu einer ondergrens von nur einem Hash zu senden. Allerdings ist der Zweck des Blocks Locator Objekt einen falschen Zweig ter des Anrufers Hauptkette zu erkennen. Wenn der Peer erkennt, dass Sie an der Hauptkette sind, wird es te Blockhashes senden, die älter sind als Ihr letzter bekannter Block. Also, wenn Sie nur ter Ihre letzte bekannte Hash senden, und es ist an der Hauptkette, beginnt der Peer bei Block # overheen 1.

getHeaders

Terugwedstrijd ein Header Paket die Header von Blöcken Auftakt direkt nach der letzten bekannten Hash-te Block-Locator-Objekt enthält, bis zu hash_stop oder 2000 Blöcke, je nachdem, was zuerst kommt sehr. Um die nächsten Block-Header zu erhalten, muss man getHeaders wieder mit einem frischen Block-Locator-Objekt stochern. Das getHeaders Befehl wird durch schlankes Clients schnell die Blockkette zum Download, wenn der Inhalt der Transaktionen irrelevant wäre (weil sie nicht von uns sind). Halten Sie ter daran, dass einige Kunden Header von Blöcken bereitstellen können, die ungültig sind, wenn der Block-Locator-Objekt einen Hash auf dem ungültigen Zweig enthält.

Für das Block-Locator-Objekt te dieses Paket gelten die gleichen Regeln spil für das getblocks Paket.

tx beschreibt eine Bitcoin Transaktion, ter Antwort auf Daten bekommen

Wenn alle Eingänge TXIN final (0xFFFFFFFF) Folgenummern haben, dann ist lock_time irrelevant. Andernfalls kann die Transaktion erst nach lock_time (siehe NLockTime) zu einem Block hinzugefügt werden.

TXIN besteht aus den folgenden Bereichen:

Die outpoint Struktur besteht aus den folgenden Feldern:

Die Script-Struktur besteht aus einer Serie von Stücken von Informationen und Vorgängen auf den Wert der Transaktion.

(Struktur te Zukunft weiter ausgebaut werden … siehe script.h und script.cpp und Script für weitere Informationen)

Die TXOUT Struktur besteht aus den folgenden Feldern:

Die TxWitness Struktur besteht aus einer var_int Zählung von Zeugen gegevens Komponenten, gefolgt von (für jede Zeuge gegevens Komponente) einer var_int Länge des Bauteils und den Rohkomponentenleistungs gegevens selbst.

Beispiel tx Botschaft:

Block

Das Block Nachricht wird ter Reaktion auf eine getdata Nachricht gesendet, die Transaktionsinformationen von einem Block Hash anfordert.

Der SHA256 Hash, der jeden Block identifiziert (und die voorwaarde einen Lauf von 0 kattig haben) aus den ersten 6 Felder dieser Struktur (Version, prev_block, merkle_root, Zeitstempel- kattig, Nonce und Standard SHA256 padding, berechnet machen zwei 64 -Byte Stücke ter alle) und nicht aus dem Block erreichen. Um den Hash zu berechnen, nur zwei Stücke müssen vom SHA256-Algorithmus verarbeitet werden. Seit der nonce Feld te der 2. Brocken ist, der erste Brocken bleibt während des Abbaus onveranderlijk und daher nur die zweite Brocken muss verarbeitet werden. Jedoch ist ein Bitcoin Hash ist der Hash-Wert des Hash, so SHA256 zwei Runden werden für jede Iteration Bergbau benötigt. Siehe Block-Hashing-Algorithmus für Details und ein Beispiel.

Header

Das Header Paket comebacks Blockheader ter Reaktion auf ein getHeaders Paket.

Beachten Sie, dass die Block-Header te dieses Paket eine Transaktionszahl umfassen (a var_int, so kann es mehr als 81 Byte Header vanaf) spil den Block-Headern, die entgegengesetzt von Bergleuten gehasht werden.

getaddr

Die getaddr Nachricht sendet eine Anforderung an einen Knoten für Informationen über bekannten aktiven Peers fragt bei der Suche nach potentiellen Knoten ter das Netzwerk zu helfen. Die Antwort auf diese Nachricht erhält, ist eine oder mehr addr-Nachrichten mit einem oder mehreren Peers aus einer Datenbank von bekannten aktivem Peers zu übertragen. Die typische Vermutung ist, dass ein Knoten wahrscheinlich ist, aktiv zu sein, wenn es Bot hat eine Nachricht innerhalb der letzten drei Stunden zu senden.

Kein zusätzliches gegevens wird mit dieser Meldung übermittelt.

MemPool

Die MemPool Nachricht sendet eine Anforderung an einen Knoten für Informationen über Transaktionen fragen sie hat überprüft, die aber noch nicht bestätigt. Die Antwort diese Nachricht zu erhalten, ist eine inv Nachricht die Transaktion enthält Hashes für alle Transaktionen ter der MemPool der Knoten.

Kein zusätzliches gegevens wird mit dieser Meldung übermittelt.

Es ist 35. Da BIP 37 ter BIP angegeben, wenn eine Blüte filterzakje geladen wird, nur Transaktionen die filterzakje entsprechen, werden beantwortet.

prüfe die Reihenfolge

Diese Meldung wasgoed für IP-Transaktionen verwendet. Spil IP-Transaktionen haben, BOT veraltet, wird nicht mehr verwendet.

Bestellung abschicken

Diese Meldung wasgoed für IP-Transaktionen verwendet. Spil IP-Transaktionen haben, BOT veraltet, wird nicht mehr verwendet.

Antworten

Diese Meldung wasgoed für IP-Transaktionen verwendet. Spil IP-Transaktionen haben, BOT veraltet, wird nicht mehr verwendet.

Das Klingeln Nachricht ist in erster Linie, dass die TCP / IP-Verbindung, um zu bestätigen gesendet noch gültig ist. Eine Fehlerübertragung wird ter eine geschlossene Verbindung zu sein, angenommen, und die Adresse wird spil einem aktuellen peer aufgelöst.

Das pong Nachricht wird ter Reaktion auf ein gesendetes Klingeln Botschaft. Te moderne Protokollversionen, ein pong Reaktion erzeugt wird, eine Nonce unter Verwendung enthalten ter den Ping.

ablehnen

Das ablehnen Nachricht gesendet wird, wenn Nachrichten zurückgewiesen werden.

filterload, filteradd, filterclear, merkleblock

Thesis Nachrichten werden an Bloom Filterung von Verbindungen verwendet und werden ter BIP 0037 definiert.

Die filterload Anweisung definiert spil geht nach:

Siehe unten für eine Beschreibung des Bloom filterzakje Algorithmus und wie nHashFuncs und filterzakje Größe für eine gewünschte Rate an falsch Positiven wählen.

Nach einer filterload Anweisung empfängt, wird der Remote-Peer beschränken sofort die Broadcast-Transaktionen es (ter inv Pakete) zu Transaktionen Anpassung des filterzakje ankündigt, in dem der Matching-Algorithmus unten angegeben ist. Die Flaggen steuern das Updateverhalten des Matching-Algorithmus.

Die filteradd Anweisung definiert spil geht nach:

Das Feld gegevens voorwaarde kleiner als oder gleich 520 Bytes ter Größe (die maximale Größe jeder potenziell angepaßten Objekt).

Der gegebene gegevens Faktor wird den Bloom filterzakje hinzugefügt werden. A filterzakje voorwaarde BOT haben zuvor unter Verwendung von filterload bereitgestellt. Diese Richtlinie ist nützlich, wenn ein neuer Schlüssel oder ein Skript zu einem Kunden Brieftasche hinzugefügt wird, während es hat Verbindungen zum Netzwerk geöffnet, es vermeidet die Notwendigkeit, neu zu berechnen und eine ganz frische filterzakje jeden Peer (tho‘so ist zu tun senden in der Regel ratsam aufrechtzuerhalten Anonymität).

Die filterclear Richtlinie hat keine Argumente überhaupt nicht.

Nach einem filterzakje Bot Set hat, Knoten nicht bloß zekering nicht passenden Transaktionen ankündigt, können sie auch gefilterten Blöcke dienen. Ein gefilterter Block wird durch die merkleblock Nachricht definiert und wird wie folgt definiert:

attent

Hinweis: Unterstützung für waakzaam Nachrichten hat bitcoin Kern ter März 2016. Lesen Sie mehr hier eliminiert von BOT

Ein waaks wird dazwischen Knoten geschickt über das Netzwerk eine allgemeine Mitteilung Nachricht zu senden. Wenn der oplettend kann spil haben kam aus der Kernentwicklungsgruppe der Bitcoin-Software mit der Unterschrift bestätigt wird, wird die Nachricht vorgeschlagen für die Endnutzer angezeigt werden. Versuch, Transaktionen durchzuführen, insbesondere automatisierte Transaktionen durch die Kunden, wird vorgeschlagen, angehalten werden. Der Text ter Message String sollte Webstuhl Dateien weitergeleitet werden und alle Benutzerschnittstellen.

Die Entwickler von Satoshi des Kunden nutzen diesen öffentlichen Schlüssel Warnungen für Ihre Anmeldung:

Die Nutzlast wird in ein uchar serialisiert [], um sicherzustellen, dass Versionen nicht kompatibel oplettend Formate noch Warnungen untereinander weitergeben können. Das aktuelle waakzaam Nutzlast-Format ist:

Hinweis: einstellen<,Art>, te der obigen Tabelle ist eine variable Länge Oprecht durch die Anzahl der Felder der gegebenen gefolgt Art (Entweder int32_t oder variabler Länge string)

Probe omzichtig (keine Message-Header):

sendheaders

Antrag auf meteen Header Ankündigung.

Nach dem Empfang dieser Nachricht wird der Knoten erlaubt sein, aber nicht erforderlich, frische Blöcke bekannt zu geben durch Header Leitlinie (statt inv Richtlinie).

Diese Nachricht wird durch die Protokollversion unterstützt >, = 70012 oder Bitcoin Core-Version > = 0.12.0.

Siehe BIP 130 für weitere Informationen.

Kein zusätzliches gegevens wird mit dieser Meldung übermittelt.

feefilter

Die Nutzlast ist immer 8 Byte lang und kodiert für 64-Bit-Wert Oprecht (LSB / little endian) von feerate. Der Wert stellt einen minimalen toverfee und te satoshis vanaf 1000 Bytes stimmhaft.

Nach dem Empfang einer „feefilter“ -Meldung, wird der Knoten erlaubt sein, aber nicht erforderlich, Transaktion InVS für Transaktionen zu filterzakje, die unter dem feerate fallen te die feefilter Nachricht bereitgestellt interpretiert spil satoshis vanaf Kilobyte.

Die toverfee filterzakje ist additiv mit einer Blüte filterzakje für Transaktionen so, wenn ein SPV-Client eine Blüte filterzakje zu streamen waren und eine feefilter Nachricht senden, Transaktionen nur weitergegeben werden, wenn sie beide Filter übergeben.

Inv die aus einer MemPool Meldung unterliegen ebenfalls einem toverfee filterzakje wenn es vorhanden ist.

Feature Entdeckung wird durch Überprüfen der Protokollversion aktiviert > = 70013

Siehe BIP 133 für weitere Informationen.

sendcmpct

  1. Die Nachricht wird sendcmpct spil eine Nachricht definiert, die einen 1-Byte Oprecht gefolgt von einer 8-Byte-Oprecht wo pchCommand == “sendcmpct” enthält.
  2. Die allererste Oprecht GILT spil eine Booleschen interpretiert werden (und Voorwaarde hat einen Wert von entweder 1 oder 0)
  3. Die 2. rechtschapen GILT spil ein Little-Endian-Versionsnummer interpretiert werden. Knoten eine Nachricht sendet sendcmpct Voorwaarde derzeit diesen Wert auf 1 gesetzt.
  4. Nach dem Empfang eines „sendcmpct“ -Nachricht mit den ersten und zweiten ganzen Zahlen auf 1 gesetzt, sollte der Knoten frische Blöcke verkündet durch eine cmpctblock Nachricht sendet.
  5. Nach dem Empfang einer „sendcmpct“ Nachricht mit dem ersten Oprecht auf 0 gesetzt, sollte der Knoten nicht frisch Blöcke verkündet durch eine cmpctblock Nachricht zu senden, soll aber frische Blöcke verkündet durch InVS oder Header, spil definiert durch BIP130 senden.
  6. Nach dem Empfang einer „sendcmpct“ Nachricht mit dem zweiten rechtschapen auf etwas anderes als 1, Knoten Vereist den Peer spil zu behandeln, wenn sie die Nachricht nicht erhalten hatten (spil den Peer zeigt wird eine unerwartete Codierung ter liefern
  7. cmpctblock und / oder andere, Nachrichten). Dies ermöglicht zukünftige Versionen für zukünftige Versionen doppelte sendcmpct Nachrichten mit unterschiedlichen Versionen spil Teil einer Version Handshake zu senden.
  8. Knoten sollte für eine Protokollversion überprüfen von >, = 70014 vor sendcmpct Senden von Nachrichten.
  9. Knoten Voorwaarde NICHT eine Anfrage für ein MSG_CMPCT_BLOCK Objekt zu einem Peer senden, bevor eine sendcmpct Nachricht von dem Peer erhalten zu haben.

Diese Meldung wird nur von Protokollversion unterstützt > = 70014

Siehe BIP 152 für weitere Informationen.

cmpctblock

  1. Die Nachricht wird cmpctblock spil spil einer Nachricht definiert, die eine serialisierte HeaderAndShortIDs Nachricht und pchCommand == „cmpctblock“ enthält.
  2. Nach dem Empfang einer Nachricht cmpctblock nach einer sendcmpct Nachricht senden, Knoten, sollte den kurzen Transaktions-ID für jede nicht bestätigte Transaktion berechnet sie zur Verfügung haben (dh te ihre MemPool) und vergleichen Sie die jeweils jede kurze Transaktions-ID ter die cmpctblock Nachricht.
  3. bereits verfügbare Transaktionen Nach der Feststellung, Knoten, die den gesamten Block zu rekonstruieren Verfügung nicht alle Transaktionen haben, sollten Sie die fehlenden Transaktionen mit einer getblocktxn Nachricht anfordern.
  4. Ein Knoten Vereiste KEINE cmpctblock Nachricht senden, wenn sie auf eine getblocktxn Nachricht reagieren können, die jede Transaktion te Block anfordert.
  5. Ein Knoten Voorwaarde KEINE cmpctblock Nachricht senden, ohne validiert hat, dass die Kopfzeile jeder Transaktion festgeschrieben decently ter den Block, und decently baut auf der existierenden Kette mit einem gültigen proof-of-Arbeit. Ein Knoten kann einen cmpctblock senden, bevor Validieren, dass jede Transaktion ter Block bestehende UTXO Satz Einträge gültig verbringt.

Diese Meldung wird nur von Protokollversion unterstützt > = 70014

Siehe BIP 152 für weitere Informationen.

getblocktxn

  1. Die Nachricht wird getblocktxn spil spil einer Nachricht definiert, die eine serialisierte BlockTransactionsRequest Nachricht und pchCommand == „getblocktxn“ enthält.
  2. Nach dem Empfang einer richtig formatierten getblocktxnmessage, Knoten, die kürzlich den Absender einer solchen Nachricht bereitgestellt ein cmpctblock für die Hash-te Block dieser Nachricht identifiziert Vereiste mit einer ausreichenden blocktxn Nachricht reagieren. Eine solche Nachricht blocktxn Vereiste enthalten genau und nur jede Transaktion, die den geeigneten te Block am Index angegeben te der getblocktxn Indizes Liste vorhanden ist, die ter Ordnung angefordert.

Diese Meldung wird nur von Protokollversion unterstützt > = 70014

Siehe BIP 152 für weitere Informationen.

blocktxn

  1. Die Nachricht wird blocktxn spil spil einer Nachricht definiert, die eine serialisierte BlockTransactions Nachricht und pchCommand == „blocktxn“ enthält.
  2. Nach dem Empfang einer korrekt formatierte angefordert blocktxn Nachricht, sollten Knoten versuchen, den gesamten Block zu rekonstruieren:
  3. Nimmt man die prefilledtxn Transaktionen aus dem ursprünglichen cmpctblock und legt sie auf die markierten Positionen te.
  4. Für jede kurze Transaktions-ID aus dem ursprünglichen cmpctblock, te Ordnung, finden die entsprechende Transaktion entweder von der blocktxn Nachricht oder aus anderen Quellen und legen Sie sich die ersten verfügbare Position ter Block te.
  5. Sobald der Block rekonstruiert Bietet, so hat er spil normalen verarbeitet werden, te bedenkt, dass kurzer Transaktions-IDs kollidieren von Zeit zu Zeit zu erwarten ist, und dass Knoten Vereisen nicht für solche Kollisionen bestraft werden, wo sie entstehen.

Diese Meldung wird nur von Protokollversion unterstützt > = 70014

Ähnlicher Film: BitCoin Market SGC


Leave a Reply

Your email address will not be published. Required fields are marked *

*