【问题标题】:What does byte-perfect consistency mean (serialization)?字节完美一致性是什么意思(序列化)?
【发布时间】:2018-02-27 16:56:21
【问题描述】:
我正在阅读以太坊项目的设计原理。在阅读有关 RLP(他们使用的序列化格式)的部分时,我无法理解以下关于他们为什么不使用 Protobuf 或 BSON 的陈述。
来源:Ethereum design rationale
RLP 的替代方案是使用现有算法,例如 protobuf 或 BSON;但是,我们更喜欢 RLP,因为 (1) 实现简单,以及 (2) 保证绝对字节完美的一致性。
具体来说,关于字节完美一致性的第二点。从段落中我推断出 BSON 和 Protobuf 不是“字节完美”一致的。
我的问题是这是什么意思?
【问题讨论】:
标签:
serialization
protocol-buffers
bson
【解决方案1】:
下一句大概是关键:
许多语言中的键/值映射没有明确的顺序,浮点格式有很多特殊情况,可能会导致相同的数据导致不同的编码,从而导致不同的哈希值。
我不了解 BSON,但我可以确认在 protobuf 中,相同的数据可以用多个不同的字节序列表示。虽然通常序列化器都会从相同的数据中产生相同的输出,但这并不是一个正式的保证,所以你不能只看一眼两个输出(或它们的哈希值)就得出“如果字节是相同则数据相同,否则数据不同”。第一部分是正确的(只要您每次都使用相同的模式定义),但第二部分(“否则”)是不正确的。听起来他们想要那种能力。具体来说,他们想要“输入 X 总是有输出 Y,并且只能有输出 Y”。