Ошибка: ошибка узла: {"code":-32015,"data":"Reverted 0x","message":"ошибка выполнения VM."}

Я развернул свой смарт-контракт в тестовой сети Kovan Etherium . После этого я пытаюсь взаимодействовать с методами смарт-контракта, используя web3 1.0.0 . Ниже приведен код моего узла js:

var Web3 = require('web3');
var api = myapikey;
const testnet = 'https://kovan.infura.io/'+ api;
const web3 = new Web3(new Web3.providers.HttpProvider(testnet))

function a (){
        const abi =[{ abi json}];
        var MyContract = new web3.eth.Contract(abi,'0xf...');
        console.log(MyContract.address);
        console.log(MyContract.jsonInterface);
        MyContract.methods.buyCoordinator(1,'https://cdn.pixabay.com/photo/2016/02/17/19/08/lotus-1205631_960_720.jpg','abc').call({from:'0x7...'},(error, result) => {
                console.log(result);
                console.log(error);
        });
}

a();

Он возвращает null и дает мне следующую ошибку:

Ошибка: ошибка узла: {"код": -32015,"данные":"Возврат 0x","сообщение":"Ошибка выполнения ВМ."} в Function.validate(/home/administrator/node_modules/web3-providers/dist /web3-providers.cjs.js:114:18) в HttpProvider._callee$ (/home/administrator/node_modules/web3-providers/dist/web3-providers.cjs.js:708:61) в tryCatch (/home/ администратор/node_modules/regenerator-runtime/runtime.js:62:40) в Generator.invoke [как _invoke] (/home/administrator/node_modules/regenerator-runtime/runtime.js:288:22) в Generator.prototype.( анонимная функция) [как указано далее] (/home/administrator/node_modules/regenerator-runtime/runtime.js:114:21) в asyncGeneratorStep (/home/administrator/node_modules/@babel/runtime/helpers/asyncToGenerator.js:3: 24) в _next (/home/administrator/node_modules/@babel/runtime/helpers/asyncToGenerator.js:25:9) в at process._tickCallback (внутренний/процесс/next_tick.js:188:7)

Может ли кто-нибудь сказать мне значение этой ошибки? Где я ошибаюсь? И как подтвердить, взаимодействовал смарт-контракт или нет?

Я получаю эту ошибку на платных методах.

Ответы (1)

использовать отправить , а не звонить

myContract.methods.myMethod([param1[, param2[, ...]]]).send(options[, callback])

Отправить -> Отправит транзакцию в смарт-контракт и выполнит его метод. Обратите внимание, что это может изменить состояние смарт-контракта.

Call -> вызовет «константный» метод и выполнит его метод смарт-контракта в EVM без отправки транзакции. Вызов Note не может изменить состояние смарт-контракта.

и ему также может понадобиться «значение» в опции, если это оплачиваемая функция и требуется эфир.

И откуда ты знаешь, что метод не постоянный, когда этот чувак не выложил код контракта?
нет оплачиваемого постоянного метода (см. его комментарий). и на самом деле название метода говорит о том, что это метод транзакции, а не метод запроса
И откуда ты знаешь, что это метод payable, когда этот чувак не выложил код контракта? (Кстати, он не указывает valueполе, поэтому есть большая вероятность, что этот метод на самом деле не payable ).
О, я вижу, вы даже сами написали это внизу своего ответа... Итак, еще раз - откуда вы знаете, что метод платный?
этот чувак написал в разделе комментариев, что он получает эту ошибку в платном методе: «Я получаю эту ошибку в платных методах. — Варш вчера»