Market definition
Market commitment
Share this descriptor before anyone funds. It commits to the question, outcomes, arbiter, refund key, network, and both deadlines.
Funding addresses — one per outcome
Publish checklist
- Post the descriptor where traders can see it (forum, chat, Nostr).
- Post the canonical market JSON (download above) — anyone can recompute the descriptor from it.
- Traders verify: same descriptor from the JSON, addresses re-derive (Verify tab).
- Funding is only valid before the trading deadline — late funds are at the trader's own risk.
Descriptor pearl-predict:v1:<hrp>:<marketHash>:<nOutcomes>:<tradeH>:<resolveH>, marketHash = SHA-256 over the canonical market JSON. Taproot addresses use a NUMS internal key (H("PearlPredictNUMS/v1"‖marketHash‖outcomeIndex)) — nobody knows the private key, so coins move only through the two script leaves.
Track positions
Traders fund their chosen outcome's address. Record each funding here — paste a funding txid and let the desk read it off Blockbook (GET-only), or enter a position by hand. Payout addresses are recorded per position; the chain cannot tell us where a trader wants to be paid, so confirm them with the trader.
Add position by hand
Import funding txid from Blockbook
Reads the transaction GET-only and matches its outputs against the outcome addresses. The payout address is not on-chain — enter it per position after import.
Positions
| Outcome | txid:vout | Value | Payout address | Label |
|---|
Pot totals and implied probabilities update as positions are recorded. Pot = Σ positions on that outcome. Implied P = pot ÷ total pot.
Award payout
The arbiter picks the winning outcome. The desk builds one transaction spending every tracked funding UTXO (winners' and losers' pots alike) and paying each winning-outcome funder stake × totalPot ÷ winningPot, minus the fee, grain-exact. The arbiter signs each input locally; every signature is re-verified before it enters the bundle.
Void path
If the market cannot resolve (ambiguous event, bad source), the refund leaf sweeps every pot back to its recorded funder after the resolution deadline: nLockTime = resolveH, stake minus a pro-rata fee share. Signed by the refund sweep key.
Signed bundle
Broadcasting is a separate, deliberate step — the bundle above moves real PRL the moment it confirms. Verify the bundle on the Verify tab first.
Lifecycle
Load a market, then refresh.
Deadlines
Countdowns assume the ~194 s Pearl block target and the last known tip.
Standalone verifier
Paste a descriptor, its canonical market JSON, and a payout bundle. The verifier recomputes everything — descriptor hash, outcome addresses, payout proportionality, and every Schnorr signature — and answers PROVEN or a loud NOT PROVEN.