Polymarket Bot Tutorial · الفصل 6 من 32
مصادقة Polymarket bot وإعداد المحفظة: proxy wallets مقابل EOA، توليد API key عبر SDK، sigType 2 لـ Gnosis Safe، أفضل ممارسات تخزين المفاتيح، والهجرة من Magic إلى Privy.
ما الذي يغطيه هذا الفصل
يعتمد نموذج المحفظة في Polymarket على ثلاثة أجزاء متحركة: حساب مملوك خارجيًا (EOA) يوقّع الأوامر، وproxy ذكي تحتفظ فيه الأموال، وPolymarket CLOB API key التي تصادق طلبات HTTP. إن توصيل هذه الأجزاء الثلاثة بشكل صحيح هو أكثر سبب شائع لفشل اليوم الأول لدى المطورين الجدد، وأصبح الأمر أكثر تعقيدًا بعد هجرة Magic Labs إلى Privy في أغسطس 2025. يشرح هذا الفصل كل جزء وفق ترتيب الإعداد، مع متغيرات البيئة المحددة وعلم نوع التوقيع الذي يحتاجه كود الإنتاج.
- proxy wallet مقابل EOA: أيهما تستخدم للـ bot
- توليد API key (خطوات SDK)
- sigType 2 و POLY_FUNDER_ADDRESS (Gnosis Safe)
- تخزين المفاتيح: .env، vault، KMS
- الهجرة من Magic Labs إلى Privy
- الموافقة على إنفاق USDC/pUSD
- استعادة المحفظة والنسخ الاحتياطي
proxy wallet مقابل EOA: أيهما تستخدم للـ bot
تستخدم Polymarket نمط proxy wallet قائمًا على smart-contract. إن EOA الخاص بك - العنوان المرتبط بـ private key - يوقّع المعاملات والأوامر. أما Gnosis Safe المنشور عند عنوان حتمي فيحتفظ فعليًا بـ pUSD وحصص النتائج. عنوان الـ proxy هو ما يظهر في لوحة "wallet" داخل واجهة Polymarket؛ بينما EOA هو الذي يوقّع.
بالنسبة إلى bots، أنت دائمًا توقّع باستخدام EOA (PRIVATE_KEY في env) وتُشير إلى عنوان الـ proxy على أنه POLY_FUNDER_ADDRESS في إعدادات عميل CLOB. إرسال الأوامر مع استخدام EOA بوصفه المموّل يؤدي إلى أخطاء "insufficient balance" حتى عندما يكون الـ proxy ممولًا.
لا يمكنك تشغيل bot باستخدام EOA وحده - تدفق الويب في Polymarket ينشئ دائمًا proxy عند التسجيل. تأكد من العنوانين معًا باستخدام polymarket wallet show من CLI، أو اقرأ عنوان الـ proxy من إعدادات واجهة Polymarket.
توليد API key (خطوات SDK)
يتطلب CLOB API ثلاثة بيانات اعتماد: key وsecret وpassphrase. هذه ليست private key لمحفظتك - بل هي مجموعة بيانات اعتماد بنمط HMAC مرتبطة بمحفظتك، وتُستخدم فقط لمصادقة طلبات 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 ثم حمّلها عند كل تشغيل للـ bot؛ لا تعِد التوليد في كل جلسة - خادم API يخزّن مجموعة البيانات الاعتمادية، وتكرار التدوير قد يفعّل منطق rate-limit. لا تنتهي صلاحية هذه البيانات تلقائيًا. أعد تدويرها فقط إذا اشتبهت في حدوث تسريب.
sigType 2 و POLY_FUNDER_ADDRESS (Gnosis Safe)
تحدد الوسيطة signature_type كيفية تحقق CLOB من توقيعات الأوامر. توجد ثلاث قيم؛ اثنتان منها فعليتان:
- 0 / EOA: يكون EOA هو الموقّع والمموّل معًا. يُستخدم في الإعدادات غير المعتادة حيث يستورد المستخدمون private key مباشرة.
- 1 / POLY_PROXY: عقد proxy القديم الخاص بـ Magic Labs. معظم الحسابات التي أُنشئت قبل 2025.
- 2 / POLY_GNOSIS_SAFE: المعيار الحالي. الأموال داخل Gnosis Safe، وEOA يوقّع.
استخدم signature_type=2 لأي حساب أُنشئ بعد أغسطس 2025 (هجرة Privy) أو لأي حساب ترى فيه عنوان Gnosis Safe في واجهة Polymarket. يجب أن يكون متغير البيئة POLY_FUNDER_ADDRESS هو عنوان الـ Safe، وليس EOA. عدم تطابق signature_type مع نوع المموّل يؤدي بصمت إلى رفض الأوامر بما يبدو كـ "insufficient allowance" أو "balance: 0" - ورسالة الخطأ مضللة.
تخزين المفاتيح: .env، vault، KMS
ثلاثة مستويات معقولة لتخزين private key الخاص بـ EOA.
- ملف .env (تطوير على جهاز واحد). يوجد الملف على VPS، ويقرأه الـ bot عند التشغيل، ولا يغادر المفتاح المضيف أبدًا. مناسب للمحافظ التي تقل قيمتها عن <$1k. استخدم
chmod 600 .envوتأكد من أن.gitignoreفي المستودع يستثنيه. - vault مُستضاف ذاتيًا (HashiCorp Vault، أو ملف مشفّر بـ age، أو systemd-creds). يضيف خطوة إلغاء قفل عند تشغيل الـ bot. يستحق ذلك للمحافظ في نطاق $1k-$10k.
- Cloud KMS (AWS KMS، GCP KMS). يستدعي الـ bot خدمة KMS لفك تشفير المفتاح في الذاكرة؛ ولا يلمس المفتاح القرص أبدًا. لا تستحق هذه التعقيدات التشغيلية إلا فوق $10k أو لأساطيل متعددة من bots.
ما يجب ألا تفعله أبدًا: لا تودع private key في git، ولا تلصقه في محادثة، ولا تخزّنه في password manager يزامن إلى خدمات سحابية دون وضع local-only. إن نطاق الضرر على السلسلة الناتج عن تسريب EOA في Polymarket هو كامل رصيد pUSD ومخزون حصص النتائج لديك.
الهجرة من Magic Labs إلى Privy
في أغسطس 2025 هاجرت Polymarket من مزود embedded-wallet الأساسي من Magic Labs إلى Privy. التأثير على الـ bot صغير لكنه محدد.
الحسابات السابقة للهجرة (التي أُنشئت عبر Magic) تستخدم عادةً signature_type=1 (POLY_PROXY). الحسابات اللاحقة للهجرة تستخدم signature_type=2 (POLY_GNOSIS_SAFE). بعض المستخدمين هاجروا حساباتهم القديمة؛ وبعضهم أبقى على الأصل. لا توجد طريقة لمعرفة النوع الذي يستخدمه حسابك من خلال الـ public API - عليك التحقق بمحاولة توقيع أمر وملاحظة الرفض.
كما غيّرت الهجرة طريقة عرض عنوان المموّل في الواجهة. كانت تدفقات Polymarket الأقدم تعرض عنوان الـ proxy في لوحة التحكم؛ أما التدفق الحالي فيخبئه داخل إعدادات الحساب. يعد أمر CLI polymarket wallet show الطريقة الأنظف لتأكيد القيمتين معًا، بغض النظر عن وقت إنشاء الحساب.
الموافقة على إنفاق USDC/pUSD
لكي يتمكن CLOB من نقل pUSD عند تطابق الأمر، يجب أن يكون الـ proxy قد فوّض عقود تبادل Polymarket باعتبارها spenders. تضبط واجهة Polymarket هذه الموافقات أثناء الإيداع الأول. أما بالنسبة إلى bots التي تموّل الـ proxy مباشرة، فيجب ضبطها يدويًا.
ثلاث موافقات يجب ضبطها، مرة واحدة لكل محفظة:
- pUSD (ERC-20) → عقد التبادل
- Conditional Tokens (ERC-1155) → عقد التبادل (لبيع الحصص)
- Conditional Tokens (ERC-1155) → عقد تبادل NegRisk (لبيع حصص NegRisk)
شغّل polymarket approve من CLI عند الإعداد الأول. تكلف المعاملة بضعة سنتات من MATIC gas. تحقّق باستخدام polymarket approve check - يجب أن تعرض الثلاثة جميعًا "approved." أكثر خطأ صامت شائع لدى المطورين الجدد هو نسيان موافقة NegRisk، والذي يفشل فقط عند بيع الحصص من أسواق متعددة النتائج ويبدو كأنه خطأ في الرصيد.
استعادة المحفظة والنسخ الاحتياطي
تتكون محفظة الـ bot من عنصرين قابلين للاستعادة: private key الخاص بـ EOA، وكلمة مرور حساب Polymarket (التي تقيّد الوصول عبر الويب UI ولكن ليس عبر SDK).
private key الخاص بـ EOA هو الشيء الوحيد المهم بالنسبة إلى الـ bot. فقدانه = فقدان كل ما في الـ proxy. النسخ الاحتياطي البارد: اكتبه على ورق، وأغلقه في ظرف، وخزّنه خارج الموقع. النسخ الاحتياطي الساخن: USB مشفّر. لا ترسله إلى نفسك بالبريد الإلكتروني أبدًا؛ ولا تخزّنه غير مشفّر في التخزين السحابي.
يمكن استعادة كلمة مرور حساب Polymarket عبر استعادة البريد الإلكتروني في Magic Labs / Privy ما دمت لا تزال تتحكم في البريد الأصلي للتسجيل. لكنها لا تقيّد وصول الـ bot - فالـ bot يستخدم private key الخاص بـ EOA مباشرة.
إذا اشتبهت في تسريب مفتاح: فورًا اسحب pUSD ورموز النتائج إلى محفظة جديدة، وولّد EOA جديدًا، وأعد نشر الـ bot بالمفتاح الجديد. لا يمكن إلغاء المفتاح المسرّب؛ يمكن فقط تفريغه من الرصيد.










