git / moonbite-network / price_feed.py · raw
"""MoonBite price feed — deliberately reports "no price".MBITE is not listed on any exchange and has no market price. This module usedto fabricate one: a hardcoded $45.67 with a $9.13bn market cap, served fromlive, unauthenticated endpoints. That is not a placeholder, it is a falsestatement about a financial asset, and it contradicted every other surface onthe site (/privacy, the footer strip, /free) which say plainly that MBITE hasno market value and is not an investment.So the module now returns an explicit "unpriced" answer instead of a number.When MBITE is genuinely listed, implement `_fetch_from_exchange()` against thereal venue and the rest of this file starts working with no other change — butuntil a real quote exists, the honest output is no quote at all.Callers should branch on `listed`, never assume a numeric price is present."""from __future__ import annotationsimport timefrom typing import Optional_CACHE = { "data": None, "timestamp": 0,}_CACHE_TTL = 15 * 60 # 15 minutesdef _unpriced() -> dict: """The truthful response while MBITE has no market. Every numeric field is None rather than 0: a zero would render as "$0.00" and read as a price of zero, which is just as wrong as $45.67. """ return { "listed": False, "price_usd": None, "change_24h": None, "high_24h": None, "low_24h": None, "market_cap": None, "volume_24h": None, "message": ( "MBITE has no market price. It is not listed on any exchange and " "is not an investment or a security." ), "timestamp": int(time.time()), }def _fetch_from_exchange() -> Optional[dict]: """Fetch a real quote from a real venue once MBITE is listed. Returns None while unlisted. Implement this against the actual exchange API when a listing exists, and return a dict shaped like _unpriced() with `listed` True and real numbers. Do not reintroduce a fallback constant: if the venue is unreachable, "unknown" is the correct answer. """ return Nonedef get_price() -> dict: """Current MBITE price, or an explicit unpriced response. Cached for 15 minutes so a future real feed does not get hammered. """ now = int(time.time()) if _CACHE["data"] and (now - _CACHE["timestamp"]) < _CACHE_TTL: return _CACHE["data"] price_data = _fetch_from_exchange() or _unpriced() _CACHE["data"] = price_data _CACHE["timestamp"] = now return price_datadef get_price_history(hours: int = 24) -> dict: """Price history. Empty while unlisted — a synthesized series is a lie. The previous implementation generated points from a hash of the index, producing a chart that looked like real market data and was not. """ return { "listed": False, "hours": max(1, min(int(hours or 24), 24 * 365)), "points": [], "message": "MBITE has no trading history. It is not listed on any exchange.", "timestamp": int(time.time()), }