Web3.givenProvider возвращает null

Я создаю приложение-реакцию, которое взаимодействует с частной цепочкой блоков Ethereum, работающей с geth на rpcport 8545.

Таким образом, я использую web3.js для получения данных из моей цепочки блоков, и вот мой код:

var Web3 = require('web3');
var web3 = new Web3("http://localhost:8545");

и в методе render ():

console.log(web3.eth.blockNumber);
console.log(Web3.givenProvider);

Он должен отображать в консоли браузера мой текущий номер блока и порт, который я прослушиваю, но вместо этого я получаю undefined и null, что, похоже, означает, что я не подключен к своей запущенной цепочке блоков.

кстати, мой блокчейн работает с этой строкой:

geth --datadir ./noeud2 --networkid 100 --port 30301 --rpcport 8545

Вы знаете, почему это не работает?

Я следил за этим руководством:

https://www.codeooze.com/blockchain/ethereum-block-explorer-react-02/

Но и у меня тоже не работает.


person Bud    schedule 12.11.2018    source источник


Ответы (2)


Прежде чем непосредственно приступить к отладке кода реакции, лучше начать с простого приложения на основе HTML и попытаться запросить вашу частную цепочку Ethereum. Для этого выполните следующие действия.

  1. Создайте файл index.html ниже

index.html

<!DOCTYPE html>
<html lang=”en”>
<head>
     <meta charset=”UTF-8">
     <meta name=”viewport” content=”width=device-width, initial-scale=1.0">
     <meta http-equiv=”X-UA-Compatible” content=”ie=edge”>
     <title>Document</title>
     //provide the location of web3 file
     <script src=”./node_modules/web3/dist/web3.min.js”></script>

</head>
<body>
    <div class=”container”>
         <h1>Given below Ethereum address</h1>
         <div id=”AccountAddress”></div>

<script src=”https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
<script>


  if (typeof web3 !== ‘undefined’) 
{
 web3 = new Web3(web3.currentProvider);
 } 
else 
{
 // set the provider you want from Web3.providers
web3 = new Web3(new Web3.providers.HttpProvider(“http://localhost:8545”));
 }

 $(“#AccountAddress”).html(web3.eth.accounts[0]);

 </script>
</body>
</html>
  1. Если при открытии файла index.html в браузере адрес первой учетной записи не отображается, значит, проблема с подключением к блокчейну geth ethereum, который вы только что создали.

С Geth вы можете попробовать с конфигурацией ниже, чтобы запустить свой Ethereum.

geth --rpc --rpcaddr "0.0.0.0" --rpcport 8545 --nodiscover --networkid "$NETWORKID" --datadir ~/.ethereum_experiment --genesis ~/genesis_block.json

Или вы можете попробовать использовать Ganache CLI (TestRPC) вместо Geth.

Ganache CLI можно установить с помощью следующей команды

npm install -g ganache-cli

По завершении выполните следующую команду, чтобы запустить его:

ganache-cli 

Вы также можете попробовать следующее, если чувствуете, что у вас нет Интернета3

Установите web3.js с помощью следующей команды

npm install ethereum/web3.js — save

Теперь вы можете попробовать подключиться к только что запущенному интерфейсу командной строки Ganache, используя сначала Remix IDE.

Откройте http://remix.ethereum.org, щелкните вкладку «Выполнить» и затем измените выпадающее значение «Среда». вниз от виртуальной машины Javascript к провайдеру Web3.

Нажмите «ОК», а затем укажите адрес localhost testrpc / ganache-cli (по умолчанию это http://localhost:8545)

Теперь вместо развертывания и тестирования в виртуальной машине Javascript в Remix мы теперь используем клиент Ganache CLI на вашем компьютере.

Сначала попробуйте выполнить описанные выше шаги и прокомментируйте свои результаты.

person Joseph T F    schedule 13.11.2018
comment
Привет! Я пробовал с вашим html-кодом, он тоже не работает, даже при запуске вашей конфигурации. На самом деле мне нужно реализовать свой код с помощью Geth, это часть моего проекта. - person Bud; 13.11.2018
comment
В любом случае, большое спасибо, я думаю, что мне удалось обойти проблему, используя сначала скрипт python, который связывается с моей цепочкой блоков, а затем отправляет некоторые данные в js-программу с помощью Sockets, может быть немного сложным для того, что он на самом деле делает, но это будет ладно для первой версии! Еще раз спасибо! - person Bud; 13.11.2018

Инициализация web3 должна быть такой: var web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:8545'));

person nikos fotiadis    schedule 12.11.2018
comment
Вы уверены, что ваш код выполняется в браузере? В документации указано, что он будет установлен in an Ethereum compatible browser. Или он вообще не инициализируется? В этом случае вы можете попробовать отладить его, чтобы быть уверенным в том, что происходит. - person nikos fotiadis; 12.11.2018
comment
Я не специалист по реагированию, поэтому не знаю, выполняется ли код в браузере или нет, я последую вашему совету и отлажу его! Спасибо - person Bud; 12.11.2018
comment
Старайтесь не включать в функцию рендеринга. Если вы хотите, чтобы он выполнялся в браузере, поместите код в отдельный файл сценария и включите его в свой html. - person nikos fotiadis; 12.11.2018