Solidity
從 msg.data 訪問最後一個函式參數
我的契約中有一個備份(未命名)函式,我知道傳遞的最後一個參數(或第一個,無關緊要)始終是一個 uint。是否可以通過 msg.data 以某種方式訪問它?
是的,所有參數都可以從
msg.data
(EVM 術語是 calldata)訪問。calldata 是 ABI 編碼的:什麼是 ABI,為什麼需要它與合約互動?
提取第一個參數比其他參數更簡單。對於第一個參數,跳過前 4 個字節(方法 ID),接下來的 32 個字節是您要查找的 uint(左填充)。
如果參數是最後一個參數,則提取它會更加複雜,特別是如果某些參數是數組
strings
、 或bytes
.注意:有一種情況,備份函式獲得的 gas 量非常有限,在這種情況下,您可能無法對 uint 執行您想要的操作(例如儲存它)。