Например, у меня здесь есть этот фрагмент кода require(keys[_address].purpose != _purpose, "Key Already Exists");
в смарт-контракте. После выполнения функции и невыполнения требования оператор require не возвращает определенное сообщение об ошибке. Вместо этого он возвращает UnhandledPromiseRejectionWarning: Ошибка: транзакция была отменена EVM . Я пишу приложение в Node JS и знаю, что мой код работает правильно, потому что я тестировал его с разными типами входов, и он обеспечивает правильные выходные.
Я использую Truffle для разработки с четностью. Я тестировал его с помощью Remix, и он предоставляет мне определенное сообщение об ошибке, поэтому проблема не в коде
Мой настоящий вопрос в том, почему оператор require не возвращает предоставленное сообщение об ошибке ?. Я что-то упускаю?. Мне нужно предоставить определенный флаг для четность или настроить что-то, чтобы перехватить предоставленное сообщение об ошибке ?. Было бы полезно любое предложение
Код смарт-контракта:
address public administrator;
constructor() public
{
administrator = msg.sender;
addKey(msg.sender, 1, 1);
emit KeyAdded(msg.sender, 1, 1);
}
mapping(address => Key)keys;
mapping(uint256 => address[])keysByType;
mapping(uint256 => address[])keysByPurpose;
event KeyAdded(address indexed key, uint256 indexed purpose, uint256 indexed keyType);
struct Key {
uint256 purpose;
uint256 keyType;
address key;
}
modifier onlyAdmin
{
require(msg.sender == administrator, "Sender is not admin");
_;
}
function addKey(address _address, uint256 _purpose, uint256 _type) public onlyAdmin override returns(bool success)
{
require(keys[_address].purpose != _purpose, "Key Already Exists");
keys[_address].key = _address;
keys[_address].purpose = _purpose;
keys[_address].keyType = _type;
keysByType[_type].push(_address);
keysByPurpose[_purpose].push(_address);
emit KeyAdded(_address, _purpose, _type);
return true;
}
Node JS Пример выполнения:
myContract.methods.addKey("00a329c0648769a73afac7f9381e08fb43dbea72", 3, 1).send({from:"00a329c0648769a73afac7f9381e08fb43dbea72", gas:4613288}).then(console.log)