如何將 IPC 與 Parity 連接?
我在 Mac OSX 上以 warp 模式執行 Parity:
奇偶校驗 –warp –rpcapi “web3,eth,personal”
然後我打開一個新終端並執行:
節點 Web3 = require(“Web3”) web3 = new Web3(new Web3.providers.HttpProvider(" http://localhost:8545 “))
但是,我聽說 RPC 不如 IPC 安全。這是真的?為什麼?以及如何改為通過 IPC 連接。一些解釋會有所幫助,因為 IPC 和 RPC 之間的區別對我來說有點模糊。
謝謝你。
RPC 標準是一個不安全的(通常)網路伺服器,它通過標準的 HTTP 消息(GET/POST/PUT/etc)進行通信。如果不安全(也許奇偶校驗提供了使用某種證書保護它的能力),這意味著任何可以訪問它正在偵聽的埠的人都將能夠控制該 RPC 公開的所有功能。
另一方面,IPC 端點是文件系統上的命名管道,它通過所有正常的文件系統權限方式受到保護。這意味著如果使用者/組缺乏對管道文件句柄的權限,他們將無法讀取/寫入它。您甚至可以將 IPC 管道配置為對某些使用者是只讀的,而對其他使用者是讀/寫的。
Parity 允許您至少通過配置文件配置 IPC 介面,也可能通過命令行標誌。在 web3 方面,您將替換
Web3.providers.HttpProvider("http://localhost:8545")
為Web3.providers.IpcProvider("/path/to/ipc", net)
,其中net
是對 nodejsnet
庫的引用(例如var net = require('net');
)。還值得指出的是,Parity 似乎允許您配置 RPC 偵聽的介面,預設情況下允許您將其限制為“本地”介面。通過將訪問限制為僅限本地使用者,這使其更接近 IPC 端點提供的安全級別(可能)。但是,它仍然不提供 IPC 介面提供的每使用者/每組級別的控制。
在nodejs,ubuntu 16.04,Parity預設安裝:
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)