Ethereum RLP: Effiziente Serialisierung und Dekodierung von Daten

  • I、 【Deep Knowledge】 RLP -Codierungs-/Dekodierungsprinzip der Serialisierung von Ethereum Data
  • II、 Sammlung von Quell-Ethereum cpp-Emereum in VS2015 unter Windows fehlgeschlagen
  • III、 Zusammenfassung der grundlegenden Verwendung der Gieße
  • IV、 Freetcher -syncronisierung in der Etherum -Quellcode -Analyse Blockdatensynchronisation ist in passive Synchronisation und aktive Synchronisation unterteilt.
  • I、 【Deep Knowledge】 RLP -Codierungs-/Dekodierungsprinzip der Serialisierung von Ethereum Data

    rlp (RecursinflengthPrefix), übersetzt in Chinesisch, wird als rekursive Länge -Präfix -Codierung bezeichnet. Es ist die Codierungsmethode für die Serialisierung von Ethereum. RLP wird hauptsächlich für die Netzwerkübertragung und die anhaltende Speicherung von Daten in Ethereum verwendet. Es gibt viele Arten von Objekt -Serialisierungsmethoden, gemeinsame wie JSON -Codierung, aber JSON hat einen offensichtlichen Nachteil: Das Codierungsergebnis ist relativ groß. Beispielsweise gibt es die folgende Struktur: Das Ergebnis der Serialisierung der Variablen ist {"Name": "IcateCoder", "Sex": "männlich"}, die Stringlänge beträgt 35 und die tatsächlichen gültigen Daten sind iCateCoder und männlich mit insgesamt 16 Bytes. Wir können sehen, dass während der Serialisierung von JSON zu viel redundante Informationen eingeführt werden. Unter der Annahme, dass Ethereum JSON verwendet, um zu serialisieren, muss die ursprüngliche 50 -GB -Blockchain jetzt möglicherweise 100 GB sein, aber natürlich ist es nicht so einfach. Daher muss Ethereum eine Codierungsmethode mit kleineren Ergebnissen entwerfen. Die Definition der RLP -Codierung verarbeitet nur zwei Datenarten: Eine ist eine Zeichenfolge (z. B. ein Byte -Array) und der andere eine Liste. Eine Zeichenfolge bezieht sich auf eine Reihe von Binärdaten. Eine Liste ist eine verschachtelte rekursive Struktur, die Zeichenfolgen und Listen enthalten kann. Zum Beispiel ist ["Katze", ["Welpe", "Kuh"], "Pferd", [], "Schwein", [""], "Schaf"] eine komplexe Liste. Andere Datenarten müssen in die beiden oben genannten Kategorien umgewandelt werden. Die Konversionsregeln werden nicht durch RLP -Codierung definiert. Sie können nach ihren eigenen Regeln umgewandelt werden. Zum Beispiel kann Struktur in Listen umgewandelt werden, int in binäre (gehört zu Strings) und Ganzzahlen in Ethereum werden in großer Endform gespeichert. Seine Eigenschaften sind aus dem Namen der RLP -Codierung ersichtlich: Eine ist rekursiv, die codierten Daten sind eine rekursive Struktur, und der Codierungsalgorithmus wird ebenfalls rekursiv verarbeitet. Das andere ist das Längenpräfix, dh die RLP -Codierung hat ein Präfix, das sich auf die Länge der codierten Daten bezieht, die aus den folgenden Codierungsregeln ersichtlich sind. Für einen einzelnen Byte, dessen Wert zwischen [0,127] liegt, ist seine Codierung selbst. Beispiel 1: Die Codierung von A beträgt 97. Wenn die Byte -Array -Länge L

    II、 Sammlung von Quell-Ethereum cpp-Emereum in VS2015 unter Windows fehlgeschlagen

    1. Vorbereitung. 64 -Bit -Windows -System, reservieren Sie einen bestimmten Speicherplatz für den C -Player, laden Sie VS2015 herunter und installieren Sie das offizielle Rating nur VS2015, während Sie darauf warten, überprüft zu werden). 2. Das Projekt wird in die örtliche Gebiet, Adresse des Projekts geschlagen: 3.. SubmodulUpdata - init. 4. kopieren Sie install_deps.bat im Skriptverzeichnis im Stammverzeichnis und führen Sie es aus. In diesem Schritt wird Hunter, Boost, Libjson und andere Serien in der C. heruntergeladen, die Zeit lang, bitte warten Sie geduldig. 5.

    III、 Zusammenfassung der grundlegenden Verwendung der Gieße

    rei In diesem Artikel werden die in der Gießerei üblicherweise verwendeten Befehle für eine einfache nachfolgende Überprüfung aufgeführt. Die Tools, die die Gießerei verwenden, umfassen hauptsächlich drei Hauptkomponenten, die unterschiedlichen Funktionen entspre chen. Anschließend präsentieren wir detailliert die Verwendungsmethoden und die Anwendungsszenarien jeder Komponente. Bevor Sie die Gießerei verwenden, müssen Sie sie zuerst installieren. Sie können es installieren, indem Sie die offizielle URL von GetFoundry.sh Foundry besuchen. Für Benutzer des Mac -Systems können Sie den folgenden Befehl verwenden, um es zu installieren: Das FounryFoundry -Tool enthält drei Hauptkomponenten, nämlich Casting, Ambos und Forge. ** Cast Use ** Cast ist ein Befehlszeilen -Tool, mit dem Ethereum RPC -Anrufe ausgeführt werden. Es unterstützt intelligente Vertragsanrufe, das Senden von Transaktionen und die Wiederherstellung von Kettendaten. Die Interaktion zwischen Cast und Web3 ist sehr praktisch, und selbst Nicht -Code -Entwickler können sie problemlos für Kettendatenabfrage verwenden. Beispiel für die Verwendung: Castrpceth_BlockNumber - RPC -url = $ ETH_RPC_urlcast unterstützt die Umgebungsvariable Eth_Rpc_url. Es muss im Befehl beim Lesen nicht reflektiert werden, definieren Sie einfach die Variable. ** Abfragefunktion ** - ** Blockhöhe **: Verwenden Sie `castrpceth_blocknumber`, um zu befragen. - ** Blockinformationen **: Verwenden Sie "CastBlock", um sie zu befragen. - ** Informationen zur Transaktion **: Verwenden Sie "casttx", um sie zu befragen. - ** Suchen Sie nach Transaktionsempfang **: Verwenden Sie `Castreceipt`, um zu fragen. ** Die Verarbeitung von Daten unter Verwendung von JQ ** `JQ` ist ein JSON -Prozessor der leichten flexiblen Befehlszeile, die die JSON -Eingänge behandelt und JSON -Ausgänge generiert. Kann angewendet werden, um die Ergebnisse der Anfrage während der Verteilung zu verarbeiten. ** Handelssimulation ** Der Befehl "Casttrun" kann verwendet werden, um Transaktionen zum Testen oder Untersuchung spezifischer Handelsszenarien zu simulieren. ** Funktionen im Zusammenhang mit dem Portfolio ** "castwalletw` kann ein neues Portfolio erstellen und es über Castwalletsign unterschreiben". Darüber hinaus werden die Funktionen "Castresolve-Name" und "Castlookup-Address" für ENS-Abfragen verwendet. ** Funktionen im Zusammenhang mit dem Vertrag ** Bevor Sie die Quellcodefunktion verwenden, müssen Sie die Umgebungsvariable `Ethercan_api_key` definieren. "Casteherscan-Source" kann verwendet werden, um den Quellcode des Vertrags anzuzeigen und die Ergebnisse über den Parameter "-d" aufzuzeichnen. Wenn Sie die vertragliche Funktion aufrufen, verwenden Sie "Castcall". Die Steuerung von `castIndex, die den Speicherort des Vertrags in Frage stellt, kann den Speicherort gemäß den Zahlen von Typ, Schlüssel und aufgelistet berechnen. ** Anvil verwendet ** `anvil`, um die Funktion der simulierten Gabel des Hauptnetzwerks bereitzustellen, das über Casat - fork -url = $ ETH_RPC_URL` implementiert wird. Die gemeinsamen Steuerungsparameter umfassen "-Accounts", "Plan" und "-Blork-Block-Number". ** Forge-Smart Contract Development Framework ** "ForgeInit" -Heuring das Projekt initialisiert, "ForgeBuild" den Code kompiliert und "Forstgry" automatisierte Tests durchführt. Der Zeitschriftendruck kann über "Emitlog" oder "console2.log" implementiert werden, um sicherzustellen, dass der Parameter ’ - Vvv` bei der Verwendung" Forstgrimat "zur Anzeige des gedruckten Inhalts verwendet wird. Die Funktion "Cheatcode" ermöglicht es, den Status der virtuellen Maschine über "VM" im Testvertrag zu ändern, wie z. Mit dem ERC20 -Token -Gleichgewicht können Sie die Funktion verwenden`Vm.deal`. Wenn der ERC20-Vertrag in der Testumgebung nicht bereitgestellt wird, kann der ERC20-Vertrag im Hauptnetzwerk direkt über Fork-ururt verwendet werden. ### Fork-URL-Implementierung im Code. Fork-Uurt kann die Ansprache von Umgebungsvariablen in VM über die VM.Evaddress-Funktion lesen “, wodurch flexible Testfälle für verschiedene Testnetzwerke erstellt werden. In diesem Artikel werden die grundlegenden Methoden der Verwendung der Gießerei vorgestellt, die darauf abzielt, Entwicklern eine praktische Kette von Werkzeugen zu verbessern und die Entwicklung der Entwicklung zu verbessern. Blockchain -Projekt.

    IV、 Freetcher -syncronisierung in der Etherum -Quellcode -Analyse Blockdatensynchronisation ist in passive Synchronisation und aktive Synchronisation unterteilt.

    Fetcher ist für die passive Synchronisation verantwortlich, und die Hauptaufgaben umfassen den Empfang neuer Blockadenübertragungen und die Synchronisation. Die kürzlich erzeugten Blöcke werden über NewblockHashesmsg und Newblockmsg propagiert. Das Fetcher -Objekt erkennt neue Blockinformationen, indem sie diese Nachrichten empfangen. Fetcher unterteilt den internen Synchronisationsprozess in mehrere Stufen und legt für jeden Schritt ein Statusfeld fest, um die Bühnendaten aufzuzeichnen. Erstens synchronisieren Sie Block Hash. Wenn ein Haschisch empfangen wird, wird der Hash auf dem externen Knoten markiert und in der lokalen Datenbank nach Haschisch existiert. Wenn es nicht existiert, wird es in die unbekannte Liste platziert. Anschließend wird das lokale Fetcher -Modul über den Kanal benachrichtigt, um die Überschrift und den Körper des Blocks anzufordern. Das Fether -Modul wird in Abruf- und Fertigstellungslisten auf der Grundlage des empfangenen Überschriftens und des Körperzustands verabreicht. Wenn Sie bestätigen, dass es in den Abruf- und Fertigstellungslisten keinen bestimmten Block -Hash gibt, können Sie Hash in die angekündigte Liste einfügen und sich darauf vorbereiten, die Überschrift und den Körper zu zeichnen. Das Fetcher -Modul wählt regelmäßig Block -Hash aus der angekündigten Liste über Fetch -Stunden, um die Überschrift zu zeichnen. Wenn Sie den Übergang ziehen, wählen Sie den zu heruntergeladenen Block aus und übertragen von der angekündigten Rufe und senden Sie eine Downloadanforderung. Die Header -Anforderung wird vom externen Knoten über getBlockheadsmsg bearbeitet und zum lokalen Knoten zurückgegeben. Die Headerbehandlung umfasst die Filtration und Benachrichtigung von Download -Objekten. Die Hauptstadien der Überschriftenfiltration beinhalten die Überprüfung, die Filtration ungerettter Blöcke mit der lokalen Datenbank und die Synchronisierung von Algorithmusüberschriften. Legen Sie die gefilterte Überschrift in die vollständige oder unvollständige Liste. Der Prozess der Körpersynchronisation umfasst die Auswahl eines Hashs aus der vollständigen Liste, um den Körper zu synchronisieren. Die Body -Anfrage sendet eine GetBlockBodiesmsg -Nachricht über P.RequestBodies und wird im Download -Objekt behandelt. Die Körperfiltration umfasst hauptsächlich die Filter- und Synchronisationslogik und importiert schließlich den vollständigen Block der Datenbank. Der gesamte Prozess der Synchronisation von Block -Hash und Blöcken umfasst komplexe Mechanismen und Logik, einschließlich DOS -Prävention, begrenzende Blockadenhöhen, Überschriftsynchronisation und Körper usw. Das endgültige Ziel ist es, sicherzustellen, dass die Blockchain in der Region mit Fernknoten synchronisiert bleibt.