Solidity

Solidity 生成的 getter 函式的方法 ID

  • May 27, 2020

在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/#

然後為您的函式提供雜湊值。看來您至少需要輸入第一個參數。

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