Json-Rpc

如何將 IPC 與 Parity 連接?

  • February 5, 2019

我在 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)

引用自:https://ethereum.stackexchange.com/questions/17520