美文网首页Solidity智能合约专题
使用interface进行跨合约调用时的msg.sender是?

使用interface进行跨合约调用时的msg.sender是?

作者: 梁帆 | 来源:发表于2023-03-20 12:35 被阅读0次

我们都知道如果采用实例进行跨合约调用,那么被调用合约Target中的msg.sender就是调用合约Caller的合约地址。那么如果我们是用ITarget来进行跨合约调用,那么是个什么情况呢?

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.8.2 <0.9.0;

interface ITarget {
    function setSender() external;
}

contract Target is ITarget {
    address public sender;

    constructor() {

    }

    function setSender() external {
        sender = msg.sender;
    }
}

contract Caller {
    address public immutable target;

    constructor(address _target) {
        target = _target;
    }

    function callTargetByInstance() external {
        Target(target).setSender();
    }

    function callTargetByInterface() external {
        ITarget(target).setSender();
    }
}

代码如上,经过测试,发现ITarget(target).setSender();Target(target).setSender();msg.sender都是Caller的地址。

相关文章

网友评论

    本文标题:使用interface进行跨合约调用时的msg.sender是?

    本文链接:https://www.haomeiwen.com/subject/jbburdtx.html