无法从另一份合同中获得价值

时间:2018-05-25 18:04:19

标签: ethereum solidity parity geth quorum

我正面临着棘手的问题。我创建了两个UserRole合约,它有一个角色的用户名映射和一个Base合约,它有一个修饰符来检查角色是否是< 10。

所以我先部署第一个UserRole合约,然后用参数_username =“jamesbond”和_role = 7调用set函数。

交易开始后,我调用getRole传递_username =“jamesbond”,然后我回来7。

现在我部署Base并传递我之前部署的UserRole合同的地址。我调用了testModifier函数,并将其传递给_username =“jamesbond”。我希望我能回到7。

我先在http://remix.ethereum.org进行了测试。然后我尝试了法定人数和平价。在混音上它按预期工作,但在法定人数和平价上我都没有得到任何价值。

我不确定我做错了什么。

pragma solidity ^0.4.24;

contract UserRole {
    address owner;

    mapping (string => uint8) userRoles;

    constructor() 
        public
    {
        owner = msg.sender;
    }

    function set(string _username, uint8 _role) 
        public
        returns (bool sucesss)
    {
        userRoles[_username] = _role;
        return true;
    }

    function getRole(string _username) 
        public
        view
        returns (uint8 _role)
    {
        return userRoles[_username];
    }
}

contract Base {
    address owner;
    UserRole userRole;
    address public userRoleAddress;

    constructor(address _t) 
        public
    {
        owner = msg.sender;
        userRoleAddress = _t;
        userRole = UserRole(_t);
    }


    modifier isAuthorized(string _username) {
        uint8 role = 5;
        require(role < 10);
        _;
    }

    function testModifier(string _username)
        public
        isAuthorized(_username)
        view
        returns (uint8 result)
    {
        return userRole.getRole(_username);
    }
}

1 个答案:

答案 0 :(得分:0)

在与Remix签订合同时,我也遇到了类似的问题。 解决方法如下:

  1. 使用

    安装solcjs

    npm install -g solc 它将提供solcjs的可执行二进制文件。

    2。创建两个名为UserRole.solBase.sol的文件,并将相应的代码复制到文件中。使用solcjs编译器(系统中已安装二进制文件)编译两个合同。

    solcjs -o output --bin --abi UserRole.sol

    solcjs -o output --bin --abi Base.sol

  2. 它将在output文件夹中生成两个abi和两个bin文件。

  3. 使用这些合约的abi和bin来创建类似web3deploy的脚本,并以仲裁或奇偶校验部署它们。

这将起作用。