
This was the cycle where Hive-Swap stopped being a pure router and started rewarding people for using it. Two things drove most of the changes: a full Points + leaderboard system built on top of the existing fee-event log, and a new 3-hop graph router that finally makes the tokens-with-no-SWAP.HIVE-pool corner of Hive Engine actually swappable. Everything else (treasury auto-sweep, four new bridges, public HTTP API, analytics dashboard) is in the cycle too — those land further down.
Every successful swap and bridge now rewards points based on the USD value of the action at the time it happened, and that history is permanent — points don't drift when token prices move later. The whole thing piggybacks on the existing 5-minute fee-event sync, so there are no new on-chain ops to pay for and no new sync loops to keep healthy. Two D1 tables back it: points_events is the per-event audit log, and user_points is a denormalized rollup so profile and leaderboard reads are cheap. Awarding is idempotent on op_id, so a concurrent or replayed sync can't double-credit.
The progression curve is 30 levels split across 6 tiers (Shrimp → Whale), with L30 anchored at ~$1M lifetime volume — meaningful for serious users without being unreachable. Tier and milestone badges are computed at read time, which means new badges apply retroactively when added later without needing a migration backfill.
Three new public endpoints went up alongside the UI:
GET /api/v1/profile/{username}
GET /api/v1/profile/{username}/activity
GET /api/v1/leaderboard
The top-nav WALLET / PROFILE / RANKS dropdown is the entry point in the app. The profile @username is also clickable straight through to peakd.com/@<username> so you can jump to the user's full Hive social profile from anywhere on the site.
A few infra fixes had to ship the same week to make Points trustworthy:
fee_usd is snapshotted at sync time, so totals on /analytics and the leaderboard stop sliding when HIVE or a fee-token moves. A backfill job fills in NULL rows on every /analytics/refresh and inside the regular maybeSync tick. Points-sync defers NULL rows until backfill catches up instead of recording zero-point events.getTransactionInfo calls. The first backfill hit api.hive-engine.com with 500 sequential requests, got 429'd on most of them, and only resolved 4-5 events per tick. Multi-tick backfill now keeps us well under the rate limit.__null__ route cache invalidated — the same rate-limited burst poisoned the route resolver cache, and six out of nine fee-event users never made it onto the leaderboard because a transient 429 got cached with a 1-hour TTL. Bumped the cache key prefix (route4 → route5) and dropped the null TTL from 3600s to 120s so a blip recovers in two minutes instead of an hour.

Up until this cycle the router could only quote direct pairs or 2-hop swaps via SWAP.HIVE. Tokens whose only pools pair with other intermediates — HSBIDAO is the canonical example, it has pools only against ECOBANK, LBI, PIXYDUST, and THREE — would appear in the token dropdown and return NO_ROUTE every time. The new router walks the full pool graph up to 3 hops, evaluates every candidate path (capped for runtime), and picks whichever yields the highest output after fees. The same algorithm picks up real arb gains on pairs that were routable: FLUX→SCRAP +2.1%, LSTR→LBI +77%, SWAP.HBD→LBI +17%.
A handful of routing-correctness fixes shipped alongside the graph walker, because once you start chaining three hops together the rounding behavior of low-precision tokens matters a lot:
e397d31c, d492889d) showed the same failure: hops through LEO (precision 3) and BEED (precision 4) intermediates produced sub-satoshi outputs that the SDK silently dropped, and later hops drew from the user's pre-existing balance of the intermediate token. Now the router refuses any path whose intermediate output is below 10 satoshi, and buildSwapWithFee throws DUST_ROUTE rather than emit a partial chain.minAmountOut is wired tighter. Pool-only intermediate hops set minAmountOut equal to the next hop's tokenAmount, so a successful hop is provably enough to fund the next draw. The last hop's minAmountOut is recomputed against the actually-emitted poolIn, not the router's full-precision prediction.tokenAmount was hard-coded to the quote-time prediction of the prior hop's output, so any pool drift below that prediction — pool snapshot caching, in-flight third-party swaps — tripped insufficient input balance and reverted the whole atomic custom_json. A small buffer is now shaved off intermediate-hop inputs (compounded per hop); the user-facing slippagePct still drives the final minOut.BRO:LBI).Order-book routing pairs naturally with the multi-hop path: the router now considers each leg's HE order book (market.buy / market.sell) alongside the AMM pool and picks pool-only, book-only, or a ternary-search-optimal pool+book split. Two things make this clean in practice:
/docs/api, /llms.txt, and /llms-full.txt were all updated in the same commits as the router changes — /quote and /swap/build responses serialize the new poolPortion / bookPortion fields, and the docs now show a split-route example plus the BEED multi-tx fee disclaimer (which the public API does not auto-bundle, unlike the web UI).

/bridge now covers BTC, LTC, DOGE, BCH via the @btc-swap converter, plus native ETH, BNB, POL, SOL peg-out gateways. Shared splitters were taught about 8-decimal precision, so a 0.05 SWAP.LTC peg-out sends 0.04987500 net (above the gateway minimum) with a 0.00012500 platform fee, instead of the prior 0.049/0.001 split which would have been rejected by the daemon. Verified end-to-end on mainnet — 0.05030000 SWAP.LTC went out and 0.04978114 LTC landed at the destination address.@graphene-swap), including a gateway health check, estimated time, and direct support links to dswap.trade./bridge tab plus a $50-USD threshold confirmation checkbox on each bridge subcomponent. The checkbox auto-resets whenever the amount changes, so a user can't pre-confirm a tiny amount and then bump it up. USD value is derived per token via a new useTokenUsd hook that reuses the existing HE pool price-map pattern — HIVE, HBD, wHIVE, the four converter coins, and the four native bridges are all priced with no new network endpoints.api.hive-swap.com — /quote, /swap/build, /bridge/*, /pools, /tokens, /gateways, /status, /analytics/*, /health. Per-IP rate limit (30/60s) via the Cloudflare ratelimit binding, full docs at /docs/api, plus /llms.txt + /llms-full.txt for AI consumers. Returns unsigned custom_json ops — the caller signs and broadcasts./analytics. Derives platform-wide swap and bridge activity from the on-chain history of hive-swap-fees (HE accountHistory + Hive L1 condenser_api). KPI cards, area chart with volume/fees toggle, activity histogram, top-fee-earning tokens with sparklines, polling recent-activity feed with token-logo route pills and on-chain failure detection. A globally-shared Refresh button is rate-limited to one request per 60s across all users via a single KV lock.signBuffer challenge against the posting key — Keychain rejects if the extension has no key for that account, so a successful sign proves ownership.market.sell / market.buy) and flags malformed multi-hop routes as partial, so a tx like e397d31c (which silently drained a pre-existing ONEUP balance) stops rendering as a clean success, and a working split-route tx like 74b5bc45 stops dropping its first hop.Try it: hive-swap.com
Public API docs: hive-swap.com/docs/api
Follow: @hive-swap
The gamification through points is pretty awesome even if I am a shrimp for now. In the same time I am now hungry for some shrimps....
Congratulations @hive-swap.com! You have completed the following achievement on the Hive blockchain And have been rewarded with New badge(s)
Your next target is to reach 200 upvotes.
You can view your badges on your board and compare yourself to others in the Ranking
If you no longer want to receive notifications, reply to this comment with the word
STOP