Polymarket Bot Tutorial · Chapter 6 of 32

Polymarket bot authentication and wallet setup: proxy wallets vs EOA, API key generation via SDK, sigType 2 for Gnosis Safe, key storage best practices, and the Magic-to-Privy migration.

এই chapter-এ কী কী covered আছে

Polymarket-এর wallet model-এ তিনটি moving part আছে: একটি externally owned account (EOA) যা orders sign করে, একটি smart-contract proxy যা funds hold করে, এবং Polymarket CLOB API key যা HTTP requests authenticate করে। এই তিনটি ঠিকভাবে wire করা নতুন builders-এর জন্য Day 1-এ সবচেয়ে common failure, এবং August 2025-এর Magic Labs থেকে Privy migration-এর পর এটা আরও confusing হয়ে গেছে। এই chapter-এ setup order অনুযায়ী প্রতিটি piece walk through করা হয়েছে, production code-এর জন্য প্রয়োজনীয় specific environment variables এবং signature-type flag সহ।

  • Proxy wallet vs EOA: কোনটা দিয়ে bot করা উচিত
  • API key generate করা (SDK steps)
  • sigType 2 এবং POLY_FUNDER_ADDRESS (Gnosis Safe)
  • Key storage: .env, vault, KMS
  • Magic Labs থেকে Privy migration
  • USDC/pUSD spending approve করা
  • Wallet recovery এবং backup

Proxy wallet vs EOA: কোনটা দিয়ে bot করা উচিত

Polymarket একটি smart-contract proxy wallet pattern ব্যবহার করে। আপনার EOA - অর্থাৎ private key-এর সাথে যুক্ত address - transactions এবং orders sign করে। একটি নির্দিষ্ট deterministic address-এ deploy করা Gnosis Safe actual pUSD এবং outcome shares hold করে। proxy address-ই Polymarket UI-এর "wallet" panel-এ দেখা যায়; EOA-ই signature দেয়।

Bot-এর জন্য, আপনি সবসময় EOA (PRIVATE_KEY env-এ) দিয়ে sign করবেন এবং CLOB client config-এ proxy address-কে POLY_FUNDER_ADDRESS হিসেবে reference করবেন। funder হিসেবে EOA দিয়ে orders পাঠালে proxy funded থাকলেও "insufficient balance" error হয়।

শুধু EOA দিয়ে bot করা যায় না - Polymarket-এর web flow signup-এর সময় সবসময় একটি proxy create করে। CLI থেকে polymarket wallet show দিয়ে উভয় address confirm করুন, অথবা Polymarket UI-এর settings থেকে proxy address পড়ে নিন।

API key generate করা (SDK steps)

CLOB API-এর জন্য তিনটি credential লাগে: key, secret, passphrase। এগুলো আপনার wallet private key নয় - এগুলো আপনার wallet-এর সাথে bound থাকা একটি HMAC-style credential set, যা শুধু HTTP request authentication-এর জন্য ব্যবহৃত হয়।

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-এ regenerate করবেন না - API server credential set cache করে রাখে, এবং বারবার rotate করলে rate-limit logic trigger হতে পারে। Credential কখনও auto-expire হয় না। শুধু leak-এর সন্দেহ হলে rotate করুন।

sigType 2 এবং POLY_FUNDER_ADDRESS (Gnosis Safe)

signature_type argument CLOB কীভাবে আপনার order signature validate করবে তা control করে। তিনটি value আছে; এর মধ্যে দুটি বাস্তব:

  • 0 / EOA: EOA-ই signer এবং funder, এমন unusual setup-এর জন্য যেখানে user সরাসরি private key import করেছে।
  • 1 / POLY_PROXY: legacy Magic Labs proxy contract। বেশিরভাগ pre-2025 account।
  • 2 / POLY_GNOSIS_SAFE: current standard। Funds Gnosis Safe-এ থাকে, EOA sign করে।

August 2025-এর পরে তৈরি হওয়া যেকোনো account-এর জন্য (Privy migration) অথবা Polymarket UI-তে Gnosis Safe address দেখা গেলে signature_type=2 ব্যবহার করুন। POLY_FUNDER_ADDRESS env var অবশ্যই Safe address হবে, EOA নয়। funder type-এর সাথে mismatched signature_type নীরবে order rejection তৈরি করে, যা "insufficient allowance" বা "balance: 0" এর মতো দেখায় - error messageটি বিভ্রান্তিকর।

Key storage: .env, vault, KMS

EOA private key সংরক্ষণের তিনটি reasonable storage tier।

  1. .env file (single-machine development). File VPS-এ থাকে, bot start হওয়ার সময় read করে, key host-এর বাইরে যায় না। <$1k wallet-এর জন্য যথেষ্ট। chmod 600 .env দিন এবং নিশ্চিত করুন আপনার repo-এর .gitignore এটি exclude করে।
  2. Self-hosted vault (HashiCorp Vault, age-encrypted file, বা systemd-creds)। Bot start-এর সময় unlock step যোগ হয়। $1k-$10k range-এর wallet-এর জন্য worth it।
  3. Cloud KMS (AWS KMS, GCP KMS)। Bot memory-তে key decrypt করার জন্য KMS call করে; key কখনও disk-এ touch করে না। Operational complexity শুধু $10k-এর উপরে বা multi-bot fleet-এর জন্য worth it।

যা কখনও করবেন না: private key git-এ commit করা, chat-এ paste করা, local-only mode ছাড়া cloud services-এ sync হয় এমন password manager-এ store করা। Polymarket EOA leak-এর on-chain blast radius হলো আপনার পুরো pUSD balance এবং outcome share inventory।

Magic Labs থেকে Privy migration

August 2025-এ Polymarket তাদের primary embedded-wallet provider Magic Labs থেকে Privy-তে migrate করে। Bot-এর দৃষ্টিকোণ থেকে এর effect ছোট, তবে নির্দিষ্ট।

Pre-migration account (Magic দিয়ে created) সাধারণত signature_type=1 (POLY_PROXY) ব্যবহার করে। Post-migration account signature_type=2 (POLY_GNOSIS_SAFE) ব্যবহার করে। কিছু user তাদের পুরোনো account migrate করেছে; কিছু original account রেখে দিয়েছে। Public API থেকে আপনার account কোন type ব্যবহার করছে তা বোঝার উপায় নেই - order sign করার চেষ্টা করে rejection দেখে check করতে হয়।

Migration UI-তে funder address প্রকাশ করার ধরনও বদলেছে। Older Polymarket UI flow dashboard-এ proxy address দেখাত; current flow account settings-এ তা লুকিয়ে রাখে। account কখন তৈরি হয়েছে তা নির্বিশেষে, polymarket wallet show CLI command-ই উভয় value confirm করার সবচেয়ে পরিষ্কার উপায়।

USDC/pUSD spending approve করা

CLOB-কে order match-এর সময় আপনার pUSD move করতে হলে, proxy-কে অবশ্যই Polymarket exchange contracts-কে spender হিসেবে approve করতে হবে। Polymarket UI প্রথম deposit-এর সময় এই approvals সেট করে। Bot যদি proxy directly fund করে, আপনাকে manually সেট করতে হবে।

Per wallet একবার করে তিনটি approval সেট করতে হবে:

  1. pUSD (ERC-20) → exchange contract
  2. Conditional Tokens (ERC-1155) → exchange contract (shares sell করার জন্য)
  3. Conditional Tokens (ERC-1155) → NegRisk exchange contract (NegRisk shares sell করার জন্য)

First setup-এর সময় CLI থেকে polymarket approve run করুন। Transaction-এর gas cost কয়েক সেন্ট MATIC-এ। polymarket approve check দিয়ে verify করুন - তিনটিই "approved" ফেরত দেওয়া উচিত। নতুন builders-এর সবচেয়ে common silent bug হলো NegRisk approval missing থাকা, যা শুধু multi-outcome market থেকে shares sell করার সময় fail করে এবং balance error-এর মতো দেখায়।

Wallet recovery এবং backup

Bot-এর wallet-এ দুটি recoverable element আছে: EOA private key, এবং Polymarket account password (যা web UI দিয়ে access gate করে, SDK দিয়ে নয়)।

Bot-এর জন্য EOA private key-ই একমাত্র গুরুত্বপূর্ণ বিষয়। এটি হারালে proxy-তে থাকা সবকিছু হারিয়ে যাবে। Cold backup: কাগজে লিখে envelope-এ seal করুন, অন্য স্থানে store করুন। Hot backup: encrypted USB stick। নিজেকে email করবেন না; cloud storage-এ unencrypted store করবেন না।

Polymarket account password এখনও Magic Labs / Privy email recovery-এর মাধ্যমে recover করা যায়, যতক্ষণ আপনি original signup email control করেন। এটি bot access gate করে না - bot সরাসরি EOA private key ব্যবহার করে।

Key leak সন্দেহ হলে: অবিলম্বে pUSD এবং outcome tokens নতুন wallet-এ withdraw করুন, নতুন EOA generate করুন, নতুন key দিয়ে bot redeploy করুন। Leaked key revoke করা যায় না; শুধু drain করা যায়।

প্রায়শই জিজ্ঞাসিত প্রশ্ন

আমার bot-এর জন্য কি আলাদা wallet দরকার?
জোরালোভাবে হ্যাঁ, recommend করা হয়। একটি fresh EOA বা fresh email-account-derived proxy wallet ব্যবহার করুন, যেখানে শুধু bot-এর জন্য allocated capital থাকবে। Bot key leak হলে শুধু bot funds risk-এ থাকবে - আপনার main holdings নিরাপদ থাকবে।
Polymarkets API-তে sigType 2 কী?
sigType 2 একটি Gnosis Safe (proxy wallet) signature বোঝায়, যা email/Google দিয়ে log in করলে এবং Polymarket আপনার জন্য proxy তৈরি করলে ব্যবহার হয়। sigType 2-এর ক্ষেত্রে POLY_FUNDER_ADDRESS environment variable অবশ্যই PROXY address হতে হবে (Polymarket UI-তে দেখানো address), underlying EOA নয়। এটি একটি common configuration bug।
Polymarket API key কীভাবে generate করব?
SDK ব্যবহার করুন। Python-এ: client.create_api_key() দিয়ে authenticated হওয়ার পর ApiCreds ফেরত আসে। Node.js-এ: @polymarket/clob-client-v2 client.createApiKey() এর মাধ্যমে similar। ফেরত পাওয়া key/secret/passphrase আপনার .env-তে save করুন (কখনও git-এ commit করবেন না)।
Polymarket API key revoke করা যায়?
হ্যাঁ। SDK-এর মাধ্যমে যেকোনো সময় নতুন key derive করতে পারেন; পুরোনো key explicitly client.deleteApiKey(creds) দিয়ে revoke না করা পর্যন্ত valid থাকে। Best practice হলো periodically key rotate করা এবং compromised machine-touch করা যেকোনো key revoke করা।
Polymarket Magic Labs থেকে Privy-তে migrate করার সময় কী বদলেছে?
Login OTP code 3 digit থেকে দীর্ঘ code-এ গেছে, সঙ্গে Privy-এর মাধ্যমে device binding যোগ হয়েছে। Bot-এর জন্য practical change হলো auth ceremony - SDK এর বেশিরভাগ abstract করে দেয়। যদি আপনার bot hard-coded Magic Labs API endpoint-এর উপর নির্ভর করত (দুর্লভ), তাহলে Privy flow-এ update করুন।
আমি কি key .env file-এ store করব?
Single-VPS bot-এর জন্য - হ্যাঁ, যথাযথ file permission সহ (chmod 600 .env, bot user-এর owned)। Multi-machine setup বা production-grade ops-এর জন্য - secrets manager-এ যান (AWS Secrets Manager, Vault, doppler.com)। .env কখনও git-এ commit করবেন না, কখনও না।