我有两个Solidity合同,其中合同Caller
依赖于第二个合同Callee
。合同Callee
提供了一种公共视图功能,该功能根据一些内部规则检查字符串(例如密码)的有效性。 Caller
需要通过调用Callee
来检查其自身函数中的字符串,然后才能进行进一步处理。此外,Caller
需要使用Callee
来调用delegatecall
的功能,因为内部有效性检查会考虑调用地址。
contract Caller {
function doSomething(string _text, address _callee) public {
bool valid = bool(_callee.delegatecall(
bytes4(keccak256("check(string _text)")), _text)
);
require(valid == true);
/* further process if text is valid */
}
}
contract Callee {
function check(string _text) public view returns(bool){
/* validity check */
return true;
}
}
此代码的问题在于,对函数check
的调用似乎是异步的,因此函数require
中的doSomething
语句将始终失败。这是delegatecall
的问题吗?有没有办法同步调用外部函数?