【问题标题】:Is the msg.sender address changed while passing to another contract as a parameter?msg.sender 地址是否在作为参数传递给另一个合约时发生了变化?
【发布时间】:2018-07-14 07:46:39
【问题描述】:

我是来问我关于 Solidity 代码的问题。

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

通过'Map'合约合约'Ask'查找映射数据。当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;
    }
}

【问题讨论】:

    标签: ethereum solidity


    【解决方案1】:

    我在 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;
        }
    }
    

    【讨论】:

    • 实际上我正在开发定制的 Ethermint。当拜占庭被禁用时,它发生了。我不知道为什么,但它已经解决了。感谢您的热心帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 2015-09-28
    相关资源
    最近更新 更多