Function-Selector

如果使用自定義類型,函式的函式簽名是什麼?(結構、列舉等)

  • October 14, 2022

我有以下列舉,它是函式的輸入

enum Cat {
   Tabby,
   Rascal,
   Cool
}

function hiMom(Cat myCat) public {

的函式簽名是hiMom(Cat)什麼?

您需要知道函式的基本類型並使用它。

對於列舉,類型是uint8.

您可以使用以下--abi選項solc(或其他編譯器)來確定這一點:

❯ solc --abi - <<EOF | tail -1 | jq 
// SPDX-License-Identifier: MIT
pragma solidity 0.8.17;

enum Cat {
   Tabby,
   Rascal,
   Cool
}

contract Foo {
 function hiMom(Cat myCat) public {}
}
EOF
[
 {
   "inputs": [
     {
       "internalType": "enum Cat",
       "name": "myCat",
       "type": "uint8"
              # ^^^^^ <- THIS IS THE BASE TYPE <------------
     }
   ],
   "name": "hiMom",
   "outputs": [],
   "stateMutability": "nonpayable",
   "type": "function"
 }
]

演員表中

cast sig "hiMom(uint8)"

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