पॉलीमार्केट बॉट ट्यूटोरियल · अध्याय 9 / 32

पॉलीमार्केट का ऑन-चेन डेटा सीधे पढ़ें: USDC/pUSD बैलेंस, आउटकम सप्लाई के लिए CTF कॉन्ट्रैक्ट रीड, UMA Optimistic Oracle के प्रस्तावित/विवादित इवेंट, और Polygon ट्रांज़ैक्शन लॉग - कोड के साथ।

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

पॉलीमार्केट के API सुविधाजनक हैं, लेकिन ये अंततः सुसंगत (eventually consistent) होते हैं। चेन ही अंतिम प्रमाण है। यह अध्याय उन ऑन-चेन रीड को समझाता है जिन्हें एक प्रोडक्शन बॉट अपनी बहीखाता (bookkeeping) सत्यापित करने के लिए उपयोग करता है: pUSD बैलेंस, आउटकम-टोकन इन्वेंट्री, UMA विवाद इवेंट, और CTF कॉन्ट्रैक्ट स्टेट। ज़्यादातर प्रोडक्शन बॉट जिस तरीके पर एकमत होते हैं, वह है गति के लिए API-पहले और शुद्धता के लिए समय-समय पर ऑन-चेन मिलान।

  • ऑन-चेन में क्या रहता है (और CLOB में क्या)
  • pUSD कॉन्ट्रैक्ट पता और ABI
  • Conditional Tokens Framework (CTF)
  • UMA Optimistic Oracle: प्रस्तावित और विवादित इवेंट
  • Polygon इवेंट लॉग पढ़ना (web3.py / ethers)
  • ऑन-चेन कब पढ़ें बनाम API पर भरोसा करें
  • कोड: इवेंट सब्सक्रिप्शन के ज़रिए UMA विवाद पहचानें

ऑन-चेन में क्या रहता है (और CLOB में क्या)

दो स्टेट मशीनें, दो सच्चाइयाँ।

ऑन-चेन (Polygon): pUSD बैलेंस, आउटकम-टोकन इन्वेंट्री (प्रति टोकन ERC-1155 सप्लाई), अलाउंस स्वीकृतियाँ, UMA Optimistic Oracle के प्रस्ताव और विवाद, जमा और निकासी इवेंट। यह अंततः सही होता है; इसमें एक Polygon ब्लॉक (~2 सेकंड) की देरी रहती है।

CLOB (पॉलीमार्केट API): ऑर्डर बुक, हाल के ट्रेड, लंबित लिमिट ऑर्डर, मैच पुष्टियाँ। रियल-टाइम लेकिन अंततः सुसंगत - ERC-1155 के सेटल होने से पहले ही मैच को स्वीकार कर लिया जाता है, जिससे फैंटम-फ़िल की समस्या पैदा होती है, जिसे अध्याय 12 में कवर किया गया है।

दोनों को हमेशा एक ही जगह आ मिलना चाहिए। जब वे अलग हों, तो चेन ही अंतिम प्रमाण है। सिर्फ़ CLOB पर भरोसा करने वाला बॉट भटक जाएगा; सिर्फ़ चेन पर भरोसा करने वाला बॉट धीरे ट्रेड करेगा। प्रोडक्शन कोड दोनों का उपयोग करता है: गति-निर्भर निर्णयों के लिए CLOB, और समय-समय पर मिलान के लिए चेन।

pUSD कॉन्ट्रैक्ट पता और ABI

pUSD पॉलीमार्केट का स्टेबलकॉइन रैपर है, जो 2026 V2 माइग्रेशन के बाद से उपयोग में है। Polygon mainnet पर 0xC011a7E12a19f7B1f670d46F03B03f3342E82DFB वाला कॉन्ट्रैक्ट एक मानक ERC-20 है।

बॉट के लिए तीन रीड महत्वपूर्ण हैं:

  • balanceOf(proxy) - आपका ख़र्च करने योग्य pUSD। हर बार दोबारा शुरू (restart) करने पर इसे CLOB के बैलेंस व्यू से मिलाएँ।
  • allowance(proxy, exchange_contract) - क्या CTF/NegRisk एक्सचेंज कॉन्ट्रैक्ट आपका pUSD ख़र्च कर सकते हैं। ऑर्डर मैचिंग के लिए आवश्यक।
  • Transfer इवेंट सब्सक्रिप्शन - बार-बार पूछे (polling) बिना जमा और निकासी का पता लगाता है।

USDC (0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174) अब भी ऑफ-रैंप जोड़ी बना हुआ है। ज़्यादातर बॉट को सिर्फ़ pUSD रीड की ज़रूरत होती है; USDC का महत्व केवल जमा/निकासी चक्रों के दौरान होता है।

Conditional Tokens Framework (CTF)

आउटकम शेयर Gnosis के Conditional Tokens Framework (CTF) द्वारा जारी किए गए ERC-1155 टोकन हैं। Polygon पर 0x4D97DCd97eC945f40cF65F87097ACe5EA0476045 वाला CTF कॉन्ट्रैक्ट प्रति position-id सप्लाई पर नज़र रखता है।

तीन रीड:

  • balanceOf(proxy, position_id) - उस मार्केट+आउटकम के लिए आपके पास वास्तव में कितने आउटकम टोकन हैं।
  • getOutcomeSlotCount(condition_id) - परिणामों की संख्या (द्विआधारी के लिए 2, बहु-परिणाम के लिए N)।
  • payoutNumerators, payoutDenominator - जब UMA मार्केट का रिज़ॉल्यूशन करता है तब सेट होते हैं। इन्हें पढ़कर आप CLOB UI अपडेट होने से पहले ही जान सकते हैं कि कौन-सा पक्ष जीता।

position_id, (condition_id, outcome_index) का हैश होता है। इसे क्लाइंट-साइड पर CTF के getPositionId हेल्पर से गणना करें या अपनी स्टैक में keccak गणित को दोहराएँ।

UMA Optimistic Oracle: प्रस्तावित और विवादित इवेंट

UMA का Optimistic Oracle (OO) पॉलीमार्केट के सभी विवाद रिज़ॉल्यूशन को संभालता है। दो इवेंट जिन पर आपका बॉट सब्सक्राइब करना चाह सकता है।

  • ProposePrice(requester, identifier, timestamp, ancillaryData, proposer, proposedPrice) - जब पॉलीमार्केट बॉट कोई परिणाम प्रस्तावित करता है तब सक्रिय होता है।
  • DisputePrice(requester, identifier, timestamp, ancillaryData, disputer) - जब कोई किसी प्रस्तावित परिणाम को चुनौती देता है तब सक्रिय होता है।

OO कॉन्ट्रैक्ट पता: 0xeE3Afe347D5C74317041E2618C49534dAf887c24. पॉलीमार्केट के requester पते से फ़िल्टर करें।

सब्सक्राइब क्यों करें: विवाद का मतलब है कि रिज़ॉल्यूशन अब विवादित है और उसके लिए 24-72 घंटे के UMA वोट की आवश्यकता होगी। उस अवधि के दौरान मार्केट ट्रेडिंग के लिए रुक सकता है। जो बॉट किसी विवादित मार्केट पर पोज़ीशन रखे हुए है, उसे तुरंत यह पता होना चाहिए।

Polygon इवेंट लॉग पढ़ना (web3.py / ethers)

दो संदर्भ कार्यान्वयन।

Python (web3.py):

from web3 import Web3
w3 = Web3(Web3.HTTPProvider(POLYGON_RPC))
ctf = w3.eth.contract(address=CTF_ADDR, abi=CTF_ABI)
filter = ctf.events.PayoutRedemption.create_filter(fromBlock="latest")
for event in filter.get_new_entries():
    print(event["args"])

Node (ethers v6):

import { ethers } from "ethers";
const p = new ethers.JsonRpcProvider(POLYGON_RPC);
const ctf = new ethers.Contract(CTF_ADDR, CTF_ABI, p);
ctf.on("PayoutRedemption", (redeemer, collateral, parentId, conditionId) => {
  console.log("redemption", { redeemer, conditionId });
});

लगातार निगरानी के लिए HTTP पोलिंग के बजाय WebSocket ट्रांसपोर्ट (wss://...) का उपयोग करें - कम रिक्वेस्ट और तेज़ डिलीवरी। ज़्यादातर पेड RPC प्रोवाइडर अपने शुरुआती टियर में WebSocket शामिल करते हैं।

ऑन-चेन कब पढ़ें बनाम API पर भरोसा करें

प्रोडक्शन से व्यावहारिक नियम।

  • API पर भरोसा करें इनके लिए: रियल-टाइम ऑर्डर बुक, हाल के ट्रेड, आपके अपने लंबित ऑर्डर, मार्केट मेटाडेटा (slug, प्रश्न, अंतिम तिथि), इवेंट/मार्केट खोज।
  • चेन पर भरोसा करें इनके लिए: आपका अपना pUSD बैलेंस, आपकी अपनी आउटकम-टोकन इन्वेंट्री, जमा और निकासी की पुष्टि, रिज़ॉल्यूशन परिणाम, विवाद स्थिति।
  • दोनों की जाँच करें इनके लिए: कोई भी वित्तीय चीज़ जिसे बॉट ने फ़िल के रूप में दर्ज किया हो - API के "matched" इवेंट को चेन के CTF ट्रांसफ़र से मिलाकर सेटलमेंट की पुष्टि करें।

ख़रीद के बाद 5-सेकंड-प्रतीक्षा नियम (अध्याय 12) API समय में ऑन-चेन वास्तविकता का प्रवेश है। मार्केट ख़रीद के तुरंत बाद जमा किया गया GTC बेच ऑर्डर, चेन जाँच में balance: 0 दिखा सकता है, भले ही CLOB ने कुछ ही क्षण पहले मैच कर लिया हो।

कोड: इवेंट सब्सक्रिप्शन के ज़रिए UMA विवाद पहचानें

संदर्भ: पॉलीमार्केट से जुड़े UMA विवादों की रियल टाइम में निगरानी करें।

from web3 import Web3
w3 = Web3(Web3.WebsocketProvider(POLYGON_WSS))
oo = w3.eth.contract(address=UMA_OO_ADDR, abi=UMA_ABI)
POLY_REQUESTER = "0x..."  # पॉलीमार्केट's UMA requester address

def on_dispute(event):
    args = event["args"]
    if args["requester"].lower() != POLY_REQUESTER.lower(): return
    print(f"DISPUTE on पॉलीमार्केट market: ancillary={args['ancillaryData'][:40]}...")
    # decode ancillaryData to recover the market question

event_filter = oo.events.DisputePrice.create_filter(fromBlock="latest")
while True:
    for ev in event_filter.get_new_entries():
        on_dispute(ev)
    time.sleep(2)

ancillaryData फ़ील्ड hex-एन्कोडेड JSON-जैसा टेक्स्ट है जिसमें मार्केट का प्रश्न होता है। इसे डिकोड करने पर आपको slug के समकक्ष एक पहचानकर्ता मिलता है, जिसे आप अपनी खुली पोज़ीशनों के साथ मिलाकर देख सकते हैं।

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

पॉलीमार्केट का pUSD कॉन्ट्रैक्ट मुझे कहाँ मिलेगा?
pUSD, Polygon पर 0xC011a7E12a19f7B1f670d46F03B03f3342E82DFB पर है। 28 अप्रैल, 2026 को इसने USDC.e को पॉलीमार्केट के प्रामाणिक कोलैटरल के रूप में बदल दिया। Polygonscan लिंक: https://polygonscan.com/token/0xC011a7E12a19f7B1f670d46F03B03f3342E82DFB.
पॉलीमार्केट पर CTF कॉन्ट्रैक्ट क्या है?
CTF का मतलब Conditional Tokens Framework है - Gnosis से व्युत्पन्न ERC-1155 कॉन्ट्रैक्ट जो आउटकम टोकन जारी करता है (वही हाँ और नहीं शेयर जिन्हें आप ट्रेड करते हैं)। हर पॉलीमार्केट मार्केट एक CTF पोज़ीशन है जिसकी रिडेम्पशन लॉजिक UMA रिज़ॉल्यूशन से जुड़ी होती है। बॉट को बहुत कम ही CTF के साथ सीधे काम करने की ज़रूरत होती है; SDK इसे संभाल लेता है।
Polygon पर UMA विवाद इवेंट कैसे सब्सक्राइब करूँ?
अपने Polygon RPC प्रोवाइडर के WebSocket के ज़रिए UMA Optimistic Oracle V2 कॉन्ट्रैक्ट के "ProposePrice" और "DisputePrice" इवेंट सब्सक्राइब करें। सिर्फ़ पॉलीमार्केट से जुड़े विवाद पाने के लिए requesterAddress फ़ील्ड (पॉलीमार्केट का oracle adapter) से फ़िल्टर करें। कोड नमूने इसी अध्याय में हैं।
अगर मैं पॉलीमार्केट API पर भरोसा करता हूँ, तो क्या मुझे ऑन-चेन डेटा पढ़ने की ज़रूरत है?
ज़्यादातर रणनीतियों के लिए नहीं। CLOB API ऑर्डर बुक और ट्रेड डेटा के लिए प्रामाणिक है, और gamma API मेटाडेटा के लिए प्रामाणिक है। ऑन-चेन तब पढ़ें जब आपको (a) UMA विवाद अलर्ट API में आने से तेज़ चाहिए, (b) पुष्टि करनी हो कि जमा वास्तव में आया, या (c) परिणामों/पोज़ीशनों पर कस्टम विश्लेषण करना हो।
ऑन-चेन Polygon डेटा की देरी पॉलीमार्केट API की तुलना में कैसी है?
Polygon का ब्लॉक समय ~2 सेकंड है। पॉलीमार्केट API आम तौर पर ऑन-चेन मैच के कुछ सौ मिलीसेकंड के भीतर ऑर्डर बुक के बदलाव दिखा देती है। ज़्यादातर संकेतों के लिए API आपकी अपनी ऑन-चेन रीड से तेज़ है। UMA विवाद इसका अपवाद हैं - ऑन-चेन इवेंट UI में विवाद दिखने से पहले सक्रिय हो जाता है।
क्या मैं CLOB API के बिना पॉलीमार्केट की पोज़ीशन पढ़ सकता हूँ?
तकनीकी रूप से हाँ - हर पोज़ीशन के लिए CTF balanceOf(walletAddress, positionId) पढ़ें। व्यावहारिक रूप से CLOB API का /trade/positions एंडपॉइंट तेज़ है, मूल्य निर्धारण शामिल करता है, और आपकी सभी पोज़ीशनों को एकत्र करता है। पुष्टि की ज़रूरत हो या API डाउन हो, तभी ऑन-चेन रीड पर वापस जाएँ।