অধ্যায় 36 of 36
সংক্ষিপ্ত সংস্করণ
28 এপ্রিল, 2026 তারিখে, Polymarket Polygon-এ তাদের settlement জামানত (collateral) USDC.e (ব্রিজ করা USDC টোকেন, contract 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174) থেকে pUSD-তে স্থানান্তর করে, যা Polymarket-ইস্যুকৃত একটি স্টেবলকয়েন (stablecoin), native USDC-এর বিপরীতে 1:1 অনুপাতে redeemable। Web-app ট্রেডারদের কিছুই করতে হয়নি - snapshot block-এ balances এবং positions স্বয়ংক্রিয়ভাবে convert হয়েছে। API এবং bot operator-দের আপডেট করতে হবে: প্রতিটি CLOB order signature-এর ভেতরে থাকা collateral asset address বদলে গেছে, USDC.e-এর বিরুদ্ধে signed পুরনো order বাতিল হয়ে গেছে, এবং py-clob-client 0.40 বা তার নতুন সংস্করণ প্রয়োজন। এই গাইডে bot-কে cutover-এর সময় এবং পরে চালু রাখতে প্রয়োজনীয় exact code, contract, এবং approval পরিবর্তনগুলো দেখানো হয়েছে।
অংশ ১: তিনটি স্টেবলকয়েন, একটি Polygon
মাইগ্রেশনের আগে, Polygon-এ Polymarket-এর পরিমণ্ডলে তিনটি USD স্টেবলকয়েন ছিল। পার্থক্যটি জানা হলো Polymarket কেন ভেন্যু বদলেছে তা বোঝার প্রথম ধাপ।
| টোকেন | ইস্যুকারী | Polygon-এ কনট্র্যাক্ট | রিজার্ভের ধরন |
|---|---|---|---|
| USDC.e | Polygon PoS bridge | 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174 | Ethereum mainnet থেকে ব্রিজ করা |
| USDC (native) | Circle | 0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359 | Native, সরাসরি Polygon-এ ইস্যু করা |
| pUSD | Polymarket Treasury | See docs.polymarket.com/pusd | native USDC দ্বারা 1:1 সমর্থিত, মাসিক attestation |
Polymarket শুরুতে USDC.e বেছে নিয়েছিল, কারণ 2020 সালে লঞ্চের সময় Polygon-এ সেটিই ছিল প্রধান USDC ভ্যারিয়েন্ট। পরে Circle native USDC সরাসরি Polygon-এ ইস্যু করে এবং ব্রিজ করা ভ্যারিয়েন্টের ভবিষ্যতে ধীরে ধীরে বন্ধ হয়ে যাওয়ার ইঙ্গিত দেয়। প্রতিটি মার্কেট USDC.e-তে সেটল করা চালিয়ে গেলে Polymarket হঠাৎ ব্রিজ বন্ধ হয়ে যাওয়ার দীর্ঘমেয়াদি ঝুঁকির মুখে পড়ত। Polymarket-নিয়ন্ত্রিত স্টেবলকয়েনে মাইগ্রেট করলে সেই ঝুঁকি দূর হয় এবং ভবিষ্যতের প্রোডাক্ট ফিচারগুলোও উন্মুক্ত হয় (যেমন, perps margin, vault deposits, cross-chain receipts), যেগুলো একই অ্যাকাউন্টিং ইউনিট ভাগ করে নেয়।
অংশ 2: pUSD কী (এবং কী নয়)
pUSD হলো একটি স্ট্যান্ডার্ড Polygon-এ ERC-20 টোকেন (chain id 137), 6 দশমিকসহ, USDC-এর মতোই একই নির্ভুলতা। এটি শুধুমাত্র Polymarket Treasury কনট্র্যাক্ট দ্বারা মিন্ট করা যায় এবং যেকোনো সময় নেটিভ USDC-এর বিপরীতে 1:1 অনুপাতে রিডিম করা যায়, কনভার্সনে কোনো ফি নেই (নেটওয়ার্ক গ্যাস অবশ্যই প্রযোজ্য)। pUSD-কে সমর্থনকারী রিজার্ভ সেগ্রিগেটেড অ্যাকাউন্টে রাখা হয় এবং তৃতীয় পক্ষের অ্যাটেস্টেশনসহ মাসিকভাবে রিপোর্ট করা হয়।
pUSD কোনো অ্যালগরিদমিক স্টেবলকয়েন নয়, ক্রিপ্টো দিয়ে অতিরিক্ত-কল্যাটারালাইজড নয়, এবং এতে কোনো ইয়িল্ড নেই। আপনি যদি Polymarket-এর বাইরে pUSD রাখেন, তাহলে এটিকে নেটিভ USDC-এর জন্য Polymarket-ইস্যু করা একটি IOU হিসেবে ভাবা উচিত - প্ল্যাটফর্মের ভেতরে এটি কাজে লাগে, চাহিদামতো রিডিম করা যায়, কিন্তু বাহ্যিক ওয়ালেটে দীর্ঘমেয়াদে ধরে রাখার কোনো সুবিধা নেই।
docs.polymarket.com/pusd-audit-এ প্রকাশিত হয়। বড় ব্যালেন্স দীর্ঘমেয়াদে ধরে রাখার আগে দুটোই যাচাই করুন।পার্ট 3: ওয়েব-অ্যাপ ট্রেডাররা যা দেখেছিলেন
আপনি যদি শুধুমাত্র polymarket.com-এর মাধ্যমে ট্রেড করেন, তাহলে মাইগ্রেশনটি ছিল অদৃশ্য। 2026 সালের 28 এপ্রিলের স্ন্যাপশট ব্লকে:
- Polymarket proxy wallet-এ থাকা প্রতিটি USDC.e ব্যালান্স 1:1 অনুপাতে তাৎক্ষণিকভাবে pUSD-তে রূপান্তরিত হয়।
- খোলা পজিশনগুলোর একই ডলার মান, একই আউটকাম odds, এবং একই expiry বজায় থাকে। conditional token IDs পরিবর্তন হয়নি।
- USDC.e-তে denominated resting orders স্ন্যাপশটে বাতিল করা হয়। মাইগ্রেশন-পরবর্তী নতুন অর্ডারগুলো স্বয়ংক্রিয়ভাবে pUSD-এর বিরুদ্ধে sign করে।
- বাহ্যিক ওয়ালেটে withdrawal USDC.e পাঠানোর বদলে native USDC পাঠাতে স্যুইচ করে (অথবা, অনুরোধ করলে, raw pUSD - অধিকাংশ ব্যবহারকারীর কখনও এর প্রয়োজন হয় না)।
কোনো signature, transaction, বা settings পরিবর্তনের প্রয়োজন ছিল না। আপনার জন্য গুরুত্বপূর্ণ থাকা resting লিমিট অর্ডার (limit order)-গুলো মাইগ্রেশনের পরে ম্যানুয়ালি আবার place করা উচিত; cancellation ছিল একবারের ঘটনা।
অংশ ৪: API এবং Bot অপারেটর - গুরুত্বপূর্ণ পরিবর্তন
এটিই সেই অংশ, যা আপনি পদক্ষেপ না নিলে একটি bot ভেঙে দেবে।
0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174)। মাইগ্রেশনের পরে, সেটি pUSD। পুরোনো address-এর বিরুদ্ধে সাইন করা কোনো অর্ডার CLOB-এ signature verification ব্যর্থ করবে এবং "invalid মেকার (maker) asset" বা "signature mismatch" error ফেরত দেবে।py-clob-client আপগ্রেড করুন
Polymarket কাটওভারের দুই সপ্তাহ আগে সম্পূর্ণ pUSD সাপোর্টসহ py-clob-client 0.40.0 প্রকাশ করেছে। মাইগ্রেশনের পরের দিন 0.34.x line অবসর নেওয়া হয়েছে।
# pUSD-সচেতন release-এ bump করুন
pip install --upgrade "py-clob-client>=0.40.0"
# wired collateral asset যাচাই করুন
python -c "from py_clob_client.constants import POLYGON; \
print('pUSD address:', POLYGON.get('collateral'))"
নতুন SDK startup-এর সময় chain configuration থেকে collateral address টেনে আনে, তাই আপনাকে কিছু hard-code করতে হবে না। আপনি যদি পুরোনো কোনো version fork করে থাকেন বা pin করে থাকেন, সবচেয়ে নিরাপদ উপায় হলো lockfile মুছে ফেলা, latest constants module দিয়ে reinstall করা, এবং আপনার test suite আবার চালানো।
Allowance পুনরায় approve করুন
আপনার Polymarket proxy wallet-এ আপনার trading account → CTF Exchange contract থেকে pUSD token-এর জন্য একটি ERC-20 allowance লাগবে। USDC.e-এর পুরোনো allowance এখনও on-chain আছে, কিন্তু সম্পূর্ণ অকেজো: CLOB সেটি ব্যবহার করবে না। নতুন pUSD allowance ছাড়া, প্রতিটি অর্ডার "INSUFFICIENT_ALLOWANCE" ফেরত দেয়।
from py_clob_client.client import ClobClient
client = ClobClient(
host="https://clob.polymarket.com",
chain_id=137,
key=os.environ["POLY_PRIVATE_KEY"],
funder=os.environ["POLY_FUNDER"],
signature_type=1, # Magic-link অ্যাকাউন্টের জন্য POLY_PROXY
)
client.set_api_creds(client.create_or_derive_api_creds())
# একবারই: CTF Exchange contract-এর জন্য pUSD approve করুন
# (সহায়ক ফাংশন py-clob-client 0.40-এ যোগ করা হয়েছে)
client.update_balance_allowance(asset_type="COLLATERAL")
API credentials রিফ্রেশ করুন
বিদ্যমান API key কাজ করতে থাকবে, কিন্তু আপনি যদি April 1-এর আগে credentials derive করে থাকেন, সতর্কতাস্বরূপ সেগুলো rotate করা উচিত: L1 ECDSA signature এখন এমন একটি domain-এর সঙ্গে bind হয়, যাতে নতুন collateral address অন্তর্ভুক্ত আছে। সবচেয়ে সহজ পথ:
creds = client.create_or_derive_api_creds() # idempotent re-derive
client.set_api_creds(creds)
# আপনার .env-এ সংরক্ষণ করুন
print(creds.api_key, creds.api_secret, creds.api_passphrase)
অংশ ৫: মাইগ্রেশনের পর আপনার বট যাচাই করা
আসল টাকার ওপর কোনো sizing logic ছেড়ে দেওয়ার আগে এই ন্যূনতম smoke test চালান:
# 1. proxy wallet-এ pUSD balance নিশ্চিত করুন
from py_clob_client.client import ClobClient
client = ClobClient(...) # as above
balance = client.get_balance_allowance(params={"asset_type": "COLLATERAL"})
print("pUSD balance (raw):", balance["balance"])
print("Allowance to exchange:", balance["allowance"])
# 2. touch-এর অনেক বাইরে $1 limit order দিন
from py_clob_client.clob_types import OrderArgs
order = client.create_order(OrderArgs(
token_id=test_token_id,
price=0.05, # বাজারের কাছাকাছি নয়
size=20, # $0.05-এ $1 notional
side="BUY",
))
resp = client.post_order(order)
print(resp)
# 3. Cancel করুন এবং নিশ্চিত করুন
client.cancel(order_id=resp["orderID"])
এই তিনটি call-ই যদি সফল হয়, তাহলে আপনার wiring ঠিক আছে: SDK pUSD-এর বিপরীতে signed করেছে, allowance স্বীকৃত হয়েছে, এবং order ledger সামঞ্জস্যপূর্ণ। ধীরে ধীরে আবার scale up করুন।
অংশ ৬: সাধারণ ত্রুটি ও সমাধান
| ত্রুটি বা উপসর্গ | কারণ | সমাধান |
|---|---|---|
signature verification failed | অর্ডারটি USDC.e EIP-712 ডোমেইনের বিরুদ্ধে সাইন করা হয়েছে | py-clob-client-কে 0.40+ এ আপগ্রেড করুন; constants মডিউল রিলোড করুন |
প্রতিটি অর্ডারে INSUFFICIENT_ALLOWANCE | আপনার proxy থেকে CTF Exchange-এ কোনো pUSD allowance নেই | update_balance_allowance(asset_type="COLLATERAL") একবার চালান |
invalid maker asset | হার্ড-কোড করা USDC.e address এখনও আপনার config-এ আছে | যেকোনো হার্ড-কোড করা collateral address-কে SDK constant দিয়ে প্রতিস্থাপন করুন |
| ওয়ালেটে migration-এর পর USDC.e balance > 0 দেখায় | তৃতীয়-পক্ষের transfer থেকে অবশিষ্ট "dust" token পড়ে আছে | Circle-এর CCTP-তে USDC.e-কে native USDC-তে bridge করুন, অথবা সেটি রেখে দিন |
| WebSocket reconnect করলে empty book তৈরি হয় | পুরনো subscription snapshot-এর আগের stale market state ব্যবহার করেছে | local cache বাদ দিন, REST book আবার fetch করুন, তারপর resubscribe করুন |
| external wallet-এ withdraw করলে USDC-এর বদলে pUSD দেখায় | আপনি withdraw modal-এ "USDC"-এর বদলে "pUSD" নির্বাচন করেছেন | "USDC" বাছুন - bridge pUSD → native USDC 1:1 অনুপাতে convert করে |
পর্ব 7: কন্ডিশনাল টোকেন, অর্ডার আইডি, এবং অন্য যেসব জিনিস পরিবর্তিত হয়নি
রিফ্যাক্টরের পরিসর সৎভাবে বোঝাতে, এখানে সেই শনাক্তকারীগুলোর তালিকা দেওয়া হলো যেগুলো মাইগ্রেশনের পুরোটা জুড়ে স্থিতিশীল রয়েছে:
- কন্ডিশনাল টোকেন কনট্র্যাক্ট (CTF): একই ঠিকানা। আপনার YES / NO ERC-1155 পজিশন অপরিবর্তিত আছে।
- condition_id এবং question_id: মার্কেট প্যারামিটার থেকে নির্ধারিত; কোল্যাটারাল সোয়াপের কারণে প্রভাবিত হয়নি।
- token_id (outcome): condition_id + outcome index থেকে নির্ধারিত; অপরিবর্তিত।
- Polymarket proxy wallet address: একই ঠিকানা; একই Gnosis Safe-style কোড।
- API key, API secret, API passphrase: এখনও বৈধ (রোটেট করার সুপারিশ করা হয়; বাধ্যতামূলক নয়)।
- WebSocket schemas: একই; নতুন
assetফিল্ড fill ইভেন্টে "USDC.e" এর বদলে "pUSD" পড়ে। - Gamma and Data APIs: আনঅথেনটিকেটেড, অপরিবর্তিত। তারা কখনও সরাসরি কোল্যাটারাল টোকেনকে রেফার করেনি।
পার্ট 8: কর এবং হিসাবরক্ষণগত প্রভাব
বেশিরভাগ বিচারব্যবস্থায় USDC.e থেকে pUSD-এ স্বয়ংক্রিয় কনভার্সন হলো USD-পেগড স্টেবলকয়েনের 1:1 অনুপাতে like-kind swap এবং এতে কোনো করযোগ্য ঘটনা ঘটে না। আপনার cost basis এবং holding period অপরিবর্তিতভাবে বহাল থাকে।
তবে, দুটি হিসাবরক্ষণ বিষয় খেয়াল রাখা উচিত:
- আপনার ledger schema আপডেট করুন। যে কোনো tax tool, SQLite ledger, বা accountant export যা Polygon লেনদেনগুলোকে USDC.e contract দিয়ে filter করে, তা migration-এর পরের প্রতিটি transaction নীরবে miss করবে। pUSD contract address-টিকে একটি alias হিসেবে যোগ করুন।
- snapshot conversion annotate করুন। যদিও বেশিরভাগ regime-এ এটি করযোগ্য নয়, তবু আপনার records-এ conversion-টি স্পষ্টভাবে log করুন: amount, block, timestamp, এবং এটি 1:1 স্টেবলকয়েন (stablecoin) migration - এই note। আপনার বিচারব্যবস্থা পরে যদি এটি নিয়ে প্রশ্ন তোলে, আপনি একটি পরিষ্কার audit trail চান।
ইসরায়েলি traders-দের ITA-specific reporting-এর জন্য Tax Guide পরামর্শ করা উচিত; migration নিজে standard treatment বদলায় না, তবে automated reporting tools-এর জন্য contract-address পরিবর্তনটি গুরুত্বপূর্ণ।
পার্ট 9: সুইচের অভিজ্ঞতা-থাকা অপারেটরদের প্রো টিপস
>=0.40,<0.50এ requirements.txt-এ py-clob-client পিন করুন। 0.40 লাইনটি হলো ন্যূনতম সংস্করণ যা pUSD অর্ডার সঠিকভাবে সাইন করে; উপরের সীমা পিন করা ভবিষ্যতের কোনো ব্রেকিং চেঞ্জ থেকে সুরক্ষা দেয়।- লো-ভলিউম উইন্ডোতে আবার allowance re-approve করুন।
update_balance_allowanceকলটি একটিই Polygon ট্রানজ্যাকশন; দ্রুত বাজারের ওঠানামার সময় এটি করা মানে গ্যাস স্পাইক ডেকে আনা। - 28 এপ্রিলের আগে আপনার USDC.e ব্যালান্সের snapshot নিন। কনভার্সন স্বয়ংক্রিয় হলেও, যাচাইযোগ্য প্রি-snapshot ব্যালান্সই যেকোনো reconciliation ইস্যু dispute করার সবচেয়ে পরিষ্কার উপায়।
- snapshot-এর আগে resting order গুলো ম্যানুয়ালি cancel করুন। শেষ পর্যন্ত venue-ই এগুলো cancel করত; নিজে করলে "system cancel" লাইনের বদলে আপনার কাছে একটি পরিষ্কার লেজার এন্ট্রি থাকে।
- পুরনো dashboard-এর দিকে নজর রাখুন। তৃতীয়-পক্ষের Polymarket dashboard (PolymarketAnalytics, Polynance, ইত্যাদি) pUSD ইভেন্ট re-parse করতে দুই থেকে তিন দিন নিয়েছিল। আপনার bot-এর local DB কয়েকদিনের জন্য public dashboard-এর চেয়ে এগিয়ে থাকতে পারে।
- আপনার নিজের সুবিধামতো USDC.e dust bridge করুন। বেশিরভাগ অ্যাকাউন্টে পুরনো fee rebate বা peer transfer থেকে কয়েক সেন্টের USDC.e পড়ে থাকে। Circle-এর CCTP বা standard Polygon Portal bridge ব্যবহার করুন - তাড়াহুড়োর কিছু নেই।
- block-explorer alert-এ পুরনো USDC.e addressটি রেখে দিন। migration-এর পর যদি কখনও USDC.e-তে আপনার proxy থেকে কিছু sweep হয়, তবে সেটি তাৎক্ষণিকভাবে তদন্ত করার মতো একটি red flag।
এরপর কী?
- Polymarket API গাইড - pUSD-এর জন্য আপডেট করা সম্পূর্ণ API গাইড
- ডিপোজিট গাইড - USDC জমা দিয়ে অ্যাপের ভিতরে pUSD পাওয়া
- উইথড্র গাইড - pUSD-কে নেটিভ USDC হিসেবে একটি বাহ্যিক ওয়ালেটে উত্তোলন
- টুলস & রিসোর্সেস - তৃতীয়-পক্ষের ড্যাশবোর্ডগুলো এখন pUSD-এর জন্য আপডেট করা হয়েছে
- গ্লসারি - এখানে ব্যবহৃত প্রতিটি টার্মের সহজ-ইংরেজি সংজ্ঞা
মূল কথা
Polymarket pUSD মাইগ্রেশন হলো যেকোনো অপারেটরের জন্য একটি কম-ঝুঁকির, একবারের রিফ্যাক্টর, যে ইতিমধ্যেই একটি Polymarket বট চালায়। py-clob-client-কে 0.40+ এ আপগ্রেড করুন, pUSD অ্যালাউয়েন্স আবার অনুমোদন করুন, একটি $1 স্মোক টেস্ট চালান, তারপর আবার শুরু করুন। নিচের অবকাঠামোটি (CTF, কন্ডিশন ID, টোকেন ID, API কী) বদলায়নি, তাই পরিবর্তনের পরিধি ছোট এবং রোলব্যাকের গল্পও পরিষ্কার।











