Market Resolution
Every Polymarket market eventually reaches a conclusion — the event either happens or it doesn't, and the market "resolves." When this occurs, the outcome shares that were used as collateral on PredMart must be processed. Winning shares can be redeemed for $1.00 USDC each, while losing shares become worthless. PredMart handles both scenarios automatically through its market resolution system.
This page explains the complete resolution process: how PredMart detects resolved markets, what happens to positions backed by winning and losing shares, how redemption works, and how bad debt from losing positions is managed.
How Markets Resolve on Polymarket
The Resolution Process
When a real-world event occurs (or fails to occur by its deadline), Polymarket's resolution committee determines the outcome. This is done through Polymarket's oracle system — typically involving UMA's optimistic oracle or a designated resolution source.
Once the outcome is determined: 1. Polymarket marks the market as "resolved" in its API 2. The winning outcome's shares become redeemable for $1.00 each through the CTF contract 3. The losing outcome's shares become worthless ($0.00)
Binary Markets
For binary markets (Yes/No), exactly one outcome wins. If "Yes" wins, Yes shares are redeemable for $1.00 and No shares are worth $0.00, and vice versa.
Multi-Outcome Markets
For multi-outcome markets (e.g., "Which team will win?"), the winning outcome's shares are redeemable for $1.00, and all other outcomes' shares become worthless.
How PredMart Detects Resolutions
PredMart monitors Polymarket resolutions through multiple independent paths. When a market resolves and the outcome becomes final (shares become worth $1 or $0), the resolution monitor flags the event and initiates the on-chain settlement flow. Redundant detection paths keep the system responsive even if one path experiences an outage.
Oracle-Signed Resolution Data
To process a resolution on-chain, PredMart's backend provides oracle-signed resolution data to the smart contract. This data includes: - The token ID - Whether the token won or lost - A timestamp - The oracle's cryptographic signature
The contract verifies that the resolution data is valid, signed by the authorized oracle, and sufficiently recent.
Resolving a Market On-Chain
Market resolution functions have been moved to the PredmartPoolExtension contract and are called via delegatecall through the main contract's fallback() function. From the user's perspective, nothing changes — you still call these functions on the same proxy address (0xD90D012990F0245cAD29823bDF0B4C9AF207d9ee).
Anyone can call the resolveMarket(tokenId, resolutionData) function on the smart contract to formally register that a market has resolved. The function:
- Verifies the oracle's signature on the resolution data
- Verifies the resolution data is fresh (within 1 hour)
- Records whether the token won or lost in the contract's storage
- Emits a
MarketResolvedEvent(tokenId, won)event
Once a market is resolved on-chain, the contract knows whether each token is a winner or loser, and the appropriate position handling can proceed.
Won Markets: Redemption Flow
When a market resolves in favor of the collateral token (the outcome occurred), the shares are "winners" and can be redeemed for $1.00 USDC each through Polymarket's CTF contract.
Two-Step Settlement
- Redeem collateral (
redeemWonCollateral): converts all winning CTF shares for that token into USDC at $1.00 each. Callable by anyone after the market is resolved on-chain. - Settle each position (
settleRedemption): repays each borrower's debt from their proportional share, sends any surplus to them, deletes the position. Also callable by anyone.
Example: Alice posts 5,000 shares as collateral with $2,500 debt. Token wins. Shares redeem for $5,000; debt is repaid; Alice gets the $2,500 surplus. If she had zero debt, she'd receive the full $5,000.
Lost Markets: Bad Debt Handling
When a market resolves against the collateral token (the outcome did not occur), the shares become worthless — $0.00. This is the most significant risk in PredMart's system.
Closing Lost Positions
For positions backed by losing tokens, the function closeLostPosition(borrower, tokenId) is called. This function:
- Verifies the token has been marked as a loser via
resolveMarket() - Calculates the borrower's outstanding debt
- Since the collateral is worthless, the entire debt becomes bad debt
- The bad debt is absorbed by the lending pool (reducing
totalBorrowAssetswithout a corresponding USDC inflow) - The position is deleted
- Emits a
PositionClosed(borrower, tokenId, badDebt)event
Impact of Bad Debt on Lenders
When bad debt is absorbed:
Total Borrow Assets -= Debt Amount (debt is written off)
(but no USDC is added to the pool)
This means totalAssets decreases by the bad debt amount. Since pUSDC share value is based on totalAssets / totalPUSDCSupply, all pUSDC shares lose a proportional amount of value.
Example: - Pool has $1,000,000 in total assets - A market resolution creates $10,000 in bad debt - Total assets drop to $990,000 - All lenders experience a 1% loss on their position value
Mitigating Bad Debt Risk
PredMart employs several mechanisms to minimize bad debt from market resolutions:
-
LTV cap: The flat 80% LTV ensures borrowers always maintain at least 20% equity, limiting bad debt exposure. See Protocol Constants.
-
Real-time liquidation: As a market's price crashes toward $0 (indicating resolution against the outcome), PredMart's liquidation engine intervenes. The liquidation happens before the official resolution, recovering most of the debt through collateral seizure while the shares still have some value.
-
Per-market borrow caps: Limits total borrowing against any single token, capping the maximum bad debt exposure from any one market.
-
Pool cap diversification: The per-token cap ensures that even complete loss of one token's value limits total damage. See Protocol Constants.
The Race Between Liquidation and Resolution
In practice, sudden bad debt from resolution is rare because the price usually drops gradually as news spreads — giving the liquidator time to seize and sell collateral while it still has value. The risk spikes when the price collapses in seconds, the market is thin, or many positions hit their threshold simultaneously.
Resolution Monitor
PredMart's resolution monitor automatically manages the full resolution lifecycle:
- Detection: Identifies resolved markets from Polymarket
- On-chain resolution: Calls
resolveMarket()to register the outcome on the contract, which immediately blocks new deposits and borrows against the resolved token - Winner processing: Calls
redeemWonCollateral()andsettleRedemption()for winning tokens - Loser processing: Calls
closeLostPosition()for losing tokens
Positions Without Debt on Losing Markets
If a borrower deposited collateral but never borrowed against it, and the market resolves as a loss, the closeLostPosition() function still needs to be called to clean up the position. However, since there's no debt, there's no bad debt — the position is simply deleted, and the worthless collateral is discarded.
The borrower loses their shares (which are worth $0 anyway), but no impact on the pool occurs.
Timeline: Market Resolution Processing
| Step | What Happens |
|---|---|
| 1 | Polymarket determines the outcome |
| 2 | PredMart detects the resolution |
| 3 | resolveMarket() called on-chain with oracle-signed data |
| 4 | For winners: redeemWonCollateral() converts shares to USDC |
| 5 | For each winner: settleRedemption() repays debt and sends surplus |
| 6 | For each loser: closeLostPosition() writes off bad debt |
Resolution Events
Emitted on-chain during the resolution lifecycle: MarketResolvedEvent, PositionClosed (loser, debt written off), CollateralRedeemed (winner shares → USDC), RedemptionSettled (per-borrower payout). Full signatures in Smart Contract Reference.
Key Takeaways
-
Winning markets are profitable for borrowers: If your collateral wins, you get back $1.00 per share minus your outstanding debt. This is usually a very positive outcome.
-
Losing markets create bad debt: If your collateral loses, your shares are worth $0 and your debt is written off. Lenders absorb the loss proportionally.
-
Liquidation usually happens before resolution: In most cases, the price drops gradually enough that positions are liquidated before formal resolution, minimizing bad debt.
-
PredMart processes everything automatically: You don't need to manually redeem winning shares or close losing positions — the resolution monitor handles it.
-
The pool cap limits worst-case damage: Even if an entire token's borrowers default, the per-token cap limits total bad debt. See Protocol Constants.
Next Steps
- Liquidation — How positions are liquidated before resolution
- Risk Parameters — The LTV curve and health factor system
- Lending — Understanding bad debt risk as a lender
- Protocol Constants — Resolution-related parameters