Pyethereum
RLP 編碼為 0
根據這裡的文件,
對於其值在
$$ 0x00, 0x7f $$範圍,該字節是它自己的 RLP 編碼
我使用 pyrlp 執行了以下命令(類似於 pyethereum here中的程式碼):
res = rlp.encode([1, 0]) print ':'.join(x.encode('hex') for x in res)
並得到
c2:01:80
.c2
指的是列表標識符(以下c0
2 個元素的 + 2 個字節)。01
顯然是數組 (1) 中的第一個元素,編碼為自身。然而,0 被編碼為十六進制 80,根據我對文件的理解,不應該是這種情況。我確實在 RLP wiki 上的範例中註意到空字元串編碼為十六進制 80,那麼這是否以某種方式影響了這一點?
似乎對整數進行編碼
0
不再等同於\x00
(正如文件所暗示的那樣)。這既可以在您的範例中看到,也可以在無法解碼的事實中看到:>>> decode('\x00') '\x00' >>> decode('\x00', big_endian_int) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/lib/python2.7/dist-packages/rlp/codec.py", line 214, in decode ....
我認為 RLP 編碼的無類型意味著這不應該是一個問題。相反,您可以使用
\x80
和sedes 對象來指定類型:>>> decode('\x80') '' >>> decode('\x80', big_endian_int) 0