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.
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)
net
net
var 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.
$HOME/.local/share/io.ethereum.parity/jsonrpc.ipc
wäre der Standardspeicherort , aber Sie müssten in der Lage sein, die Umgebungsvariable dort zu erweitern, damit sie von der js-Seite funktioniert.~
? Versuchen Sie in der Konsole, in Ihr Home-Verzeichnis ( cd ~
) zu gehen und dann den absoluten Pfad von dort abzurufen ( pwd
)?$HOME
Teil 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 undefined
ist ziemlich ungewöhnlich.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(
web3 = new Web3(new Web3.providers.IpcProvider("/Users/{redacted}/Library/Application\ Support/io.parity.ethereum/jsonrpc.ipc",net));
? Beachten Sie das new
Schlüsselwort beim Anlegen des Anbieters. Sie müssen auch sicherstellen, dass die Parität tatsächlich die IPC-Pipe bereitstellt.
Benutzer2284570