外部函数可以在派生合同中可靠地工作吗?
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).
我在合同 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).