Подключение к размещенному провайдеру web3 из бэкенда NodeJS

Я использую эти инструкции от etherchain . Вот аналогичный вопрос ( похоже на дубликат, но это не так ). Предоставленное там решение не работает для меня, потому что у меня нет локального клиента ethereum для подключения. Я хочу использовать один, предоставленный Etherchain .

const Web3 = require('web3');
const web3 = new Web3(new Web3.providers.HttpProvider("http://rpc.ethapi.org:8545"));
web3.eth.getBlock("latest", (error, result) => {
  console.log('error:', error);
  console.log('results', result);
});

Ошибка:

Error: Invalid JSON RPC response: ""
   at Object.InvalidResponse (/home/manid/Рабочий стол/Pogovorim/NODE_SERVER/node_modules/web3/lib/web3/errors.js:35:16)
    at XMLHttpRequest.request.onreadystatechange (/home/manid/Рабочий стол/Pogovorim/NODE_SERVER/node_modules/web3/lib/web3/httpprovider.js:116:32)
    at XMLHttpRequestEventTarget.dispatchEvent (/home/manid/Рабочий стол/Pogovorim/NODE_SERVER/node_modules/xhr2/lib/xhr2.js:64:18)
    at XMLHttpRequest._setReadyState (/home/manid/Рабочий стол/Pogovorim/NODE_SERVER/node_modules/xhr2/lib/xhr2.js:354:12)
    at XMLHttpRequest._onHttpRequestError (/home/manid/Рабочий стол/Pogovorim/NODE_SERVER/node_modules/xhr2/lib/xhr2.js:544:12)
    at ClientRequest.<anonymous> (/home/manid/Рабочий стол/Pogovorim/NODE_SERVER/node_modules/xhr2/lib/xhr2.js:414:24)
    at emitOne (events.js:96:13)
    at ClientRequest.emit (events.js:188:7)
    at Socket.socketErrorListener (_http_client.js:309:9)
    at emitOne (events.js:96:13)
    at Socket.emit (events.js:188:7)
    at emitErrorNT (net.js:1281:8)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)
    at process._tickCallback (internal/process/next_tick.js:98:9)

Что мне не хватает?

Возможно, ваше решение здесь. эфириум.stackexchange.com/questions/2080/…
@tayvano, спасибо! Это решение не работает для меня, потому что я подключаюсь к удаленному хосту, а решение есть для подключения к узлу geth, работающему на локальной машине.

Ответы (2)

я заменил

const web3 = new Web3(new Web3.providers.HttpProvider("http://rpc.ethapi.org:8545"));

с:

const web3 = new Web3(new Web3.providers.HttpProvider("https://ropsten.infura.io/TOKEN"));

и все работает.

Это https://ropsten.infura.io/TOKENмне выдали после регистрации на infura.io

Похоже rpc.ethapi.org, не работает: isup.me/rpc.ethapi.org
Я попробовал то, что вы предложили для подключения к ropsten, но я получаю сообщение об ошибке Ошибка: неверный ответ JSON RPC: "" в Object.module.exports.InvalidResponse (/Blockchain/node_modules/web3/lib/web3/errors.js:35: 16) в HttpProvider.send (/Blockchain/node_modules/web3/lib/web3/httpprovider.js:91:22) в RequestManager.send (/Blockchain/node_modules/web3/lib/web3/requestmanager.js:58:32) в Eth.send [как sendTransaction] (/Blockchain/node_modules/web3/lib/web3/method.js:145:58) в SolidityFunction.sendTransaction (/Blockchain/node_modules/web3/lib/web3/function.js:148: 26) в SolidityFunction.execute (/Blo
Я думаю, вы имеете в виду ropsten.infura.io/[API_KEY] ? чтобы избежать путаницы со смарт-контрактом токена....

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

Раньше мы использовали Infura, которая была отличной, потому что она бесплатна, однако это привело к многочасовой инженерной работе, поскольку нам приходилось отлаживать ответы с противоречивыми данными. Мы перешли на Алхимию , и нам жаль, что мы не переключились на нее раньше. Это платная услуга, однако она стоит каждой копейки.