فصل 36 از 36

نسخه کوتاه

در 28 آوریل 2026, Polymarket وثیقه تسویه خود را روی Polygon از USDC.e (توکن USDC پل‌زده، قرارداد 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174) به pUSD منتقل کرد، یک استیبل‌کوین صادرشده توسط Polymarket که به نسبت 1:1 با USDC بومی قابل بازخرید است. معامله‌گران وب‌اپ هیچ کاری انجام ندادند - موجودی‌ها و موقعیت‌ها در بلاک اسنپ‌شات به‌طور خودکار تبدیل شدند. اپراتورهای API و بات باید به‌روزرسانی کنند: آدرس دارایی وثیقه داخل امضای هر سفارش CLOB تغییر کرد، سفارش‌های قدیمی که با USDC.e امضا شده بودند لغو شدند، و به py-clob-client نسخه 0.40 یا جدیدتر نیاز است. این راهنما دقیقاً تغییرات کد، قرارداد و تأیید لازم را برای حفظ اجرای یک بات در طول و بعد از این انتقال توضیح می‌دهد.

آنچه یاد خواهید گرفت: چرا Polymarket از USDC.e فاصله گرفت، چه چیزی در سطح قرارداد تغییر کرد، مسیر دقیق ارتقای py-clob-client چیست، چگونه مجوزهای دسترسی را برای وثیقه جدید دوباره تأیید کنید، چگونه موجودی خود را پس از سواپ بررسی کنید، و چگونه با ذره‌های باقی‌مانده USDC.e که اکنون بیشتر حساب‌ها نگه می‌دارند برخورد کنید.
پیش‌نیازها: شما باید از قبل یک حساب Polymarket فعال، آشنایی پایه با قراردادهای Polygon، و یک بات موجود یا جریان کاری دستی API که پیش از 28 آوریل 2026 راه‌اندازی شده باشد داشته باشید. اگر امروز از صفر شروع می‌کنید، فقط جدیدترین SDK را نصب کنید و به فصل چهارم بروید - دیگر هرگز نیازی به دست زدن به USDC.e نخواهید داشت.
01
فصل اول

بخش 1: سه استیبل‌کوین، یک Polygon

پیش از مهاجرت، سه استیبل‌کوین USD در مدار Polymarket روی Polygon وجود داشتند. دانستن تفاوت آن‌ها نخستین گام برای درک این است که چرا Polymarket محل فعالیت خود را تغییر داد.

توکنصادرکنندهقرارداد روی Polygonنوع ذخیره
USDC.eپل Polygon PoS0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174پل‌شده از Ethereum mainnet
USDC (native)Circle0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359بومی، به‌طور مستقیم روی Polygon صادرشده
pUSDTreasury Polymarketبه docs.polymarket.com/pusd مراجعه کنیدپشتیبانی‌شده به نسبت 1:1 با USDC بومی، با تأییدیه ماهانه

Polymarket در ابتدا USDC.e را انتخاب کرد، زیرا این نسخه غالب USDC روی Polygon در زمان راه‌اندازی در سال 2020 بود. Circle بعدتر native USDC را مستقیماً روی Polygon صادر کرد و از کنار گذاشته شدن تدریجی نسخه پل‌شده خبر داد. ادامه تسویه هر بازار با USDC.e، Polymarket را در معرض ریسک بلندمدتِ خاموشی ناگهانی پل قرار می‌داد. مهاجرت به یک استیبل‌کوین تحت کنترل Polymarket این مشکل را حل می‌کند و قابلیت‌های آینده محصول را نیز فعال می‌کند (برای مثال، مارجین قراردادهای دائمی، واریز به خزانه، رسیدهای بین‌زنجیره‌ای) که همگی از یک واحد حساب مشترک استفاده می‌کنند.

02
فصل دوم

بخش 2: pUSD چیست و چه چیزی نیست

pUSD یک توکن استاندارد ERC-20 روی Polygon (chain id 137) با 6 رقم اعشار است، با همان دقت USDC. تنها توسط قرارداد خزانه Polymarket قابل مینت شدن است و هر زمان که بخواهید، با نسبت 1:1 به USDC بومی قابل بازخرید است، بدون هیچ کارمزدی برای تبدیل (کارمزد گس شبکه همچنان اعمال می‌شود). ذخیره پشتیبان pUSD در حساب‌های تفکیک‌شده نگهداری می‌شود و هر ماه با یک گواهی شخص ثالث گزارش می‌شود.

pUSD یک استیبل‌کوین الگوریتمی نیست، با رمزارزها بیش‌وثیقه‌گذاری نشده است، و سودده نیست. اگر pUSD را خارج از Polymarket نگه می‌دارید، باید آن را به‌عنوان یک IOU صادرشده توسط Polymarket برای USDC بومی در نظر بگیرید - داخل پلتفرم کاربردی است، به‌محض درخواست قابل بازخرید است، اما برای نگهداری بلندمدت در یک کیف پول خارجی هیچ مزیتی ندارد.

ممیزی و ذخایر: قرارداد هوشمند pUSD توسط ممیزان دائمی Polymarket ممیزی شده است. گزارش‌های گواهی ذخایر به‌صورت ماهانه در docs.polymarket.com/pusd-audit منتشر می‌شوند. پیش از نگهداری موجودی‌های بزرگ برای بلندمدت، هر دو را بررسی کنید.
03
فصل سوم

بخش 3: آنچه معامله‌گران وب-اپ دیدند

اگر فقط از طریق polymarket.com معامله می‌کردید، مهاجرت نامرئی بود. در بلاک اسنپ‌شات در 28 آوریل 2026:

  • هر موجودی USDC.e که در یک کیف پول پروکسی Polymarket نگهداری می‌شد، به‌صورت اتمی و با نسبت 1:1 به pUSD تبدیل شد.
  • موقعیت‌های باز همان ارزش دلاری، همان احتمال‌های نتیجه، و همان تاریخ انقضا را حفظ کردند. شناسه‌های توکن شرطی تغییر نکردند.
  • سفارش‌های در انتظار که بر حسب USDC.e بودند، در زمان اسنپ‌شات لغو شدند. سفارش‌های جدید پس از مهاجرت به‌طور خودکار با pUSD امضا می‌شوند.
  • برداشت‌ها به کیف پول‌های خارجی از ارسال USDC.e به ارسال USDC بومی تغییر کرد (یا در صورت درخواست، pUSD خام - بیشتر کاربران هرگز به آن نیاز ندارند).

هیچ امضا، تراکنش یا تغییر تنظیماتی لازم نبود. سفارش‌های محدود در انتظار که برای شما مهم بودند باید پس از مهاجرت به‌صورت دستی دوباره ثبت می‌شدند؛ لغو شدن یک رویداد یک‌باره بود.

04
فصل چهارم

بخش 4: API و گردانندگان بات - تغییرات حیاتی

این همان بخشی است که اگر اقدام نکنید، یک بات را از کار می‌اندازد.

چه چیزی در امضای سفارش تغییر کرد: سفارش‌های CLOB از طریق EIP-712 امضا می‌شوند و آدرس دارایی وثیقه را به‌عنوان بخشی از داده‌های تایپ‌شده ارجاع می‌دهند. پیش از مهاجرت، آن آدرس USDC.e بود (0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174). پس از مهاجرت، pUSD است. سفارشی که با آدرس قدیمی امضا شده باشد، در CLOB درستی امضا را تأیید نخواهد کرد و خطای "invalid میکر (maker) asset" یا "signature mismatch" برمی‌گرداند.

به‌روزرسانی py-clob-client

Polymarket دو هفته پیش از زمان تغییر، py-clob-client 0.40.0 را با پشتیبانی کامل از pUSD منتشر کرد. شاخه 0.34.x یک روز پس از مهاجرت کنار گذاشته شد.

# ارتقا به نسخه‌ای سازگار با pUSD
pip install --upgrade "py-clob-client>=0.40.0"

# بررسی دارایی وثیقه متصل‌شده
python -c "from py_clob_client.constants import POLYGON; \
print('pUSD address:', POLYGON.get('collateral'))"

SDK جدید آدرس وثیقه را هنگام شروع از پیکربندی زنجیره می‌گیرد، بنابراین نیازی نیست چیزی را به‌صورت hard-code وارد کنید. اگر نسخه قدیمی‌تری را fork کرده‌اید یا pin کرده‌اید، امن‌ترین کار این است که lockfile را حذف کنید، با جدیدترین ماژول constants دوباره نصب کنید، و مجموعه آزمون خود را دوباره اجرا کنید.

مجوزها را دوباره تأیید کنید

کیف پول پروکسی Polymarket شما برای توکن pUSD به یک ERC-20 allowance از حساب معاملاتی شما - قرارداد CTF Exchange نیاز دارد. allowance قدیمی برای USDC.e هنوز روی زنجیره وجود دارد، اما کاملا بی‌فایده است: CLOB آن را مصرف نخواهد کرد. بدون یک allowance تازه برای pUSD، هر سفارش "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,  # POLY_PROXY for Magic-link accounts
)
client.set_api_creds(client.create_or_derive_api_creds())

# یک‌باره: pUSD را برای قرارداد CTF Exchange تأیید کنید
# (کمک‌کننده در py-clob-client 0.40 افزوده شد)
client.update_balance_allowance(asset_type="COLLATERAL")

اعتبارهای API را تازه‌سازی کنید

کلیدهای API موجود همچنان کار می‌کنند، اما اگر پیش از 1 آوریل اعتبارها را مشتق کرده‌اید، بهتر است برای احتیاط آن‌ها را بچرخانید: امضای ECDSA در لایه 1 اکنون به دامنه‌ای متصل می‌شود که آدرس جدید وثیقه را هم شامل می‌شود. ساده‌ترین مسیر:

creds = client.create_or_derive_api_creds()  # مشتق‌سازی مجدد idempotent
client.set_api_creds(creds)

# در .env خود ذخیره کنید
print(creds.api_key, creds.api_secret, creds.api_passphrase)
05
فصل پنجم

بخش 5: تأیید ربات شما پس از مهاجرت

این تست دود سریع و حداقلی را قبل از اینکه هر منطق اندازه‌گذاری را روی پول واقعی اجرا کنید، انجام دهید:

# 1. موجودی pUSD را در کیف پول پروکسی تأیید کنید
from py_clob_client.client import ClobClient
client = ClobClient(...)  # مانند بالا
balance = client.get_balance_allowance(params={"asset_type": "COLLATERAL"})
print("موجودی pUSD (خام):", balance["balance"])
print("میزان مجاز برای صرافی:", balance["allowance"])

# 2. یک سفارش محدود 1 دلاری خیلی دور از قیمت لحظه‌ای ثبت کنید
from py_clob_client.clob_types import OrderArgs
order = client.create_order(OrderArgs(
    token_id=test_token_id,
    price=0.05,        # هیچ نسبتی با بازار ندارد
    size=20,           # ارزش اسمی 1 دلار در قیمت 0.05 دلار
    side="BUY",
))
resp = client.post_order(order)
print(resp)

# 3. لغو کنید و تأیید کنید
client.cancel(order_id=resp["orderID"])

اگر هر سه فراخوانی موفق شوند، اتصال شما درست است: SDK با pUSD امضا کرده، allowance شناخته شده است، و دفتر سفارش منسجم است. به‌تدریج دوباره مقیاس را بالا ببرید.

زمان ارتقا را با دقت انتخاب کنید: اگر ربات را به‌طور پیوسته تا بلوک snapshot اجرا کرده‌اید، وضعیت محلی دفتر سفارش شما احتمالاً واگرا شده است. همیشه پس از یک تغییر بزرگ در venue، قبل از اعلام size، وضعیت را با snapshotهای REST تطبیق دهید.
06
فصل ششم

بخش 6: خطاها و راه‌حل‌های رایج

خطا یا نشانهعلتراه‌حل
signature verification failedسفارش علیه دامنه EIP-712 مربوط به USDC.e امضا شده استpy-clob-client را به 0.40+ ارتقا دهید؛ ماژول constants را دوباره بارگذاری کنید
INSUFFICIENT_ALLOWANCE در هر سفارشاز proxy شما به CTF Exchange اجازه pUSD داده نشده استدستور update_balance_allowance(asset_type="COLLATERAL") را یک‌بار اجرا کنید
invalid maker assetآدرس USDC.e به‌صورت hard-coded هنوز در تنظیمات شما وجود داردهر آدرس collateral hard-coded را با constant مربوطه در SDK جایگزین کنید
کیف پول موجودی USDC.e را پس از مهاجرت > 0 نشان می‌دهدتوکن‌های "dust" باقی‌مانده از یک انتقال شخص ثالثUSDC.e را از طریق CCTP شرکت Circle دوباره به USDC بومی bridge کنید، یا آن را همان‌طور رها کنید
اتصال مجدد WebSocket دفتر را خالی نشان می‌دهداشتراک قدیمی از وضعیت منسوخ بازار قبل از snapshot استفاده کرده استcache محلی را حذف کنید، دفتر REST را دوباره fetch کنید، سپس دوباره subscribe شوید
برداشت به کیف پول خارجی pUSD را به‌جای USDC نشان می‌دهددر modal برداشت، به‌جای "USDC" گزینه "pUSD" را انتخاب کرده‌اید"USDC" را انتخاب کنید - bridge pUSD را با نسبت 1:1 به USDC بومی تبدیل می‌کند
07
فصل هفتم

بخش 7: توکن‌های شرطی، شناسه‌های سفارش، و چیزهای دیگری که تغییر نکردند

برای اینکه محدوده بازسازی را دقیق نگه داریم، فهرست شناسه‌هایی که در طول مهاجرت ثابت می‌مانند اینجاست:

  • قرارداد Conditional Token (CTF): آدرس یکسان. موقعیت‌های YES / NO شما در ERC-1155 بدون تغییر هستند.
  • condition_id و question_id: به‌صورت قطعی از پارامترهای بازار به‌دست می‌آیند؛ تحت تأثیر تعویض وثیقه قرار نمی‌گیرند.
  • token_id (outcome): از condition_id + شاخص نتیجه مشتق می‌شود؛ بدون تغییر.
  • آدرس کیف پول پروکسی Polymarket: همان آدرس؛ همان کد به سبک Gnosis Safe.
  • کلید API، اسرار API، عبارت عبور API: همچنان معتبر هستند (توصیه می‌شود چرخانده شوند؛ الزامی نیست).
  • اسکیماهای WebSocket: یکسان؛ فیلد جدید asset در رویدادهای fill به‌جای "USDC.e" مقدار "pUSD" را می‌خواند.
  • APIهای Gamma و Data: بدون احراز هویت، بدون تغییر. آن‌ها هیچ‌وقت به توکن وثیقه به‌طور مستقیم ارجاع نمی‌دادند.
یک تغییر کوچک در رابط کاربری: نمای کیف پول پروکسی Polymarket اکنون موجودی‌ها را به pUSD نشان می‌دهد، با برچسب 1:1 دلار آمریکا. کاوشگرهای بلاک (PolygonScan، Polygonscan API) انتقال‌های ERC-20 pUSD را در تاریخچه تراکنش‌های کیف پول پروکسی نشان می‌دهند. انتقال‌های قدیمی USDC.e همچنان در تاریخچه قابل مشاهده‌اند؛ آدرس شما فقط برای مدتی دو ردیف توکن ERC-20 خواهد داشت.
08
فصل هشتم

بخش 8: پیامدهای مالیاتی و دفترداری

برای بیشتر حوزه‌های قضایی، تبدیل خودکار USDC.e به pUSD یک سوآپ هم‌نوعِ استیبل‌کوین‌های متصل به دلار آمریکا به نسبت 1:1 است و هیچ رویداد مالیاتی ایجاد نمی‌کند. بهای تمام‌شده و مدت نگهداری شما منتقل می‌شود.

با این حال، دو مورد دفترداری شایسته توجه‌اند:

  1. طرح‌واره دفتر کل خود را به‌روزرسانی کنید. هر ابزار مالیاتی، دفتر کل SQLite، یا خروجی حسابدار که تراکنش‌های Polygon را بر اساس قرارداد USDC.e فیلتر می‌کند، بی‌صدا همه تراکنش‌های پس از مهاجرت را از قلم می‌اندازد. آدرس قرارداد pUSD را به‌عنوان یک نام مستعار اضافه کنید.
  2. تبدیل اسنپ‌شات را یادداشت‌گذاری کنید. با اینکه در بیشتر رژیم‌ها مشمول مالیات نیست، تبدیل را به‌صورت صریح در سوابق خود ثبت کنید: مقدار، بلاک، زمان‌سنجی، و یادداشتی مبنی بر اینکه این یک مهاجرت استیبل‌کوین به نسبت 1:1 است. اگر حوزه قضایی شما بعداً درباره آن پرس‌وجو کند، باید یک مسیر حسابرسی پاک و روشن داشته باشید.

معامله‌گران اسرائیلی باید برای گزارش‌دهی خاص ITA با راهنمای مالیاتی مشورت کنند؛ خودِ مهاجرت تغییری در نحوه برخورد استاندارد ایجاد نمی‌کند، اما تغییر آدرس قرارداد برای ابزارهای گزارش‌دهی خودکار مهم است.

09
فصل نهم

بخش 9: نکات حرفه‌ای از اپراتورهایی که این تغییر را از سر گذراندند

  1. py-clob-client را در >=0.40,<0.50 در requirements.txt پین کنید. خط 0.40 حداقل نسخه‌ای است که سفارش‌های pUSD را به‌درستی امضا می‌کند؛ پین کردن یک سقف بالاتر از شما در برابر یک تغییر شکننده آینده محافظت می‌کند.
  2. اجازه‌ها را در یک بازه کم‌حجم دوباره تأیید کنید. فراخوانی update_balance_allowance یک تراکنش Polygon است؛ انجام آن هنگام یک حرکت سریع بازار، دعوت از جهش کارمزد گس است.
  3. پیش از 28 آوریل موجودی USDC.e خود را اسنپ‌شات بگیرید. با اینکه تبدیل به‌صورت خودکار انجام می‌شود، یک موجودی پیش از اسنپ‌شات که قابل‌راستی‌آزمایی باشد، تمیزترین راه برای اعتراض به هر مشکل تطبیق است.
  4. سفارش‌های باز را پیش از اسنپ‌شات به‌صورت دستی لغو کنید. در هر حال خودِ بازار آنها را لغو کرده بود؛ انجام این کار توسط خودتان یک ورودی دفترکل تمیز به شما می‌دهد، به‌جای یک خط «لغو سیستم».
  5. مراقب داشبوردهای قدیمی باشید. داشبوردهای شخص ثالث Polymarket (PolymarketAnalytics، Polynance و غیره) دو تا سه روز زمان برد تا رویدادهای pUSD را دوباره تحلیل کنند. پایگاه‌داده محلی بات شما ممکن است برای چند روز جلوتر از داشبوردهای عمومی باشد.
  6. بریج کردن گرد‌وغباریِ USDC.e را طبق برنامه خودتان انجام دهید. بیشتر حساب‌ها چند سنت USDC.e باقی‌مانده از ریبیت‌های کارمزد قدیمی یا انتقال‌های همتا‌به‌همتا دارند. از CCTP شرکت Circle یا بریج استاندارد Polygon Portal استفاده کنید - عجله‌ای نیست.
  7. آدرس قدیمی USDC.e را در هشدارهای بلاک‌اکسپلورر خود نگه دارید. اگر بعد از مهاجرت، هر چیزی از پروکسی شما در USDC.e جابه‌جا شود، این یک پرچم قرمز است که ارزش بررسی فوری دارد.

بعدی چیست؟

نکته کلیدی

مهاجرت Polymarket به pUSD یک بازسازی یک‌باره با ریسک پایین برای هر اپراتوری است که از قبل یک ربات Polymarket را اجرا می‌کند. py-clob-client را به نسخه 0.40+ ارتقا دهید، مجوزهای pUSD را دوباره تأیید کنید، یک آزمون سریع 1 دلاری اجرا کنید، و ادامه دهید. زیرساخت زیرین (CTF، condition IDs، token IDs، API keys) تغییری نکرده است، بنابراین دامنه تغییرات کوچک است و داستان بازگشت به حالت قبل هم تمیز و ساده است.