Как взаимодействовать с развернутым смарт-контрактом Ethereum?

Я хочу создать интерфейс для взаимодействия с моим смарт-контрактом. У меня есть пример по следующей ссылке. Прилавок

Перед выполнением моего контракта я пытался использовать данный пример. Но он выдает ошибку - «Невозможно найти web3. Пожалуйста, запустите MetaMask (или что-то еще, что внедряет сеть». Но я могу запустить dApp с их веб-сайта - Прилавок

Как именно вы тестируете приложение? Используете HTML-страницу, сохраненную на вашем компьютере?
Если вы можете правильно запустить их dApp (вы видите сообщения «Найдено внедренное web3» и «Вызов getCount выполнен правильно»), это означает, что у вас установлен Metamask и вы вошли в систему. Дважды проверьте это на всякий случай. Вы правильно включаете библиотеку web3? Видите ли вы какие-либо ошибки в консоли браузера (нажмите F12 и перейдите в консоль, если вы используете Google Chrome) при импорте или запуске кода?
@ShawnTabrizi Я скопировал доступный код и сохранил его как html-страницу на своем ПК.
@Patricio да, у меня есть учетная запись метамаски, и я вошел в систему. Я не уверен насчет библиотеки web3. Я не устанавливал web3 на свой компьютер. Но я могу использовать web3 на geth. Поэтому я не уверен насчет местоположения веб3. Нужно ли устанавливать web3 отдельно?
@Patricio Патрисио Я скачал web3 и сохранил его в каком-то месте. Затем я указал это место как <script src=".\dist\web3.min.js"></script>.Теперь он показывает найденный web3. Но не могу получить доступ к функциям. Где-то застрял. Я проверю проблему и добавлю свои сомнения в качестве следующего комментария. Спасибо.
@ShawnTabrizi и @Patricio Я успешно создал интерфейс. Но с одной проблемой я столкнулся - Error: authentication needed: password or unlock. Так что мне всегда приходится разблокировать учетную запись с консоли geth. Я пытался добавить web3.personal.unlockAccount(account1,"password")в свой скрипт, но он не работает.
Также обратите внимание, что web3.version.network, web3.eth.accounts также не работали.
К сожалению, я точно не знаю, как решить эту проблему, но я уверен, что если вы сделаете новый пост с этими подробностями, кто-то еще сможет вам помочь :)
@ShawnTabrizi Хорошо. Спасибо. У меня есть еще один вопрос. Теперь я закрыл geth и запустил новый экземпляр, но я не получаю правильное значение счетчика. Он всегда показывает, что 0транзакция отправки работает, но значение счетчика не увеличивается.
Вы сами развернули контракт в локальной сети Эфириума или используете основную сеть? И если вы используете основную сеть, вы уже полностью синхронизированы?
Локальная сеть ethereum.private на моем компьютере

Ответы (1)

К сожалению, вы не можете использовать Metamask на локальных веб-страницах (просто откройте файл на своем компьютере). Это явно ограничено :

🌐 Http(s) — требуется веб-сервер

Из-за ограничений безопасности браузера мы не можем взаимодействовать с децентрализованными приложениями, работающими на file://. Пожалуйста, используйте локальный сервер для разработки.

Вам нужно будет опубликовать свой код на локальном сервере, чтобы протестировать функциональность MetaMask.

В Visual Studio Code есть отличный плагин , позволяющий легко это сделать.

Metamask используется в качестве провайдера web3, верно? Так есть ли какой-либо другой инструмент, работающий в качестве провайдера web3? Могу ли я использовать geth? Я развернул контракт с помощью консоли geth.
Да, вы можете использовать что-то вроде geth, у которого есть разблокированная учетная запись и достаточно тестового/реального эфира для завершения транзакции. Вы должны добавить строку, которая выглядит так: web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));как показано здесь .