Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RequestManager/SocketProvider never resolves Web3Deferred Promise when using IPC Provider #7323

Closed
fipso opened this issue Oct 13, 2024 · 6 comments
Assignees
Labels
4.x 4.0 related Bug Addressing a bug P3 Low severity bugs

Comments

@fipso
Copy link

fipso commented Oct 13, 2024

Steps to reproduce the behavior

const { Web3 } = require("web3");
const { IpcProvider } = require("web3-providers-ipc");

async function main2() {
  const ipcProvider = new IpcProvider("/tmp/sockets/rpc_proxy.sock", {}, {});
  const web3 = new Web3(ipcProvider);

  const latest = await web3.eth.getBlockNumber();
  console.log(latest);
}
main2();

I debugged my way to the SocketProvider's send function. For some reason, when I place a breakpoint at the end of the function return deferredPromise; line 494, wait for like 2 seconds, then i continue execution and suddenly it works and the promise resolves with the right number.

Environment

Fedora 40, Node v20.17,
"web3": "^4.13.0",
"web3-providers-ipc": "^4.0.7"

@mconnelly8 mconnelly8 added Bug Addressing a bug 4.x 4.0 related labels Oct 14, 2024
@mconnelly8
Copy link

The team will review this soon @fipso

@mconnelly8 mconnelly8 changed the title RequestManager/SockerProvider never resolves Web3Deferred Promise when using IPC Provider RequestManager/SocketProvider never resolves Web3Deferred Promise when using IPC Provider Oct 28, 2024
@mconnelly8 mconnelly8 added the P3 Low severity bugs label Oct 29, 2024
@danforbes
Copy link
Contributor

@fipso - which Ethereum node are you connecting to with IPC? Have you checked the IPC configuration options? There is an open PR to fix the broken link to the definition of the SocketConstructorOps type - here is an updated link in the meantime.

@fipso
Copy link
Author

fipso commented Nov 2, 2024

Hello, the Node I am using is Nethermind. As the nethermind IPC socket is requiring a /n after each JSON object it receives I got a reverse proxy in front of it that adds a /n to each message and forwards it. I tested the reverse proxy with different nodes and client libraries so I can be sure the issue is probably not there.
Thanks for pointing out the Options docs I will take a look at that

@Muhammad-Altabba
Copy link
Contributor

Thanks for reporting the issue @fipso,
We will look into it.
I the mean time, it will be greate if you are able to listen to the error event on the returned deferredPromise (that is returned with return deferredPromise;). It might be very indicative for our investigation.

@Muhammad-Altabba Muhammad-Altabba self-assigned this Nov 21, 2024
@Muhammad-Altabba
Copy link
Contributor

Hi @fipso,
I tested with geth and it worked well with me by printing the block number. However, you need to remember to close the connection at the end of your funciton by calling:

  ipcProvider.disconnect();

I see that your function name is main2. Do you call another function using a different connection, before running the provided code at main2, without closing that connection?

@Muhammad-Altabba
Copy link
Contributor

Closing this issue as could not replicate and it might be the case described here: #7323 (comment)

However, if this issue persists, kindly re-open the issue the provide more information.

(By the way, having trouble running Nethermind locally: NethermindEth/nethermind#7801)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
4.x 4.0 related Bug Addressing a bug P3 Low severity bugs
Projects
None yet
Development

No branches or pull requests

5 participants
@danforbes @fipso @Muhammad-Altabba @mconnelly8 and others