首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RLP理论问题

RLP理论问题
EN

Ethereum用户
提问于 2018-03-10 07:14:57
回答 2查看 264关注 0票数 3

我试图理解为什么选择和开发RLP作为内部协议,我无意中发现了这个链接,它提供了一些见解:

https://github.com/ethereum/wiki/wiki/Design-Rationale

试图理解以下段落,详细的解释是非常感激的。

“RLP的替代方法可能是使用现有的算法,如protobuf或BSON;然而,我们更喜欢RLP,因为(1)实现简单,(2)保证绝对字节完全一致。许多语言中的键/值映射没有显式排序,浮点格式有许多特殊情况,可能导致相同的数据导致不同的编码,从而导致不同的哈希。”

EN

回答 2

Ethereum用户

回答已采纳

发布于 2018-03-10 08:36:42

它说RLP是

  • 简单
  • 一目了然

它比其他算法更简单,因为它不定义除字节和数组之外的任何数据类型。

这是明确的,因为相同的输入数据总是被序列化成相同的字节序列。

在许多语言中,键/值映射没有显式排序。这意味着有两个条目:

代码语言:javascript
复制
key1: value1
key2: value2

可以序列化为:

代码语言:javascript
复制
{
  "key1": "value1",
  "key2": "value2"
}

在一个实现中,和

代码语言:javascript
复制
{
  "key2": "value2",
  "key1": "value1"
}

在另一个实现中。相同的输入数据可以输出不同的序列化。这在以太是不可接受的。

另一方面,在使用RLP时,需要首先将映射转换为数组(这种转换超出了RLP的范围),然后传递给RLP进行序列化。在我们的示例中,RLP的输入结构是:

代码语言:javascript
复制
[["key1", "value1"],["key2","value2"]]

其中引号中的字符串应该首先转换为字节(也超出了RLP的范围)。

基本上,RLP试图通过限制受支持的数据类型来避免歧义。

票数 2
EN

Ethereum用户

发布于 2021-10-16 02:58:09

RLP是Ethereum开发人员开发的编码方案。它是一种特别开发的编码方案,用于将二进制数据串行化,以便在网络上存储或传输,并将状态保存在存储介质上的Patricia树中。它是一种确定性的、一致的二进制编码方案,用于序列化Ethereum块链上的对象,例如帐户状态、事务、消息和块。它对字符串和列表进行操作,生成适合存储和传输的原始字节。RLP是一种极简的、实现简单的序列化格式,它不定义任何数据类型,只将结构存储为嵌套数组。换句话说,RLP不编码特定的数据类型;相反,它的主要目的是编码结构。

既然已经有这么多不同的序列化格式可用了,为什么我们需要一个新的编码方案呢?这个问题的答案是,RLP是一个确定性的方案,而其他方案可能对相同的输入产生不同的结果,这在块链上是绝对不可接受的。即使是一个小小的更改,也会导致完全不同的哈希,并导致数据完整性问题,从而使整个块链变得无用。

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/42291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档