使用枚举时,可靠性委托调用失败并出现"function selector was not recognized"



我有以下函数

enum OptionType {Invalid, Put, Call}
function create(
uint256 period,
uint256 amount,
uint256 strike,
OptionType optionType
) {
....
}

当我试图使用这个从另一个合同调用这个函数时

address(contractAddress).delegatecall(abi.encodeWithSignature("create(uint256,uint256,uint256,uint8)",1,1,1,1));

我得到错误

无法识别功能选择器,并且没有回退功能

确保您的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;
}
}

相关内容

最新更新