RLP解碼問題
我試圖從 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]