Possible Frontend Bug on Osmosis: HASH Limit Orders Fail Despite Available USDC and USDT Balances

While attempting to place a limit order for HASH on Osmosis, I encountered what appears to be a reproducible frontend issue affecting HASH limit orders.

I initially assumed the problem was related to my USDC balance, particularly the ongoing transition from USDC.noble to Alloyed USDC. After testing multiple stablecoins and looking deeper into the underlying HASH liquidity pool and CosmWasm contract, however, the evidence points toward an issue specifically involving the Limit Order interface.

Here is what I found.

The Original Problem

My wallet was connected to Osmosis and my stablecoin balance appeared normally in my portfolio.

When trading HASH using Market mode, Osmosis correctly recognized my available stablecoin balance and allowed me to select it as the payment asset.

The problem appeared when switching from:

Market → Limit

The interface would briefly freeze and then either return an error or incorrectly report:

Insufficient balance

This happened even though Osmosis had just displayed sufficient funds as available.

In one test, Osmosis displayed approximately $1,500. of USDC available. I attempted to create a $100. HASH limit order, which was comfortably below the displayed balance.

Osmosis nevertheless reported “Insufficient balance.”

Was USDC.noble the Problem?

My first suspicion was the recent transition involving USDC.noble and Alloyed USDC.

Osmosis currently recognizes several underlying forms of USDC. My USDC position was composed primarily of:

  • USDC.noble
  • USDC.inj
  • USDC.eth.axl

Approximately 91% of my USDC was USDC.noble.

This seemed particularly relevant because the primary direct HASH/stablecoin liquidity pool on Osmosis is:

Pool #2090 — USDC.noble/HASH

At the time of testing, Pool #2090 contained approximately $11,000 in liquidity.

Therefore, USDC.noble appeared to be exactly the asset I should have been able to use.

But I wanted to rule out the USDC migration as the cause.

Testing the Same Transaction With USDT

I converted a small amount to USDT specifically as a diagnostic test.

The result was revealing.

With HASH selected in Market mode, Osmosis immediately recognized:

$10.00 USDT available

Everything looked normal.

I then changed the exact same HASH transaction from Market to Limit.

The interface froze and the limit-order functionality failed again.

That was important because it reproduced the problem using an entirely different stablecoin.

At this point, the issue no longer appeared to be simply:

USDC.noble vs. Alloyed USDC

Instead, the common denominator was:

HASH + Limit Order

Looking Under the Hood of Pool #2090

I then investigated Pool #2090 — USDC.noble/HASH directly.

Osmosis provides a link from the pool to its underlying CosmWasm contract, viewable through Celatone.

This produced perhaps the most interesting part of the investigation.

The underlying contract exposes explicit orderbook functionality, including:

place_limit

cancel_limit

claim_limit

orders_by_owner

orders_by_tick

orderbook_state

spot_price

ticks_by_id

In other words, the underlying contract appears to contain the functionality necessary to support limit orders.

That creates an interesting discrepancy.

The underlying Pool #2090 orderbook contract exposes limit-order functions, while the app.osmosis.zone frontend fails when I attempt to use the Limit interface.

Reproducing the Issue

At least in my environment, the problem can be reproduced with the following sequence:

app.osmosis.zone

→ Select HASH

→ Select Buy

→ Select Market

→ Choose USDC or USDT

→ Osmosis correctly displays the available balance

→ Switch from Market → Limit

→ Interface freezes, produces an error, or incorrectly reports an insufficient balance

I reproduced this using both USDC and USDT.

USDC test

Osmosis displayed approximately:

$1,500.available

Attempted HASH limit order:

$100.

Result:

Insufficient balance

USDT test

Osmosis displayed:

$10.00 available

The balance was recognized normally in Market mode.

Switching the HASH transaction to Limit reproduced the failure.

Why This Appears to Be a Frontend or Integration Issue

There are several pieces of evidence pointing in that direction.

The wallet connection works.

The assets appear correctly in the portfolio.

Market mode recognizes the balances.

Market trading functionality works.

The HASH/USDC.noble liquidity pool is active.

Pool #2090’s underlying CosmWasm contract exposes limit-order functions.

The failure occurs when the Osmosis interface is changed specifically from Market to Limit.

And, importantly, the failure can be reproduced with both USDC and USDT.

That doesn’t conclusively establish where in the software stack the defect resides. The issue could potentially involve the frontend, routing logic, asset-denomination handling, or the frontend’s integration with the orderbook contract.

But the testing strongly suggests that this is not simply a case of the user holding the wrong version of USDC or having an insufficient wallet balance.

Why This Matters for HASH Traders

HASH currently has relatively limited liquidity on Osmosis.

At the time of my testing, the direct USDC.noble/HASH Pool #2090 had approximately $11,000 of liquidity.

For a thinly traded asset, limit orders are particularly valuable because traders may not want to execute a substantial market order and accept potentially significant price impact.

For example, someone wanting to deploy $100.–$150. into HASH may specifically want to say:

Buy HASH only if the price reaches my predetermined entry price.

If the market-order functionality works but the limit-order interface does not, traders lose an important mechanism for managing execution in a relatively illiquid market.

What I Would Like Osmosis to Confirm

I would like to know whether Osmosis is aware of an issue affecting HASH limit orders, Pool #2090, or the current Limit Order frontend.

It would also be useful to know whether this behavior has any connection to the ongoing transition from USDC.noble to Alloyed USDC, although reproducing the failure with USDT suggests that the problem extends beyond USDC denomination handling.

I have screenshots documenting the tests, including:

USDC balance recognized → HASH limit order reports insufficient balance

USDT balance recognized in Market mode → Limit mode fails

Pool #2090 USDC.noble/HASH liquidity information

The underlying CosmWasm contract and its place_limit, cancel_limit, and other orderbook functions

If this is a known issue, clarification from the Osmosis team would be helpful—particularly for HASH users attempting to place limit orders against Pool #2090.

Thanks for the detailed write-up, it made this quick to track down. You were right that it’s a frontend bug, and it isn’t related to your balance or which USDC you hold. The HASH/USDC.noble orderbook (pool 2090) is working normally onchain.

Switching from Market to Limit on the asset page can lock up the trade widget when the app has to change the “Pay with” asset to one that has an orderbook for that token. HASH limit orders are only available against USDC.noble, so when the widget is on Alloyed USDC or USDT, switching to Limit triggers the bug and the page freezes. The “Insufficient balance” message you saw is most likely a side effect of the same bug. It affects many tokens, not just HASH, and market orders aren’t affected.

A fix is in review and will ship in an upcoming frontend release. Until then, this link opens a HASH limit buy with USDC.noble already selected, which avoids the bug:
https://app.osmosis.zone/assets/ibc%2FCE5BFF1D9BADA03BB5CCA5F56939392A761B53A10FBD03B37506669C3218D3B2?tab=buy&type=limit&quote=ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4
the manual addition of the ?tab=buy&type=limit&quote=ibc/498A0751C798A0D9A389AA3691123DADA57DAA4FE165D5C75894505B876BA6E4 to the assets page URL is what fixes this.

Since HASH limit orders are paid in USDC.noble, the balance that counts there is your USDC.noble balance. Your USDC.noble holdings should cover a $100 order. If you still see “Insufficient balance” when using that link, please reply with a screenshot and we’ll take another look.

Hi Johnny,

Thank you for the detailed response and for tracking this down so quickly. I followed the workaround you provided, and I can confirm that it worked. I was able to access the HASH limit order correctly using USDC.noble and complete the transaction without the frontend issue.

I appreciate you confirming the bug and explaining what was happening behind the scenes. Thanks again for the quick assistance and for getting a fix into review.

Best,
Jad Porter

Fixed on the live app now

1 Like