Reference
Trading security model
Trading has not been audited. Tests and internal reviews are not substitutes for an independent security assessment. This page states what the contracts defend against, what they assume, and what they leave to the user.
Custody and reentrancy
The pair rejects foreign ShareTokens, INVALID, and noncanonical universe IDs in both single and batch callbacks. A reentrancy lock covers all reserve and LP mutations. Recipient callbacks can execute arbitrary code, so final reserves are read from authoritative balances after transfers. Recorded-balance deficits revert; valid donations synchronize upward.
The router recognizes pairs only through its immutable factory, opens callback state only around one expected pool and share token, and restores its starting share balances. Its ETH receiver opens only around redemption from that pool. This prevents unsolicited callbacks and keeps forced ETH separate from exit proceeds.
Factory checks prevent a malicious pool from borrowing another question's ShareToken or universe identity. CREATE2 plus one immutable fee gives one canonical pair per exact pool without privileged replacement.
Because an ERC-1155 transfer to an address without code cannot invoke a receiver callback, an attacker can send shares to a predicted CREATE2 address before deployment. Pair construction detects its canonical INVALID, YES, and NO balances and irrecoverably quarantines them in the factory's ownerless sink. Initialization then starts with zero canonical balances, including zero INVALID. Foreign token contracts cannot be enumerated and may still assign irrelevant balances to the address; the pair never recognizes or moves them.
Assumptions
- The configured Zoltar
SecurityPoolFactory, pool,ShareToken, forker, question data, and universe state are canonical and behave as implemented in the matching core release. - Users set realistic slippage and deadlines and obtain a fresh simulation in the current block immediately before submission.
- Wallets and RPC endpoints accurately report account, chain, balances, approvals, and receipts.
- ERC-1155 recipients can execute arbitrary code, so pair and router accounting uses reentrancy guards and updates from authoritative balances after callbacks.
- Direct valid YES/NO donations accrue to current LPs. Direct INVALID and foreign token IDs are rejected.
- Canonical shares sent to a predicted pair address before deployment are irrecoverably quarantined in the factory's ownerless sink. Users must not transfer assets to counterfactual addresses.
- Forced ETH can remain in the router; an exit forwards only its measured operation delta.
Known risks
Constant-product spot prices are manipulable and expose users to front-running and sandwiches. There is no TWAP or manipulation-resistant oracle. A lifecycle transition, fork, resolution, reserve donation, retention update, or intervening trade can invalidate a quote; contract guards and slippage bounds make the transaction revert rather than promise execution. Initial liquidity determines the starting conditional price and should be initialized atomically. LP tokens cover only YES/NO reserves; separately held INVALID can be lost, transferred, or insufficient. A valid-resolution LP can suffer directional loss, and YES/NO reserves may have no redemption value after an INVALID result.
Remaining risks also include first-price choice, stale simulation, lifecycle races, recipient denial of ETH or ERC-1155 reception, core-contract bugs, and approval misuse. Slippage and deadlines bound execution but do not remove MEV. The immutable factory fee is a deployment choice, not a claim of economic optimality.
Reporting a vulnerability
Report a suspected vulnerability through GitHub private vulnerability reporting. Include the affected commit, contracts and functions, prerequisites, a minimal reproduction, expected impact, and whether funds or deployment keys may be at immediate risk. If private reporting is unavailable, open a public issue asking maintainers to establish a private channel, but do not include vulnerability details. Do not exploit a live deployment or publish details before maintainers have had a reasonable opportunity to respond.