Estoy usando estas instrucciones de etherchain . Aquí hay una pregunta similar ( parece duplicada, pero no lo es ). La solución provista allí no funciona para mí, porque no tengo un cliente ethereum local para conectarme. Quiero usar uno proporcionado por 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:
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)
¿Qué me estoy perdiendo?
he reemplazado
const web3 = new Web3(new Web3.providers.HttpProvider("http://rpc.ethapi.org:8545"));
con:
const web3 = new Web3(new Web3.providers.HttpProvider("https://ropsten.infura.io/TOKEN"));
y todo funciona
Esto https://ropsten.infura.io/TOKEN
me fue dado después de registrarme en infura.io
rpc.ethapi.org
está caído: isup.me/rpc.ethapi.orgDebe tener cuidado al usar Infura porque puede transmitirle información incorrecta. Infura está diseñado con múltiples nodos detrás de un balanceador de carga. Todos estos nodos no están sincronizados, por lo que puede recibir información de nodos que contienen bloques obsoletos o nodos que no están sincronizados con el bloque más reciente.
Solíamos usar Infura, lo cual fue excelente porque es gratuito; sin embargo, resultó en muchas horas de trabajo de ingeniería para nosotros, ya que tuvimos que depurar las respuestas con datos inconsistentes. Cambiamos a Alchemy y deseamos haberlo hecho antes. Es un servicio pago, sin embargo, vale cada centavo.
tayvano
manidos