wagmi icon indicating copy to clipboard operation
wagmi copied to clipboard

data is never updated if view method reverts

Open 0x33dm opened this issue 1 year ago • 5 comments

Describe the bug

Problem

I'm using useReadContract in order to have live updates from a variable called account_debt, in order to fetch that data I read a "view" method on a smart contract called get_pending_market_state_for_account.

The way the view functions works is:

  1. If the user has no debt the view will revert.
  2. If the user has debt the view will return account_debt
  3. If the user closes his debt the view will revert again.

The natural user flow on the application goes as this:

  1. User starts with no debt
  2. User creates debt
  3. User pays debt
  4. User has no debt again UI should return to (1)

The problem is when a user pays the debt on step (3) the UI never returns to (1), because:

  1. While the user has no debt the value of account_debt is null
  2. When debt is created it becomes a bigint
  3. When debt is closed the value never turns back to null because ( I assume ) Wagmi won't update the data if the contract starts reverting with the same params?

Debugging

When I look at the ReactQueryDevTools on the stuck page I can see this and it NEVER changes even though I see the "fetch" happening often, the cached data is always here.

image

If I press the blue button "Trigger Loading" then the data is updated and becomes "null" again ( which is the original state ).

image

Questions


  • Is there a recommended way of dealing with this problem?
  • Is there a way of overriding this problem, for instance have a hook where I can check if the view reverted for a given reason I can return some "empty state" to my frontend?
  • Why clicking "Trigger Loading" has a different behaviour than "Refetch" and would it be possible to have "refetch" working as "trigger loading" by itself?

Link to Minimal Reproducible Example

https://stackblitz.com/edit/new-wagmi?file=src%2FApp.tsx

Steps To Reproduce

Described on the preview comment

Wagmi Version

2.8.1

Viem Version

2.10.2

TypeScript Version

5.4.5

Check existing issues

Anything else?

To reproduce the error I would need to send some test tokens on FTM + FTM for gas and I think it's not needed in this case as the problem is well explained.

Thanks a lot for your hard work on the library!

0x33dm avatar May 15 '24 17:05 0x33dm

I tried to make a new reproductionable example on https://new.wagmi.sh/ but no matter what I do the page is rendered blank.

Tried the latest OPERA and latest CHROME both ended up with a blank page.

0x33dm avatar May 17 '24 03:05 0x33dm

Can you share the contract address and ABI so someone that helps doesn't need to manually type the address and look for the ABI?

tmm avatar May 21 '24 22:05 tmm

Can you share the contract address and ABI so someone that helps doesn't need to manually type the address and look for the ABI?

  • contract + ABI: https://ftmscan.com/address/0x7B1292Af78F584845c60854482ed75874bd34C4d#code
  • the view function is called get_pending_market_state_for_account
  • the revert happens on line 470
  • assert coll_change > 0 and debt_change > 0, "DFM:C 0 coll or debt"

I believe deploying this contract on a test net / local network would be a little to complicated, so would be better to write a simple contract with a parameter that triggers the failed assert.

0x33dm avatar May 22 '24 00:05 0x33dm

I tried to make a new reproductionable example on https://new.wagmi.sh/ but no matter what I do the page is rendered blank.

Tried the latest OPERA and latest CHROME both ended up with a blank page.

This is a silly thing but try using VPN, or different internet connections as well. Been in similar situation, turned out the ISP/WiFi was blocking those APIs (try ping-ing).

ajeetgill avatar May 31 '24 22:05 ajeetgill

This is a silly thing but try using VPN, or different internet connections as well. Been in similar situation, turned out the ISP/WiFi was blocking those APIs (try ping-ing).

I could understand how ad-blockers could potentially block something. and i tried on incognito browser..

would be really weird if it was my ISP blocking something

0x33dm avatar Jun 01 '24 06:06 0x33dm

Wasn't able to reproduce. TanStack Query has aggressive caching defaults so likely something you need to tune there.

tmm avatar Jul 09 '24 19:07 tmm

With refetchOnWindowFocus switch on, can trigger refetching automatically when window refocuses.

useReadContract({
  // ...
  query: {
    refetchOnWindowFocus: true,
  },
})

https://github.com/wevm/wagmi/assets/6759464/62c14475-7aaf-4df8-ba30-2f47b401350e

tmm avatar Jul 09 '24 19:07 tmm

With refetchOnWindowFocus switch on, can trigger refetching automatically when window refocuses.

useReadContract({
  // ...
  query: {
    refetchOnWindowFocus: true,
  },
})

sure, I know that, but I don't understand how this is related to my issue.

Anyway, I understand that it's probably possible to overwrite this behaviour, for instance, by manually checking if it reverts, and if it does, then setting the cache to an empty state of some sort directly via RQuery API instead of wagmi.

I'm just wondering if that shouldn't be wagmi default behaviour, to overwrite the cache with some variation of "undefined" instead of having the previous contract response.

0x33dm avatar Jul 09 '24 22:07 0x33dm

Can you provide a GitHub repo with a minimal reproduction (with clear steps) that you are experiencing this with? (You can use pnpm create wagmi to kickstart the repo.)

We might be talking about different things so want to make sure we are aligned before I spend anymore time on this. Wagmi doesn't do anything special other than pass through options to Viem via TanStack Query.

tmm avatar Jul 09 '24 23:07 tmm

This issue has been locked since it has been closed for more than 14 days.

If you found a concrete bug or regression related to it, please open a new bug report with a reproduction against the latest Wagmi version. If you have any questions or comments you can create a new discussion thread.

github-actions[bot] avatar Jul 24 '24 00:07 github-actions[bot]