Abi
使用元組進行 ABI 編碼
我不明白使用元組進行 ABI 編碼的工作原理:
f(uint8[], uint)
帶有[3], 4
相應的參數https://abi.hashex.org產生:
479587820000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003
- 在參數中,值 3 在 4 之前,但在編碼後的 4 在 3 之前。出於某種原因,儘管值 3 在第一個元素中,但它位於最後。為什麼?!
- 先去所有的頭,然後是所有的尾巴,對吧?每個頭部是從元組開頭到相應尾部的 32 字節偏移量,對吧?
嚴格來說,您的範例中沒有元組。類型
uint8[]
是動態數組類型,而不是元組。這是分解的編碼:47958782 // Function selector (4 bytes) 0000000000000000000000000000000000000000000000000000000000000040 // Offset of the first argument (32 bytes) 0000000000000000000000000000000000000000000000000000000000000004 // Value of the second argument (32 bytes) 0000000000000000000000000000000000000000000000000000000000000001 // Length of the array (offset points here, 32 bytes) 0000000000000000000000000000000000000000000000000000000000000003 // First element of the array (32 bytes)