RLP编码介绍

简介

RLP(Recursive Length Prefix,递归的长度前缀)是一种编码规则,可用于编码任意嵌套的二进制数组数据。RLP编码的结果也是二进制序列。RLP主要用来序列化/反序列化数据。

RLP是以太坊中Trie树对对象进行序列化的主要编码方式。RLP的唯一目标就是解决结构体的编码问题;

定义

RLP编码的定义只处理以下两类数据:

  1. 字符串(string)是指字节数组。例如,空串”“,再如单词”cat”,以及句子”Lorem ipsum dolor sit amet, consectetur adipisicing elit”等。
  2. 列表(list)是一个可嵌套结构,里面可包含字符串和列表。例如,空列表[],再如一个包含两个字符串的列表[“cat”,”dog”],在比如嵌套列表的复杂列表[“cat”, [“puppy”, “cow”], “horse”, [[]], “pig”, [””], “sheep”]。

编码规则

0x00 ~ 0x7F: 0000 0000 ~ 0111 1111 - 127 Asicc本值

0x80 ~ 0xB7: 1000 0000 ~ 1011 0111 - 55 长度在内,如0x81,表示0x81后面一个字节是值

0xB8 ~ 0xBF: 1011 1000 ~ 1011 1111 - 8 表示长度的字节长度在内, 如0xB9,表示0xB9后面一个字节的值是字符串长度值

0xC0 ~ 0xF7: 1100 0000 ~ 1111 0111 - 55 列表, 同2

0xF8 ~ 0xFF: 1111 1000 ~ 1111 1111 - 8 列表,同3