Search code examples
ethereumsolidity

Solidity: calling function from deployed contract reverts


I'm trying to call the getNames() function on the reverse-record ens lookup contract here, but it's reverting. This is my code:

pragma solidity ^0.8.0; pragma experimental ABIEncoderV2;
contract ENStest {
    /* ENS Reverse Lookup
        Ropsten: 0x72c33B247e62d0f1927E8d325d0358b8f9971C68
        Rinkeby: 0x196eC7109e127A353B709a20da25052617295F6f
        Goerli: 0x333Fc8f550043f239a2CF79aEd5e9cF4A20Eb41e
        Mainnet: 0x3671aE578E63FdF66ad4F3E12CC0c0d71Ac7510C
    */
    address public ENSReverseLookupContractAddr = address(0x196eC7109e127A353B709a20da25052617295F6f); // Rinkeby
    
    function addrToENS(address addr) public view returns(string[] memory) {
        ReverseRecords ens = ReverseRecords(ENSReverseLookupContractAddr);
        return ens.getNames([addr]);
    }
}
    
// ENS Reverse Lookup Remote Contract
abstract contract ReverseRecords {
    function getNames(address[] calldata addresses) external view virtual returns (string[] memory r);
}

Anyone know what I'm doing wrong here?


Solution

  • Resolved

    I was casting a fixed-length array to a dynamic-sized array. (h/t https://ethereum.stackexchange.com/a/103894/25695)

    Revised code:

        function addrToENS(address addr) public view returns(string[] memory) {
            ReverseRecords ens = ReverseRecords(ENSReverseLookupContractAddr);
            address[] memory t = new address[](1);
            t[0] = addr;
            return ens.getNames(t);
        }