使用枚举时,Solidity delegatecall 失败,并显示“无法识别函数选择器”

Mus*_*han 6 ethereum solidity

我有以下功能

   enum OptionType {Invalid, Put, Call}

   function create(
    uint256 period,
    uint256 amount,
    uint256 strike,
    OptionType optionType
) {
    ....
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用此函数从另一个合约委托调用此函数时

address(contractAddress).delegatecall(abi.encodeWithSignature("create(uint256,uint256,uint256,uint8)",1,1,1,1));
Run Code Online (Sandbox Code Playgroud)

我收到错误

无法识别功能选择器并且没有后备功能

Mat*_*Jaf 0

确保您的contractAddress内容有效并且使用正确的 Solidity 版本

当外部调用带有枚举的函数时,这似乎工作正常

pragma solidity ^0.8.0;

contract Test {
       enum OptionType {Invalid, Put, Call}

    function create(
        uint256 period,
        uint256 amount,
        uint256 strike,
        OptionType optionType
    ) public returns(bool) {
        return true;
    }
    function delegatCallTest() public view returns(bytes memory) {
        (bool success, bytes memory data) = address(this).staticcall(abi.encodeWithSignature("create(uint256,uint256,uint256,uint8)",1,1,1,1));
        require(success);
        return data;
    }
}
Run Code Online (Sandbox Code Playgroud)