Outcome Tokens

Each MarkIt market deploys two OutcomeToken contracts — one for YES, one for NO. These are standard ERC-20 tokens with restricted minting and burning.

Token Properties

Property
Value

Standard

ERC-20 (OpenZeppelin)

Decimals

18

Name format

"YES - {question}" / "NO - {question}"

Symbol

mYES / mNO

Minting

Restricted to parent MarketEngine

Burning

Restricted to parent MarketEngine

Transferable

Yes (standard ERC-20 transfer/approve)

How Tokens Are Created

When the MarketFactory creates a new market, it:

  1. Deploys a YES OutcomeToken contract

  2. Deploys a NO OutcomeToken contract

  3. Deploys the MarketEngine contract, passing both token addresses

  4. Calls setEngine() on each token, binding it to the MarketEngine

After setEngine() is called, the engine address is permanent — it cannot be changed. This ensures only the designated MarketEngine can mint or burn that token.

Engine-Restricted Operations

mint(address to, uint256 amount)

Mints amount tokens (18-decimal WAD) to the to address. Called by MarketEngine when a trader takes a position.

Access: Only the bound engine. Reverts with OnlyEngine if called by any other address.

burn(address from, uint256 amount)

Burns amount tokens (18-decimal WAD) from the from address. Called by MarketEngine during redemption (redeem) or cleanup (sweepLosing).

Access: Only the bound engine. Reverts with OnlyEngine if called by any other address.

setEngine(address _engine)

One-time function that binds the token to its parent MarketEngine. Called by the factory during market creation.

Access: Only the deployer (factory). Can only be called once — subsequent calls revert.

Token Lifecycle

Standard ERC-20 Functionality

OutcomeTokens support all standard ERC-20 operations:

  • transfer(address to, uint256 amount) — Transfer tokens to another address

  • approve(address spender, uint256 amount) — Approve spending

  • transferFrom(address from, address to, uint256 amount) — Transfer on behalf

  • balanceOf(address account) — Check token balance

  • totalSupply() — Total tokens in circulation

circle-info

Tokens are transferable but there is no secondary market. While you can send tokens to another wallet, there is currently no DEX liquidity or marketplace for MarkIt outcome tokens. The primary way to exit a position before resolution is to hedge by buying the opposite side within MarkIt.

Last updated