Abi

使用元組進行 ABI 編碼

  • February 8, 2020

我不明白使用元組進行 ABI 編碼的工作原理:

f(uint8[], uint)帶有[3], 4相應的參數https://abi.hashex.org產生:

479587820000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003

  1. 在參數中,值 3 在 4 之前,但在編碼後的 4 在 3 之前。出於某種原因,儘管值 3 在第一個元素中,但它位於最後。為什麼?!
  2. 先去所有的頭,然後是所有的尾巴,對吧?每個頭部是從元組開頭到相應尾部的 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)

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