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();