外部函数可以在派生合同中可靠地工作吗?

Can an external function works in derived contract in solidity?

我在合同 A 中创建了一个具有可见性 external 的函数,但是当我尝试通过派生合同 B 访问时,它给出了一个错误。

Code:

contract A{

      function f1() pure public  returns(uint) { 
       return 1;
    }

      function f2() pure private returns(uint) { 
       return 2;
    } 
     
    function f3() pure internal returns(uint){   
        return 3;
    }

    function f4() pure external returns(uint){ 
        return 4;
    }
}

contract B is A{ 
   
     uint bx = f3();  
}


如果答案是肯定的,说明原因。然后为什么它在合同 C 中工作。是不是因为它不是派生合同?。说明也是原因。

solidity 文档为您的问题提供了答案,我没有太多解释。查看 docs 了解其他可见性

Solidity 知道两种函数调用:创建实际 EVM 消息调用的外部函数调用和不创建实际 EVM 消息调用的内部函数调用。此外,可以使派生合约无法访问内部功能。这产生了四种类型的函数可见性。

External functions are part of the contract interface, which means they can be called from other contracts and via transactions. An external function f cannot be called internally (i.e. f() does not work, but this.f() works).