Polymarket Bot Tutorial · Kapitel 18 von 32

UMA Dispute-Prediction-Bots auf Polymarket: Optimistic Oracle-Proposals erkennen, Dispute-Wahrscheinlichkeit vorhersagen, Preis-Asymmetrien vor und nach dem Dispute ausnutzen und Death Spirals bei disputed markets vermeiden.

Was dieses Kapitel abdeckt

UMAs Optimistic Oracle (OO) ist die Dispute-Resolution-Schicht für Polymarket, und Disputes erzeugen vor und nach ihrer Auslösung Preis-Anomalien. Tradeable Patterns gibt es auf beiden Seiten eines Disputes, aber die Strategie ist operativ komplex und hat mehr Bots verbrannt, als sie ernährt hat. Dieses Kapitel ist das ehrliche Playbook.

  • Wie UMA Optimistic Oracle funktioniert
  • Eine Proposal on-chain erkennen
  • Dispute-Predictors (Volume, Ambiguity, History)
  • Pre-Dispute-Preis-Asymmetrie
  • Post-Dispute-Trade-Setups
  • Wann man disputed markets NICHT traden sollte
  • Code: auf UMA proposed/disputed events subscriben

Wie UMA Optimistic Oracle funktioniert

UMAs Optimistic Oracle (OO) ist die Dispute-Resolution-Schicht für Polymarket. Jede Market-Resolution läuft über OO; die meisten sind unangefochten und werden automatisch abgewickelt. Die umstrittenen Fälle - Disputes - lösen eine 24- bis 72-stündige Voting-Phase aus, in der UMA-Token-Holder das Ergebnis entscheiden.

Der Ablauf: Der Resolver von Polymarket schlägt einen Preis vor (0 = NO hat gewonnen, 1 = YES hat gewonnen). Nach einem 2-stündigen Challenge-Window wird der Preis, wenn niemand Dispute einlegt, finalisiert und der CTF-Contract verteilt die Auszahlungen. Legt jemand Dispute ein, geht der Markt in ein Voting-Window; UMA-Holder geben Votes ab, die Mehrheit gewinnt.

Für einen Bot sind die relevanten Events ProposePrice (Proposal eingereicht, Challenge-Window geöffnet) und DisputePrice (Dispute eingereicht, Voting-Phase beginnt). Subscribe auf diese Events, um den Market-Resolution-Status in Echtzeit zu verfolgen.

Eine Proposal on-chain erkennen

Der UMA-OO-Contract auf Polygon emittiert ein ProposePrice-Event mit den Parametern (requester, identifier, timestamp, ancillaryData, proposer, proposedPrice). Filtere nach der bekannten Requester-Adresse von Polymarket, um die relevanten Proposals einzugrenzen.

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}")

Das Feld ancillaryData ist hex-encodiertes JSON, das die Marktfrage beschreibt. Wenn du es decodierst, erhältst du die Markt-ID, die du mit deinen offenen Positionen abgleichen kannst.

Dispute-Predictors (Volume, Ambiguity, History)

Drei Signale vor einem Dispute korrelieren mit späteren tatsächlichen Disputes.

  • Total Volume: Märkte mit > $1M Lifetime-Volume werden 4x so häufig disputed wie kleine Märkte. Mehr Kapital auf dem Spiel = mehr Anreiz, anzufechten.
  • Ambiguous wording: Jeder Markt mit "or similar", "officially confirmed" oder zusammengesetzten Bedingungen (Datum AND spezifisches Ergebnis) hat erhöhte Dispute-Raten.
  • Vergangene Disputes beim selben Event: Wenn ein früheres Proposal bereits disputed und erneut vorgeschlagen wurde, wird die zweite Proposal 2-3x häufiger disputed als normal.

Ein Bot kann aus diesen Merkmalen einen "Dispute Probability"-Score berechnen und Positionen in Märkten oberhalb eines Schwellenwerts kurz vor der Resolution vermeiden.

Pre-Dispute-Preis-Asymmetrie

In den Stunden vor einem wahrscheinlichen Dispute zeigt der Marktpreis oft eine asymmetrische Bewegung: Die Seite, die der Proposer als YES genannt hat, driftet nach unten (weil Trader befürchten, dass ein Dispute das Ergebnis kippt), die andere Seite driftet nach oben.

Wenn du eine Richtungsmeinung dazu hast, in welche Richtung der Dispute aufgelöst wird, ist das ein handelbares Zeitfenster. Das Risiko: Wenn der Dispute nicht eintritt, kehrt sich die Asymmetrie um, sobald das Challenge-Window ohne Ereignis endet und die Preise in die vorgeschlagene Richtung zurückspringen.

Ehrlich: Die meisten Pre-Dispute-Asymmetrie-Trades sind Verlusttrades, weil die meisten Challenges zugunsten des ursprünglichen Proposals enden. Die Strategie funktioniert nur, wenn du spezifische Informationen darüber hast, warum dieser Dispute wahrscheinlich bestätigt wird.

Post-Dispute-Trade-Setups

Nachdem ein Dispute eingereicht wurde, handelt der Markt 24-72 Stunden in einer Art "Limbo" - bekannt als disputed, das Ergebnis wird per Vote entschieden. Es gibt zwei Setups.

Convergence to UMA consensus: Wenn die Dispute-Resolution früh signalisiert wird (z. B. wenn ein prominenter UMA-Voter öffentlich eine Seite wählt), bewegt sich der Preis in Richtung dieses Ergebnisses. Ein Bot, der UMA-Discord-/Twitter-Signale + Price Action beobachtet, kann dies 30-60% der Zeit erwischen.

Volatility farming: In Limbo-Phasen sind die Spreads breit. Ein geduldiger Market Maker kann die Spread-Tax über mehrere Trader hinweg verdienen, die während des Voting-Windows rein- und rausrotieren. Das Inventory-Risiko ist hoch; Größe entsprechend wählen.

Beide erfordern die Bereitschaft, dass die Resolution real gegen deine Position ausfällt. Behandle Inventory im Dispute-Period höchstens als halbe Größe.

Wann man disputed markets NICHT traden sollte

Drei Situationen, in denen der Dispute-Trade standardmäßig falsch ist.

  • Du hast keine UMA-spezifische Meinung. Wenn dein einziger Edge lautet: "Die ursprüngliche Proposal sieht für mich richtig aus", dann hast du keinen Edge gegenüber dem ursprünglichen Proposer - und der Dispute-Filer sieht es genau andersherum. Das Voting-Ergebnis ist ein Coin Flip, den du nicht vorhersagen kannst.
  • Der Dispute bezieht sich auf eine zweifelhafte Formulierung. UMA-Voter tendieren generell zu einer strikten Lesart der Frage. Wenn der Markt sagte "bis zum 31. Januar" und das Event fand am 1. Februar statt, wird UMA NO auflösen, unabhängig von der Intuition der Trader-Population.
  • Du hältst Inventory aus der Zeit vor dem Dispute. Zu einer bestehenden Position in der Limbo-Phase dazuzukaufen, um "durchzuaveragen", ist das klassische Muster der Kapitalvernichtung. Halten oder exitten, niemals adden.

Code: auf UMA proposed/disputed events subscriben

Referenz: WebSocket-Subscription auf UMA-OO-Events, gefiltert nach dem 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)

Das Muster: subscriben, decodieren, alarmieren. Disputes algorithmisch zu handeln ist hochriskant; die Aufgabe des Bots ist normalerweise, das Event für einen menschlichen Reviewer sichtbar zu machen.

Häufig gestellte Fragen

Was ist das UMA Optimistic Oracle?
UMAs Optimistic Oracle ist das System, das Polymarket-Märkte auflöst. Ein Proposer reicht eine vorgeschlagene Antwort ein; wenn innerhalb eines Fensters niemand Dispute einlegt, wird die Antwort final. Wenn ein Dispute eingelegt wird, stimmen UMA-Token-Holder (DVM) über die Abwicklung ab. Die meisten Polymarket-Märkte werden unangefochten aufgelöst - Disputes sind der Sonderfall.
Wie kann ich eine UMA-Proposal in Echtzeit erkennen?
Subscribe auf den UMA Optimistic Oracle V2-Contract auf Polygon für ProposePrice-Events, gefiltert nach der Polymarket-Adapter-Adresse. Die Proposal löst ein 2-stündiges Dispute-Window aus, in dem der Marktpreis oft von 1.00 / 0.00 abweicht, weil Trader Dispute-Risiko einpreisen.
Was sagt einen UMA-Dispute voraus?
Drei Signale: (1) Volume - Märkte mit hohem Volumen (>$10M) ziehen mehr Disputes an, weil der Preis größer ist. (2) Ambiguity in den Resolution-Kriterien - wenn der Markt-Titel schwammig ist, steigt das Dispute-Risiko. (3) Historie vergangener Disputes der Proposer-Wallet. Kombiniere diese in einer logistischen Regression als Basis-Dispute-Predictor.
Kann ich handeln, nachdem ein Dispute eingereicht wurde?
Ja, aber es ist riskant. Sobald disputed, geht der Markt in DVM-Voting über, was etwa 48-72 Stunden dauert und dessen Ergebnis binär (und final) ist. Der Preis konvergiert typischerweise vor dem Voting zu einer Seite. Bots, die sich auf Basis von legaler/faktischer Analyse positionieren, können profitabel sein, aber eine falsche Einschätzung bedeutet Totalverlust.
Ist die UMA-Dispute-Strategie crowded?
Weniger als Market Making. UMA-Dispute-Prediction erfordert das Lesen von legalem und politischem Kontext, was die meisten Quant-Bots nicht tun. Die Strategie bietet Raum für menschliches Urteil plus Quant-Infrastruktur - gut geeignet für Hybrid-Bots.
Was ist der Worst Case für einen UMA-Dispute-Bot?
Eine Position zu halten, wenn das DVM in die entgegengesetzte Richtung votet. Begrenze das Risiko pro disputed market - wir verwenden maximal 50 USD pro einzelnen disputed market, unabhängig von der Überzeugung, weil jede "offensichtliche" Entscheidung irgendwann falsch liegt.