آموزش Polymarket Bot · فصل 6 از 32
احراز هویت Polymarket bot و راهاندازی wallet: proxy wallet در برابر EOA، تولید API key از طریق SDK، sigType 2 برای Gnosis Safe، بهترین روشهای ذخیرهسازی key، و مهاجرت Magic به Privy.
این فصل چه چیزهایی را پوشش میدهد
مدل wallet در Polymarket سه بخش متحرک دارد: یک externally owned account (EOA) که orderها را sign میکند، یک smart-contract proxy که funds را نگه میدارد، و Polymarket CLOB API key که HTTP requestها را authenticate میکند. درست وصل کردن هر سه مورد، رایجترین خطای روز اول برای builderهای جدید است، و بعد از migration مربوط به August 2025 از Magic Labs به Privy، این موضوع حتی گیجکنندهتر شد. این فصل هر بخش را به ترتیب setup مرور میکند، همراه با environment variableهای مشخص و signature-type flagی که کد production به آن نیاز دارد.
- Proxy wallet در برابر EOA: با کدام bot بزنیم
- تولید یک API key (مراحل SDK)
- sigType 2 و POLY_FUNDER_ADDRESS (Gnosis Safe)
- ذخیرهسازی key: .env، vault، KMS
- مهاجرت Magic Labs به Privy
- Approve کردن spending برای USDC/pUSD
- Wallet recovery و backup
Proxy wallet در برابر EOA: با کدام bot بزنیم
Polymarket از الگوی smart-contract proxy wallet استفاده میکند. EOA شما - یعنی آدرسی که به private key شما متصل است - transactionها و orderها را sign میکند. یک Gnosis Safe که در یک آدرس deterministic deploy شده، pUSD و outcome shareهای واقعی را نگه میدارد. آدرس proxy همان چیزی است که در پنل "wallet" در UI پولیمارکت نمایش داده میشود؛ EOA همان چیزی است که sign میکند.
برای botها، همیشه با EOA sign میکنید (PRIVATE_KEY در env) و آدرس proxy را بهعنوان POLY_FUNDER_ADDRESS در تنظیمات CLOB client ارجاع میدهید. فرستادن order با EOA بهعنوان funder باعث خطای "insufficient balance" میشود، حتی وقتی proxy funded است.
شما نمیتوانید فقط با EOA bot بزنید - flow وب Polymarket همیشه هنگام signup یک proxy ایجاد میکند. هر دو آدرس را با polymarket wallet show از CLI تأیید کنید، یا آدرس proxy را از settings در UI Polymarket بخوانید.
تولید یک API key (مراحل SDK)
CLOB API به سه credential نیاز دارد: key، secret، passphrase. اینها private key wallet شما نیستند - بلکه یک مجموعه credential از نوع HMAC هستند که به wallet شما bind شدهاند و فقط برای authentication درخواستهای HTTP استفاده میشوند.
یکبار با SDK آنها را تولید کنید:
# Python
from py_clob_client.client import ClobClient
c = ClobClient(host="https://clob.polymarket.com", chain_id=137,
key="<PRIVATE_KEY>", signature_type=2,
funder="<PROXY_ADDRESS>")
creds = c.create_or_derive_api_creds()
print(creds.api_key, creds.api_secret, creds.api_passphrase)
خروجی را در یک فایل JSON ذخیره کنید و در هر بار start شدن bot آن را load کنید؛ برای هر session دوباره تولید نکنید - server مربوط به API این credential set را cache میکند، و rotate کردن مکرر میتواند منطق rate-limit را فعال کند. این credentialها بهطور خودکار منقضی نمیشوند. فقط اگر به leak مشکوک هستید آنها را rotate کنید.
sigType 2 و POLY_FUNDER_ADDRESS (Gnosis Safe)
آرگومان signature_type مشخص میکند CLOB چگونه order signatureهای شما را validate کند. سه مقدار وجود دارد؛ دو مورد واقعی هستند:
- 0 / EOA: EOA هم signer است و هم funder. برای setupهای غیرمعمولی استفاده میشود که در آن کاربران یک private key را مستقیماً import کردهاند.
- 1 / POLY_PROXY: proxy contract قدیمی Magic Labs. بیشتر accountهای قبل از 2025.
- 2 / POLY_GNOSIS_SAFE: استاندارد فعلی. funds داخل Gnosis Safe هستند، EOA sign میکند.
برای هر accountی که بعد از August 2025 (migration به Privy) ایجاد شده، یا هر accountی که در UI Polymarket یک Gnosis Safe address برایش میبینید، از signature_type=2 استفاده کنید. env var مربوط به POLY_FUNDER_ADDRESS باید آدرس Safe باشد، نه EOA. mismatch بین signature_type و نوع funder بهصورت بیصدا orderها را reject میکند و خطایی شبیه "insufficient allowance" یا "balance: 0" میدهد - پیام خطا گمراهکننده است.
ذخیرهسازی key: .env، vault، KMS
سه سطح معقول برای ذخیرهسازی private key مربوط به EOA وجود دارد.
- فایل .env (توسعه روی یک machine). فایل روی VPS قرار دارد، bot هنگام start آن را میخواند، و key هرگز از host خارج نمیشود. برای walletهای کمتر از <$1k کافی است.
chmod 600 .envبزنید و مطمئن شوید .gitignore ریپو آن را exclude میکند. - Self-hosted vault (HashiCorp Vault، فایل رمزنگاریشده با age، یا systemd-creds). یک مرحله unlock هنگام start شدن bot اضافه میکند. برای walletهای در بازه $1k-$10k ارزش دارد.
- Cloud KMS (AWS KMS، GCP KMS). bot از KMS برای decrypt کردن key در memory استفاده میکند؛ key هرگز به disk نمیرسد. این پیچیدگی عملیاتی فقط بالاتر از $10k یا برای fleetهای چند-bot ارزش دارد.
چیزهایی که هرگز نباید انجام دهید: commit کردن private key در git، paste کردن آن در chat، ذخیرهسازی آن در password managerی که بدون حالت local-only با cloud serviceها sync میشود. blast radius on-chain برای leak شدن EOA در Polymarket، کل موجودی pUSD و inventory سهمهای outcome شماست.
مهاجرت Magic Labs به Privy
در August 2025، Polymarket provider اصلی embedded-wallet خود را از Magic Labs به Privy منتقل کرد. اثر این تغییر برای botها کم است، اما مشخص است.
accountهای قبل از migration (ساختهشده از طریق Magic) معمولاً از signature_type=1 (POLY_PROXY) استفاده میکنند. accountهای بعد از migration از signature_type=2 (POLY_GNOSIS_SAFE) استفاده میکنند. بعضی کاربران account قدیمی خود را migrate کردند؛ بعضی دیگر همان اصلی را نگه داشتند. از طریق public API نمیتوان فهمید account شما از کدام نوع استفاده میکند - باید با تلاش برای sign کردن یک order و مشاهده rejection آن را بررسی کنید.
migration همچنین نحوه نمایش funder address در UI را تغییر داد. flowهای قدیمی UI پولیمارکت آدرس proxy را در dashboard نشان میدادند؛ flow فعلی آن را در account settings پنهان میکند. دستور polymarket wallet show تمیزترین راه برای تأیید هر دو مقدار است، بدون توجه به اینکه account چه زمانی ساخته شده باشد.
Approve کردن USDC/pUSD spending
برای اینکه CLOB هنگام match شدن order، pUSD شما را جابهجا کند، proxy باید contractهای exchange پولیمارکت را بهعنوان spender approve کرده باشد. UI پولیمارکت این approvals را هنگام اولین deposit تنظیم میکند. برای botهایی که proxy را مستقیماً fund میکنند، باید آنها را بهصورت دستی تنظیم کنید.
سه approval که باید یکبار برای هر wallet تنظیم شوند:
- pUSD (ERC-20) → exchange contract
- Conditional Tokens (ERC-1155) → exchange contract (برای فروش shareها)
- Conditional Tokens (ERC-1155) → NegRisk exchange contract (برای فروش NegRisk shareها)
در اولین setup، polymarket approve را از CLI اجرا کنید. transaction فقط چند سنت در gas شبکه MATIC هزینه دارد. با polymarket approve check بررسی کنید - هر سه باید "approved" برگردانند. رایجترین bug بیصدای جدیدها، نبودن approval مربوط به NegRisk است که فقط هنگام فروش shareها از marketهای چندنتیجهای fail میشود و شبیه خطای balance به نظر میرسد.
Wallet recovery و backup
wallet bot دو جزء قابلبازیابی دارد: private key مربوط به EOA، و password حساب Polymarket (که دسترسی از طریق web UI را کنترل میکند اما از طریق SDK نه).
private key مربوط به EOA تنها چیزی است که برای bot اهمیت دارد. از دست رفتن آن = از دست رفتن همه چیز داخل proxy. backup سرد: آن را روی کاغذ بنویسید، در پاکت مهر و موم کنید، و خارج از محل نگه دارید. backup گرم: USB stick رمزنگاریشده. هرگز آن را برای خودتان ایمیل نکنید؛ هرگز بهصورت unencrypted در cloud storage ذخیره نکنید.
password حساب Polymarket از طریق email recovery مربوط به Magic Labs / Privy قابل بازیابی است، تا زمانی که هنوز کنترل email اصلی ثبتنام را داشته باشید. این password دسترسی bot را کنترل نمیکند - bot مستقیماً از private key مربوط به EOA استفاده میکند.
اگر به leak شدن key شک دارید: فوراً pUSD و outcome tokenها را به یک wallet جدید withdraw کنید، یک EOA جدید تولید کنید، و bot را با key جدید redeploy کنید. key لو رفته را نمیتوان revoke کرد؛ فقط میتوان آن را خالی کرد.










