【发布时间】:2021-09-21 10:46:25
【问题描述】:
我正在尝试制作一个从 dAPP 中获取所有奖励的功能。
- 收获合同:
function harvest(uint256 pid,address to)...{
UserInfo storage user = userInfo[pid][msg.sender];
.............
token.safeTransfer(to, value)
}
- MyContractToHarvestAll:
function myFunction(address _user) ...{
.....
for(i < maxPid){
IMasterchef(masterchef).harvest(i, _user);
}
....
}
正如你所看到的,每当我调用 .harvest() 函数时,它都会检查 msg.sender,在我的例子中是 MyContractToHarvestAll。这是一个错误,因为 Harvest() 函数永远不会找到关于真正的 msg.sender(MyContractToHarvestAll 的调用者)的任何信息。
如果我尝试:
contract.delegateCall(abi...(harvest...))
由于存储上下文,它不起作用
我的问题是:
- 是否可以使用接口进行委托调用?类似的东西:
(bool success, bytes memory data) = IMasterchef(masterchef).delegatecall(abi.encodeWithSignature("harvest(uint256,address)",i,_user));
- 您知道任何使 msg.sender = MyContractHarvestAll 的调用者的技巧吗?
【问题讨论】:
标签: interface ethereum solidity