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 }