Wie verbinde ich IPC mit Parity?

Ich verwende Parity im Warp-Modus unter Mac OSX:

parity --warp --rpcapi "web3,eth,personal"

Dann öffne ich ein neues Terminal und führe aus:

node Web3 = require("Web3") web3 = new Web3(new Web3.providers.HttpProvider(" http://localhost:8545 "))

Ich habe jedoch gehört, dass RPC nicht so sicher ist wie IPC. Ist das wahr? Wieso den? Und wie verbinde ich mich stattdessen über IPC. Eine Erklärung wäre hilfreich, da der Unterschied zwischen IPC und RPC für mich etwas nebulös ist .

Vielen Dank.

Dazu kommt noch das Latenzproblem.

Antworten (3)

Der RPC-Standard ist ein ungesicherter (normalerweise) Webserver, der über Standard-HTTP-Nachrichten (GET/POST/PUT/etc) kommuniziert. Wenn es ungesichert ist (und vielleicht bietet Parität die Möglichkeit, es mit irgendeiner Art von Zertifikaten zu sichern), bedeutet dies, dass jeder, der auf den Port zugreifen kann, auf dem es lauscht, alle Funktionen steuern kann, die von diesem RPC verfügbar gemacht werden.

Der IPC-Endpunkt hingegen ist eine benannte Pipe im Dateisystem, die durch alle normalen Dateisystemberechtigungen geschützt ist. Das bedeutet, wenn dem Benutzer/der Gruppe die Berechtigungen für das Dateihandle für die Pipe fehlen, können sie es nicht lesen/schreiben. Sie könnten die IPC-Pipe sogar so konfigurieren, dass sie für einige Benutzer schreibgeschützt ist und für andere lesen/schreiben.

Mit Parity können Sie die IPC-Schnittstelle zumindest über eine Konfigurationsdatei und wahrscheinlich auch über Befehlszeilen-Flags konfigurieren. Auf der web3-Seite würden Sie durch ersetzen , wobei Web3.providers.HttpProvider("http://localhost:8545")ein Verweis auf die nodejs-Bibliothek ist (z . B. ).Web3.providers.IpcProvider("/path/to/ipc", net)netnetvar net = require('net');

Es ist auch erwähnenswert, dass Sie mit Parity anscheinend die Schnittstelle konfigurieren können, auf der der RPC lauscht, wodurch Sie sie standardmäßig nur auf die "lokale" Schnittstelle beschränken können. Dies bringt es näher an das Sicherheitsniveau heran, das (potenziell) vom IPC-Endpunkt angeboten wird, indem der Zugriff nur auf lokale Benutzer beschränkt wird. Es bietet jedoch immer noch nicht das Steuerungsniveau pro Benutzer/pro Gruppe, das die IPC-Schnittstelle bietet.

Danke @deviatefish, das ist sehr hilfreich. Anscheinend sollte „path_to_ipc“ mit der IPC-Datei verknüpft sein, die erstellt wird, wenn die Parität im IPC-Modus gestartet wird.
Das ist richtig. Es sieht so aus , als $HOME/.local/share/io.ethereum.parity/jsonrpc.ipcwäre der Standardspeicherort , aber Sie müssten in der Lage sein, die Umgebungsvariable dort zu erweitern, damit sie von der js-Seite funktioniert.
ENTSCHULDIGUNG, ICH HABE BEARBEITUNGSPROBLEME Was bedeutet Ihr letzter Kommentar? Ich habe ausgeführt (das Ausführen mit 'var' hat nicht funktioniert): > net = require('net') <br/> Weil derzeit beide der folgenden Fehler auftreten > Web3.providers.IpcProvider("~/Library/Application\Support/io.parity.ethereum/jsonrpc.ipc", net) > Web3.providers.IpcProvider("~/Library/Application Support/io.parity.ethereum /jsonrpc.ipc", net)
Auf was für einem System betreibst du es? Existiert die Datei beim Ausführen der Parität an diesem Speicherort?
Ich bin auf Max OSX Yosemite und die Datei existiert tatsächlich, ich bin mir nicht sicher, ob ich das Leerzeichen in „Application \ Support“ entkommen soll, aber so oder so hat es nicht funktioniert. Hier ist die Teilantwort: IPC Connection Error { Error: connect ENOENT ~/Library/Application Support/io.parity.ethereum/jsonrpc.ipc at Object.exports._errnoException (util.js:1018:11) at exports._exceptionWithHostPort ( util.js:1041:20) bei PipeConnectWrap.afterConnect [als oncomplete] (net.js:1086:14) Code: 'ENOENT', Fehlernummer: 'ENOENT', Syscall: 'connect', Adresse: '~/Library/ Anwendungsunterstützung/io.parity.ethereum...
Das scheint zu implizieren, dass es die Datei unter diesem Pfad nicht finden kann ... Vielleicht weiß es nicht, was es mit dem tun soll ~? Versuchen Sie in der Konsole, in Ihr Home-Verzeichnis ( cd ~) zu gehen und dann den absoluten Pfad von dort abzurufen ( pwd)?
Hey Mann, weiß die Hilfe wirklich zu schätzen, leider bekomme ich es immer noch nicht zum Laufen. Web3.providers.IpcProvider("/Users/{redacted}/Library/Application Support/io.parity.ethereum/jsonrpc.ipc", net) . Der Fehler sagt undefined . Dies geschieht nach dem Ausführen von net = require('net') und Web3 = require("Web3") und dem Sicherstellen, dass der Knoten synchronisiert ist und *jsontpc.ipc vorhanden ist.
Sie haben erwähnt , dass Sie in der Lage sein müssten, die Umgebungsvariable dort zu erweitern, damit sie früher von der js-Seite funktioniert . Was bedeutet das genau?
Ich bezog mich auf den $HOMETeil des Standardpfads, den ich angegeben hatte. Das erweitert sich normalerweise /Users/<username>/auf OSX oder /home/<username>/Linux. Es sieht so aus, als hätten Sie in Ihrem letzten Kommentar die richtige Erweiterung vorgenommen, daher bin ich mir nicht sicher, was dort vor sich geht. Können Sie vielleicht Ihren Code (weniger alles, was Sie brauchen/möchten) in einer Zusammenfassung zusammenfassen , damit ich es mir genauer ansehen kann? Einen Fehler von zu bekommen undefinedist ziemlich ungewöhnlich.
Ich habe das endlich gelöst ... es war ein dummer Fehler, ich habe nicht web3 = new Web3 (etcetcetc) gesetzt ... Siehe meine neue Antwort unten, wenn Sie interessiert sind. Vielen Dank für Ihre Hilfe, Sie werden wahrscheinlich noch mehr von mir hören, während ich versuche, mich mit EVM und Web3 vertraut zu machen!

In nodejs, Ubuntu 16.04, Parity-Standardinstallation:

var net = require('net')
var web3 = require('web3')

ipcPath = process.env["HOME"] + "/.local/share/io.parity.ethereum/jsonrpc.ipc"
provider = new web3.providers.IpcProvider(this.ipcPath, net)

Ich habe dieses Problem endlich gelöst. Nach dem Ausführen der Parität führen Sie node mit den folgenden Anweisungen aus:

Web3 = require("Web3")

net = require('net')

web3 = new Web3(Web3.providers.IpcProvider("/Users/{redacted}/Library/Application\ Support/io.parity.ethereum/jsonrpc.ipc",net));

Vorher habe ich einfach Web3.providers.IpcProvider("/Users/{redacted}/Library/Application\ Support/io.parity.ethereum/jsonrpc.ipc",net) ausgeführt, ohne es in web3 = new Web3(

@deviatefish Leider bekomme ich das immer noch nicht zum Laufen, der Anbieter ist immer noch undefiniert. Fehlt vielleicht eine Portnummer?
Es sollte keine Portnummer erforderlich sein. Vielleicht versuchen web3 = new Web3(new Web3.providers.IpcProvider("/Users/{redacted}/Library/Application\ Support/io.parity.ethereum/jsonrpc.ipc",net));? Beachten Sie das newSchlüsselwort beim Anlegen des Anbieters. Sie müssen auch sicherstellen, dass die Parität tatsächlich die IPC-Pipe bereitstellt.