Spaces:
Running
Running
| from fastapi import FastAPI, Header, Response | |
| from pydantic import BaseModel | |
| from typing import Dict, Optional | |
| import random | |
| import time | |
| app = FastAPI( | |
| title="AgentOracle x402", | |
| description="Real-time sentiment and price data for agent-native tokens. Pay $0.05 per query." | |
| ) | |
| # Config | |
| RECEIVER_WALLET = "0x2d44fc27a616606b42448309F4d8e3F423d93267" | |
| PRICE_USDC = 0.05 | |
| PRICE_ATOMIC = int(PRICE_USDC * 1_000_000) | |
| class OracleResponse(BaseModel): | |
| token: str | |
| price_usd: float | |
| sentiment: str | |
| trend: str | |
| timestamp: str | |
| async def root(): | |
| return {"message": "AgentOracle is ONLINE. POST /query to get market intel."} | |
| async def get_intel( | |
| token_name: str, | |
| response: Response, | |
| x_payment: Optional[str] = Header(None) | |
| ): | |
| # x402 Payment Gate | |
| if not x_payment or not x_payment.startswith("pay_"): | |
| response.status_code = 402 | |
| response.headers["WWW-Authenticate"] = f'Token realm="x402", as_id="{RECEIVER_WALLET}", min_amount="{PRICE_ATOMIC}", currency="USDC", network="base"' | |
| return { | |
| "error": "Payment Required", | |
| "message": f"Send {PRICE_USDC} USDC to {RECEIVER_WALLET} on Base to unlock this oracle data.", | |
| "payment_details": { | |
| "address": RECEIVER_WALLET, | |
| "amount": PRICE_ATOMIC, | |
| "chain": "base" | |
| } | |
| } | |
| # Market Intel Logic (Simulated for MVP) | |
| prices = {"VIRTUAL": 1.24, "PROMPT": 0.85, "MOLT": 0.12, "SIM": 0.05} | |
| sentiments = ["BULLISH", "BEARISH", "NEUTRAL", "EXTREME GREED"] | |
| return OracleResponse( | |
| token=token_name.upper(), | |
| price_usd=prices.get(token_name.upper(), random.uniform(0.1, 2.0)), | |
| sentiment=random.choice(sentiments), | |
| trend="UP" if random.random() > 0.5 else "DOWN", | |
| timestamp=str(int(time.time())) | |
| ) | |
| if __name__ == "__main__": | |
| import uvicorn | |
| uvicorn.run(app, host="0.0.0.0", port=7860) | |