Warum wurde RLP als Low-Level-Protokollcodierungsalgorithmus gewählt?

Handelt es sich um eine Ad-hoc-Entscheidung? Warum RLP? Ist es speziell für etwas geeignet?

@dbryson Ja dachte genau wie du, als ich die Antwort eintippte und nicht sicher war, wie es besser erklärt werden könnte als diese Quelle.

Antworten (1)

RLP wurde aufgrund (1) der Einfachheit der Implementierung und (2) der garantierten absoluten Byte-perfekten Konsistenz gewählt.

Quelle ist Ethereum Wiki:

RLP soll ein höchst minimalistisches Serialisierungsformat sein; Sein einziger Zweck besteht darin, verschachtelte Arrays von Bytes zu speichern. Im Gegensatz zu Protobuf, BSON und anderen bestehenden Lösungen versucht RLP nicht, bestimmte Datentypen wie boolesche Werte, Floats, Doubles oder sogar ganze Zahlen zu definieren; Stattdessen existiert es einfach, um die Struktur in Form von verschachtelten Arrays zu speichern, und überlässt es dem Protokoll, die Bedeutung der Arrays zu bestimmen. Key/Value Maps werden auch nicht explizit unterstützt; Der halboffizielle Vorschlag zur Unterstützung von Schlüssel/Wert-Maps besteht darin, solche Maps wie [[k1, v1], [k2, v2], ...] darzustellen, wobei k1, k2 ... unter Verwendung der Standardreihenfolge für Zeichenfolgen sortiert werden.

Die Alternative zu RLP wäre die Verwendung eines bestehenden Algorithmus wie protobuf oder BSON gewesen; wir bevorzugen jedoch RLP aufgrund (1) der Einfachheit der Implementierung und (2) der garantierten absolut bytegenauen Konsistenz. Schlüssel/Wert-Zuordnungen in vielen Sprachen haben keine explizite Reihenfolge, und Gleitkommaformate haben viele Sonderfälle, die möglicherweise dazu führen, dass dieselben Daten zu unterschiedlichen Codierungen und damit zu unterschiedlichen Hashes führen. Durch die interne Entwicklung eines Protokolls können wir sicher sein, dass es auf diese Ziele ausgerichtet ist (dies ist ein allgemeines Prinzip, das auch für andere Teile des Codes gilt, z. B. die VM). Beachten Sie, dass Bencode, das von BitTorrent verwendet wird, möglicherweise eine passable Alternative für RLP darstellt, obwohl die Verwendung der Dezimalcodierung für Längen es im Vergleich zum binären RLP etwas suboptimal macht.

Vielen Dank an alle, ich war mir des Design-Rationale-Dokuments nicht bewusst.
Übrigens. Ich sehe oft den Ausdruck „RLP wurde gewählt “, aber ich sehe nichts, was darauf hindeutet, dass RLP außerhalb von Ethereum existiert hat. Liege ich richtig, wenn ich sage, dass RLP für Ethereum entwickelt wurde und spezifisch für Ethereum ist? Die Yellow-Paper-Spezifikation erkennt tatsächlich positive ganze Zahlen als Teil der RLP-Spezifikation an, ist also nicht datentypunabhängig und hat spezielle Anforderungen für ihre Codierung.