Polymarket Bot Tutorial · Kabanata 18 ng 32
UMA dispute prediction bots sa Polymarket: i-detect ang Optimistic Oracle proposals, hulaan ang dispute likelihood, samantalahin ang pre-and-post-dispute price asymmetry, at iwasan ang disputed-market death spirals.
Ano ang sinasaklaw ng kabanatang ito
Ang UMA's Optimistic Oracle ay nag-re-resolve ng Polymarket markets, at ang disputes ay lumilikha ng price anomalies bago at pagkatapos ng pag-fire. May tradeable patterns sa parehong panig ng dispute, ngunit ang strategy ay operationally complex at nakapaso na sa mas maraming bots kaysa sa naparamdaman nito. Ang kabanatang ito ay ang honest playbook.
- Paano gumagana ang UMA Optimistic Oracle
- Pag-detect ng proposal on-chain
- Dispute predictors (volume, ambiguity, history)
- Pre-dispute price asymmetry
- Post-dispute trade setups
- Kailan HINDI mag-trade ng disputed markets
- Code: mag-subscribe sa UMA proposed/disputed events
Paano gumagana ang UMA Optimistic Oracle
Ang UMA's Optimistic Oracle (OO) ay ang dispute resolution layer para sa Polymarket. Bawat market resolution ay dumadaan sa OO; karamihan ay uncontested at nag-se-settle ng awtomatiko. Ang mga contested - disputes - ay nag-tri-trigger ng 24-72 oras na voting period kung saan nagdedesisyon ang UMA token holders sa outcome.
Ang lifecycle: ang resolver ng Polymarket ay nagmumungkahi ng presyo (0 = NO nanalo, 1 = YES nanalo). Pagkatapos ng 2-oras na challenge window, kung walang nag-dispute, ang presyo ay finalized at namamahagi ng payouts ang CTF contract. Kung may nag-dispute, ang market ay pumapasok sa voting window; bumoboto ang UMA holders, nananalo ang majority.
Para sa bot, ang relevant events ay ProposePrice (proposal pumasok, bumukas ang challenge window) at DisputePrice (na-file ang dispute, nagsisimula ang voting period). Mag-subscribe sa mga ito upang masubaybayan ang market resolution state sa real time.
Pag-detect ng proposal on-chain
Ang UMA OO contract sa Polygon ay nag-e-emit ng ProposePrice event na may mga parameter (requester, identifier, timestamp, ancillaryData, proposer, proposedPrice). I-filter sa pamamagitan ng kilalang requester address ng Polymarket upang limitahan sa relevant proposals.
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}")
Ang ancillaryData field ay hex-encoded JSON na naglalarawan ng market question. Ang pag-decode nito ay nagbibigay sa iyo ng market identifier na maaari mong i-cross-reference laban sa iyong open positions.
Dispute predictors (volume, ambiguity, history)
Tatlong pre-dispute signals ang nag-correlate sa mga aktwal na disputes mamaya.
- Total volume: ang markets na may > $1M sa lifetime volume ay nag-dispute sa 4x na rate ng maliliit na markets. Mas maraming kapital sa stake = mas maraming incentive na mag-challenge.
- Ambiguous wording: anumang market na may "or similar," "officially confirmed," o compound conditions (petsa AT specific outcome) ay may pataas na dispute rates.
- Past disputes sa parehong event: kung ang nakaraang proposal ay na-dispute na at na-re-propose, ang pangalawang proposal ay nadidispute sa 2-3x normal rate.
Maaaring kalkulahin ng bot ang "dispute probability" score mula sa mga feature na ito at iwasan ang pagkuha ng positions sa markets sa itaas ng threshold malapit sa resolution.
Pre-dispute price asymmetry
Sa mga oras bago ang malamang na dispute, ang market price ay madalas na nagpapakita ng asymmetric movement: ang panig na pinangalanan ng proposer bilang YES ay nag-drift pababa (dahil natatakot ang mga trader na ang dispute ay magpapalit nito), ang kabilang panig ay nag-drift pataas.
Kung mayroon kang directional view kung paano mag-re-resolve ang dispute, ito ay tradeable window. Ang panganib: kung hindi nangyari ang dispute, ang asymmetry ay bumabaligtad kapag nagsara nang walang nangyari ang challenge window at ang mga presyo ay bumabalik sa proposed direction.
Honest: karamihan sa pre-dispute asymmetry trades ay losing trades dahil karamihan sa challenges ay nag-re-resolve pabor sa original na proposal. Ang strategy ay gumagana lamang kapag may specific information ka kung bakit malamang na masisustenan ang dispute na ito.
Post-dispute trade setups
Pagkatapos na ma-file ang dispute, ang market ay nag-trade sa loob ng 24-72 oras sa "limbo" - kilala na disputed, ang outcome ay bobotohan. Mayroong dalawang setup.
Convergence sa UMA consensus: kung ang dispute resolution ay nasenyas nang maaga (e.g. prominent UMA voter na publicly kumukuha ng panig), ang presyo ay gumagalaw papunta sa resolusyon na iyon. Ang bot na nanonood ng UMA Discord / Twitter signals + price action ay maaaring mahuli ito 30-60% ng oras.
Volatility farming: ang limbo periods ay may malalapad na spreads. Ang matiyagang market maker ay maaaring kumita ng spread tax sa kabuuan ng maraming traders na umiikot pasok-labas sa voting window. Ang inventory risk ay mataas; sukatin nang naaayon.
Pareho ay nangangailangan ng comfort sa genuine possibility ng resolution laban sa iyong position. Tratuhin ang dispute-period inventory bilang half-size sa pinakamarami.
Kailan HINDI mag-trade ng disputed markets
Tatlong sitwasyon kung saan ang dispute trade ay mali sa default.
- Wala kang UMA-specific view. Kung ang iyong tanging edge ay "ang original proposal ay mukhang tama sa akin," wala kang edge sa original proposer - at ang dispute filer ay nag-iisip ng kabaligtaran. Ang voting outcome ay coin flip na hindi mo mahuhulaan.
- Ang dispute ay sa ambiguous wording. Ang UMA voters sa pangkalahatan ay sumasandig sa strict-reading-of-the-question. Kung sinabi ng market "by January 31" at nangyari ang event ng February 1, mag-re-resolve ang UMA ng NO anuman ang intuwisyon ng trader population.
- Mayroon kang inventory mula sa bago ang dispute. Ang pagdaragdag sa existing position upang "average down" sa limbo ay ang klasikal na capital-destruction pattern. Hawakan o lumabas, huwag kailanman magdagdag.
Code: mag-subscribe sa UMA proposed/disputed events
Reference: WebSocket subscription sa UMA OO events, na-filter sa Polymarket requester.
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)
Ang pattern: mag-subscribe, mag-decode, mag-alert. Ang pag-act sa disputes algorithmically ay high-risk; ang trabaho ng bot ay karaniwang i-surface ang event sa human reviewer.





