מדריך בוט Polymarket · פרק 3 מתוך 32

בחרו את סטאק הבוט שלכם ל־Polymarket: Python (py-clob-client 0.34.6), Node.js (@polymarket/clob-client-v2 v1.0.6), או Rust (אין SDK רשמי, בונים על ethers-rs). יתרונות, חסרונות, latency, דוגמאות קוד.

מה מכסה הפרק הזה

הבחירה בשפה הרבה פחות מכרעת ממה שרוב הבונים נוטים לחשוב. Polymarket חושפת את אותן נקודות קצה של REST ושל WebSocket לכל שפה; הבחירה ב־SDK בעיקר קובעת כמה קוד דבק תצטרכו לכתוב בעצמכם. ל־Python ול־Node יש שניהם SDKs שמתוחזקים רשמית; ל־Rust אין, אבל הוא בהחלט אפשרי עבור ה־hot path. הפרק הזה עובר על הטרייד־אופים, מציג את אותה משימת "fetch order book" בכל שפה כדי שההבדל יהיה מוחשי, ומסתיים בתבנית mixed-stack שזו למעשה הדרך שבה רוב הבוטים בייצור מתכנסים אליה.

  • מסגרת לקבלת החלטה
  • Python (בחירת ברירת המחדל)
  • Node.js (מפתחי full-stack)
  • Rust (hot path קריטי ל־latency)
  • פקודות setup לכל stack
  • שלד קוד: fetch order book ב־3 שפות
  • מתי לשלב stacks (Python control plane + Rust hot path)

מסגרת לקבלת החלטה

שלוש שאלות פותרות 90% מהבחירה ב־stack.

  1. יש לכם מיומנות קיימת חזקה? אם אתם כותבים Python מדי יום, כתבו את הבוט ב־Python. אם אתם כותבים TypeScript מדי יום, כתבו את הבוט ב־Node. ההבדלים באיכות ה־SDKs שלהלן הם אמיתיים, אבל קטנים יותר מהמחיר של להילחם בשפה לא מוכרת.
  2. האם האסטרטגיה קריטית ל־latency? אם היתרון שלכם תלוי בתגובה בתוך פחות מ־50ms (שוקי crypto של 5 דקות, market-making בזמן חדשות), ה־hot path מרוויח מ־Rust או Go. לרוב האסטרטגיות זה פשוט לא נחוץ.
  3. האם תריצו יותר מאסטרטגיה אחת? תהליך Python יחיד יכול לנהל בנוחות 10-20 שווקים. מעבר לכך, async ב־Node או פיצול לתהליכים ב־Python מתרחב טוב יותר.

ברירת המחדל הכנה לבוט ראשון היא Python. עברו לשפה אחרת רק כשאילוץ מדיד מחייב זאת.

Python (בחירת ברירת המחדל)

Python היא ברירת המחדל כי ה־SDK שלם יותר והלולאה של איטרציה מהירה יותר. py-clob-client בגרסה 0.34.6 (מאי 2026) מכסה כל נקודת קצה חשובה של CLOB v2: פקודות market ו־limit, וריאציות FOK/FAK/GTC, קריאות order book, קריאות balance/allowance, ופעולות ישירות ב־chain דרך web3.py.

יתרונות: SDK בוגר, ניתוח נתונים קל עם pandas, קהילה גדולה, web3.py לקריאות on-chain. חסרונות: ה־ergonomics של async מגושמים יותר לעומת JavaScript, ה־GIL מגביל שיפורי מהירות מרובי ליבות (נדיר שזה משנה בבוט מבוסס I/O), וזמן ההפעלה בקונטיינרים קרים איטי.

מומלץ עבור: 80% מהבונים. במיוחד לכל מי שהאסטרטגיה שלו כוללת backtesting, ניתוח סטטיסטי, או כל עבודה עם נתונים לצד execution.

Node.js (מפתחי full-stack)

Node.js הוא ה־stack הנתמך הטוב ביותר אחרי Python. @polymarket/clob-client-v2 בגרסה 1.0.6 מכסה את אותן נקודות קצה כמו ה־SDK של Python, עם טיפוסי TypeScript לכל אורך הדרך. async הוא native ומהיר; הטיפול ב־WebSocket מצוין.

יתרונות: הסיפור הטוב ביותר ל־async, טיפוסי TypeScript מובנים, אקוסיסטם גדול ל־HTTP + WS, פריסה קלה על אותו runtime של Node כמו dashboard אינטרנטי. חסרונות: דיוק מספרי דורש BigInt או טיפול כמחרוזות עבור token IDs גדולים (‏ERC-1155 IDs הם בגודל 256-bit), וכלי נתונים מקבילים ל־pandas חלשים יותר.

מומלץ עבור: בונים שכבר מתחזקים סטאק JavaScript ורוצים runtime אחד. גם: כל מי שבונה dashboard לצד הבוט - שיתוף טיפוסים בין ליבת הבוט ל־dashboard ב־Next.js מסיר סוג שלם של באגים.

Rust (hot path קריטי ל־latency)

ל־Rust אין SDK רשמי של Polymarket. בונים מול V2 REST ו־WebSocket APIs ישירות באמצעות reqwest (HTTP), tokio-tungstenite (WebSocket), ו־ethers-rs או alloy לחתימה. בערך יומיים של עבודה על setup לעומת 30 דקות ב־Python.

יתרונות: חתימה native ב־EIP-712 בלי subprocess של JS, בניית פקודות order מתחת למילישנייה, פרופיל זיכרון דטרמיניסטי תחת עומס, בלי pauses של GC. חסרונות: בלי SDK אתם מממשים מחדש מה שמשתמשי Python מקבלים בחינם (פירוק clobToken ID, ולידציה של סכמת התשובה, ניהול salt/nonce). הרווח ב־latency הוא 20-100ms לעומת Python מכוונן, וזה משנה רק באסטרטגיות של תת־שנייה.

מומלץ עבור: ה־hot path של בוט market-making, או הרגל שמבצע עסקאות בבוט news-arb. כמעט אף פעם לא כל הבוט.

פקודות setup לכל stack

פקודות מינימליות ל־order חתום שעובד מול mainnet (נקודת קצה יחידה של CLOB v2).

Python:

python -m venv venv && source venv/bin/activate
pip install py-clob-client==0.34.6 web3 python-dotenv
# Set POLYGON_RPC, PRIVATE_KEY, POLY_FUNDER in .env

Node:

npm init -y
npm install @polymarket/[email protected] ethers dotenv
# Set POLYGON_RPC, PRIVATE_KEY, POLY_FUNDER in .env

Rust:

cargo new --bin pmt
cd pmt
cargo add tokio reqwest serde serde_json ethers alloy tungstenite tokio-tungstenite
# Hand-write signer + endpoint client; no SDK shortcut.

Time-to-first-order: ~10 min Python, ~15 min Node, ~4-8 hours Rust.

שלד קוד: fetch order book ב־3 שפות

אותה משימה - fetch order book עבור token של Polymarket - בכל stack. שלושתן פונות לאותה נקודת קצה של REST ב־CLOB v2.

Python (py-clob-client):

from py_clob_client.client import ClobClient
client = ClobClient(host="https://clob.polymarket.com", chain_id=137)
book = client.get_order_book("<token_id>")
print(book.bids[:3], book.asks[:3])

Node (@polymarket/clob-client-v2):

import { ClobClient } from "@polymarket/clob-client-v2";
const c = new ClobClient({ host: "https://clob.polymarket.com", chain: 137 });
const book = await c.getOrderBook("<token_id>");
console.log(book.bids.slice(0,3), book.asks.slice(0,3));

Rust (direct HTTP):

let url = format!("https://clob.polymarket.com/book?token_id={}", token);
let book: serde_json::Value = reqwest::get(&url).await?.json().await?;
println!("{:?} {:?}", &book["bids"][..3], &book["asks"][..3]);

אותה צורת תשובה בכל שלוש השפות. העלות של Rust נמצאת בכל מקום אחר - חתימה, בניית orders, טיפול בשגיאות - לא בנתיב הקריאה.

מתי לשלב stacks (Python control plane + Rust hot path)

התבנית שאליה הרבה בוטים בייצור מתכנסים: Python לכל מה שכולל קבלת החלטות, Rust לרגל ביצוע של מילישניות.

ארכיטקטורה: תהליך Python קורא את מצב השוק, מריץ את לוגיקת האסטרטגיה, וכותב קובץ פקודה קטן (למשל {"action":"buy","token":"...","size":10,"price":0.45}) ל־Unix socket. דמון Rust מאזין ל־socket הזה, חותם על הפקודה, ושולח אותה ל־CLOB. תהליך Python יכול להיות איטי ונוח; דמון Rust מהיר ומינימלי.

ההעברה היא המפתח: על ידי בידוד שלב ה־signed-order, תקציב הקריסות של Python נשמר בלי לוותר על latency. אנחנו משתמשים בדיוק בתבנית הזו בבוטים בייצור שלנו - Python פולט כוונות, דמון Node על /tmp/clob.sock מטפל בחתימה. גרסת Node של הדמון טובה לחלוטין עבור פחות מ־100ms; Rust באמת שווה את ההשקעה רק מתחת ל־50ms.

שאלות נפוצות

האם py-clob-client תואם ל־Polymarket V2?
כן. py-clob-client 0.34.6 (הגרסה שאנחנו מריצים בייצור על ה־VPS שלנו נכון למאי 2026) תואם ל־V2 ופועל עם ההעברה של pUSD כבטוחה. החבילה מותקנת באמצעות "pip install py-clob-client".
מהו ה־SDK הרשמי של Polymarket ל־Node.js?
@polymarket/clob-client-v2 (נכון לעכשיו v1.0.6 נכון למאי 2026). ה־"v2" בשם החבילה משמעותי - החבילה הישנה יותר @polymarket/clob-client היא V1 ולא מומלצת לפרויקטים חדשים. מתקינים באמצעות "npm install @polymarket/clob-client-v2".
האם יש SDK רשמי של Polymarket ל־Rust?
לא. נכון למאי 2026 אין SDK רשמי ל־Rust מ־Polymarket. משתמשי Rust בונים ישירות מול V2 REST ו־WebSocket APIs באמצעות ethers-rs (לחתימת EIP-712) ו־reqwest או hyper (ל־HTTP/WS). זה יותר קוד, אבל הרווחים ב־latency וב־concurrency חשובים ל־market making.
האם אפשר להשתמש ב־Go עבור בוט של Polymarket?
כן, טכנית - ל־Go יש ספריות HTTP ו־Ethereum טובות (go-ethereum). אין SDK רשמי ל־Go, לכן בונים מול ה־REST API. אנחנו לא רואים את Go בשימוש נפוץ כמו Python או Node.js עבור בוטים של Polymarket, אבל זה בהחלט אפשרי.
האם כדאי להשתמש ב־Python או Node.js אם אני מכיר את שניהם?
Python אם האסטרטגיה שלכם מבוססת מחקר (pandas, NumPy, scikit-learn). Node.js אם האסטרטגיה שלכם בזמן אמת / מונעת־אירועים ואתם רוצים אותו language client ושרת. שניהם מגיעים לאותן נקודות קצה של CLOB; שניהם מהירים מספיק לכל אסטרטגיה שאינה HFT.
האם אני צריך TypeScript עבור ה־SDK של Node?
לא חובה, אבל מומלץ. @polymarket/clob-client-v2 מגיע עם טיפוסי TypeScript, ותפיסת שגיאות טיפוס בזמן קומפילציה חוסכת הרבה debugging כשמטעני החתימה של EIP-712 או סוגי orders שגויים.
כמה מהיר צריך להיות בוט של Polymarket?
לרוב האסטרטגיות milliseconds מספיקים, לא microseconds. מיקרוסטרוקטורה בספורט ו־market making מרוויחים ממתחת ל־100ms; arbitrage בחדשות סובל 500-1000ms. השתמשו ב־Python ללוגיקת האסטרטגיה, ועברו ל־Rust עבור ה־hot path רק אם profiling של latency מוכיח שזה משנה ליתרון שלכם.