RLP序列化算法
RLP
RLP(Recursive Length Prefix)递归长度前缀编码,是由以太坊提出的序列化/反序列化标准,相比json格式体积更小,相比protobuf对多语言的支持更强。
RLP将数据分为两类:
- 字符串
- 列表(可以包含字符串和列表)
编码规则
- 字符串长度是1,并且值属于[0x00, 0x7f],那么其RLP编码就是字符串本身
- 字符串长度是0-55,那么RLP编码为前缀0x80+字符串长度,即[0x80, 0xb7],后面接字符串本身
- 字符串长度大于55,那么RLP编码为前缀0xb7+字符串长度的长度(最大8字节),即[0xb8, 0xbf],后接长度编码+字符串本身
- 列表长度是0-55,那么RLP编码为前缀0xc0+列表长度,即[0xc0, 0xf7],后接列表中各数据项的rlp编码
- 列表长度大于55,那么RLP编码为前缀0xf7+列表长度的长度(最大8字节),即[0xf8, 0xff],后接列表中各数据项rlp编码