我有一个关于处理函数值的问题。
喜欢这个标题..
我已经知道合约的函数调用其他合约的函数依赖于:
addr.call(abi.encodeWithSignature("function(parameter_type)", parameter ));但是,如果我想临时(内存)处理条件的函数值(例如:bool)。
我看过abi.encodePacked(),但我甚至不知道什么参数反馈给我(编译错误,不同的参数类型),我甚至不能存储它。
有些文章只写字节,uint,但我只想写条件(Bool)。
发布于 2020-02-21 03:02:09
除非您想保留msg.sender,否则您不需要执行该.call。
如果msg.sender对您无关紧要,我建议您查看interfaces。现在,您要做的是创建一个带有您想要调用的functionB定义的接口,然后调用它。
示例:
(一些已部署的合同)
contract MySecondContract {
function functionB() public returns(bool) {
return true;
}
}(获取已部署的合同地址并在代码中使用它,如下所示)
interface IMySecondContract {
function functionB() external returns(bool);
}
contract MyFirstContract {
function functionA() public returns(bool) {
bool result = IMySecondContract(MySecondContract-address-here).functionB();
return result;
}
}如果您确实想继续使用.call,here,您可以看到.call方法返回两个值。
就像这样
(bool success, bytes myReturn) = addr.call(...);然后是this,也许能行得通。
另一个可能有帮助的东西是this new way of debugging。
https://stackoverflow.com/questions/60247222
复制相似问题