All contracts are deployed on BNB Chain Testnet (Chain ID 97) and verified on BSCScan.
Complete Contract List
Core Contracts
| Contract | Address | Purpose |
|---|
| ConditionalTokens | 0x1E98E6F28A44c3F7a8Ce8ff93312eB32d3782841 | ERC1155 token factory for YES/NO positions |
| WrappedCollateral | 0xc209DAE9D9Eda311c80a105420f849f32BB15c54 | Wraps USDT into wUSDT for trading |
| CTFExchange | 0xA78dFb49Fc0A2907e8991a28a7F65218b4A3F40d | Main orderbook settlement contract |
| TestUSDT | 0xe8eDFeF8d10F960053927E10732e11000D23c8c0 | Testnet USDT with faucet function |
Oracle Contracts
| Contract | Address | Purpose |
|---|
| UmaCompatibleCtfAdapter | 0x1Ea9a6086724D8e15933b911b2095aa249475D48 | Oracle adapter for binary markets |
| UmaCtfAdapterNegRisk | 0xa92DDe2473b02eDc02DAB845518A68B3EaBbe1Bb | Oracle adapter for multi-outcome markets |
Multi-Outcome (NegRisk) Contracts
| Contract | Address | Purpose |
|---|
| NegRiskAdapter | 0xA3d57621d45aB0b83c993c4852abF4Eaece46B8A | Adapter for multi-outcome betting |
| NegRiskOperator | 0x952dcD3707c018Df1634EeA56d868F4b5bf988E6 | Operator for NegRisk positions |
| NegRiskCtfExchange | 0x7019ef0cd211078068E37968F49f6d5dAbDc8727 | Exchange for multi-outcome markets |
| NegRiskFeeModuleV2 | 0x2dAf69C6d704AC024E3E8b1068D240cDE9c24369 | Fee calculation for NegRisk |
Helper Contracts
| Contract | Address | Purpose |
|---|
| RegisterTokenHelper | 0xA89FB30D4A4E7236AdD685af21Ac3e6108a94C0a | Registers new token types |
Mayybee uses a pure CLOB (Central Limit Order Book) model. There is no AMM or FixedProductMarketMaker contract.
Contract Deep Dive
ConditionalTokens
The core contract that creates conditional tokens representing market outcomes.
Key Functions:
| Function | Description |
|---|
| prepareCondition | Creates a new condition for a market |
| splitPosition | Converts collateral into YES and NO tokens |
| mergePositions | Converts YES and NO back to collateral |
| redeemPositions | Claims winnings after resolution |
Token Creation Flow:
Token ID Calculation:
collectionId = keccak256(conditionId, indexSet)
tokenId = keccak256(collateralToken, collectionId)
Split Operation
Convert wUSDT into equal amounts of YES and NO tokens:
Merge Operation
Convert equal amounts back to collateral:
Merge requires equal amounts of YES and NO tokens.
Redeem After Resolution
When the oracle reports the outcome:
WrappedCollateral
Converts USDT to wUSDT for use with ConditionalTokens.
Why Wrap?
- Standard USDT is not compatible with ConditionalTokens
- wUSDT maintains 1:1 peg with USDT
- Required for all trading operations
Wrap/Unwrap Flow:
CTFExchange
The main contract for settling trades from the orderbook.
Order Structure:
| Field | Type | Description |
|---|
| salt | uint256 | Random unique number |
| maker | address | Order creator |
| signer | address | Signature provider |
| taker | address | Specific counterparty or 0x0 |
| tokenId | uint256 | Token to trade |
| makerAmount | uint256 | Amount maker provides |
| takerAmount | uint256 | Amount maker receives |
| expiration | uint256 | Order expiry timestamp |
| nonce | uint256 | For cancellation |
| feeRateBps | uint256 | Fee in basis points |
| side | uint8 | 0 for BUY, 1 for SELL |
| signatureType | uint8 | 1 for EIP-712 |
Settlement Flow:
Gas Costs
All gas is paid by the Operator wallet, not users.
| Operation | Gas Units | Cost on BSC |
|---|
| fillOrder | approximately 150,000 | approximately $0.02 |
| splitPosition | approximately 200,000 | approximately $0.03 |
| mergePositions | approximately 180,000 | approximately $0.025 |
| approve | approximately 50,000 | approximately $0.007 |
Full Contract Addresses (JSON)
For integration purposes:
{
"chainId": 97,
"network": "BSC Testnet",
"contracts": {
"conditionalTokens": "0x1E98E6F28A44c3F7a8Ce8ff93312eB32d3782841",
"wrappedCollateral": "0xc209DAE9D9Eda311c80a105420f849f32BB15c54",
"ctfExchange": "0xA78dFb49Fc0A2907e8991a28a7F65218b4A3F40d",
"umaCompatibleCtfAdapter": "0x1Ea9a6086724D8e15933b911b2095aa249475D48",
"negRiskAdapter": "0xA3d57621d45aB0b83c993c4852abF4Eaece46B8A",
"negRiskOperator": "0x952dcD3707c018Df1634EeA56d868F4b5bf988E6",
"negRiskFeeModuleV2": "0x2dAf69C6d704AC024E3E8b1068D240cDE9c24369",
"registerTokenHelper": "0xA89FB30D4A4E7236AdD685af21Ac3e6108a94C0a",
"negRiskCtfExchange": "0x7019ef0cd211078068E37968F49f6d5dAbDc8727",
"umaCtfAdapterNegRisk": "0xa92DDe2473b02eDc02DAB845518A68B3EaBbe1Bb",
"testUSDT": "0xe8eDFeF8d10F960053927E10732e11000D23c8c0"
},
"operator": "0x7aDB49aE5DF789EE9B9F82614609967cCe4eE23d"
}