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