Page MenuHomePhabricator

[Cashtab] Update ws onmessage handler so latest cashtabState is always available
ClosedPublic

Authored by bytesofman on Mar 18 2024, 18:50.

Details

Summary

The onMessage routine for the websocket does not have access to the latest state variables. It has access to state variables when the onMessage routine was set.

So, we need to update the onMessage routine whenever state variables important to this routine change. Since we are updating cashtabState whenever we send or receive a tx -- we should update the onMessage routine to include the current cashtabState whenever cashtabState changes.

This patches an issue described in feedback on D15701

Test Plan

npm test

Diff Detail

Repository
rABC Bitcoin ABC
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

Tail of the build log:

      at warning (node_modules/rc-util/lib/warning.js:32:15)
      at call (node_modules/rc-util/lib/warning.js:52:5)
      at warningOnce (node_modules/rc-util/lib/warning.js:57:3)
      at warning (node_modules/antd/lib/_util/warning.js:23:26)
      at typeWarning (node_modules/antd/lib/_util/warning.js:57:49)
      at Function.typeWarning.deprecated (node_modules/antd/lib/_util/warning.js:62:5)
      at Group (node_modules/antd/lib/input/Group.js:42:13)
      at renderWithHooks (node_modules/react-dom/cjs/react-dom.development.js:16305:18)
      at updateFunctionComponent (node_modules/react-dom/cjs/react-dom.development.js:19588:20)
      at beginWork (node_modules/react-dom/cjs/react-dom.development.js:21601:16)
      at beginWork$1 (node_modules/react-dom/cjs/react-dom.development.js:27426:14)
      at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:26560:12)
      at workLoopSync (node_modules/react-dom/cjs/react-dom.development.js:26466:5)
      at renderRootSync (node_modules/react-dom/cjs/react-dom.development.js:26434:7)
      at performConcurrentWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:25738:74)
      at workLoop (node_modules/scheduler/cjs/scheduler.development.js:266:34)
      at flushWork (node_modules/scheduler/cjs/scheduler.development.js:239:14)
      at performWorkUntilDeadline (node_modules/scheduler/cjs/scheduler.development.js:533:21)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)

    console.error
      Warning: [rc-collapse] `children` will be removed in next major version. Please use `items` instead.

      at warning (node_modules/rc-util/lib/warning.js:32:15)
      at call (node_modules/rc-util/lib/warning.js:52:5)
      at warningOnce (node_modules/rc-util/lib/warning.js:57:3)
      at node_modules/rc-collapse/lib/Collapse.js:72:24
      at renderWithHooks (node_modules/react-dom/cjs/react-dom.development.js:16305:18)
      at updateForwardRef (node_modules/react-dom/cjs/react-dom.development.js:19226:20)
      at beginWork (node_modules/react-dom/cjs/react-dom.development.js:21636:16)
      at beginWork$1 (node_modules/react-dom/cjs/react-dom.development.js:27426:14)
      at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:26560:12)
      at workLoopSync (node_modules/react-dom/cjs/react-dom.development.js:26466:5)
      at renderRootSync (node_modules/react-dom/cjs/react-dom.development.js:26434:7)
      at performConcurrentWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:25738:74)
      at workLoop (node_modules/scheduler/cjs/scheduler.development.js:266:34)
      at flushWork (node_modules/scheduler/cjs/scheduler.development.js:239:14)
      at performWorkUntilDeadline (node_modules/scheduler/cjs/scheduler.development.js:533:21)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)


Summary of all failing tests
FAIL src/hooks/__tests__/useWallet.test.js
  ● Test suite failed to run

    Jest worker encountered 4 child process exceptions, exceeding retry limit

      at ChildProcessWorker.initialize (node_modules/jest-runner/node_modules/jest-worker/build/workers/ChildProcessWorker.js:181:21)


Test Suites: 1 failed, 27 passed, 28 total
Tests:       566 passed, 566 total
Snapshots:   0 total
Time:        83.835 s
Ran all test suites.
Jest did not exit one second after the test run has completed.

'This usually means that there are asynchronous operations that weren't stopped in your tests. Consider running Jest with `--detectOpenHandles` to troubleshoot this issue.
Build cashtab-tests failed with exit code 1

Tail of the build log:

      at warning (node_modules/rc-util/lib/warning.js:32:15)
      at call (node_modules/rc-util/lib/warning.js:52:5)
      at warningOnce (node_modules/rc-util/lib/warning.js:57:3)
      at warning (node_modules/antd/lib/_util/warning.js:23:26)
      at typeWarning (node_modules/antd/lib/_util/warning.js:57:49)
      at Function.typeWarning.deprecated (node_modules/antd/lib/_util/warning.js:62:5)
      at Group (node_modules/antd/lib/input/Group.js:42:13)
      at renderWithHooks (node_modules/react-dom/cjs/react-dom.development.js:16305:18)
      at updateFunctionComponent (node_modules/react-dom/cjs/react-dom.development.js:19588:20)
      at beginWork (node_modules/react-dom/cjs/react-dom.development.js:21601:16)
      at beginWork$1 (node_modules/react-dom/cjs/react-dom.development.js:27426:14)
      at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:26560:12)
      at workLoopSync (node_modules/react-dom/cjs/react-dom.development.js:26466:5)
      at renderRootSync (node_modules/react-dom/cjs/react-dom.development.js:26434:7)
      at performConcurrentWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:25738:74)
      at workLoop (node_modules/scheduler/cjs/scheduler.development.js:266:34)
      at flushWork (node_modules/scheduler/cjs/scheduler.development.js:239:14)
      at performWorkUntilDeadline (node_modules/scheduler/cjs/scheduler.development.js:533:21)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)

    console.error
      Warning: [rc-collapse] `children` will be removed in next major version. Please use `items` instead.

      at warning (node_modules/rc-util/lib/warning.js:32:15)
      at call (node_modules/rc-util/lib/warning.js:52:5)
      at warningOnce (node_modules/rc-util/lib/warning.js:57:3)
      at node_modules/rc-collapse/lib/Collapse.js:72:24
      at renderWithHooks (node_modules/react-dom/cjs/react-dom.development.js:16305:18)
      at updateForwardRef (node_modules/react-dom/cjs/react-dom.development.js:19226:20)
      at beginWork (node_modules/react-dom/cjs/react-dom.development.js:21636:16)
      at beginWork$1 (node_modules/react-dom/cjs/react-dom.development.js:27426:14)
      at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:26560:12)
      at workLoopSync (node_modules/react-dom/cjs/react-dom.development.js:26466:5)
      at renderRootSync (node_modules/react-dom/cjs/react-dom.development.js:26434:7)
      at performConcurrentWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:25738:74)
      at workLoop (node_modules/scheduler/cjs/scheduler.development.js:266:34)
      at flushWork (node_modules/scheduler/cjs/scheduler.development.js:239:14)
      at performWorkUntilDeadline (node_modules/scheduler/cjs/scheduler.development.js:533:21)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)


Summary of all failing tests
FAIL src/hooks/__tests__/useWallet.test.js
  ● Test suite failed to run

    Jest worker encountered 4 child process exceptions, exceeding retry limit

      at ChildProcessWorker.initialize (node_modules/jest-runner/node_modules/jest-worker/build/workers/ChildProcessWorker.js:181:21)


Test Suites: 1 failed, 27 passed, 28 total
Tests:       566 passed, 566 total
Snapshots:   0 total
Time:        82.84 s
Ran all test suites.
Jest did not exit one second after the test run has completed.

'This usually means that there are asynchronous operations that weren't stopped in your tests. Consider running Jest with `--detectOpenHandles` to troubleshoot this issue.
Build cashtab-tests failed with exit code 1

Tail of the build log:

      at warning (node_modules/rc-util/lib/warning.js:32:15)
      at call (node_modules/rc-util/lib/warning.js:52:5)
      at warningOnce (node_modules/rc-util/lib/warning.js:57:3)
      at warning (node_modules/antd/lib/_util/warning.js:23:26)
      at typeWarning (node_modules/antd/lib/_util/warning.js:57:49)
      at Function.typeWarning.deprecated (node_modules/antd/lib/_util/warning.js:62:5)
      at Group (node_modules/antd/lib/input/Group.js:42:13)
      at renderWithHooks (node_modules/react-dom/cjs/react-dom.development.js:16305:18)
      at updateFunctionComponent (node_modules/react-dom/cjs/react-dom.development.js:19588:20)
      at beginWork (node_modules/react-dom/cjs/react-dom.development.js:21601:16)
      at beginWork$1 (node_modules/react-dom/cjs/react-dom.development.js:27426:14)
      at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:26560:12)
      at workLoopSync (node_modules/react-dom/cjs/react-dom.development.js:26466:5)
      at renderRootSync (node_modules/react-dom/cjs/react-dom.development.js:26434:7)
      at performConcurrentWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:25738:74)
      at workLoop (node_modules/scheduler/cjs/scheduler.development.js:266:34)
      at flushWork (node_modules/scheduler/cjs/scheduler.development.js:239:14)
      at performWorkUntilDeadline (node_modules/scheduler/cjs/scheduler.development.js:533:21)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)

    console.error
      Warning: [rc-collapse] `children` will be removed in next major version. Please use `items` instead.

      at warning (node_modules/rc-util/lib/warning.js:32:15)
      at call (node_modules/rc-util/lib/warning.js:52:5)
      at warningOnce (node_modules/rc-util/lib/warning.js:57:3)
      at node_modules/rc-collapse/lib/Collapse.js:72:24
      at renderWithHooks (node_modules/react-dom/cjs/react-dom.development.js:16305:18)
      at updateForwardRef (node_modules/react-dom/cjs/react-dom.development.js:19226:20)
      at beginWork (node_modules/react-dom/cjs/react-dom.development.js:21636:16)
      at beginWork$1 (node_modules/react-dom/cjs/react-dom.development.js:27426:14)
      at performUnitOfWork (node_modules/react-dom/cjs/react-dom.development.js:26560:12)
      at workLoopSync (node_modules/react-dom/cjs/react-dom.development.js:26466:5)
      at renderRootSync (node_modules/react-dom/cjs/react-dom.development.js:26434:7)
      at performConcurrentWorkOnRoot (node_modules/react-dom/cjs/react-dom.development.js:25738:74)
      at workLoop (node_modules/scheduler/cjs/scheduler.development.js:266:34)
      at flushWork (node_modules/scheduler/cjs/scheduler.development.js:239:14)
      at performWorkUntilDeadline (node_modules/scheduler/cjs/scheduler.development.js:533:21)
      at Timeout.task [as _onTimeout] (node_modules/jsdom/lib/jsdom/browser/Window.js:520:19)


Summary of all failing tests
FAIL src/hooks/__tests__/useWallet.test.js
  ● Test suite failed to run

    Jest worker encountered 4 child process exceptions, exceeding retry limit

      at ChildProcessWorker.initialize (node_modules/jest-runner/node_modules/jest-worker/build/workers/ChildProcessWorker.js:181:21)


Test Suites: 1 failed, 27 passed, 28 total
Tests:       566 passed, 566 total
Snapshots:   0 total
Time:        87.129 s
Ran all test suites.
Jest did not exit one second after the test run has completed.

'This usually means that there are asynchronous operations that weren't stopped in your tests. Consider running Jest with `--detectOpenHandles` to troubleshoot this issue.
Build cashtab-tests failed with exit code 1
bytesofman edited the summary of this revision. (Show Details)
bytesofman added inline comments.
cashtab/src/hooks/useWallet.js
100 ↗(On Diff #46276)

related issue here -- we were calling setCashtabState twice on the wallet, since updateCashtabState below also calls setCashtabState

484 ↗(On Diff #46276)

note that the updateWebsocket function is only called if typeof cashtabState.wallets[0] !== 'undefined'

image.png (130×1 px, 24 KB)

Starting to see 120,000 ms being exceeded

This revision is now accepted and ready to land.Mar 19 2024, 07:14