美文网首页
以太坊RLP编码规则

以太坊RLP编码规则

作者: 泡泡龙吐泡泡 | 来源:发表于2018-10-23 10:19 被阅读18次

引言

RLP(Recursive Length Prefix,递归长度前缀)编码算法,是以太坊中数据序列化/反序列化的主要方法。以太坊区块链中的区块、交易等数据结构在持久化时会先经过 RLP 编码后再存储到数据库中。
RLP 编码只处理两类数据:

  • 字符串 e.g. this is string
  • 列符表 e.g. ["cat","horse",[[]],"pig",[""],"sheep"]

其他数据类型的数据需要转换成以上的两类,转换的规则不是 RLP 编码定义的,可以根据自己的规则转换,例如struct可以转换成列表,int 可以转换成二进制(属于字符串一类),以太坊中整数都以大端形式存储。

RLP编码规则 1

对于单个字节,如果它的值范围是[0x00,0x7f](ASCII码),它的 RLP 编码就是它本身。
如:

  • a à [0x61] (字符)
  • 100 à [0x64](数字)

RLP编码规则 2

字符串长度是0-55字节,它的 RLP 编码包含一个单字节的前缀,后面跟着字符串的长度,再接着字符串本身。这个前缀的值0x80加上字符串的长度。由于被编码的字符串最大长度是55=0x37,因此单字节前缀的最大值是0x80+0x37=0xb7,即编码的第一个字节的取值范围是[0x80,0xb7]。

字符串长度小于55字节的RLP 编码例子:
"dog" à [0x83, 'd', 'o', 'g']

其中0x83 = 0x80 + 3(“dog”字符串的长度)

RLP编码规则 3

字符串长度大于55个字节,它的 RLP 编码包含一个单字节的前缀,后面跟着字符串的长度,再接着字符串本身。这个前缀的值是0xb7加上字符串长度的二进制形式的字节长度。由于被编码的字符串长度的二进制长度最少是1个字节,最大是8个字节,前缀的取值范围是[0xb8,0xbf]。

字符串长度大于55字节的 RLP 编码例子:

字符串:
"Lorem ipsum dolor sit amet, consectetur adipisicing elit"

字符串长度:
56字节,其二进制形式为:00111000。其二进制形式的长度为8位,也就是1个字节长度。

前缀:0xb7 + 1 = 0xb8

字符串长度的16进制表示:56 à 0x38

该字符串的 RLP 编码形式为:
[0xb8, 0x38, 'L', 'o', 'r', 'e', 'm', ' ', ... , 'e', 'l', 'i', 't']

相关文章

  • 以太坊rlp编解码规则及实现

    rlp编码 具体规则定义可参考该文章以太坊源码学习—RLP编码 这里摘录其关键部分 编码数据类型 (1)byte数...

  • RLP 递归长度前缀

    RLP 递归长度前缀 RLP(recursive length prefix):递归长度前缀。 RLP编码是以太坊...

  • RLP编码原理

    RLP编码原理 RLP(Recursive Length Prefix,递归长度前缀)编码算法,是以太坊中数据序列...

  • 以太坊RLP编码规则

    引言 RLP(Recursive Length Prefix,递归长度前缀)编码算法,是以太坊中数据序列化/反序列...

  • [以太坊源码分析]:RLP编码

    RLP编码 RLP编码是以太坊对象序列化和反序列化的主要方法,可编码任意嵌套的二进制数据。以太坊中多个地方都用到了...

  • 以太坊交易签名

    以太坊的Transcation结构如下: 对交易签名步骤如下: 对交易本身进行rlp编码,再对rlp编码进行kec...

  • 以太坊源码研读0x04 RLP源码解析

    RLP(Recursive Length Prefix),递归长度前缀编码,它是以太坊序 化所采取的编码方式。RL...

  • 以太坊C++源码解析(四)RLPStream类

    RLP是一种特殊的二进制编码解码方式,以太坊里数据包都是采用这种方式编码的,和传统的结构相比,RLP编码更节省空间...

  • 以太坊源码解析 - RLP

    RLP(Recursive Length Prefix),叫递归长度前缀编码,它是以太坊序列化所采用的编码方式。R...

  • go ethereum 源码解析--rlp

    RLP介绍 RLP是Recursive Length Prefix的简写。是以太坊中的序列化方法,以太坊的所有对象...

网友评论

      本文标题:以太坊RLP编码规则

      本文链接:https://www.haomeiwen.com/subject/fdyozftx.html