我试图理解为什么选择和开发RLP作为内部协议,我无意中发现了这个链接,它提供了一些见解:
https://github.com/ethereum/wiki/wiki/Design-Rationale
试图理解以下段落,详细的解释是非常感激的。
。
发布于 2018-03-10 08:36:42
它说RLP是
它比其他算法更简单,因为它不定义除字节和数组之外的任何数据类型。
这是明确的,因为相同的输入数据总是被序列化成相同的字节序列。
在许多语言中,键/值映射没有显式排序。这意味着有两个条目:
key1: value1
key2: value2可以序列化为:
{
"key1": "value1",
"key2": "value2"
}在一个实现中,和
{
"key2": "value2",
"key1": "value1"
}在另一个实现中。相同的输入数据可以输出不同的序列化。这在以太是不可接受的。
另一方面,在使用RLP时,需要首先将映射转换为数组(这种转换超出了RLP的范围),然后传递给RLP进行序列化。在我们的示例中,RLP的输入结构是:
[["key1", "value1"],["key2","value2"]]其中引号中的字符串应该首先转换为字节(也超出了RLP的范围)。
基本上,RLP试图通过限制受支持的数据类型来避免歧义。
发布于 2021-10-16 02:58:09
RLP是Ethereum开发人员开发的编码方案。它是一种特别开发的编码方案,用于将二进制数据串行化,以便在网络上存储或传输,并将状态保存在存储介质上的Patricia树中。它是一种确定性的、一致的二进制编码方案,用于序列化Ethereum块链上的对象,例如帐户状态、事务、消息和块。它对字符串和列表进行操作,生成适合存储和传输的原始字节。RLP是一种极简的、实现简单的序列化格式,它不定义任何数据类型,只将结构存储为嵌套数组。换句话说,RLP不编码特定的数据类型;相反,它的主要目的是编码结构。
既然已经有这么多不同的序列化格式可用了,为什么我们需要一个新的编码方案呢?这个问题的答案是,RLP是一个确定性的方案,而其他方案可能对相同的输入产生不同的结果,这在块链上是绝对不可接受的。即使是一个小小的更改,也会导致完全不同的哈希,并导致数据完整性问题,从而使整个块链变得无用。
https://ethereum.stackexchange.com/questions/42291
复制相似问题