Nodejs
為什麼我無法通過 IPC 連接?
我已經成功執行
geth --rpc
測試了一些功能,但我需要根據這個答案應該由 IPC 完成的personal
API 。當我跑
geth --ipcapi "db,eth,net,web3,personal" --ipcpath /tmp/geth.ipc
這將創建 ipc 文件,並且 geth 似乎可以正常啟動。
我安裝了以下 npm 模組:
web3
web3_extended
web3_ipc
然後我在 nodejs 上執行它:
var web3_extended = require('web3_extended'); var options = { host: '/tmp/geth.ipc', ipc: true, personal: true, admin: false, debug: false }; var web3 = web3_extended .create (options); var coinbase = web3.eth.coinbase;
最後一行給了我一個 HTML 響應,其中包括
Your browser sent a request that this server could not understand.
和
Apache/2.4.12 (Ubuntu) Server at localhost Port 80
那條 Apache 線讓我覺得 nodejs 甚至沒有嘗試通過 IPC 連接。
為什麼不?或者,還有什麼問題?
概括
問:為什麼我無法通過 IPC 連接?為什麼不?或者,還有什麼問題?
答:從您的 HTML 響應消息來看,您的程式碼目前使用的似乎是不支持 IPC 協議的 web3_extended 版本。
細節
你能檢查一下你使用的是tjade273/web3_extended而不是The18thWarrior/web3_extended嗎?
第一個是從第二個分叉出來的,包括 IPC 協議處理。從tjade273/web3_extended/blob/index.js - 第 7 到 15 行:
function create(options) { if(options.ipc){ var client = new net.Socket(); web3.setProvider(new web3.providers.IpcProvider(options.host,client)); } else{ web3.setProvider(new web3.providers.HttpProvider(options.host)); } if (options.personal) {
而來自The18thWarrior/web3_extended/blob/index.js的原始程式碼- 第 6 到 9 行:
function create(options) { web3.setProvider(new web3.providers.HttpProvider(options.host)); if (options.personal) {