Развернул контракт с помощью Remix IDE в тестовой сети Rinkeby.
Адрес и код контракта Etherscan здесь .
контракт SimpleCounter { внутренний счетчик; конструктор () общедоступный { счетчик = 0; } функция getCounter () возвращает публичное представление (int) { обратный счетчик; } приращение функции () общедоступный { счетчик += 1; } функция декремента() общедоступная { счетчик -= 1; } }
Код клиента JavaScript:
вар контракт; $(документ).готовый(функция(){ инитконтракт(); получитьСчетчикЗначения(); }) функция initContract () { web3 = новый Web3 (web3.currentProvider); адрес var = "0xc6482382047fb50e8e7b4658425c9756b28f995c"; вар аби = [ ... ]; console.log('Создать контракт...'); контракт = новый web3.eth.Contract (аби, адрес); console.log(контракт) } //initContract() функция getCounterValue () { console.log('getCounter()...'); Contract.methods.getCounter().call().then((результат) => { console.log(результат); }).поймать(функция(ошибка){ console.log('ошибка...\n'+ошибка); }); }
Ошибка:
Создать договор...
(index):86 o {_requestManager: e, заданный провайдер: MetamaskInpageProvider, провайдеры: {…}, _provider: MetamaskInpageProvider, …}
(индекс):94 getCounter()...
(индекс):99 ошибка...
Ошибка: возвращаемые значения недействительны, закончился бензин?
ЗАМЕЧАНИЯ:
Это отлично работает в Remix IDE (chrome). Я могу увеличивать/уменьшать/getCounter... с версией компилятора: 0.4.25+commit.59dbf8f1.Emscripten.clang .
Почему происходит сбой при доступе к нему с помощью dist/web3.min.js из Web3.js (ветка 1.0)?
Я исправил аналогичную ошибку, удалив .json
файлы из папки build/contracts и запустив truffle migrate
их в терминале.
Однако ошибка произошла в Visual Studio Code, а не в Remix IDE. Появилось после запуска truffle migrate --reset
.
Я хотел бы добавить к этому комментарию, после того, как вы удалили файлы из папки build/contracts.json
, проблема сохранялась, пока я не удалил файлы из корзины🗑 😅 Поэтому убедитесь, что корзина пуста
Мне помог Вениамин .
У меня была ошибка «Ошибка: не удалось декодировать из ABI: 0x». при звонке получить запрос с неверным адресом контракта
Я сделал ошибку... Я использовал "адрес счета" вместо "адрес контракта"!
Код работает, если используется правильный «контрактный адрес».
Была та же проблема, и оказалось, что я был в сети Metamask, а не в Rinkeby, где был развернут мой контракт.
Ваш код кажется правильным. Я думаю, что ваша проблема связана с ошибкой Web3js. Взгляните на проблему, о которой сообщается в Github:
https://github.com/ethereum/web3.js/issues/1916
Я рекомендую вам вместо этого использовать web3.js 1.0.0-beta.35 .
Error: Couldn't decode from ABI: 0x
.У меня тоже была эта ошибка. Это было исправлено после того, как я изменил свою версию web3 на 2.0.0-альфа, которая раньше была 1.0.0-бета.55.
Надеюсь, это исправит это для вас.
В моем случае (я использую службу блокчейна Azure) я изменил файл контракта, но забыл сборку и снова развернул его в своей службе блокчейна Azure. Вместо этого я сразу перехожу к truffle exec
команде. Итак, после повторного выполнения этих двух недостающих шагов все работает нормально.
Это случилось со мной в моем приложении для реагирования.
Я подключился к сети Ropsten, но метамаск использовал учетную запись Rinkeby. Поэтому убедитесь, что какую бы сеть вы ни развернули, метамаска должна использовать учетную запись из этой сети.
В другой раз у меня было это в next.js. этот маршрут является динамическим маршрутом, который означает, что контракт будет получен по ${contractAddress}:
Router.push(`/campaigns/${recipient}/requests`);
вместо {recipient}
адреса мне пришлось указать адрес контракта для получения
В моем случае я вызывал метод «просмотра» контракта, развернутого в локальной каске.
и мой код nodejs выглядит так: contract.methods().getterName().call()
и получил эту ошибку.
Я потратил на это часы, и мне не повезло. Наконец-то я переключился на Rinkeby Test Network, развернул контракт и вызвал метод «просмотра» почти с тем же кодом, все идет хорошо.
Итак, решение:
Если вы используете HardHat и столкнулись с этой странной проблемой, переключитесь на Rinkeby!
РафиАльхамд
.json
не исправит это. Вы можете добавить «точную проблему» вместе с ошибкой, чтобы различать «ваш сценарий» и связанное с ним исправление для ясности.РафиАльхамд