Ethers generally doesn't let you call an overloaded function like this contract.overloaded(1)
, but it does let you call it with a fully qualified function name like this contract["overloaded(uint)"](1)
. However, I now have a function that takes an enum
as an input, and I don't know how to do a fully qualified function call for that. Consider the example contract
pragma solidity ^0.8.6;
contract MyContract {
enum MyEnum{ ZERO, ONE}
function unique(MyEnum _enum) public view returns(uint) {
if (_enum == MyEnum.ZERO) {
return 0;
} else {
return 1;
}
}
function overloaded() public view returns(uint) {
return 0;
}
function overloaded(MyEnum _enum) public view returns(uint) {
if (_enum == MyEnum.ZERO) {
return 0;
} else {
return 1;
}
}
}
Now I can call non-overloaded functions or overloaded functions that don't have enum
s as arguments (both return 0, showing that the enum
input in the unique function is parsed correctly):
const ethers = require("ethers");
const MyContract = await ethers.getContractFactory("MyContract");
myContract = await MyContract.deploy();
await myContract.deployed();
console.log(await myContract.unique(0));
console.log(await myContract["overloaded()"]());
However, if I try calling the overloaded function with an enum
argument like this
console.log(await myContract["overloaded(MyEnum)"](0));
or like this
console.log(await myContract["overloaded(enum)"](0));
I always get errors like TypeError: myContract.overloaded(MyEnum) is not a function
or TypeError: myContract.overloaded(enum) is not a function
. I couldn't find the syntax for calling overloaded functions in the ethers documentation either