/ contracts / interfaces / external / gains_network / IGNSTradingV6_2.sol
IGNSTradingV6_2.sol
  1  pragma solidity >=0.6.0;
  2  pragma experimental ABIEncoderV2;
  3  
  4  
  5  
  6  interface TokenInterfaceV5{
  7      function burn(address, uint256) external;
  8      function mint(address, uint256) external;
  9      function transfer(address, uint256) external returns (bool);
 10      function transferFrom(address, address, uint256) external returns(bool);
 11      function balanceOf(address) external view returns(uint256);
 12      function hasRole(bytes32, address) external view returns (bool);
 13      function approve(address, uint256) external returns (bool);
 14      function allowance(address, address) external view returns (uint256);
 15  }
 16  
 17  
 18  interface NftInterfaceV5{
 19      function balanceOf(address) external view returns (uint);
 20      function ownerOf(uint) external view returns (address);
 21      function transferFrom(address, address, uint) external;
 22      function tokenOfOwnerByIndex(address, uint) external view returns(uint);
 23  }
 24  
 25  
 26  interface VaultInterfaceV5{
 27      function sendDaiToTrader(address, uint) external;
 28      function receiveDaiFromTrader(address, uint, uint) external;
 29      function currentBalanceDai() external view returns(uint);
 30      function distributeRewardDai(uint) external;
 31  }
 32  
 33  interface PairsStorageInterfaceV6{
 34      enum FeedCalculation { DEFAULT, INVERT, COMBINE }    // FEED 1, 1 / (FEED 1), (FEED 1)/(FEED 2)
 35      struct Feed{ address feed1; address feed2; FeedCalculation feedCalculation; uint maxDeviationP; } // PRECISION (%)
 36      function incrementCurrentOrderId() external returns(uint);
 37      function updateGroupCollateral(uint, uint, bool, bool) external;
 38      function pairJob(uint) external returns(string memory, string memory, bytes32, uint);
 39      function pairFeed(uint) external view returns(Feed memory);
 40      function pairSpreadP(uint) external view returns(uint);
 41      function pairMinLeverage(uint) external view returns(uint);
 42      function pairMaxLeverage(uint) external view returns(uint);
 43      function groupMaxCollateral(uint) external view returns(uint);
 44      function groupCollateral(uint, bool) external view returns(uint);
 45      function guaranteedSlEnabled(uint) external view returns(bool);
 46      function pairOpenFeeP(uint) external view returns(uint);
 47      function pairCloseFeeP(uint) external view returns(uint);
 48      function pairOracleFeeP(uint) external view returns(uint);
 49      function pairNftLimitOrderFeeP(uint) external view returns(uint);
 50      function pairReferralFeeP(uint) external view returns(uint);
 51      function pairMinLevPosDai(uint) external view returns(uint);
 52  }
 53  
 54  interface AggregatorInterfaceV6_2 {
 55      enum OrderType { MARKET_OPEN, MARKET_CLOSE, LIMIT_OPEN, LIMIT_CLOSE, UPDATE_SL }
 56      function getPrice(uint,OrderType,uint) external returns(uint);
 57      function tokenPriceDai() external view returns(uint);
 58      function linkFee(uint,uint) external view returns(uint);
 59      function tokenDaiReservesLp() external view returns(uint, uint);
 60      function storePendingSlOrder(uint orderId, PendingSl calldata p) external;
 61      function unregisterPendingSlOrder(uint orderId) external;
 62      struct PendingSl{address trader; uint pairIndex; uint index; uint openPrice; bool buy; uint newSl; }
 63  }
 64  
 65  
 66  interface StorageInterfaceV5{
 67      enum LimitOrder { TP, SL, LIQ, OPEN }
 68      struct Trader{
 69          uint leverageUnlocked;
 70          address referral;
 71          uint referralRewardsTotal;  // 1e18
 72      }
 73      struct Trade{
 74          address trader;
 75          uint pairIndex;
 76          uint index;
 77          uint initialPosToken;       // 1e18
 78          uint positionSizeDai;       // 1e18
 79          uint openPrice;             // PRECISION
 80          bool buy;
 81          uint leverage;
 82          uint tp;                    // PRECISION
 83          uint sl;                    // PRECISION
 84      }
 85      struct TradeInfo{
 86          uint tokenId;
 87          uint tokenPriceDai;         // PRECISION
 88          uint openInterestDai;       // 1e18
 89          uint tpLastUpdated;
 90          uint slLastUpdated;
 91          bool beingMarketClosed;
 92      }
 93      struct OpenLimitOrder{
 94          address trader;
 95          uint pairIndex;
 96          uint index;
 97          uint positionSize;          // 1e18 (DAI or GFARM2)
 98          uint spreadReductionP;
 99          bool buy;
100          uint leverage;
101          uint tp;                    // PRECISION (%)
102          uint sl;                    // PRECISION (%)
103          uint minPrice;              // PRECISION
104          uint maxPrice;              // PRECISION
105          uint block;
106          uint tokenId;               // index in supportedTokens
107      }
108      struct PendingMarketOrder{
109          Trade trade;
110          uint block;
111          uint wantedPrice;           // PRECISION
112          uint slippageP;             // PRECISION (%)
113          uint spreadReductionP;
114          uint tokenId;               // index in supportedTokens
115      }
116      struct PendingNftOrder{
117          address nftHolder;
118          uint nftId;
119          address trader;
120          uint pairIndex;
121          uint index;
122          LimitOrder orderType;
123      }
124      function PRECISION() external pure returns(uint);
125      function gov() external view returns(address);
126      function dev() external view returns(address);
127      function dai() external view returns(TokenInterfaceV5);
128      function token() external view returns(TokenInterfaceV5);
129      function linkErc677() external view returns(TokenInterfaceV5);
130      function priceAggregator() external view returns(AggregatorInterfaceV6_2);
131      function vault() external view returns(VaultInterfaceV5);
132      function trading() external view returns(address);
133      function callbacks() external view returns(address);
134      function handleTokens(address,uint,bool) external;
135      function transferDai(address, address, uint) external;
136      function transferLinkToAggregator(address, uint, uint) external;
137      function unregisterTrade(address, uint, uint) external;
138      function unregisterPendingMarketOrder(uint, bool) external;
139      function unregisterOpenLimitOrder(address, uint, uint) external;
140      function hasOpenLimitOrder(address, uint, uint) external view returns(bool);
141      function storePendingMarketOrder(PendingMarketOrder calldata, uint, bool) external;
142      function storeReferral(address, address) external;
143      function openTrades(address, uint, uint) external view returns(Trade memory);
144      function openTradesInfo(address, uint, uint) external view returns(TradeInfo memory);
145      function updateSl(address, uint, uint, uint) external;
146      function updateTp(address, uint, uint, uint) external;
147      function getOpenLimitOrder(address, uint, uint) external view returns(OpenLimitOrder memory);
148      function spreadReductionsP(uint) external view returns(uint);
149      function positionSizeTokenDynamic(uint,uint) external view returns(uint);
150      function maxSlP() external view returns(uint);
151      function storeOpenLimitOrder(OpenLimitOrder calldata) external;
152      function reqID_pendingMarketOrder(uint) external view returns(PendingMarketOrder memory);
153      function storePendingNftOrder(PendingNftOrder calldata, uint) external;
154      function updateOpenLimitOrder(OpenLimitOrder calldata) external;
155      function firstEmptyTradeIndex(address, uint) external view returns(uint);
156      function firstEmptyOpenLimitIndex(address, uint) external view returns(uint);
157      function increaseNftRewards(uint, uint) external;
158      function nftSuccessTimelock() external view returns(uint);
159      function currentPercentProfit(uint,uint,bool,uint) external view returns(int);
160      function reqID_pendingNftOrder(uint) external view returns(PendingNftOrder memory);
161      function setNftLastSuccess(uint) external;
162      function updateTrade(Trade calldata) external;
163      function nftLastSuccess(uint) external view returns(uint);
164      function unregisterPendingNftOrder(uint) external;
165      function handleDevGovFees(uint, uint, bool, bool) external returns(uint);
166      function distributeLpRewards(uint) external;
167      function getReferral(address) external view returns(address);
168      function increaseReferralRewards(address, uint) external;
169      function storeTrade(Trade calldata, TradeInfo calldata) external;
170      function setLeverageUnlocked(address, uint) external;
171      function getLeverageUnlocked(address) external view returns(uint);
172      function openLimitOrdersCount(address, uint) external view returns(uint);
173      function maxOpenLimitOrdersPerPair() external view returns(uint);
174      function openTradesCount(address, uint) external view returns(uint);
175      function pendingMarketOpenCount(address, uint) external view returns(uint);
176      function pendingMarketCloseCount(address, uint) external view returns(uint);
177      function maxTradesPerPair() external view returns(uint);
178      function maxTradesPerBlock() external view returns(uint);
179      function tradesPerBlock(uint) external view returns(uint);
180      function pendingOrderIdsCount(address) external view returns(uint);
181      function maxPendingMarketOrders() external view returns(uint);
182      function maxGainP() external view returns(uint);
183      function defaultLeverageUnlocked() external view returns(uint);
184      function openInterestDai(uint, uint) external view returns(uint);
185      function getPendingOrderIds(address) external view returns(uint[] memory);
186      function traders(address) external view returns(Trader memory);
187      function nfts(uint) external view returns(NftInterfaceV5);
188  }
189  
190  interface NftRewardsInterfaceV6{
191      struct TriggeredLimitId{ address trader; uint pairIndex; uint index; StorageInterfaceV5.LimitOrder order; }
192      enum OpenLimitOrderType{ LEGACY, REVERSAL, MOMENTUM }
193      function storeFirstToTrigger(TriggeredLimitId calldata, address) external;
194      function storeTriggerSameBlock(TriggeredLimitId calldata, address) external;
195      function unregisterTrigger(TriggeredLimitId calldata) external;
196      function distributeNftReward(TriggeredLimitId calldata, uint) external;
197      function openLimitOrderTypes(address, uint, uint) external view returns(OpenLimitOrderType);
198      function setOpenLimitOrderType(address, uint, uint, OpenLimitOrderType) external;
199      function triggered(TriggeredLimitId calldata) external view returns(bool);
200      function timedOut(TriggeredLimitId calldata) external view returns(bool);
201  }
202  
203  interface IGNSTradingV6_2 {
204      function openTrade (
205          StorageInterfaceV5.Trade calldata t,
206          NftRewardsInterfaceV6.OpenLimitOrderType orderType, // LEGACY => market
207          uint spreadReductionId,
208          uint slippageP, // for market orders only
209          address referrer
210      ) external;
211  
212      function closeTradeMarket(
213          uint pairIndex,
214          uint index
215      ) external;
216  }