Solidity

從 msg.data 訪問最後一個函式參數

  • June 18, 2016

我的契約中有一個備份(未命名)函式,我知道傳遞的最後一個參數(或第一個,無關緊要)始終是一個 uint。是否可以通過 msg.data 以某種方式訪問它?

是的,所有參數都可以從msg.data(EVM 術語是 calldata)訪問。

calldata 是 ABI 編碼的:什麼是 ABI,為什麼需要它與合約互動?

提取第一個參數比其他參數更簡單。對於第一個參數,跳過前 4 個字節(方法 ID),接下來的 32 個字節是您要查找的 uint(左填充)。

如果參數是最後一個參數,則提取它會更加複雜,特別是如果某些參數是數組strings、 或bytes.


注意:有一種情況,備份函式獲得的 gas 量非常有限,在這種情況下,您可能無法對 uint 執行您想要的操作(例如儲存它)。

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