Solidity: TypeError: невозможно прочитать свойства undefined (чтение «JsonRpcProvider») в простом контракте HelloWorld при попытке протестировать

Я пытаюсь протестировать простой файл HelloWorld.sol:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract HelloWorld 
{
    function hello() public pure returns (string memory)
    {
        return "Hello, World";
    }
}

с тестовым файлом HelloWorld.ts

import "@nomiclabs/hardhat-ethers" ;
import { ethers } from "hardhat";
import { expect } from "chai";


describe("hello world", function()
{
    it("should say hello world", async function () 
    {
        const HelloWorld = await ethers.getContractFactory("HelloWorld");
        const hello = await HelloWorld.deploy();

        expect(hello).to.equal("Hello, World");
       
    });
});

После звонка: тест каски npx

I got result with a error message:

hello world
    1) should say hello world


  0 passing (78ms)
  1 failing

  1) hello world
       should say hello world:
     TypeError: Cannot read properties of undefined (reading 'JsonRpcProvider')
      at Object.<anonymous> (node_modules\@nomiclabs\hardhat-ethers\src\internal\ethers-provider-wrapper.ts:4:61)
      at Module._compile (node:internal/modules/cjs/loader:1218:14)
      at Module._extensions..js (node:internal/modules/cjs/loader:1272:10)
      at Object.require.extensions.<computed> [as .js] (node_modules\ts-node\src\index.ts:1608:43)
      at Module.load (node:internal/modules/cjs/loader:1081:32)
      at Function.Module._load (node:internal/modules/cjs/loader:922:12)
      at Module.require (node:internal/modules/cjs/loader:1105:19)
      at require (node:internal/modules/cjs/helpers:103:18)
      at Object.<anonymous> (node_modules\@nomiclabs\hardhat-ethers\src\internal\provider-proxy.ts:7:1)
      at Module._compile (node:internal/modules/cjs/loader:1218:14)

Я уже провел интернет-исследование ответов/исправлений, но не смог найти подходящего.

Так что я не знаю, как это решить и что мне делать?

Заранее спасибо!

пожалуйста, смотрите выше

Не знаю, почему я получаю эту ошибку...

Вы неправильно настроили своего провайдера rpc, вам нужно настроить каску с узлом инфура и мнемоническим или закрытым ключом пользователя по умолчанию и т. д.

johnny 5 08.02.2023 21:46

Поскольку я новичок в этом, вот что я установил, обратите внимание, это из онлайн-курса - theprimeagen.github.io/web3-smart-contracts ---> npm install --global yarn, yarn init -y , yarn add -D hardhat, npx hardhat ---> Typescript: yarn add -D ts-node typescript ---> Типы тестирования: yarn add -D chai @types/node @types/mocha @types/chai --> npx hardhat compile -> работает нормально..., npx hardhat test -> описанная ошибка... ---> Что еще мне нужно установить?

Tho Mas 09.02.2023 10:15
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
135
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Это сообщение об ошибке указывает на то, что объект JsonRpcProvider не определен. Эта ошибка, вероятно, вызвана проблемой с библиотекой @nomiclabs/hardhat-ethers.

Возможное решение — обновить пакет @nomiclabs/hardhat-ethers до последней версии, поскольку проблема могла быть исправлена ​​в более новой версии. Вы можете сделать это, выполнив следующую команду в своем терминале:

npm install @nomiclabs/hardhat-ethers@latest

Если обновление библиотеки не решает проблему, вы также можете попробовать проверить документацию и примеры кода, предоставленные создателями библиотеки, или обратиться за помощью к каналам поддержки библиотеки.

Ответ принят как подходящий

взгляните на свой экземпляр контракта, как только вы развернете контракт с

const hello = await HelloWorld.deploy();

Вы должны вызвать функцию hello(), чтобы получить правильный результат. Обновите свой код с помощью

describe("hello world", function()
{
    it("should say hello world", async function () 
    {
        const HelloWorld = await ethers.getContractFactory("HelloWorld");
        const helloWorldContract = await HelloWorld.deploy();
        await helloWorldContract.deployed();

        const hello = await helloWorldContract.hello();
        expect(hello).to.be.equal("Hello, World");
       
    });
});

Вы заметите, что я также добавил код await helloWorldContract.deployed();, который будет ждать, пока транзакция развертывания уже не будет в цепочке.

Удачи !

Большое спасибо, теперь все работает, очевидно, это была проблема с пряжей. Новая установка полностью с npm устранила проблемы.

Tho Mas 10.02.2023 18:56

Другие вопросы по теме

Ошибка типа OCaml с применением функции
Тип 'int' не является подтипом 'двойного' флаттера даже после использования toInt()
С ошибкой: «отсутствует 1 обязательный позиционный аргумент», хотя я ввожу аргумент
Ошибка «строковые индексы должны быть целыми» при выборе данных об акциях Yahoo Finance с датами «начало» и «конец»
Консоль NextJS регистрирует TypeError на консоли каждый раз, когда я делаю запрос на локальном хосте: не удается прочитать свойства неопределенного (чтение «_owner»)
Как решить lambda() принимает 1 позиционный аргумент, но дано 2
Ошибка машинописного текста: элемент неявно имеет тип «любой», поскольку выражение типа «строка» не может использоваться для индексации
Я получаю TypeError: объект 'int' не является итерируемым, но на самом деле не об ошибке
Тип неправильно определяется для значения в паре ключ/значение, когда ключ сужен до одного свойства объекта
InnerText HTML не определен, но не должен быть