Solidity智能合约专题

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

2023-03-20  本文已影响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的地址。

上一篇 下一篇

猜你喜欢

热点阅读