以太坊 RLP詳解

2021-08-27 21:14:04 字數 1017 閱讀 1455

rlp(recursive length rrefix, 遞迴長度字首)提供了一種適用於任意二進位制資料陣列的編碼,rlp已經稱為以太坊中對物件進行序列化的主要編碼方式。rlp的唯一目標就是解決結構體的編碼問題;對原子資料型別(比如:字串,整數型,浮點型)的編碼則交給更高層的協議;以太坊中要求數字必須是乙個大端位元組序的、沒有零佔位的儲存的格式(也就是說,乙個整數0和乙個空陣列是等同的)

rlp編碼後的第乙個位元組很重要,根據輸入的不同,第乙個位元組代表的含義也不同。

下表中列出了不同的規則對應的第乙個位元組的範圍(tip: 乙個位元組8位,換成16進製制是2位)

規則規則一

規則二規則三

規則四規則五

範圍0x00~0x7f

0x80~0xb7

0xb8~0xbf

0xc0~0xf7

0xf8~0xff

字串 "dog" = [0x83, 'd', 'o', 'g' ] (規則二)

列表 ["cat","dog"] = [0xc8, 0x83, 'c', 'a', 't', 0x83, 'd', 'o', 'g' ] (規則四)

空字串 "" = 0x80 (規則二)

空列表 = [0xc0] (規則四)

整數 15('\x0f') = 0x0f (規則一)

整數 1024('\x04\00') = [0x82, 0x04, 0x00] (規則二)

列表 [ , , [ , ] ] = [0xc7, 0xc0, 0xc1, 0xc0, 0xc3, 0xc0, 0xc1, 0xc0] (規則四)

字串 "lorem ipsum dolor sit amet, consectetur adipisicing elit" = [0xb8, 0x38, 'l', 'o', 'r', 'e', 'm', ' ', ... , 'e', 'l', 'i', 't'](規則三)

與其他序列化方法相比,rlp編碼的優點在於使用了靈活的長度字首來表示資料的實際長度,並且使用遞迴的方式能編碼相當大的資料。只讀取第乙個位元組,就可以知道資料的大小。

以太坊RLP機制分析

目錄 1 rlp 定義 2 rlp 編碼規則 3 rlp 編碼例項 4 rlp 分析 1 rlp 定義 rlp,即 recursive length prefix,遞迴長度字首編碼,是以太坊資料序列化的主要方法,具有較好的資料處理效率,尤其是將長度和型別統一作為字首,實際上 rlp 是基於 asci...

以太坊 RLP機制分析

目錄 1 rlp 定義 2 rlp 編碼規則 3 rlp 編碼例項 4 rlp 分析 1 rlp 定義 rlp,即 recursive length prefix,遞迴長度字首編碼,是以太坊資料序列化的主要方法,具有較好的資料處理效率,尤其是將長度和型別統一作為字首,實際上 rlp 是基於 asci...

以太坊RLP機制分析

目錄 1 rlp 定義 2 rlp 編碼規則 3 rlp 編碼例項 4 rlp 分析 1 rlp 定義 rlp,即 recursive length prefix,遞迴長度字首編碼,是以太坊資料序列化的主要方法,具有較好的資料處理效率,尤其是將長度和型別統一作為字首,實際上 rlp 是基於 asci...