MetaMask - Ошибка RPC: Ошибка: Подпись MetaMask Tx: Пользователь отклонил подпись транзакции

В javascript я использую контрактный метод

contract[methodName](...params, { from: myAccount }, (err, response) => {
    console.log('get transaction', methodName, err, response);
    if (err) return reject(err);
    resolve(response);
});

а затем отклонить транзакцию через MetaMask. В консоли появляется ошибка

MetaMask - RPC Error: Error: MetaMask Tx Signature: User denied transaction signature.

Но я не могу отловить эту ошибку в своем коде. Обратный звонок не работает.

Как я могу отловить эту ошибку в JS?


person Угуйлук Джагатамски    schedule 31.05.2018    source источник
comment
Также есть эта проблема в настоящее время ..   -  person Noah Passalacqua    schedule 31.05.2018
comment
То же самое. Не работает в Chrome (где я запускаю Metamask 4.7), но работает в Firefox (работает Metamask 3.xx). Он полностью нарушает поток управления - не только исключение, кажется, не генерируется, но и не выполняется код, который следует за web3 вызов.   -  person Patrik Stas    schedule 01.06.2018
comment
Такое же странное поведение, работало нормально всего несколько дней назад. Но теперь невозможно отловить исключения Metamask ... Похоже, проблемы с плагином Chrome. В Firefox все еще хорошо работает.   -  person Anton Pegov    schedule 01.06.2018
comment
Юп, имея ту же проблему в среде локального тестирования Chrome + Metamask +. Было бы неплохо пригласить сюда разработчика Metamask.   -  person Yuri van Geffen    schedule 01.06.2018
comment
То же самое, решения?   -  person imazzara    schedule 05.06.2018


Ответы (1)


Следующий пример кода протестирован на macOS с плагином Metamask в Chrome (v78.0) и Firefox (v70.0) и дает вам ожидаемое сообщение об ошибке в случае, если транзакция была отклонена пользователем:

  createContract: function () {

        let myContract = new web3.eth.Contract(ABI, CONTRACT_ADDRESS, {
            from: account,
            gasLimit: web3.utils.toHex(7900000),
            gasPrice: web3.utils.toHex(1000000000)
        });
        myContract.methods.myMethodName().send().on("receipt", (receipt) => {

            // Transaction succeeded
            myContract.getPastEvents(
                "myEventName", {
                    fromBlock: receipt.blockNumber,
                    toBlock: receipt.blockNumber
                }, (errors, events) => {
                    for (let event in events) {
                        let returnValues = events[event].returnValues;
                        // Now do something with the event
                    }
                });

        }).catch(function (e) {
            // Transaction rejected or failed
            console.log(e);
        });
    }

Результат в консоли Firefox будет таким, как ожидалось (см. последнюю строку app.js: 218):

введите здесь описание изображения

Результат в консоли Chrome будет таким, как ожидалось (см. последнюю строку app.js: 218):

введите здесь описание изображения

person Markus Sprunck    schedule 01.11.2019