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

我们都知道如果采用实例进行跨合约调用,那么被调用合约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的地址。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容