繁体   English   中英

在传递给另一个合约作为参数时,msg.sender地址是否已更改?

[英]Is the msg.sender address changed while passing to another contract as a parameter?

我是在这里问我关于统一代码的问题。

这是简单的示例代码。 合同“地图”具有映射的数据。 它具有每个地址的T / F值。 我创建了一个帐户X并将其添加到'simpleMap'

通过“地图”合约进行合约“询问”查找映射数据。 X调用askMe()时,我期望的结果是TRUE但始终为FALSE

当我调用whoIsMsgSender它将返回确切的X帐户。 有什么问题??

pragma solidity ^0.4.24;

contract Map {
    mapping (address => bool) simpleMap;

    function add(address _address) external {
        simpleMap[_address] = true;
    }

    function isTrue(address _address) external view returns (bool _ret) {
        return simpleMap[_address];
    }
}

contract Ask {
    Map public map = Map(Map's address like 0x~~ just for test);
    function askMe() external view returns (bool _ret) {
        return map.isTrue(msg.sender);
    }

    function whoIsMsgSender() external view returns (address _address) {
        return msg.sender;
    }
}

我在Remix中尝试了您的合同,但是askMe()为我返回了true。 您如何分开这两个合同? 也许在Ask尝试在其上调用函数之前尚未部署Map。 我分开了两个合同:

pragma solidity ^0.4.24;

contract Map {
    mapping (address => bool) simpleMap;

    function add(address _address) external {
        simpleMap[_address] = true;
    }

    function isTrue(address _address) external view returns (bool _ret) {
        return simpleMap[_address];
    }
}


pragma solidity ^0.4.24;

contract Map { function isTrue(address _address) external view returns (bool _ret); }

contract Ask {
    Map public map = Map(MAP_ADDRESS);
    function askMe() external view returns (bool _ret) {
        return map.isTrue(msg.sender);
    }

    function whoIsMsgSender() external view returns (address _address) {
        return msg.sender;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM