我正面临着棘手的问题。我创建了两个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);
}
}
答案 0 :(得分:0)
在与Remix签订合同时,我也遇到了类似的问题。 解决方法如下:
使用
安装solcjs npm install -g solc
它将提供solcjs的可执行二进制文件。
2。创建两个名为UserRole.sol
和Base.sol
的文件,并将相应的代码复制到文件中。使用solcjs编译器(系统中已安装二进制文件)编译两个合同。
solcjs -o output --bin --abi UserRole.sol
solcjs -o output --bin --abi Base.sol
它将在output
文件夹中生成两个abi和两个bin文件。
使用这些合约的abi和bin来创建类似web3deploy
的脚本,并以仲裁或奇偶校验部署它们。
这将起作用。