Как заставить работать web3.js

Я новый ученик. Я не понимаю, как заставить web3.js работать на общем хостинге. У пользователя, использующего эту функцию, должен быть установлен Metamask.

Поскольку я использую виртуальный хостинг, я не могу установить узел или geth на виртуальный хостинг.

Я скачал web3.js с https://github.com/ethereum/web3.js/ и загрузил файлы на виртуальный хостинг, а затем связал их с файлом HTML.

<script src="assert/dist/web3.js></script>

Я следую руководству в этом посте. Можно ли использовать методы API web3.js для взаимодействия с контрактом, развернутым на Rinkeby?

и добавьте код в тег

Я использую домен с https://

Я использую браузер Google Chrome.

Я установил Metamask и вошел в систему, подключившись к тестовой сети Rinkeby.

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

Я загружаю следующий файл HTML на сервер общего хостинга и запускаю его, но получаю ошибку

Ниже приведен полный HTML-код, который я использовал для тестирования.

<!doctype>
<html>
<head>
<meta charset="UTF-8">
<title>Hello Project</title>
<script src="assets/dist/web3.js"></script>
<script>
    var Web3 = require('web3');
    var web3 = window.web3;

    if(typeof web3 !== 'undefined') {
        console.log("Using web3 detected from external source like Metamask");
        web3 = new Web3(web3.currentProvider);
    } else {
        console.log("Using localhost");
        web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
    }

    var account = web3.eth.accounts[0];
    console.log(account);
</script>
</head>
<body><p>Hello Project</p></body>
</html>

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

HTML web3.js не может определить тестовую сеть Ринкеби в качестве поставщика.

Что я пропустил? Советы очень ценятся. Спасибо

Ответы (4)

Основная проблема здесь заключается в том, что вы указываете узел localhost:8545, который должен соответствовать локальному узлу на вашем компьютере.

Если у вашего пользователя есть метамаска, вам не нужно создавать экземпляр объекта Web3 самостоятельно, Metamask уже делает это, внедряя в ваш браузер экземпляр web3 в файле window.web3. Затем Metamask будет перехватывать транзакции при использовании этого экземпляра для совершения вызовов и будет полагаться на транзакцию, если она принята пользователем, в текущей подключенной сети.

хорошо. Спасибо за совет. После прочтения ваших комментариев. Теперь у меня есть ответ, и он работает. Выложу рабочий код в пост.

Я предполагаю, что у вас установлен и запущен MetaMask в браузере, который вы используете для тестирования.

Если это так, то трудно сказать с уверенностью, но я предполагаю, что вы проверяете window.web3слишком рано (до того, как MetaMask сможет внедрить его).

Я бы дождался события загрузки окна, прежде чем искать window.web3.

Спасибо, smarx и Asone за совет. Теперь у меня это работает, используя следующий код:

  • Используйте Google Chrome
  • Установленная метамаска
  • Использовать виртуальный хостинг-сервер
  • Нет необходимости устанавливать Geth или другой клиент
  • Недостаток: пользователь ДОЛЖЕН иметь установленную MetaMask или использовать MIST для взаимодействия с сетью из-за отсутствия локального сервера или работы на собственном узле VPS.

.

<html>
   <head>
      <title>Hello Project</title>
      <script src="assets/dist/web3.js"></script>
   </head>
   <body>
      <p>Hello Project</p>
      <div id="err_msg_box"></div>

      <script>
          window.onload = function(){
              if (typeof web3 === 'undefined'} {
                 $('#err_msg_box').html('You need <a href="htps://metamask.io">MetaMask</a> browser plugin to run this example');
              } else {
                 // Here the code to execute the project
                 // No need to set Provider, use web3.eth directly
                 // web3.eth.getAccounts(function(err,res){ console.log(res);});
              }
         }
     </script>
     <script src="assets/js/jquery-1.10.2.min.js"></script>
   </body>
</html>
Просто на заметку, ваш ответ больше соответствует тому, что упомянул @smarx.

в http провайдере вы можете использовать infura.io - они предоставляют доступ к виртуальной машине ethereum, вам просто нужно зарегистрироваться там и получить ключи URL