pragma solidity ^0.5.16; pragma experimental ABIEncoderV2; import "./IPerpsV2MarketBaseTypes.sol"; interface IPerpsV2MarketViews { /* ---------- 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 fundingRateLastRecomputed() external view returns (int128 fundingRate); function fundingSequence(uint index) external view returns (int128 netFunding); function positions(address account) external view returns (IPerpsV2MarketBaseTypes.Position memory); function delayedOrders(address account) external view returns (IPerpsV2MarketBaseTypes.DelayedOrder memory); function assetPrice() external view returns (uint price, bool invalid); function fillPrice(int sizeDelta) 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 currentFundingVelocity() external view returns (int fundingVelocity); 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 isFlagged(address account) external view returns (bool); function canLiquidate(address account) external view returns (bool); function orderFee(int sizeDelta, IPerpsV2MarketBaseTypes.OrderType orderType) external view returns (uint fee, bool invalid); function postTradeDetails( int sizeDelta, uint tradePrice, IPerpsV2MarketBaseTypes.OrderType orderType, address sender ) external view returns ( uint margin, int size, uint price, uint liqPrice, uint fee, IPerpsV2MarketBaseTypes.Status status ); }