Hive-Swap Dev Update — May 27 → August 8, 2026

cover

It's been a while since the last update — the platform crossed its first quarter in production, so this one leads with the numbers. The dev theme of the cycle was correctness: making the charts, prices, and points you see on screen match what's actually happening on chain.


The numbers — first ~90 days in production

Hive-Swap launched in beta on May 11. Here's the full lifetime picture from the stats page, all derived on-chain from hive-swap-fees fee events:

Platform stats — all time

VolumeActionsSwapsBridgesUnique accounts
All time$5.84K6,6005,5401,06078
Last 30 days$1.17K1,5101,27023931
Last 7 days$136.982742225216

A few things worth pulling out of the charts:

  • 5,540 swaps and over 1,000 bridge operations have gone through the router since launch, from 78 unique accounts. Total platform fees collected at the 0.25% rate: $14.59 — this is a small, young platform and we're fine with that; the point of publishing these numbers is that they're all independently verifiable on chain.
  • SWAP.HIVE dominates routing ($2.75K volume, 1.49K actions), which is expected since it's the hub token for 2-hop routes. Behind it: HIVE ($601), SWAP.BTC ($461), DEC ($438), and LEO ($321) — a decent spread across gaming and DeFi tokens.
  • The 30-day window shows steady weekly activity rather than a launch spike that died off — the daily bars keep coming even on quiet days:

Platform stats — last 30 days

  • This week: 16 unique accounts, 274 actions. Small but consistent:

Platform stats — last 7 days

USD volume is estimated from observed fee events at 0.25%; LP add/remove activity isn't included, so real money flow through the platform is higher than the headline number.


Charts and prices that tell the truth

Two fixes this cycle were about the same root problem: what the UI showed didn't match what a swap would actually execute at.

The big swap chart clamped every candle to an IQR band computed over the full 365-day window. For a token that genuinely trended ~10x (FLUX went ~1 → ~9 HIVE), the clamp crushed the real run-up — the chart's last price read 4.65 while the pool traded at ~9. The outlier filter now works in log space, so a legitimate multi-x trend is no longer treated as an outlier, and absurd isolated prints are dropped instead of clamped. The chart header also now shows a live AMM pool spot price pulled from the deepest SWAP.HIVE pool — the number you see is the number a swap executes against.

Separately, the HIVE/USD price on the swap page was being derived by inverting the last SWAP.USDT order-book trade. That market is nearly dead — sparse stale fills produced prices like $0.38 (+365%) against a real ~$0.05. HIVE/USD now comes from CoinGecko's market chart, bucketed into daily OHLC, with a 10-minute cache. Display-only change: quotes, slippage, and the public API were never affected.

Pick your own nodes

The Node Status widget used to be read-only — nodes were auto-selected by fastest ping. It's now a per-row picker (Hive L1, HE RPC, HE History) that lets you pin a specific node. Pins are soft: a pinned node is preferred while healthy, but if it goes down the app fails over to the fastest working node and retries your pin on the next 30-minute refresh. Pins persist in localStorage and apply before the first request.

While building it we found the HE account-history fallback was silently dead — he.dtools.dev returns an HTML landing page at /accountHistory, so it failed every JSON health check. Replaced with the verified history.hive-engine.com, plus atexoras.com:8443 added as a third failover (its history service runs on a separate port the PeakD beacon never scores, so it had to be added manually).

Keychain reliability

Two fixes for the wallet layer:

  • The Connect button could silently hang forever. keychain-sdk's isKeychainInstalled() only resolves when Keychain's handshake callback fires — no timeout. A conflicting wallet extension that throws during page injection breaks that callback, so connect() never opened the modal and the button did nothing. Detection is now raced against a 1.5s timeout with a synchronous presence-check fallback, and the modal opens before detection runs, so a flaky extension can never no-op the button again.
  • Keychain errors are readable now. Keychain types its error response as a string but can return an exception object at runtime, which rendered as Verification failed: [object Object]. Every Keychain throw site now unwraps the human-readable message first.

Points sync unstuck

If you watched the points leaderboard in June: points silently stopped being awarded on June 8. The award loop takes the oldest 25 unawarded fee events and defers any it can't resolve — and two classes of rows deferred forever, clogging the head of the queue: pre-fix rows whose tx id kept a -0 op-index suffix (Hive Engine's getTransactionInfo returns a different shape for suffixed ids, so route resolution always failed), and rows with no USD price that were skipped in JS but still consumed the batch limit. Both are fixed and the backlog has been processed — points and the leaderboard are current again.


Housekeeping: the browser warning

Some of you saw MetaMask/Brave flag hive-swap.com in July, and a few ISPs blocked it outright. The domain was added to an automated crypto-phishing blocklist on July 6 — a false positive, almost certainly triggered by "new domain containing the word swap." Nothing on the site asks for a seed phrase or private key; signing happens exclusively through Hive Keychain. A formal removal request is filed with MetaMask and downstream warnings (Brave, ISP filters) will clear as their feeds refresh after delisting. The "invalid certificate" some users saw was their ISP's block page, not our cert — the site's TLS certificate is valid.

Smaller improvements

  • getQuoteFresh() added to the SDK — bypasses the pool cache when you need a quote against real-time reserves
  • Analytics summaries could go stale for up to an hour due to an in-memory cache outliving the KV layer the cron writes to — in-memory TTL is now capped at 120s
  • Fixed the background activity-sync being a complete no-op in cron context (Cloudflare bindings aren't available via AsyncLocalStorage in scheduled events — the handler now passes them explicitly)

Try it: hive-swap.com
Public API docs: hive-swap.com/docs/api
Follow: @hive-swap.com

0.05473443 BEE
0 comments