Trading
- Trading Modes
- Assets & Contracts
- Trading Mechanics
- Risk Management
- Launchpad
- Trading View
MegaETH
Protocol Technical Reference
Contracts
CLOB.sol
Central Limit Order Book (CLOB) Contract
Types
Enums
enum Settlement {
INSTANT,
ACCOUNT
}
enum LimitOrderType {
GOOD_TILL_CANCELLED,
POST_ONLY
}
enum FillOrderType {
FILL_OR_KILL,
IMMEDIATE_OR_CANCEL
}
enum Side {
BUY,
SELL
}
Structs
struct PostLimitOrderArgs {
uint256 amountInBase;
uint256 price;
uint256 cancelTimestamp; // unix timestamp after which the order is cancelled. Ignore if 0
Side side;
uint96 clientOrderId; // custom order id — id will be uint256(abi.encodePacked(account, clientOrderId))
LimitOrderType limitOrderType;
Settlement settlement;
}
struct PostLimitOrderResult {
address account;
uint256 orderId;
uint256 amountPostedInBase; // amount posted in baseLots
int256 quoteTokenAmountTraded; // negative if outgoing, positive if incoming
int256 baseTokenAmountTraded; // negative if outgoing, positive if incoming
uint256 takerFee;
}
struct PostFillOrderArgs {
uint256 amount;
uint256 priceLimit;
Side side;
bool amountIsBase;
FillOrderType fillOrderType;
Settlement settlement;
}
struct PostFillOrderResult {
address account;
uint256 orderId;
int256 quoteTokenAmountTraded; // negative if outgoing, positive if incoming
int256 baseTokenAmountTraded; // negative if outgoing, positive if incoming
uint256 takerFee;
}
struct AmendArgs {
uint256 orderId;
uint256 amountInBase;
uint256 price;
uint256 cancelTimestamp;
Side side;
LimitOrderType limitOrderType;
Settlement settlement;
}
struct CancelArgs {
uint256[] orderIds;
Settlement settlement;
}
struct MarketConfig {
address factory;
uint256 maxNumOrders;
IERC20 quoteToken;
IERC20 baseToken;
uint256 quoteSize;
uint256 baseSize;
}
struct MarketSettings {
bool status;
uint8 maxLimitsPerTx;
uint256 minLimitOrderAmountInBase;
uint256 tickSize;
}
struct MarketMetadata {
uint96 orderIdCounter;
uint256 numBids;
uint256 numAsks;
uint256 baseTokenOpenInterest;
uint256 quoteTokenOpenInterest;
uint256 eventNonce;
}
struct Limit {
uint64 numOrders;
OrderId headOrder;
OrderId tailOrder;
}
Reads
function getBaseToken() external view returns (address);
function getBaseTokenAmount(uint256 price, uint256 quoteAmount) external view returns (uint256);
function getEventNonce() external view returns (uint256);
function getFactory() external view returns (address);
function getLimit(uint256 price, uint8 side) external view returns (Limit memory);
function getMarketConfig() external view returns (MarketConfig memory);
function getMarketSettings() external view returns (MarketSettings memory);
function getMaxLimitExempt(address account) external view returns (bool);
function getNextBiggestPrice(uint256 price, uint8 side) external view returns (uint256);
function getNextOrderId() external view returns (uint256);
function getNextOrders(uint256 startOrderId, uint256 numOrders) external view returns (Order[] memory);
function getNextSmallestPrice(uint256 price, uint8 side) external view returns (uint256);
function getNumAsks() external view returns (uint256);
function getNumBids() external view returns (uint256);
function getOpenInterest() external view returns (uint256 quoteOi, uint256 baseOi);
function getOrder(uint256 orderId) external view returns (Order memory);
function getQuoteToken() external view returns (address);
function getQuoteTokenAmount(uint256 price, uint256 baseAmount) external view returns (uint256);
function getTOB() external view returns (uint256 maxBid, uint256 minAsk);
function owner() external view returns (address);
function pendingOwner() external view returns (address);
Writes
function acceptOwnership() external;
function amend(address account, ICLOB.AmendArgs calldata args) external returns (int256 quoteDelta, int256 baseDelta);
function cancel(address account, ICLOB.CancelArgs calldata args) external returns (uint256, uint256);
function initialize(MarketConfig calldata marketConfig, MarketSettings calldata marketSettings, address initialOwner) external;
function postFillOrder(address account, ICLOB.PostFillOrderArgs calldata args) external returns (ICLOB.PostFillOrderResult memory);
function postLimitOrder(address account, ICLOB.PostLimitOrderArgs calldata args) external returns (ICLOB.PostLimitOrderResult memory);
function renounceOwnership() external;
function setMaxLimitsExempt(address account, bool toggle) external;
function setMaxLimitsPerTx(uint8 newMaxLimits) external;
function setMinLimitOrderAmountInBase(uint256 newMinLimitOrderAmountInBase) external;
function setTickSize(uint256 tickSize) external;
function transferOwnership(address newOwner) external;
Events
event CancelFailed(uint256 orderId, address owner, uint256 nonce);
event FillOrderProcessed(address indexed account, uint256 orderId, int256 quoteTokenAmountTraded, int256 baseTokenAmountTraded, uint256 takerFee, uint256 nonce);
event FillOrderSubmitted(address indexed owner, uint256 orderId, ICLOB.PostFillOrderArgs args, uint256 nonce);
event Initialized(uint64 version);
event LimitOrderProcessed(address indexed account, uint256 orderId, uint256 amountPostedInBase, int256 quoteTokenAmountTraded, int256 baseTokenAmountTraded, uint256 takerFee, uint256 nonce);
event LimitOrderSubmitted(address indexed owner, uint256 orderId, ICLOB.PostLimitOrderArgs args, uint256 nonce);
event MaxLimitOrdersAllowlisted(address indexed account, bool toggle, uint256 nonce);
event MaxLimitOrdersPerTxUpdated(uint8 newMaxLimits, uint256 nonce);
event MinLimitOrderAmountInBaseUpdated(uint256 newMinLimitOrderAmountInBase, uint256 nonce);
event OrderAmended(Order preAmend, ICLOB.AmendArgs args, int256 quoteTokenDelta, int256 baseTokenDelta, uint256 eventNonce);
event OrderCanceled(uint256 orderId, address owner, uint256 quoteTokenRefunded, uint256 baseTokenRefunded, uint8 settlement, uint256 nonce);
event OrderMatched(uint256 takerOrderId, uint256 makerOrderId, Order takerOrder, Order makerOrder, uint256 tradedBase, uint256 nonce);
event OrderReduced(uint256 orderId, uint256 newAmountInBase, uint256 refundAmountInBase, uint8 settlement, uint256 nonce);
event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
event TickSizeUpdated(uint256 newTickSize, uint256 nonce);
Errors
error FOKNotFilled();
error InvalidAccountOrOperator();
error InvalidAmend();
error InvalidInitialization();
error InvalidMaxLimitsPerTx();
error InvalidMinLimitOrderAmountInBase();
error InvalidTickSize();
error LimitOrderAmountOutOfBounds();
error LimitPriceOutOfBounds();
error LimitsPlacedExceedsMaxThisTx();
error MaxOrdersInBookPostNotCompetitive();
error NoOrdersAtLimit();
error NonPostOnlyAmend();
error NotFactory();
error NotInitializing();
error OrderAlreadyExpired();
error OrderIdInUse();
error OrderNotFound();
error OwnableInvalidOwner(address owner);
error OwnableUnauthorizedAccount(address account);
error PostOnlyOrderWouldBeFilled();
error UnauthorizedAmend();
error UnauthorizedCancel();
error ValueDoesNotExist();
error ZeroCostTrade();
error ZeroOrder();
error ZeroTrade();