Polymarket Bot Tutorial · अध्याय 6 of 32

Polymarket bot authentication और wallet setup: proxy wallets vs EOA, SDK के जरिए API key generation, Gnosis Safe के लिए sigType 2, key storage best practices, और Magic-to-Privy migration.

यह अध्याय क्या कवर करता है

Polymarket का wallet model तीन हिस्सों में बँटा है: एक externally owned account (EOA) जो orders sign करता है, एक smart-contract proxy जो funds रखता है, और Polymarket CLOB API key जो HTTP requests को authenticate करती है. इन तीनों को सही तरीके से wire करना नए builders के लिए सबसे आम Day 1 failure है, और August 2025 की Magic Labs to Privy migration के बाद यह और भी confusing हो गया. यह chapter setup order में हर piece को walk through करता है, उन specific environment variables और signature-type flag के साथ जिनकी production code को ज़रूरत होती है.

  • Proxy wallet vs EOA: किसके साथ bot करें
  • API key generate करना (SDK steps)
  • sigType 2 और POLY_FUNDER_ADDRESS (Gnosis Safe)
  • Key storage: .env, vault, KMS
  • Magic Labs to Privy migration
  • USDC/pUSD spending approve करना
  • Wallet recovery और backup

Proxy wallet vs EOA: किसके साथ bot करें

Polymarket एक smart-contract proxy wallet pattern use करता है। आपका EOA - यानी वह address जो आपकी private key से जुड़ा है - transactions और orders sign करता है। एक Gnosis Safe, जो deterministic address पर deploy होता है, actual pUSD और outcome shares hold करता है। Proxy address वही है जो Polymarket UI के "wallet" panel में दिखता है; EOA वही है जो sign करता है।

Bots के लिए, आप हमेशा EOA (PRIVATE_KEY in env) से sign करते हैं और CLOB client config में proxy address को POLY_FUNDER_ADDRESS के रूप में reference करते हैं। EOA को funder बनाकर orders भेजने पर "insufficient balance" errors आते हैं, भले ही proxy funded हो।

आप केवल EOA के साथ bot नहीं चला सकते - Polymarket का web flow signup के समय हमेशा एक proxy create करता है। दोनों addresses की पुष्टि CLI से polymarket wallet show चलाकर करें, या Polymarket UI की settings से proxy address पढ़ें।

API key generate करना (SDK steps)

CLOB API को तीन credentials चाहिए: key, secret, passphrase. ये आपकी wallet private key नहीं हैं - ये आपकी wallet से bound HMAC-style credential set है, जिसे केवल HTTP request authentication के लिए use किया जाता है।

SDK के साथ इन्हें एक बार generate करें:

# 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)

Output को एक JSON file में store करें और हर bot start पर load करें; हर session में दोबारा generate न करें - API server credential set cache करता है, और बार-बार rotate करने से rate-limit logic trigger हो सकता है। ये credentials अपने आप expire नहीं होते। इन्हें केवल तब rotate करें जब आपको leak का संदेह हो।

sigType 2 और POLY_FUNDER_ADDRESS (Gnosis Safe)

signature_type argument यह control करता है कि CLOB आपके order signatures को कैसे validate करता है। तीन values मौजूद हैं; दो वास्तविक हैं:

  • 0 / EOA: EOA signer भी है और funder भी। उन unusual setups में इस्तेमाल होता है जहाँ users ने private key सीधे import की हो।
  • 1 / POLY_PROXY: legacy Magic Labs proxy contract. ज़्यादातर pre-2025 accounts।
  • 2 / POLY_GNOSIS_SAFE: current standard. Funds Gnosis Safe में होते हैं, EOA sign करता है।

August 2025 (Privy migration) के बाद बने किसी भी account, या ऐसे account के लिए जहाँ आपको Polymarket UI में Gnosis Safe address दिखे, signature_type=2 use करें। POLY_FUNDER_ADDRESS env var Safe address होना चाहिए, EOA नहीं। Fundertype के साथ mismatched signature_type silently order rejections देता है जो "insufficient allowance" या "balance: 0" जैसे लगते हैं - error message misleading है।

Key storage: .env, vault, KMS

EOA private key storage के तीन reasonable tiers.

  1. .env file (single-machine development). File VPS पर रहती है, bot start होने पर इसे read करता है, key host से कभी बाहर नहीं जाती। <$1k wallets के लिए पर्याप्त। chmod 600 .env करें और सुनिश्चित करें कि आपके repo की .gitignore इसे exclude करती है।
  2. Self-hosted vault (HashiCorp Vault, age-encrypted file, या systemd-creds). Bot start पर unlock step जोड़ता है। $1k-$10k range के wallets के लिए worthwhile है।
  3. Cloud KMS (AWS KMS, GCP KMS). Bot key को memory में decrypt करने के लिए KMS call करता है; key कभी disk को नहीं छूती। Operational complexity केवल $10k से ऊपर या multi-bot fleets के लिए उचित है।

क्या कभी नहीं करना चाहिए: private key को git में commit करना, इसे chat में paste करना, या इसे ऐसे password manager में store करना जो local-only mode के बिना cloud services से sync करता हो। Polymarket EOA leak का on-chain blast radius आपकी पूरी pUSD balance और outcome share inventory है।

Magic Labs to Privy migration

August 2025 में Polymarket ने अपने primary embedded-wallet provider को Magic Labs से Privy में migrate किया। Bot-facing प्रभाव छोटा है लेकिन specific है।

Pre-migration accounts (Magic के जरिए created) आम तौर पर signature_type=1 (POLY_PROXY) use करते हैं। Post-migration accounts signature_type=2 (POLY_GNOSIS_SAFE) use करते हैं। कुछ users ने अपना पुराना account migrate किया; कुछ ने original को ही रखा। Public API से यह जानने का कोई तरीका नहीं है कि आपका account कौन-सा type use करता है - आप order sign करने की कोशिश करके और rejection देखकर check करते हैं।

Migration ने UI में funder address दिखाने का तरीका भी बदल दिया। पुराने Polymarket UI flows dashboard में proxy address दिखाते थे; current flow इसे account settings में छिपा देता है। CLI command polymarket wallet show दोनों values confirm करने का सबसे साफ तरीका है, चाहे account कब भी create हुआ हो।

USDC/pUSD spending approve करना

CLOB को order match पर आपका pUSD move करने के लिए, proxy ने Polymarket exchange contracts को spenders के रूप में approve किया होना चाहिए। Polymarket UI पहली deposit के दौरान ये approvals set करता है। Bots के लिए जो proxy को सीधे fund करते हैं, आपको इन्हें manually set करना होगा।

हर wallet के लिए एक बार set की जाने वाली तीन approvals:

  1. pUSD (ERC-20) → exchange contract
  2. Conditional Tokens (ERC-1155) → exchange contract (shares बेचने के लिए)
  3. Conditional Tokens (ERC-1155) → NegRisk exchange contract (NegRisk shares बेचने के लिए)

First setup पर CLI से polymarket approve चलाएँ। Transaction की लागत कुछ cents of MATIC gas होती है। polymarket approve check से verify करें - तीनों का "approved" return करना चाहिए। New builders के लिए सबसे common silent bug missing NegRisk approval है, जो केवल multi-outcome markets से shares बेचते समय fail होता है और balance error जैसा दिखता है।

Wallet recovery और backup

Bot wallet के दो recoverable elements हैं: EOA private key, और Polymarket account password (जो web UI के जरिए access gate करता है, लेकिन SDK के जरिए नहीं)।

Bot के लिए EOA private key ही सबसे महत्वपूर्ण चीज़ है। Loss = proxy में मौजूद सब कुछ खोना। Cold backup: इसे कागज़ पर लिखें, envelope में seal करें, और offsite store करें। Hot backup: encrypted USB stick। इसे कभी email न करें; कभी भी unencrypted cloud storage में न रखें।

Polymarket account password Magic Labs / Privy email recovery के जरिए recover किया जा सकता है, बशर्ते आप अभी भी original signup email control करते हों। यह bot access gate नहीं करता - bot सीधे EOA private key use करता है।

अगर आपको key leak का शक है: तुरंत pUSD और outcome tokens को नए wallet में withdraw करें, नया EOA generate करें, और नए key के साथ bot redeploy करें। Leaked key revoke नहीं की जा सकती; उसे केवल drain किया जा सकता है।

अक्सर पूछे जाने वाले प्रश्न

क्या मेरे bot के लिए अलग wallet चाहिए?
ज़ोरदार सुझाव: हाँ। एक नया EOA या email-account-derived proxy wallet use करें जिसमें केवल वही capital हो जो आपने bot के लिए allocate किया है। अगर bot key leak हो जाए, तो सिर्फ bot funds risk में होंगे - आपकी main holdings सुरक्षित रहेंगी।
Polymarkets API में sigType 2 क्या है?
sigType 2 एक Gnosis Safe (proxy wallet) signature को indicate करता है, जिसका उपयोग तब होता है जब आप email/Google से log in करते हैं और Polymarket आपके लिए proxy create करता है। sigType 2 के लिए, POLY_FUNDER_ADDRESS environment variable PROXY address होना चाहिए (वही जो Polymarket UI में दिखता है), underlying EOA नहीं। यह एक common configuration bug है।
Polymarket API key कैसे generate करूँ?
SDK use करें। Python में: wallet से authenticate करने के बाद client.create_api_key() द्वारा returned ApiCreds. Node.js में: @polymarket/clob-client-v2 client.createApiKey() के जरिए similar. Returned key/secret/passphrase को अपनी .env में save करें (कभी भी git में commit न करें)।
क्या Polymarket API keys revoke की जा सकती हैं?
हाँ। आप SDK के जरिए किसी भी समय नए keys derive कर सकते हैं; पुराने keys तब तक valid रहते हैं जब तक उन्हें client.deleteApiKey(creds) के जरिए explicitly revoke न किया जाए। Best practice है कि keys को periodically rotate करें और जिस भी key ने compromised machine को touch किया हो उसे revoke कर दें।
जब Polymarket ने Magic Labs से Privy में migrate किया, तो क्या बदला?
Login OTP codes 3 digits से लंबे codes में बदल गए (brute force के लिए कमजोर, और December 2025 hack में exploited), plus Privy के जरिए device binding जुड़ी। Bots के लिए practical change auth ceremony है - SDK अधिकांश भाग abstract कर देता है। अगर आपका bot Magic Labs API endpoints पर hard-coded था (जो rare है), तो Privy flow पर update करें।
क्या मुझे keys .env file में store करनी चाहिए?
Single-VPS bot के लिए - हाँ, proper file permissions के साथ (chmod 600 .env, bot user owned)। Multi-machine setups या production-grade ops के लिए - secrets manager पर जाएँ (AWS Secrets Manager, Vault, doppler.com)। .env को कभी भी git में commit न करें, बिल्कुल नहीं।