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
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:
Deploys a YES OutcomeToken contract
Deploys a NO OutcomeToken contract
Deploys the MarketEngine contract, passing both token addresses
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)
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)
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)
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 addressapprove(address spender, uint256 amount)— Approve spendingtransferFrom(address from, address to, uint256 amount)— Transfer on behalfbalanceOf(address account)— Check token balancetotalSupply()— Total tokens in circulation
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