0

我正面临着令人头疼的问题。我创建了两个合同 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);
    }
}
4

1 回答 1

0

在使用Remix编译合同时,我遇到了类似的问题。解决方法如下:

  1. 使用安装 solcjs

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

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

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

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

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

  3. 使用各自合约的这些 abi 和 bin 来创建类似的脚本web3deploy,并将它们部署在 quorum 或 parity 中。

这将起作用。

于 2018-07-26T10:17:16.660 回答