Это специальное решение? Почему РЛП? Он специально подходит для чего-то?
RLP был выбран из-за (1) простоты реализации и (2) гарантированной абсолютной согласованности с точностью до байта.
Источник — Эфириум Вики:
RLP задуман как очень минималистичный формат сериализации; его единственная цель - хранить вложенные массивы байтов. В отличие от protobuf, BSON и других существующих решений, RLP не пытается определить какие-либо конкретные типы данных, такие как логические значения, числа с плавающей запятой, двойные числа или даже целые числа; вместо этого он просто существует для хранения структуры в виде вложенных массивов и оставляет на усмотрение протокола определение значения массивов. Карты ключ/значение также явно не поддерживаются; полуофициальное предложение по поддержке карт ключ/значение состоит в том, чтобы представлять такие карты как [[k1, v1], [k2, v2], ...], где k1, k2... сортируются с использованием стандартного порядка строк.
Альтернативой RLP было бы использование существующего алгоритма, такого как protobuf или BSON; однако мы предпочитаем RLP из-за (1) простоты реализации и (2) гарантированной абсолютной согласованности с точностью до байта. Карты ключ/значение во многих языках не имеют явного порядка, а форматы с плавающей запятой имеют много особых случаев, что потенциально может привести к тому, что одни и те же данные будут иметь разные кодировки и, следовательно, разные хэши. Разрабатывая протокол собственными силами, мы можем быть уверены, что он разработан с учетом этих целей (это общий принцип, применимый и к другим частям кода, например к виртуальной машине). Обратите внимание, что bencode, используемый BitTorrent, мог предоставить приемлемую альтернативу RLP, хотя использование в нем десятичного кодирования длины делает его немного неоптимальным по сравнению с двоичным RLP.
Дбрайсон
эт