惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
L
LINUX DO - 最新话题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Forbes - Security
Forbes - Security
博客园 - 司徒正美
Hugging Face - Blog
Hugging Face - Blog
W
WeLiveSecurity
Jina AI
Jina AI
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
N
News and Events Feed by Topic
V
V2EX
Stack Overflow Blog
Stack Overflow Blog
Engineering at Meta
Engineering at Meta
PCI Perspectives
PCI Perspectives
Martin Fowler
Martin Fowler
T
The Exploit Database - CXSecurity.com
F
Full Disclosure
WordPress大学
WordPress大学
S
Security Affairs
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
S
SegmentFault 最新的问题
P
Privacy International News Feed
IT之家
IT之家
M
MIT News - Artificial intelligence
G
GRAHAM CLULEY
Hacker News: Ask HN
Hacker News: Ask HN
D
DataBreaches.Net
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
C
Check Point Blog
美团技术团队
Security Latest
Security Latest
Cyberwarzone
Cyberwarzone
N
News and Events Feed by Topic
MyScale Blog
MyScale Blog
H
Help Net Security
宝玉的分享
宝玉的分享
The Hacker News
The Hacker News
The Last Watchdog
The Last Watchdog
The Cloudflare Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
爱范儿
爱范儿
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
I
Intezer
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
AI
AI
I
InfoQ
N
News | PayPal Newsroom
TaoSecurity Blog
TaoSecurity Blog

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant Common SOC 2 Failures (Real World) Stop Vibe-Checking Your AI App: A Practical Guide to Evals How to Use SonarQube and SonarScanner Locally to Level Up Your Code Quality Your Next To-Do App Is Dead — I Replaced Mine with an OpenClaw AI Sign a Nostr event in 60 lines of Python using coincurve — no nostr-sdk, no nbxplorer, no rust toolchain ITGC Audit Explained Like You’re in Big 4 Patch Tuesday abril 2026: Microsoft parcha 163 vulnerabilidades y un zero-day en SharePoint Stop scraping everything: a better way to track competitor price changes Listing on MCPize + the Official MCP Registry while routing payments OUTSIDE the marketplace — how I kept 100% of my x402 revenue Building an AI-Powered Risk Intelligence System Using Serverless Architecture Why We Ripped Function Overloading Out of Our AI Toolchain Testing AI-Generated Code: How to Actually Know If It Works SaaS Churn Is Killing Your Business. Here Is What to Do About It (Without a Support Team) The Speed of AI Is No Longer Linear - And Self-Improving Models Are Why How to Implement RBAC for MCP Tools: A Practical Guide for Engineering Teams From Standard Quote to Persuasive Proposal: AI Automation for Arborists I built a CLI that scaffolds complete multi-tenant SaaS apps Axios CVE-2025–62718: The Silent SSRF Bug That Could Be Hiding in Your Node.js App Right Now The dashboard that ended our friendship Data Pipelines Explained Simply (and How to Build Them with Python) The Hidden Cost of AI Systems Nobody Talks About. undefined vs undeclared, and how typeof behaves Switching from file-based jobs to NATS/Kafka in Rust without changing code io_uring Adventures: Rust Servers That Love Syscalls Why Agentic AI is Killing the Traditional Database The POUR principles of web accessibility for developers and designers Quantum Neural Network 3D — A Deep Dive into Interactive WebGL Visualization How To Install Caveman In Codex On macOS And Windows Automation Pipeline Reliability: Why Your Workflow Breaks When Nobody Is Watching I Built an 'Open World' AI Coding Agent — It Works From ANY Folder From Freelancing to Product: A Tech Service Company's SaaS Transformation China's AI Giants: Adding Tencent Hunyuan & ByteDance Doubao to AI University (74 Providers) On the Vibe Coders and Their Lies clerk: Auto-Summarize Your Claude Code Sessions AI Weekly — 2026/04/10–04/17 | The Model Lockdown Is Here, but the Toolchain Is the Real Battleground AI 週報 — 2026/04/10–2026/04/17 模型封鎖潮來了,但工具鏈才是真戰場 Maybe this is how Open-Source apps are born... 🚀 Fine-Tune LLMs with LoRA and QLoRA: 2026 Guide tRPC v11 + Next.js App Router: End-to-End Type Safety Without the Boilerplate ShadCN UI in 2026: Why I Stopped Installing Component Libraries and Started Owning My Components SaaS Billing in React Server Components: Stripe + Supabase Without a Single `useEffect` Join our DEV Weekend Challenge — $1,000 in Prizes Across TEN winners! Submissions Due April 20 at 6:59 AM UTC. Implementing FSRS Spaced Repetition in Flutter + Supabase — Adding Memory Science to an AI Learning App "I Texted My Localhost From the Train — Claude Code Fixed the Bug Before I Got Home" I Built a Sales Prep AI and It Went Deeper Than Expected Design to Code #2: One JSON, Eleven Outputs Solving the 100M-Row Problem: A Summary Table Pattern for High-Volume Push Notification Logs Flutter Web With Wasm: What Actually Changes For Developers I Built 50 Royalty-Free Soundtracks for My Side Project in a Weekend Using AI Music Generation The Vibe Coding Security Checklist: 7 Things to Check Before You Ship Stop Letting Googlebot Guess Fix Your React App's SEO Right Desconstruindo o Streaming do LinkedIn: Como Criar um Engine de Extração de Vídeo de Alta Performance com HLS e FFmpeg (EDA Part-1) EDA (Exploratory Data Analysis) Explained With Real Life — Why Looking at Your Data Is the Most Important Step in Machine Learning Brand Relationship Management at Scale: Our 4-Touch Outreach System for 200+ Brands Why String.fromEnvironment() Might Return an Empty String in Dart JGuardrails 1.0.0 — Hardening Java LLM Apps Against Jailbreaks, Toxicity, and Prompt Injection Plan and Schedule a Full Week of Threads Content From One Claude Conversation Coding Cat Oran Ep3, Five Tables Changed Everything Updated: BFF Pattern I'm done watching freelancers get buried by 200 proposals. So I'm building the alternative. This is my first post BFS Algorithm in Java Step by Step Tutorial with Examples Tracking LLM Pricing Monthly: An Open Dataset for 22 AI Models How We Measure Content ROI on a Comparison Site: Revenue Attribution Without Perfect Data Introducing Nova AI Ops: The AI-Native Operating System for SRE Teams I built a free desktop video downloader for Windows — Grabbit How Talkie OCR Helps Vision-Impaired & Dyslexic Users Read the World Around Them VRCFaceTracking安装和iPhone面捕配置教程,有bug Even CrowdStrike Can't See Your Agents The Automation Gold Rush: What n8n Workflows and Claude Are Opening Up for Developers Right Now
Building an x402-native sports prediction oracle: lessons from the only sports-prediction service in CDP Bazaar
AsaiShota · 2026-05-15 · via DEV Community

AsaiShota

Disambiguation note. "AgentOracle" / "npb-win-probability-oracle" is a congested name in 2026. This article is about npb-win-probability-oracle — a sports prediction oracle on Solana mainnet, focused on Japanese pro baseball (NPB). It is unrelated to two other projects that share variations of the name:

  • TKCollective's AgentOracle (github.com/TKCollective, agentoracle.co) — a trust/verification layer for AI agents, powered by Perplexity Sonar, x402-native on Base mainnet. Different concept (claim verification), different chain.
  • aiagentoracle.ai — a separate on-chain crypto token data API on Base. Different concept (crypto market data), different chain.

I picked the npb-win-probability-oracle repo name before realizing the namespace was this crowded. Treat the three as distinct services; this article is only about the Solana / NPB / sports-prediction one.

Why I built this

The x402 protocol layer is decided. Coinbase, Cloudflare, and the Linux Foundation co-launched the x402 Foundation; the spec is settled; SDKs in TypeScript, Python, Go, and Rust exist; the CDP facilitator processes settlements on Base, Polygon, Arbitrum, World, and Solana. The interesting question is no longer "will agent-native payments work?" It is "what does the application layer on top look like?"

I had a useful asset for that question: a Python NPB (Nippon Professional Baseball) prediction tool I have been running privately for a while. XGBoost model, 28,968 historical games (2008–2025), 61 features, AUC 0.5622 on out-of-sample data, three OOS strategies that survive backtests. Not earth-shattering numbers in isolation, but enough edge to feed a paid prediction oracle, and the domain (Japanese pro baseball with Asian Handicap integration) is essentially uncovered by English-language sports oracle services.

The Renaissance-style approach: keep the bleeding-edge model private, ship the 1–2 generation-older version as the commercial product. That tool is npb-win-probability-oracle.

Architecture

Stack:

  • oracle-api: Hono on Node.js, deployed on Railway. Twelve paid endpoints under /v1/npb/*. Pricing $0.001–$0.10 per call (USDC, Solana mainnet, exact scheme).
  • orchestrator: dockerized Node.js worker pool. Runs eleven bot processes that hit oracle-api on cron schedules, settle payments, log results. Also hosts the bazaar-watch daemon (external payer detection) and royalty-distributor (90/10 platform/creator split for Marketplace).
  • predictor: FastAPI services for NPB. Internal HTTP from oracle-api, no x402 (private RPC).
  • dashboard: Next.js 14 App Router on Vercel.
  • DB: Supabase Postgres. Polling, not WebSocket, because Docker for Windows VPNkit blocks the realtime channel (ADR-013 in our repo).
  • facilitator: We started on PayAI, migrated to corbits.dev after ADR-022/023-class incidents (more below), and now use the CDP facilitator for mainnet x402 settlement.

Every paid endpoint emits a v2 Bazaar discovery extension on its 402 response. The paymentRequirements.extensions.bazaar block contains info.input, info.output (with format text and an example), the JSON Schema, a custom metadata object (category, tags, quality signals), and the route template. When the CDP facilitator processes a settlement on one of these endpoints, it extracts that block and catalogs the resource into the public Bazaar discovery API.

Operational data — transparent disclosure

This is the part that deserves honesty rather than marketing.

  • Eleven bots in parallel, more than one hundred hours of continuous uptime on Solana mainnet.
  • Cumulative settlement: 7,108 paid x402 transactions, roughly 70 USDC settled on-chain.
  • All of that traffic is self-funded. Every paying wallet is one of mine — eleven mainnet bots plus a handful of legacy faucet wallets and smoke-test addresses. External paying customers: zero.

Why call this out instead of leaning on the "7,108 mainnet transactions" line as social proof? Two reasons.

First, the AI agent ecosystem is small enough that anyone curious can verify the funding flow on-chain in about ten minutes. Posting big numbers without disclosure is wash-trading optics, and dev communities sniff that out fast.

Second, when I queried the CDP Bazaar discovery API directly, my own service appears with l30DaysTotalCalls=22 and l30DaysUniquePayers=11 — those eleven payers are precisely my mainnet bots, individually accounted for in our WALLET_REGISTRY. The Bazaar's own quality signals already tell the story; pretending otherwise to readers would be pointless.

The number that matters is uptime, not call volume. The pipeline survived a Railway build break (force flag deprecation), a facilitator migration, a wallet-role conflict triage, a marketplace dynamic-price design failure, and a payment-required cache layer redesign — and it has been processing settlements continuously since.

What is actually novel

When I pulled the full CDP Bazaar resource catalog and grouped by category metadata, the result was striking.

  • 47,146 total resources in the Bazaar.
  • Of the 1,000 I sampled in detail: 994 have no category set on their Bazaar metadata. Five use "Data". One uses "sports-prediction" — npb-win-probability-oracle.

We are the only sports-prediction service in the entire Bazaar today. That is a fact about the catalog, not a marketing claim. The Bazaar v2 metadata fields are recent, and most service operators have not adopted them yet. Whoever ships first in a category effectively defines it.

The NPB-specific edges:

  • Asian Handicap integration. Daily AH snapshots scraped from a Japanese pipeline, exposed via /v1/npb/ah/:date. English-language sports oracle services rarely cover AH at all.
  • XGBoost v8 with documented AUC 0.5622 OOS on 28,968 historical games. Three OOS strategies survive the cut.
  • 12 paid endpoints with the full Bazaar v2 manifest: win probability, daily list, post-game results, full box scores, AH movement, forecast (win prob + expected runs), per-season pitcher / batter / fielder rankings, and individual player lookups.
  • Quality signals (model_auc, oos_strategies_passed, coverage_seasons, training_set_size, mainnet_tx_count) are declared in extensions.bazaar.metadata.quality and surface in the Bazaar discovery response.

Discovery layer — what actually works and what doesn't

I have spent enough time inside the discovery layer to share the honest map.

What works:

  • The CDP facilitator does index v2 Bazaar manifests automatically. After Phase 11 of our build, every paid settlement refreshed our catalog entry; the metadata block round-trips intact.
  • The paginated catalog endpoint (GET /v2/x402/discovery/resources) is fast and unauthenticated. You can fetch your own indexed entry, audit which endpoints are catalogued, and watch your l30DaysTotalCalls and l30DaysUniquePayers move in near real time.
  • The Bazaar's own lastUpdated timestamp moves the instant a settlement clears, which means you can detect downstream breakage in seconds.

What doesn't (yet):

  • The semantic search endpoint (GET /v2/x402/discovery/search?q=...) currently returns the same top results regardless of the query string. I tested with q=oracle, q=npb, q=baseball, q=sports+prediction, and q=win+probability — the top five resources are identical across all five queries, and they happen to be the same top five from the popularity-ranked default. The q parameter appears to be accepted but not yet wired to a semantic backend.
  • This matters because the implicit assumption — "ship rich metadata and AI agents will find me" — does not hold today. Discoverability is currently popularity-bootstrapped, not metadata-driven. The top-ranked services have l30DaysTotalCalls in the tens of thousands. A new service ships at 0 and has to climb.
  • Category filtering exists in the API surface but the response did not include our entry when I queried category=sports-prediction. Either it's not fully wired or our entry was excluded by a default sort I haven't reverse-engineered.

The practical implication: do invest in the metadata (it costs little and is correct in the long run), but do not expect Bazaar discovery to deliver organic external traffic in 2026. Outreach, partnerships, and direct integration deals are still the primary growth surface.

ADR / engineering takeaways

A few cuts of scar tissue from the build:

  • ADR-022: The CDP facilitator requires scheme and network at the top level of payment requirements, not just nested inside SDK-emitted accepts[]. The TypeScript SDK happily emits a structurally-valid request that the facilitator's business logic rejects. We learned this the hard way after a wave of 402 errors with empty bodies in production.
  • ADR-023: The CDP /verify endpoint rejects instructions in the payment memo (Solana memo program). PayAI had accepted this; CDP did not. The cleanest path was migrating to corbits.dev as the facilitator and dropping memo content entirely.
  • ADR-080: Wallet roles need to be separated (creator vs distributor vs platform vs oracle revenue receiver), even if the same key signs all of them for a while. The orchestrator now warns when role pubkeys collide. We will rotate the creator/distributor split before β release.
  • WALLET_REGISTRY: External payer detection needs a single source of truth for "internal" wallets. We cross-checked three sources (env, Supabase bots table, HANDOFF history) and emit a typed INTERNAL_WALLET_REGISTRY of 25 entries with role labels. The bazaar-watch daemon polls Supabase every five minutes; the moment a payer outside this registry appears, it fires a Telegram alert with the tx hash and Solana Explorer link. We dry-ran 7,108 historical paid tx against the registry: zero false positives, which gives us confidence that "first external customer" will be a clean signal.

These are the kinds of things you only learn by shipping into mainnet and letting bots hammer the pipeline for a month.

What's next

  • β release on 2026-05-21 JST. Marketplace UI public — strategy listings, royalty distribution on-chain with a 90/10 creator/platform split.
  • External-customer detection wired. When the first non-internal wallet pays for an endpoint, the daemon Telegram-pings me with the payer pubkey, endpoint, amount, and explorer link. That moment is the actual goalpost; everything before it is just keeping the lights on.
  • x402.org/ecosystem submission open at github.com/x402-foundation/x402/pull/2303. Single signed commit, two files: a metadata.json partner entry and an SVG logo. Review window expires 2026-05-22.
  • Endpoint coverage: only /v1/npb/games/:date/win-prob is currently indexed in the Bazaar because that is the only endpoint my internal bots hit. The other eleven endpoints will catalog as soon as a paid settlement clears against them. Forcing this with self-funded calls would be cheap, but I would rather wait for an actual external request to drive the first indexing event on each surface.

Closing

If you are building an AI agent that needs sports data — predictions, schedules, post-game results, batting/pitching stats, AH movements — the endpoints are live and payable in mainnet USDC via x402, priced between $0.001 and $0.10 per call. You can hit /v1/npb/games/2026-05-21/win-prob today and the bazaar-watch daemon will tell me you exist.

  • Production API: https://oracle-api-production-766f.up.railway.app
  • x402 ecosystem PR: https://github.com/x402-foundation/x402/pull/2303
  • I'm @AsaiShota on GitHub.

Honest take to leave you with: the AI agent economy in 2026 looks like infrastructure people running their own bots through their own services to test their own infrastructure. Real external customer flow — the kind that justifies the "agentic commerce" framing — is still the hard part, and it's not visible yet in the Bazaar's own quality signals. The infra is the easy part. The customer is the work.