Polymarket Bot Tutorial · Chapter 18 of 32

Polymarket-এ UMA dispute prediction bots: Optimistic Oracle proposals detect করুন, dispute likelihood predict করুন, pre-and-post-dispute price asymmetry exploit করুন, এবং disputed-market death spirals এড়িয়ে চলুন।

এই chapter-এ কী covered হয়েছে

UMA-এর Optimistic Oracle (OO) Polymarket markets resolve করে, এবং disputes fire হওয়ার আগে ও পরে price anomalies তৈরি করে। dispute-এর দুই দিকেই tradeable patterns আছে, কিন্তু strategyটি operationally complex এবং এটি যত bot-কে খাইয়েছে তার চেয়ে বেশি bot পুড়িয়েছে। এই chapter-এ আমরা honest playbook দিচ্ছি।

  • UMA Optimistic Oracle কীভাবে কাজ করে
  • On-chain proposal detect করা
  • Dispute predictors (volume, ambiguity, history)
  • Pre-dispute price asymmetry
  • Post-dispute trade setups
  • কখন disputed markets trade করা উচিত নয়
  • Code: UMA proposed/disputed events-এ subscribe করা

UMA Optimistic Oracle কীভাবে কাজ করে

UMA-এর Optimistic Oracle (OO) হলো Polymarket-এর dispute resolution layer। প্রতিটি market resolution OO-এর মাধ্যমে যায়; বেশিরভাগই uncontested থাকে এবং স্বয়ংক্রিয়ভাবে settle হয়। contested ones - disputes - 24-72 hour voting period trigger করে, যার মধ্যে UMA token holders outcome নির্ধারণ করেন।

Lifecycleটি এমন: Polymarket-এর resolver একটি price propose করে (0 = NO জিতেছে, 1 = YES জিতেছে)। 2-hour challenge window-এর পরে যদি কেউ dispute না করে, তাহলে price final হয়ে যায় এবং CTF contract payouts distribute করে। কেউ dispute করলে market voting window-এ প্রবেশ করে; UMA holders vote cast করেন, majority জেতে।

Bot-এর জন্য relevant events হলো ProposePrice (proposal entered, challenge window open হয়) এবং DisputePrice (dispute filed, voting period শুরু হয়)। real time-এ market resolution state track করতে এগুলোর subscribe করুন।

On-chain proposal detect করা

Polygon-এ UMA OO contract ProposePrice event emit করে, যার parameters হলো (requester, identifier, timestamp, ancillaryData, proposer, proposedPrice)। relevant proposals সীমিত করতে Polymarket-এর known requester address দিয়ে filter করুন।

POLY_REQUESTER = "0x..."  # Polymarket Adjudicator
filt = oo_contract.events.ProposePrice.create_filter(
    fromBlock="latest",
    argument_filters={"requester": POLY_REQUESTER}
)
for event in filt.get_new_entries():
    market_id = decode_ancillary(event.args.ancillaryData)
    proposed = "YES" if event.args.proposedPrice == 1e18 else "NO"
    print(f"PROPOSE: market {market_id} → {proposed}")

ancillaryData fieldটি hex-encoded JSON, যা market question describe করে। এটিকে decode করলে আপনি market identifier পাবেন, যা আপনার open positions-এর সঙ্গে cross-reference করতে পারবেন।

Dispute predictors (volume, ambiguity, history)

Dispute হওয়ার আগে যে তিনটি signal দেখা যায়, সেগুলো পরবর্তী actual disputes-এর সঙ্গে correlate করে।

  • Total volume: lifetime volume $1M-এর বেশি যে markets, সেগুলো ছোট markets-এর তুলনায় 4x rate-এ disputed হয়। বেশি capital at stake = challenge করার incentive বেশি।
  • Ambiguous wording: যে কোনও market-এ "or similar," "officially confirmed," বা compound conditions (date AND specific outcome) থাকলে dispute rate বেড়ে যায়।
  • Same event-এর past disputes: যদি আগের proposal ইতিমধ্যেই disputed হয়ে থাকে এবং re-propose করা হয়, তাহলে second proposal normal rate-এর 2-3x rate-এ disputed হয়।

Bot এই features থেকে একটি "dispute probability" score compute করতে পারে এবং resolution-এর কাছাকাছি threshold-এর ওপরে থাকা markets-এ position নেওয়া এড়াতে পারে।

Pre-dispute price asymmetry

Likely dispute হওয়ার কয়েক ঘণ্টা আগে market price-এ প্রায়ই asymmetric movement দেখা যায়: proposer যে side-টিকে YES হিসেবে নাম দিয়েছে, সেটি নিচে drift করে (কারণ traders fear করেন dispute সেটিকে উল্টে দিতে পারে), আর অন্য side উপরে drift করে।

Dispute কোন দিকে resolve হবে তা নিয়ে যদি আপনার directional view থাকে, তাহলে এটি একটি tradeable window। ঝুঁকি হলো: dispute না হলে, challenge window শান্তভাবে close হওয়ার পরে asymmetry reverse হয়ে যায় এবং price proposed direction-এ snap back করে।

সৎ কথা: বেশিরভাগ pre-dispute asymmetry trade-ই losing trade, কারণ বেশিরভাগ challenge original proposal-এর পক্ষে resolve হয়। Strategyটি তখনই কাজ করে যখন dispute sustained হওয়ার নির্দিষ্ট কারণ সম্পর্কে আপনার কাছে বিশেষ তথ্য থাকে।

Post-dispute trade setups

Dispute filed হওয়ার পরে market 24-72 hours "limbo"-তে trade করে - জানা থাকে disputed, outcome vote হবে। দুটি setup আছে।

UMA consensus-এর দিকে convergence: যদি dispute resolution আগেভাগেই signal হয় (যেমন কোনো prominent UMA voter publicly একটি side নেন), price সেই resolution-এর দিকে move করে। UMA Discord / Twitter signals + price action monitor করা bot 30-60% সময় এটি catch করতে পারে।

Volatility farming: limbo period-এ spreads wide থাকে। একজন patient market maker voting window-এর মধ্যে বহু trader-এর in-and-out rotation থেকে spread tax earn করতে পারেন। inventory risk বেশি; তাই size accordingly নিন।

দুটির ক্ষেত্রেই আপনার position-এর বিরুদ্ধে resolution আসার বাস্তব সম্ভাবনার সঙ্গে স্বাচ্ছন্দ্য থাকা দরকার। dispute-period inventory-কে সর্বোচ্চ half-size হিসেবে ধরুন।

কখন disputed markets trade করা উচিত নয়

তিনটি পরিস্থিতিতে default হিসেবে dispute trade ভুল।

  • আপনার কাছে UMA-specific view নেই. যদি আপনার একমাত্র edge হয় "original proposal আমার কাছে ঠিক মনে হচ্ছে," তাহলে original proposer-এর ওপর আপনার কোনো edge নেই - আর dispute filer উল্টোটা মনে করেন। voting outcome হলো এমন একটি coin flip, যা আপনি predict করতে পারবেন না।
  • Dispute হলো ambiguous wording-এ. UMA voters সাধারণত strict-reading-of-the-question-এর পক্ষে থাকেন। যদি market-এ "by January 31" লেখা থাকে এবং event February 1-এ ঘটে, তাহলে trader population-এর intuition যাই হোক না কেন UMA NO resolve করবে।
  • Dispute-এর আগেই আপনার inventory ছিল. limbo-এর মধ্যে existing position-এ "average down" করতে add করা হলো classic capital-destruction pattern। Hold করুন বা exit করুন, কখনও add করবেন না।

Code: UMA proposed/disputed events-এ subscribe করা

Reference: Polymarket requester দিয়ে filter করা UMA OO events-এর WebSocket subscription।

from web3 import Web3
w3 = Web3(Web3.WebsocketProvider(POLYGON_WSS))
oo = w3.eth.contract(address=UMA_OO_ADDR, abi=UMA_OO_ABI)
POLY = "0x...".lower()

dispute_filter = oo.events.DisputePrice.create_filter(fromBlock="latest")
propose_filter = oo.events.ProposePrice.create_filter(fromBlock="latest")

while True:
    for event in dispute_filter.get_new_entries():
        if event.args.requester.lower() == POLY:
            on_dispute(event)
    for event in propose_filter.get_new_entries():
        if event.args.requester.lower() == POLY:
            on_propose(event)
    time.sleep(2)

def on_dispute(event):
    market_q = decode_ancillary_to_question(event.args.ancillaryData)
    send_telegram(f"DISPUTE: {market_q}")
    # If we hold a position in this market, alert + consider exit
    if market_q in our_positions:
        flag_position_for_review(market_q)

Patternটি হলো: subscribe, decode, alert। Dispute-এ algorithmically act করা high-risk; bot-এর কাজ সাধারণত event-টি human reviewer-এর সামনে তুলে ধরা।

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

UMA Optimistic Oracle কী?
UMA-এর Optimistic Oracle হলো সেই system যা Polymarket markets resolve করে। একজন proposer একটি proposed answer জমা দেন; window-এর মধ্যে যদি কেউ dispute না করে, তাহলে answer final হয়ে যায়। Dispute হলে UMA token holders settle করার জন্য ভোট দেন (DVM)। বেশিরভাগ Polymarket market undisputed-ভাবেই resolve হয় - disputes হলো edge case।
Real time-এ UMA proposal কীভাবে detect করব?
Polygon-এ UMA Optimistic Oracle V2 contract-এ ProposePrice events-এর জন্য subscribe করুন, Polymarket adapter address দিয়ে filtered। Proposal 2-hour dispute window trigger করে, যার মধ্যে trader-রা dispute risk price in করার কারণে market price প্রায়ই 1.00 / 0.00 থেকে diverge করে।
UMA dispute কী predict করে?
তিনটি signal: (1) Volume - high-volume markets (>$10M) বেশি dispute আকর্ষণ করে, কারণ prize বড়। (2) Resolution criteria-তে ambiguity - market title fuzzy হলে dispute risk বাড়ে। (3) Proposer wallet-এর past dispute history। Baseline dispute predictor-এর জন্য এগুলোকে logistic regression-এ combine করুন।
Dispute filed হওয়ার পরে কি trade করা যায়?
করা যায়, কিন্তু ঝুঁকিপূর্ণ। একবার disputed হলে market DVM voting-এ যায়, যা ~48-72 hours লাগে এবং outcome binary (এবং final)। Voting-এর আগে price সাধারণত একদিকে converge করে। Legal/factual analysis-এর ভিত্তিতে side নেওয়া bot profit করতে পারে, কিন্তু ভুল call মানে পুরো loss।
UMA dispute strategy কি crowded?
Market making-এর তুলনায় কম। UMA dispute prediction-এ legal এবং political context পড়তে হয়, যা বেশিরভাগ quant bot করে না। Strategy-টিতে human judgment-এর সঙ্গে quant infrastructure-এর জন্য জায়গা আছে - hybrid bot-এর জন্য এটি ভালো fit।
UMA dispute bot-এর worst case কী?
DVM বিপরীত দিকে vote করলে position ধরে রাখা। প্রতিটি disputed market-এ risk cap করুন - আমরা confidence যাই হোক না কেন single disputed market-এ সর্বোচ্চ 50 USD ব্যবহার করি, কারণ প্রতিটি "obvious" call শেষ পর্যন্ত miss করে।