iotaledger / wasp

Node for IOTA Smart Contracts
Apache License 2.0
296 stars 147 forks source link

Web Socket connection (ws:/ and wss:/) not working properly with Nodejs app and Web3 libraries. #3477

Open beawareoftheg opened 3 months ago

beawareoftheg commented 3 months ago

Describe the bug I use a ws connection from my Nodejs app, that uses web3 libraries. The connection via wss works properly with the public API of the IOTA evm testnet and I can interact with smart contracts and even listen to events. The problem is with a local wasp node and a private chain that I deployed. The connection is made with ws (and not wss) as the wasp node runs with HTTP (not HTTPS). With wscat I am able to get a response. The nodejs app initially connects with the web socket, and I can call view functions from a smart contract, but when I try to call a normal function (i.e. where I have to spend gas) or subscribe to events, the connection stops. Moreover, once I do that, with wscat I am not able anymore to connect to the web socket, and I get "error: Unexpected server response: 429". To get it working again I need to run "docker compose down" and then "docker compose up".

To Reproduce

  1. Run a local HTTP(s) hornet node and wasp node.
  2. Deploy a private chain
  3. Deploy a simple smart contract to the chain
  4. Connect to the ws via the Web3 functions
  5. Interact with the contract, via Web3 functions
  6. See error

Expected behavior The connection should not stop, as it is working without errors in public testnets.

Screenshots Screenshot of the error in my nodejs app (running on localhost:3000) Schermata del 2024-07-22 12-50-47

Network and versioning

Additional context The connection to the web socket from the nodejs app, is made with: web3 = new Web3(new Web3.providers.WebsocketProvider(ws://localhost/wasp/api/v1/chains/tst1pqsvlxmlvj9fkq6uuz0y48m6wucgdsqpt70ftmgzn95ase5wrjtqy7msdq4/evm/ws));

beawareoftheg commented 3 months ago

Update: I tried with a wss connection. I ran a similar node but with a https connection. But the outcome it's still the same: when I try to call a normal function of the contract or subscribe to event, it gives me: "Unexpected server response: 429", that for what I understood, it's a Too Many Requests error.

The problem is not related to the use of tls.

beawareoftheg commented 3 months ago

Another update: the problem seems to be related to executing the nodejs app in the same node. I tried to run the nodejs app in another vm, connecting to the one running wasp. It seems that, by limiting the action's rates (e.g., only one subscription to the event at a time), the interactions works. But still, running it in the same node is not working, even by limiting the actions. Moreover, connecting to wss of public testnets, there are no errors and it is possible to perform all the actions together without problems

I cannot try with newer versions of web3 for the #3392 issue.