pragma solidity ^0.5.16; import "./IFuturesMarketBaseTypes.sol"; interface IFuturesMarket { /* ========== FUNCTION INTERFACE ========== */ /* ---------- Market Details ---------- */ function marketKey() external view returns (bytes32 key); function baseAsset() external view returns (bytes32 key); function marketSize() external view returns (uint128 size); function marketSkew() external view returns (int128 skew); function fundingLastRecomputed() external view returns (uint32 timestamp); function fundingSequence(uint index) external view returns (int128 netFunding); function positions(address account) external view returns ( uint64 id, uint64 fundingIndex, uint128 margin, uint128 lastPrice, int128 size ); function assetPrice() external view returns (uint price, bool invalid); function marketSizes() external view returns (uint long, uint short); function marketDebt() external view returns (uint debt, bool isInvalid); function currentFundingRate() external view returns (int fundingRate); function unrecordedFunding() external view returns (int funding, bool invalid); function fundingSequenceLength() external view returns (uint length); /* ---------- Position Details ---------- */ function notionalValue(address account) external view returns (int value, bool invalid); function profitLoss(address account) external view returns (int pnl, bool invalid); function accruedFunding(address account) external view returns (int funding, bool invalid); function remainingMargin(address account) external view returns (uint marginRemaining, bool invalid); function accessibleMargin(address account) external view returns (uint marginAccessible, bool invalid); function liquidationPrice(address account) external view returns (uint price, bool invalid); function liquidationFee(address account) external view returns (uint); function canLiquidate(address account) external view returns (bool); function orderFee(int sizeDelta) external view returns (uint fee, bool invalid); function postTradeDetails(int sizeDelta, address sender) external view returns ( uint margin, int size, uint price, uint liqPrice, uint fee, IFuturesMarketBaseTypes.Status status ); /* ---------- Market Operations ---------- */ function recomputeFunding() external returns (uint lastIndex); function transferMargin(int marginDelta) external; function withdrawAllMargin() external; function modifyPosition(int sizeDelta) external; function modifyPositionWithTracking(int sizeDelta, bytes32 trackingCode) external; function submitNextPriceOrder(int sizeDelta) external; function submitNextPriceOrderWithTracking(int sizeDelta, bytes32 trackingCode) external; function cancelNextPriceOrder(address account) external; function executeNextPriceOrder(address account) external; function closePosition() external; function closePositionWithTracking(bytes32 trackingCode) external; function liquidatePosition(address account) external; }