History

為什麼選擇 RLP 作為低級協議編碼算法?

  • June 29, 2017

這是臨時決定嗎?為什麼選擇 RLP?它是否特別適合某事?

選擇 RLP 是因為**(1) 實現簡單,以及 (2) 保證絕對字節完美的一致性。**

來源是乙太坊維基:

RLP 旨在成為一種高度簡約的序列化格式;它的唯一目的是儲存嵌套的字節數組。與 protobuf、BSON 和其他現有解決方案不同,RLP 不會嘗試定義任何特定的數據類型,例如布爾值、浮點數、雙精度數甚至整數;相反,它只是以嵌套數組的形式儲存結構,並將其留給協議來確定數組的含義。也沒有明確支持鍵/值映射;支持鍵/值映射的半官方建議是將此類映射表示為

$$ [k1, v1 $$,$$ k2, v2 $$, …] 其中 k1, k2… 使用字元串的標準排序進行排序。 RLP 的替代方案是使用現有算法,例如 protobuf 或 BSON;然而,我們更喜歡 RLP,因為 (1) 實現簡單,以及 (2) 保證絕對字節完美的一致性。許多語言中的鍵/值映射沒有明確的順序,浮點格式有很多特殊情況,可能會導致相同的數據導致不同的編碼,從而導致不同的雜湊值。通過在內部開發協議,我們可以確保它的設計考慮了這些目標(這是一個通用原則,也適用於程式碼的其他部分,例如 VM)。請注意,BitTorrent 使用的 bencode 可能為 RLP 提供了一個可行的替代方案,儘管它使用十進制編碼的長度使其與二進制 RLP 相比略微次優。

引用自:https://ethereum.stackexchange.com/questions/19092