How-to guide
Handle a universe fork
A fork closes the parent trading pool for swaps and additions and leaves every migration decision to you. This guide walks through moving a position into the child universe or universes you choose.
Migrate a position
- Check the market's outcome. If it has already finalized, follow Handle resolution to redeem winning shares through its SecurityPool. Continue below only while the question is unresolved.
- Remove parent LP into parent Yes and No shares (Remove liquidity).
- Decide the destination child universe or universes for each of your Invalid, Yes, and No balances. Nothing in Trading chooses a child universe or migrates LP for you.
- For every nonzero parent balance you intend to migrate, submit one
ShareToken.migrate(fromId, targetOutcomeIndexes)call with that token ID and the explicitly chosen, strictly increasing target outcome indexes. Each call mints the matching child-universe share balance. The parent balance stays visible, but that source token ID is locked for the wallet and can no longer be transferred. - After each call, verify the expected child token ID and balance, then refresh or discover the canonical child SecurityPool.
- Wait until the child SecurityPool is
Operational: shared portfolio branches use their fixed activation deadline and shared Collateral Repair Auction where required. Then create a trading pool only if you intend to trade. A child SecurityPool can take a trading pool only if it is back toOperationalbefore the question's end date. Parent and child token IDs and reserves stay separate.
To recover collateral from an active shared portfolio child, use Settlement. Complete-set and winning-share claims can pay ETH and REP together, including REP-only recovery. Redemption does not require a trading pool or an auction bid.
Choose fork targets
Source and destination are independent: a parent Invalid, Yes, or No share can migrate into any valid child universe of the fork question, and the child receives the same share outcome as the source. Migrating parent Yes into three scalar child universes, for example, produces child Yes shares in all three children.
- For a categorical fork, select Invalid or one or more labeled answers.
- For a scalar fork, select Invalid or add one or more exact scalar ticks. The UI displays the human value and derives the packed onchain outcome index.
A single-target call may create a missing child SecurityPool. A multi-target call must reference children whose canonical pools already exist. To migrate one source share to several new scalar outcomes, submit each missing outcome by itself; locking prevents transfers but not later migration of the same source into a new child. Once those children exist, another source share can target all of them in one call. Every call must add at least one source-and-child entitlement the wallet has not migrated before.
In the UI
- Open the market's Settlement tab and select Migrate.
- Choose the Share to migrate (Invalid, Yes, or No).
- Pick one or more child universes from the fork question's categorical answers or scalar ticks.
- Tick the acknowledgment that the migration moves your entire balance and permanently locks that share's transfers in the parent universe.
- Select Migrate to N child universes. The transaction copies and locks your entire balance of the selected source share.
- Repeat for each source share you want to move.
Forks and resolution explains why the trading pool behaves this way.