Verbindung zum gehosteten Web3-Anbieter vom NodeJS-Backend

Ich verwende diese Anweisungen von etherchain . Hier ist eine ähnliche Frage ( scheint wie ein Duplikat, ist es aber nicht ). Die dort bereitgestellte Lösung funktioniert bei mir nicht, da ich keinen lokalen Ethereum-Client habe, mit dem ich mich verbinden kann. Ich möchte einen von Etherchain verwenden .

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);
});

Fehler:

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)

Was vermisse ich?

Ihre Lösung ist wahrscheinlich hier drin. ethereum.stackexchange.com/questions/2080/…
@tayvano, danke! Diese Lösung funktioniert bei mir nicht, da ich eine Verbindung zu einem Remote-Host herstelle und die dort bereitgestellte Lösung für die Verbindung zu einem Geth-Knoten dient, der auf einem lokalen Computer ausgeführt wird.

Antworten (2)

Ich habe ersetzt

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

mit:

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

und alles funktioniert.

Diese https://ropsten.infura.io/TOKENwurde mir nach Registrierung auf infura.io gegeben

Scheint ausgefallen rpc.ethapi.orgzu sein: isup.me/rpc.ethapi.org
Ich habe versucht, was Sie vorgeschlagen haben, um eine Verbindung zu ropsten herzustellen, aber ich erhalte einen Fehler Fehler: Ungültige JSON-RPC-Antwort: "" bei Object.module.exports.InvalidResponse (/Blockchain/node_modules/web3/lib/web3/errors.js:35: 16) bei HttpProvider.send (/Blockchain/node_modules/web3/lib/web3/httpprovider.js:91:22) bei RequestManager.send (/Blockchain/node_modules/web3/lib/web3/requestmanager.js:58:32) bei Eth.send [als sendTransaction] (/Blockchain/node_modules/web3/lib/web3/method.js:145:58) bei SolidityFunction.sendTransaction (/Blockchain/node_modules/web3/lib/web3/function.js:148: 26) bei SolidityFunction.execute (/Blo
Ich denke du meinst ropsten.infura.io/[API_KEY] ? um die Verwirrung mit Token Smart Contract zu vermeiden....

Sie sollten bei der Verwendung von Infura vorsichtig sein, da es Ihnen falsche Informationen übermitteln kann. Infura ist mit mehreren Knoten hinter einem Load Balancer aufgebaut. Alle diese Knoten sind nicht synchron, sodass Sie Informationen von Knoten erhalten können, die veraltete Blöcke enthalten, oder Knoten, die nicht mit dem neuesten Block synchronisiert sind.

Früher haben wir Infura verwendet, was großartig war, weil es kostenlos ist, aber es bedeutete viele Stunden Entwicklungsarbeit für uns, da wir Antworten mit inkonsistenten Daten debuggen mussten. Wir sind zu Alchemy gewechselt , und wir wünschten, wir wären schon früher dazu gewechselt. Es ist ein kostenpflichtiger Service, der jedoch jeden Cent wert ist.