Skip to main content

Market types

Financial (price predictions)
  • Any TradFi (traditional finance) or DeFi asset that already has a Pyth price feed can be listed as an Outcome.
  • What is Pyth Network? A high-frequency, first-party price oracle that publishes real-time feeds (crypto, equities, FX, commodities) to multiple chains so markets can settle on objective prices.
Real-World Events (RWE)
  • Any real-world event with a verifiable data point can be listed as an Outcome via SEDA.
  • What is the SEDA protocol? A decentralized oracle framework that turns off-chain data (from APIs/web sources) into on-chain feeds to resolve event outcomes.

Market format

  • Binary options: Yes / No
  • Custom options (when appropriate): e.g., Up / Down, Over / Under

Who can create markets?

  • Admins currently curate and list the highest-quality markets.
  • Users can also propose (and in some cases create) markets.
  • Roadmap: listing will become more decentralized over time.

Roles & interactions

Creation flow

  1. Community suggests an idea in #market-requests (Discord).
  2. Admin reviews for clarity, resolution source, and oracle availability (Pyth/SEDA).
  3. Smart-contract factory mints the market; the UI auto-indexes it.
Want a new market? Post a concise statement with a verifiable outcome (e.g. “BTC closes ≥ $120 k on 31 Dec 2025”).

Listing criteria

Events must meet these guidelines before being listed:
  1. Provide a clear, unambiguous statement with a verifiable outcome.
  2. Reference a reliable data source for resolution.
  3. Have an available oracle capable of monitoring that source.
  4. Specify start and end times that avoid overlap or ambiguity.
  5. Avoid duplicating existing markets and comply with platform rules.

Behind the scenes

  /**
     * @notice Deploy a new MarketImplementation and initialize it.
     */
    function createMarket(
        address _admin,
        address _oracle,
        address _collateralToken,
        address _outcomeToken1155,
        address _walletFactory,
        uint256 _marketId,
        uint256 _startTime,
        uint256 _endTime,
        uint256 _chainId,
        IMarket.TriggerCondition calldata tc
    ) external onlyOwner returns (address) {
        require(_admin != address(0), "Invalid admin");
        require(_oracle != address(0), "Invalid oracle");
        require(_collateralToken != address(0), "Invalid collateral");
        require(_outcomeToken1155 != address(0), "Invalid outcome token");
        require(_walletFactory != address(0), "Invalid wallet factory");
        require(_endTime > _startTime, "Invalid time range");
        require( marketAddress[_marketId] == address(0),"MarketID exists");

        // Deploy a fresh MarketImplementation
        MarketImplementation market = new MarketImplementation();

        // Initialize
        market.initialize(
            _admin,
            _oracle,
            _collateralToken,
            _outcomeToken1155,
            _walletFactory,
            _marketId,
            _startTime,
            _endTime,
            _chainId,
            matchingEngine,
            tc
        );

        // Authorize the new market to mint from the outcome token (if needed).
        OutcomeToken1155(_outcomeToken1155).setMinter(address(market), true);

        allMarkets.push(address(market));
        marketAddress[_marketId] = address(market);
        emit MarketCreated(address(market), _marketId, _admin, _oracle);
        return address(market);
    }