سرویس تولید کارت/پوستر آنچین برای OKX.AI — مدل A2MCP، پرداخت per-call با x402 روی X Layer. ۵ سرویس، یک endpoint.
| type | قیمت (USDT) | ابعاد | نیاز به |
|---|---|---|---|
trade-flex-card |
3 | 1200×675 | — |
meme-card |
3 | 1200×675 | — |
milestone-certificate |
5 | 1400×990 | input_data.address |
wallet-identity-poster ⭐ |
9 | 1000×1250 | input_data.address |
project-stat-cover |
5 | 1200×630 | input_data.token_address |
npm install
npm run test:render # هر ۵ تمپلیت → PNG در ./out
npm run dev # سرور با X402_DEV_SKIP=1 و رندر wkhtmltoimageتست فلوی پرداخت:
# بدون پرداخت → 402 استاندارد x402
curl -i -X POST localhost:3000/generate -H 'Content-Type: application/json' \
-d '{"type":"trade-flex-card","input_data":{"pair":"BTC/USDT","pnl_percent":18.4,"entry_price":60000,"exit_price":71000,"side":"LONG"}}'
# با پرداخت (dev-skip) → عکس
curl -s -X POST localhost:3000/generate -H 'Content-Type: application/json' \
-H "X-PAYMENT: $(echo '{"test":true}' | base64)" \
-d '{"type":"meme-card","input_data":{"quote":"gm","author_handle":"@you"}}'POST /generate—{ type, input_data }→ پرداخت x402 → (fetch دیتای آنچین در صورت نیاز) →{ image_url }- برای سرویسهای آنچین اگه
input_data.statsرو خودت بدی، fetch انجام نمیشه (مفید برای دمو/تست بدون کلید).
- برای سرویسهای آنچین اگه
GET /services— کاتالوگ (برای ثبت ASP)GET /leaderboard— تاپ Degen Score ها (مجانی، وایرال؛ نیاز به Redis)GET /health,GET /images/:file
POST /generate
└─ requirePayment (lib/payment/x402-middleware.js — نصف B)
402 + accepts[] اگر پرداخت نشده / verify+settle با facilitator اگر شده
└─ inject onchain stats (lib/onchain/* — نصف B، کش Redis، OKX→Etherscan→Covalent)
└─ templates[type].buildHtml(data) (هر ۵ تمپلیت)
└─ render(html, dims) (lib/render.js — نصف A، Playwright / wkhtmltoimage)
└─ saveImage → { image_url }
- Push به GitHub → Railway → Deploy from GitHub (Dockerfile با Chromium آمادهست)
- Variables — حداقل اینها:
تا وقتی facilitator واقعی نداری:
PUBLIC_BASE_URL=https://<app>.up.railway.app X402_PAY_TO=<آدرس Agentic Wallet> X402_FACILITATOR_URL=<broker که OKX موقع ثبت ASP میده> OKX_API_KEY / OKX_API_SECRET / OKX_API_PASSPHRASE UPSTASH_REDIS_REST_URL / UPSTASH_REDIS_REST_TOKEN AGENT_HANDLE / AGENT_URL (بعد از لیست شدن)X402_DEV_SKIP=1(⚠️ قبل از go-live حذفش کن — بدونش پرداخت fail-closed هست یعنی عکس مجانی داده نمیشه). - کاملترین لیست env در
.env.example.
/app/out وصل کن (OUT_DIR=/app/out) یا saveImage رو به R2/S3 سوئیچ کن.
npx skills add okx/onchainos-skills --yes -gداخل Claude Code- لاگین Agentic Wallet → آدرس رو در
X402_PAY_TOبذار - ثبت هر ۵ سرویس با endpoint
https://<app>.up.railway.app/generate، قیمتها از جدول بالا /GET /services - Submit برای لیستینگ →
AGENT_HANDLEوAGENT_URLرو با مقادیر واقعی پر کن و ریدیپلوی (واترمارک همهی عکسها از همینا ساخته میشه)
- تست پرداخت واقعی با facilitator/broker OKX (تا الان فقط dev-skip و فرمت استاندارد تست شده)
- یک run واقعی
getWalletStats/getTokenStatsبا کلید OKX API و تطبیق نام فیلدها درfromOkx() - Volume یا R2/S3 برای ماندگاری عکسها
-
AGENT_HANDLE/AGENT_URLبعد از لیست شدن
- ✅ هر ۵ تمپلیت → PNG (ابعاد اختصاصی هر کدوم)
- ✅ 402 استاندارد از middleware واقعی نصف B (مبلغ atomic درست: poster=9 USDT → "9000000")
- ✅ paid flow → image_url → دانلود PNG واقعی
- ✅ بدون کلید API → خطای تمیز "All providers failed" (بدون crash)
- ✅ بدون Redis → کش حافظهای + leaderboard خالی (بدون crash)
- ✅ type ناشناخته → 400
- 🔧 فیکسشده در مرج: ترتیب لود ESM در
render.js؛ overlap واترمارک با حاشیه در certificate