Yellow-Paper

RLP解碼問題

  • March 8, 2018

我試圖從 RLP 白皮書 wiki 中理解這意味著什麼“RLP的唯一目的是對結構進行編碼;對特定數據類型(例如字元串、浮點數)進行編碼留給高階協議;”

參考:https ://github.com/ethereum/wiki/wiki/RLP

對此我的理解是,RLP只對結構進行編碼,不處理數據,數據類型的解釋留給自定義函式? 有人能給我一個這個輸入的例子嗎?下面是使用 RLP 編碼的結構:

電子:克$$ “cat”,[[ $$],“豬”,$$ "" $$,“羊”]

在此先感謝,如果有任何僅用於 RLP 的影片參考將非常有幫助。

從文件中獲取,您有以下公理:

如果一個字元串的長度為 0-55 個字節,則 RLP 編碼由一個值為 0x80 的字節加上字元串的長度和後面的字元串組成。因此,第一個字節的範圍是

$$ 0x80, 0xb7 $$.

如果一個列表的總有效載荷(即所有被 RLP 編碼的項目的組合長度)是 0-55 字節長,則 RLP 編碼由一個值為 0xc0 的單個字節加上列表的長度,然後是串聯的項目的 RLP 編碼。因此,第一個字節的範圍是

$$ 0xc0, 0xf7 $$.

因此,**$$ “cat”,[[ $$],“豬”,$$ "" $$“sheep”]**將使用以下邏輯進行編碼:

你會像0x83, 'c', 'a', 't' “cat”一樣重新設置 cat 是一個字元串,因此你從 0x80 開始並添加字元串的長度 (3),所以它給我們 0x83,然後是字元串的字元。

$$ [ $$] 將是0xc1, 0xc0 該數組包含一個空數組。 由於 0xc1 是數組的長度(數組包含一個元素,這裡

$$ $$),0xc0 是第二個數組的長度(空元素) “pig” 和 “cat” 一樣,都是 3 個字元的字元串,所以: 0x83, 'p', 'i', 'g'

$$ "" $$是一個 ONE 元素的數組,它是一個空字元串(0 個字元),因此它將編碼為0xc1, 0x80(0xc0 + 1 , 0x80 + 0) “sheep” 是一個 5 個字元的字元串,因此它會編碼為: 0x85, 's', 'h', 'e', 'e', 'p'(0x80 + 5,以及字元串的每個字母)

整個數組包含 18 個字節的值,因此它會編碼為:

[ 0xd2, 0x83, 'c', 'a', 't', 0xc1, 0xc0, 0x83, 'p', 'i', 'g', 0xc1, 0x80, 0x85, 's', 'h', 'e', 'e', 'p'](0xd2 是 0xc0 + 0x12,0x12 是十進制的 18)

為了清楚起見,字元沒有以十六進制編碼,但真正的編碼看起來像這樣:

[0xd2, 0x83, 0x63, 0x61, 0x74, 0xc1, 0xc0, 0x83, 0x70, 0x69, 0x67, 0xc1, 0x80, 0x85, 0x73, 0x68, 0x65, 0x65, 0x70]

引用自:https://ethereum.stackexchange.com/questions/42125