Solidity

如何知道數據中使用的十六進制程式碼來呼叫特定的合約函式?

  • May 31, 2017

例如,在BAT ico 網站上,如果您不想使用 ABI 呼叫合約函式,您可以看到眾籌合約地址、ABI 以及用於交易數據部分的字元串。

要放入事務的數據是 0xb4427263,對應於 createTokens() 函式。

他們是如何獲得這個 0xb4427263 十六進制值的?他們是否必須先使用 ABI 進行交易,然後從交易中獲取數據,或者是否有直接的方法來獲取價值而不發送交易?

對於這個特定範例,您獲取方法簽名createToken()併計算其 SHA3 雜湊0xb4427263722d66ea37c3d76cba9c56b0f1a7d6e049effc1f9f75567547fd47eb,然後獲取它的前 4 個字節(8 個十六進製字元),您就擁有了0xb4427263. 由於沒有要傳遞的參數,這就是所有數據。

web3.sha3("createTokens()").substr(0,10)

此編碼的完整規範可以在https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI找到

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