Solidity

將我的函式命名為 ccccvKygDv 是否危險?

  • March 22, 2018

對於那些在家跟踪的人來說,一個名為的函式的函式雜湊ccccvKygDv()0xffffffff,與空地址相同。

pragma solidity ^0.4.0;

contract NullFunction {
 function ccccvKygDv() public pure { }
}

contract NormalFunction {
 function NothingWrongHere() public pure { }
}

當我查看上面列出的兩個函式的操作碼時,我得到:

NothingWrongHere()

47 PUSH4 0xffffffff
52 AND
53 DUP1
54 PUSH4 0xb1f6260f

ccccvKygDv()

47 PUSH4 0xffffffff
52 AND
53 DUP1
54 PUSH4 0xffffffff

看起來被推送到堆棧的數據將覆蓋函式本身所需的一些數據。

這是一個愚蠢的問題嗎?絕對可以,但我問它是為了更好地理解合約在操作碼級別上的工作方式。

我相信這只是一個面具。

程式碼載入呼叫數據,將其向右移動,然後進行按位與運算0xFFFFFFFF以獲取(現在)底部四個字節(函式選擇器)。

然後它將提取的四個字節與已知的函式選擇器進行比較。您要查找的函式簽名恰好是0xFFFFFFFF.

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