Oracles
Oraclize CBOR 和 python3 CBOR 編碼之間明顯不匹配
我使用 Oraclize CBOR 庫編碼了一個值,如下所示:
Buffer.buffer memory cborArgs; Buffer.init(cborArgs, 64); cborArgs.startArray(); cborArgs.encodeUInt(10); cborArgs.endSequence();
產生:
\\xef\\xbf\\xbd\\\\n
但它似乎與python3中相同編碼的結果不匹配。
print(str(cbor2.dumps([10]))
生產
\x81\n
這是怎麼回事?
您可能想參考每個的十六進製表示。使用十六進製表示時,您會看到它們幾乎相同,不同之處僅在於 python 的 cbor2 定義了一個長度為 3 的靜態數組,而 cbor 庫僅使用動態大小的數組來提高效率和鏈上的適應性。兩者都符合 cbor 標準。
堅固性
Buffer.buffer memory cborArgs; Buffer.init(cborArgs, 64); cborArgs.startArray(); cborArgs.encodeUInt(1); cborArgs.encodeUInt(222); cborArgs.encodeUInt(9000); cborArgs.endSequence(); debug(cborArgs.buf);
debug[ "0x9f0118de192328ff" ]
Python
import cbor2 import binascii print(binascii.b2a_hex(cbor2.dumps([1, 222, 9000])))
b'830118de192328'
如您所見,唯一的區別在於第一個字節,指定動態,而不是靜態的 3 元素數組。這反過來又需要一個額外的 FF 字節來終止它。