Solidity
Solidity 生成的 getter 函式的方法 ID
在solidity中,函式的字節碼採用函式名稱的web3.sha3值並採用0x00000000格式的結果雜湊的前4個字節
因此,如果您有一個名為 totalsupply() 的函式,則雜湊將為 0x18160ddd
我的理解是公共變數會自動創建吸氣劑。
但是,當嘗試確定公共變數(例如“名稱”)的字節碼時。我假設創建的函式是“Name()”,因此字節碼是 0x8052474d。
但是,當我嘗試使用該字節碼呼叫函式時,它似乎不起作用。
關於我做錯了什麼的任何想法?
對於一個公共變數x,我會自動生成方法x(),所以你可以通過呼叫方法的方式訪問這個變數。我給出一個簡單的demo,如下:
pragma solidity ^0.4.2; contract test{ uint public age; function test(){ age = 10; } function callData() returns (string){ bool result = this.delegatecall(bytes4(sha3("age()"))); if (result) { return "success"; } return "failed"; } }
希望有幫助~
從Solidity 文件中的範例中,我們可以看到:
0xcdcd77c0:方法 ID。這是作為簽名 baz(uint32,bool) 的 ASCII 形式的 Keccak 散列的前 4 個字節導出的
我們可以通過輸入“baz(uint32,bool)”使用這個線上 keccak 256 雜湊工具來驗證雜湊:
https://emn178.github.io/online-tools/keccak_256.html
此外,您可以從 etherscan 獲取合約 ABI,並將其粘貼到此工具中: https ://abi.hashex.org/#
然後為您的函式提供雜湊值。看來您至少需要輸入第一個參數。