RPC mit einem Remote-Knoten

Ich weiß, diese Frage wurde schon so oft gestellt. Aber ich konnte mein Problem nicht lösen.

Ich versuche, eine Verbindung zu einem Remote-Knoten herzustellen, der sich auf einem Server befindet.

Auf meinem Server läuft geth auf rinkeby und RPC sollte dank dieses Befehls aktiviert werden:

admin.startRPC("0.0.0.0", 8545, "*", "web3,db,net,eth")

In meinem Code (NodeJS) habe ich Folgendes:

function getNode(callback) {
    var web3;
    console.log(web3);
    web3 = new Web3(new Web3.providers.HttpProvider("https://X.X.X.X:8545"));
    console.log(web3);
    if (web3 != null) {
        console.log("GOT WEB3");
        callback(null, web3);
    } else {
        console.log("did not get web3");
        callback("ERROR", web3);
    }
}

Die web3-Variable ist beim ersten Protokoll nicht definiert und gibt ein Objekt zurück, nachdem ich den HTTP-Anbieter erhalten habe.

Allerdings habe ich diesen Fehler in meiner Konsole:

Fehler: Ungültige JSON-RPC-Antwort: „“ bei Object.InvalidResponse (D:\node_modules\web3\lib\web3\errors.js:38:16) bei XMLHttpRequest.request.onreadystatechange (D:\node_modules\web3\lib\web3 \httpprovider.js:119:24)

Was habe ich falsch gemacht?

Bearbeiten: TCP und UDP sind alle auf Port 8545 geöffnet.

AKTUALISIERUNG 1

Aktueller Befehl zum Starten von geth:

geth --rinkeby console -rpc -rpcaddr "0.0.0.0" --rpccorsdomain "*"

Aktueller NodeJS-Code:

function getNode(callback) {
    var web3 = new Web3();
    web3.setProvider(new web3.providers.HttpProvider("https://server_external_ip:8545/"), function(error, result) {
        if (error) {
            console.log(error);
            callback("ERROR", web3);
        } else {
            console.log(web3.isConnected());
            callback(null, web3);
        }
    });
}

Das ist, was netstat mir gibt:

tcp6       0      0 :::8545                 :::*                    LISTEN      3565/geth 

Ergebnis: Serverless gibt mir eine Zeitüberschreitung. Wenn kein Timeout angegeben ist, läuft es endlos, ohne etwas zu bekommen.

welche Version hast Web3du requirein deinem Code?
Ich benötige 1.0.0 beta.26 @ValidityLabs-Sebastian

Antworten (1)

Sie müssen geth auf die IP-Adresse hören lassen, von der aus Ihr Server extern erreichbar ist:

admin.startRPC(<external ip address>, 8545, "*", "web3,db,net,eth")

Wenn Sie localhost angeben, akzeptiert geth nur lokale Verbindungen, dh Verbindungen, die von derselben Maschine kommen, aber nicht von entfernt.

Macht Sinn. Aber es gibt dies zurückError: listen tcp MY.IP.IS.HERE:8545: bind: cannot assign requested address
Klingt so, als ob der Port bereits von einem Server verwendet wird. lsof -i TCP| fgrep LISTENHast du das zB mit (unter Linux) überprüft ?
Es gibt nur folgendes: geth 2809 myname 33u IPv6 47912 0t0 TCP *:30303 (LISTEN)Gleicher Fehler für zufällige Ports
Habe gerade die Fehlermeldung überprüft. Es geht nicht um den Port, sondern um die Adresse. Bist du dir sicher mit der IP-Adresse? Wenn Sie eine VM in der Cloud verwenden, hat die VM in der Regel eine interne und eine externe IP-Adresse
Ich habe es mit der externen Adresse und der internen versucht. Nur der interne funktionierte. Aber wenn ich versuche, eine Anfrage zu senden, habe ich immer noch den gleichen Fehler wie in der Frage beschrieben
Ja, Sie erhalten den Fehler mit der internen Adresse. Sie müssen geth wirklich auf die externe Adresse setzen. Von hier aus schwer zu sagen, was die Ursache ist, sieht eher nach einem Problem mit der Serverkonfiguration aus. Ich würde prüfen, ob es eine Firewall gibt, die das Abhören blockiert
Aber ich verstehe nicht. Wenn ich "0.0.0.0" spezifiziere, sollte es auf jeder Schnittstelle meiner Maschine lauschen. Es sollte also funktionieren (auch wenn es nicht gesichert ist)
Nun, mit der aktuellen Konfiguration lädt es nur auf unbestimmte Zeit ... (kein Timeout auf meinem Server, der nach Verbindung fragt)
Hallo, etwas spät. Sogar Ihre Lösung funktioniert, ich möchte rpc starten, wenn ich geth starte, ohne es manuell tun zu müssen. Aber die Verwendung von Flags funktioniert einfach nicht (überprüfen Sie die Frage nach Flags), unabhängig von der Reihenfolge, in der ich sie platziert habe.
Sicher nicht, da die Optionen mit zwei Minuszeichen einhergehen. Versuchen Sie es mit --rpc und --rpcaddr anstelle von -rpc und -rpcaddr
Schon probiert, das gleiche :S
es sagt:Error: HTTP server already running on 0.0.0.0:8545