Заявление require возвращает ошибку возврата транзакции вместо предоставленного настраиваемого сообщения об ошибке - PullRequest
0 голосов
/ 21 июня 2020

Например, у меня здесь есть этот фрагмент кода 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)
...