Nodejs

為什麼我無法通過 IPC 連接?

  • April 26, 2016

我已經成功執行geth --rpc測試了一些功能,但我需要根據這個答案應該由 IPC 完成的personalAPI 。

當我跑

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) {

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