Невозможно получить значение из другого контракта
Я столкнулся с проблемой царапин на голове. Я создал два контракта UserRole с картой имени пользователя и базовым контрактом с модификатором, который проверяет, является ли роль < 10.
Поэтому я сначала развернул первый контракт UserRole, а затем вызвал функцию set с параметрами _username = "jamesbond" и _role=7.
После завершения транзакции я вызываю 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 ответ
Я столкнулся с похожими проблемами при составлении контракта с 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
Это произведет два abi и два файла bin внутри
output
папка.Используйте эти abi и bin соответствующих контрактов для создания похожих скриптов, таких как
web3deploy
и разверните их в кворуме или паритете.
Это будет работать