通过调用合同D上的msg.sender方法,发出事件中的callMe是谁?
pragma solidity 0.8.10;
contract A {
event LogMsgSender(address who);
function callMe() public {
emit LogMsgSender(msg.sender);
}
}
contract B {
function callMe(address a) public {
a.delegatecall(
abi.encodeWithSignature("callMe()")
);
}
}
contract C {
function callMe(address a, address b) public {
b.delegatecall(
abi.encodeWithSignature("callMe(address)",a)
);
}
}
contract D {
function callMe(address a, address b, address c) public {
c.delegatecall(
abi.encodeWithSignature("callMe(address,address)",a,b)
);
}
}发布于 2023-01-03 15:23:51
它是原始的msg.sender (在合同D上调用callMe ),因为msg.sender上下文在D、C、B、A中都是相同的。例如,用户有一个帐户0x1111...在D上调用callMe(a,b,c),登录到合同A上的msg.sender (address a)将被0x1111...读取更多关于坚实性文件上的委托调用的信息。
https://ethereum.stackexchange.com/questions/142225
复制相似问题