Ethereum 将msg.sender地址作为参数传递给另一个合同时是否更改?

Ethereum 将msg.sender地址作为参数传递给另一个合同时是否更改?,ethereum,solidity,Ethereum,Solidity,我来这里是想问一下我关于固体代码的问题 下面是简单的示例代码。合同“映射”具有映射数据。它具有每个地址的T/F值。我创建了一个帐户X,并将其添加到'simpleMap' 合同“询问”通过“映射”合同查找映射数据。当X调用askMe()时,我所期望的结果是TRUE,但总是FALSE 当我调用whoimsgsgssender时,它会返回确切的X帐户。有什么问题吗 pragma solidity ^0.4.24; contract Map { mapping (address => b

我来这里是想问一下我关于固体代码的问题

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

合同“询问”通过“映射”合同查找映射数据。当
X
调用
askMe()
时,我所期望的结果是
TRUE
,但总是
FALSE

当我调用
whoimsgsgssender
时,它会返回确切的
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;
    }
}

我在混音中尝试了你的合同,但askMe()对我来说是真的。你如何将这两份合同分开?也许在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;
    }
}

事实上,我在做定制的以太薄荷。当拜占庭被禁用时,它发生了。我不知道为什么,但问题已经解决了。谢谢你的帮助!